Leaderboard
Popular Content
Showing content with the highest reputation on 01/30/13 in all areas
-
@AppleGirl: You don't know nothing about their reasons so stop your stupid comments please. If you'd know what happens behind the scenes of rA you would not post shit like this. (Actually you could have noticed it by yourself when looking at the amount of staff members who quit in the last weeks.)6 points
-
It's my expectation that both projects can work independently, while contributing some commits towards each other and pursuing their own paths to excellence. It will take some work to build a workflow that allows pushing and pulling changes from one emulator development to another, but once the process is established, much work will be able to be shared across *athena projects.4 points
-
Hey everyone. Im releasing a client pack I put together that contains everything needed for making a client to make things as easy as possible for new and current users. Making a client or updating from a old one has proven to be difficult for many and im hoping to put a end to this issue. Below is info from the readme about the client pack. The readme also contains information on how to make and install the client. ================================ The Purpose Of This Client Pack ================================ This pack was created as my response to helping the community with a few common issues. The main issue im hoping this will resolve for most users is getting all the needed files easly. During my time as a developer, ive noticed many users having issues staying up-to-date with things because of the fact that you would normally have to search here and there for all the files, tools, and other things needed just to make a fully working client. I also found myself getting outdated at times because of how things change. Many users out there still arn't fully aware of where to get up-to-date diff plugins for the WeeDiffGen program. With the release of this client pack, I hope it be less time consuming for users and allow them to catch up with everything to allow them to run a fully up-to-date server with the latest server revision with the latest client files. Their's still people out there using clients from mid 2010. Come on people. Its time to catch up. ================================ Whats Included In This Pack ================================ This client pack includes the following.... 2012-04-10aRagexeRE.exe which will be the core of your client. Pre-client generated DATA.INI file used to set what GRF files will be loaded when the client is started. The RO Mouse Freedom Plugin V1.8.4.0 (dinput.dll) to allow the mouse to freely leave the screen if your in a window. Ai4rei's kRO and RE Patchers V2.4.1.574 to patch up your official RO files. Ai4rei's Open Setup V2.5.1.147 to use as a user friendly english client options program. clientinfo.xml for setting up connection information to tell the client what IP and port to connect to, and other things. Translation Files r224 which contains translated text and texture files. Decompiled LUA files r221 for 2012-04-10 clients fully formatted and translated. WeeDiffGen r40 with all diff generator plugin's for diffing (modifying) the client exe. All of Ai4rei's latest diff generator plugin's for WeeDiffGen as of December 2nd, 2012 (already installed to WeeDiffGen) ================================ WARNING!!!! ================================ Some security programs will attack and remove some of the files included in this pack. The files itl mark as a threat are the dll plugin files used in the WeeDiffGen program and are not viruses. Before extracting, its recommended you make a new folder on your desktop and set your security software to exclude scans and real time protection for this folder, sub-folders, and files in them. Once done, extract your files in the folder. ================================ Credits ================================ All of this stuff wouldn't be possiable or exist without these people.... Ai4rei = RO Open Setup, RO Patcher Lite, and updated plugins for the WeeDiffGen program. Earthlingz = Decompiled LUA files. Gravity = Client EXE and a number of other things. (Hey, gotta give them credit too right? We wouldn't be here if RO didnt exist.) Shinryo = WeeDiffGen and original plugins for the program. Translations Team = Translated text files and textures. TrueNoir = Translated msgstringtable.txt file for 2012-04-10 client. Everyone else who helped / worked on this stuff. ================================ Change Log ================================ 12/2/2012 US = V1.0 Released. Rytech's Client Pack 2012-04-10 V1.rar2 points
-
I really really wanted to avoid weighing in on this, mostly because of how I feel guilty about just disappeared from the scene, but what the hell. I am not saying I'd resume working as a dev on rA if the switch to GIT and a RE-branch was made. That would be grossly unfair, untrue and I am not sure I would have the time and motivation to go through with it. But I will say that not adressing my issues with the code bloat from #defines has played a part in my silent retirement and cease to work on RE-atk. In my opinion, to do RE right, it has to be done.We know so much more about the internal workings of AEGIS these days that rewriting the atk/battle system should come with a complete revision of a LOT of parts of the code. And that is just plainly not doable without breaking the compatibility of that branch with pre-RE. For those who care, here is what I think would need to happen for a really good implementation fo RE-atk, gathered in my months of working on it: Item DB needs a column for MDef (in addition to the script command). The reason for this is complicated (lr_flag) Item scripts would need a complete overhaul. Race/Size/Ele/Range/Etc modifiers need to be changed to a format that more closely follows AEGIS' (to simplify battle calcs); struct weapon_data needs to follow suit The special treatment of the arrow equip slot needs to be changed. It results in so much redundant, unnecessary code (lr_flag) A lot of the status code needs adapting to those new formats (most prevalently, status_calc_def2) A few side effects should be put from the battle calcs to more fitting places. A calc function should be able to be called without side effects I'm sure I'm forgetting something A lot of stats/substats need to be re-typed to signed types (atk, def...). this is probably one of the biggest ones on my list I dont think a "proper" solution is possible without branching. One could argue for putting those db/script changes into pre-re as well, but I plainly don't see that happening. There are too many unknowns. All that said, this is just my rambling as a short-time ex-dev. You guys have to find your own priorities, and I cannot promise you I will ever find the drive to work on rA again. I wish I could! Best of luck with the project, Wildcard2 points
-
Fork of a fork... and more forks. Forkception? Never knew about Hercules until this thread XD. I appreciate what Ind and Jman did for rAthena previously, but I agree with the gist of the thread starter. It's like making a new server when the old server still has hope and promise (that was created pretty recently) - clashes can occur, but the real prize is to overcome them, not start something new and hope that the same mistake won't happen again. You never know since many staff members from rAthena are also working over there even if they are mainly developers. Just noticed, there are already community contributors over there o-o! Furthermore, rAthena is pretty new... -sigh with the reason of "lack of time" for the people who resigned/switched before- But anyways, doubt that much can be changed about this situation since there's no restriction in doing so. I like the staff members here and those at Hercules, so I'm not hating on anyone - just posting what I think. Best of luck to Hercules and rAthena! Perhaps there can be collaboration and more love between RO-related things.2 points
-
Disable skill or item usage in certain maps. Add a new txt in your db folder.. item_mapdeny.txt //<nameid>:<map1>{,<map2>,<map3>,<map4>,...} //Disables Red Potion usage in Prontera and Payon 501:prontera,payon skill_mapdeny.txt //<skillid>:<map1>{,<map2>,<map3>,<map4>,...} //Disables skill TF_HIDING usage in Prontera and Lighthalzen 51:morocc,lighthalzen That's it, nothing much to say. skill_and_item_mapdeny(rAthena17100).diff skill_and_item_mapdeny(rAthena17100)_v2.diff - Supports multiple maps per line skill_and_item_mapdeny(rAthena171278).diff Please click the button if I have helped you. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1 point
-
BrowEdit Tutorial Videos Here is a list of free tutorial videos I made about a year ago that gives BrowEdit users a good grasp on using the BrowEdit Mapping Program. The tutorial videos teaches young BrowEdit users from the ground up of how to install BrowEdit, get familar with the interface and functions and finally actually producing a fully functional map you can integrate in a ragnarok server. I plan on expanding this list to cover a broader range of topics. Browedit Tutorial #1 - Getting Started Video Information: Downloading and setting up BrowEdit. Configuring BrowEdit to be usable & providing recommendations on BrowEdit revisions. - Browedit Tutorial #2 - Basics of Designing Video Information: Understanding the user inferface of BrowEdit & editing functions. Teaches navigational controls and introduces how to properly setup a map for editing. Part 1 - Part 2 - Part 3 - Browedit Tutorial #3 - Intermediate Level Terrain Editing Video Information: Teaches how to apply textures, build walls, making slopes and environmental terrain changes, and controlling water levels. Part 1 - Part 2 - Browedit Tutorial #4 - Intermediate Level Light Editing Video Information: Introduces how to implement lights to brighten and colorize a map. Gives recommended RGB combinations and lighti strength parameter settings in giving ideal light and shadow outputs. Part 1 - Part 2 - Browedit Tutorial #5 - Adding Effects Video Information: How to add effects to a map to fit the needs of the environment. Examples can be torches, flying bats, magic circles etc.. - Browedit Tutorial #6 - Adding Sounds Video Information: How to add ambient sounds to your map. This includes noises you hear in niflheim, prontera, geffen etc.. - Browedit Tutorial #7 - Making a Sky Map Video Information: Ever wanted to make a sky map? Well this tutorial will show you how to make a floating blue sky based map with cloud formations. - Browedit Tutorial #8 - Adding Custom Textures to BrowEdit Video Information: How to add your own custom textures to BrowEdit and using them in your custom map. - Browedit Tutorial #9 - Adding Custom BGM Music to a Map Video Information: How to add your own personal background music to a map as well as making sure the BGM file is compatible with the client. - Browedit Tutorial #10 - Adding a Custom Map to a Server Video Information: How to add your own personal map to a eAthena test server so you can test your own maps. - Browedit Tutorial #11 - Adding a Duplicate Model that Utilizes Custom Textures Video Information: Ever wanted to use a model in a map that doesn't come into conflict with another model. Perhaps for the sake of the maps theme? - Browedit Tutorial #12 - Quick Tips/Tricks & Useful Hotkey Info Video Information: Creating a new map can take a while. This tutorial will cover useful tips/tricks to reduce the development time of your map as well as avoiding long processes to complete a task. - Browedit Tutorial #13 - New Lightmaps Tutorial Video Information: This tutorial is a revamp of the previous lightmaps video tutorial. This particular tutorial is a more concise and easier to learn version of how to create lightmaps with ease in the areas of shadows/sun/colors/global lighting and light fixes. - Browedit Tutorial #14 - Making Slopes Video Information: This is a quick tutorial that explains how to create sloped terrain primarily based on ramps that can lead up to raised areas. It also shows how to make slopes on the edge of a map. - Browedit Tutorial #15 - Making Map Minimaps Video Information: Want to make a minimap that matches your coordinates perfectly whether it be a minimap with color or black/white gradient? Well this tutorial will cover just that! - Browedit Tutorial #16 - GAT Editing Video Information: Explains the main kinds of gats, how to place them, slope them, and what applications they are used in. - Browedit Tutorial #17 - 3ds Max Modeling [Acquiring Models] Video Information: A quick video covering several different sites you can get models for free that are supported by 3ds Max. - Browedit Tutorial #18 - 3ds Max Modeling [importing/Apply Textures to Model] Video Information: Using 3ds Max, you will be able to import models supported by 3ds Max, apply textures to them, and UV Unwrap the model to have it ready for RO. - Browedit Tutorial #19 - 3ds Max Modeling [Polygon Limit & Splitting Models] Video Information: RO has limits to how many polygons it can draw per model. This tutorial will explain what those limits are and how to split a model into parts. - Browedit Tutorial #20 - Exporting & Importing Lightmap Shadows for Editing Video Information: How to remove or add specific shadows on a map without having to redo all of the lightmaps through means of exporting & editing the shadow png file directly. - Browedit Tutorial #21 - Cleaning Up Shadows Along Walls & Ground Video Information: Didn't like the shadow drop across the edge of a map or lifted platform/wall? - Browedit Tutorial #22 - How to Create Transparent Objects Video Information: How to provide transparency in a model by means of TGA support. - NOTE: If you wish to see a certain topic covered in a future tutorial video, please make a request by leaving a comment in this thread!1 point
-
File Name: Fame Ranking for FluxCP File Submitter: Daegaladh File Submitted: 29 Jan 2013 File Category: Web Resources Content Author: Daegaladh Description 3 rankings in 1: alchemy, crafting, and Taekwon mission fame points, for your FluxCP Features Configurable quantity of ranked characters of each kind. Compatibility Xantara's FluxCP - http://fluxcp-ra.googlecode.com/ CalciumKid's FluxCP RE - http://rathena.org/b...athena-support/ ByteFlux's FluxCP 1.0 - https://code.google.com/p/fluxcp/ Demo (Soon) Installation Extract the 'fame_ranking' folder into the 'addons' folder of your FluxCP installation. If you're using a custom theme, rename the 'default' folder in 'fame_ranking/themes' to your custom theme name. Policy All purchases are non-refundable. This work by Daegaladh is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License. Do not redistribute or resell anything from this work, this also includes modified versions of anything I've made. Do not steal the credit of this work. Do not remove or replace license text, images, etc. Support If you find any bug or need support, please contact me: rAthena: http://rathena.org/b.../468-daegaladh/ email: [email protected] Skype: daegaladh License This work by Daegaladh is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License. Click here to download this file1 point
-
File Name: Homunculus Ranking for FluxCP File Submitter: Daegaladh File Submitted: 30 Jan 2013 File Category: Web Resources Content Author: Daegaladh Description An homunculi ranking, for your FluxCP Features Configurable quantity of ranked homunculi. Filter by class. Compatibility Xantara's FluxCP - http://fluxcp-ra.googlecode.com/ CalciumKid's FluxCP RE - http://rathena.org/b...athena-support/ ByteFlux's FluxCP 1.0 - https://code.google.com/p/fluxcp/ Demo (Soon) Installation Extract all the files in the rar into the root folder of your FluxCP installation, overwriting the homunculus.php file. If you're using a custom theme, rename the 'default' folder in 'addons/homun_ranking/themes' to your custom theme name. Policy All purchases are non-refundable. This work by Daegaladh is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License. Do not redistribute or resell anything from this work, this also includes modified versions of anything I've made. Do not steal the credit of this work. Do not remove or replace license text, images, etc. Support If you find any bug or need support, please contact me: rAthena: http://rathena.org/b.../468-daegaladh/ email: [email protected] Skype: daegaladh License This work by Daegaladh is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License. Click here to download this file1 point
-
I'd like to request an eAthena source modification regarding online GM sessions. This was previously asked and partially answered back on the old eAthena boards; the difference this time is that I'd like for GMs of a certain level (i.e., developers) to be hidden from @who, even when they are not @hide. What I think would work would be an adjustment to the script that backs hide_GM_session, so that instead of a yes/no option that completely hides all GMs online, allow a number value to be set that defines the minimum level of the GMs being hidden; in rAthena, this could be changed to hide a GM group or an array of groups. Notice: I apologize to those of you who are displeased with requests for eAthena support on the rAthena forum. However, I find that rAthena's boards thrive in activity with the many of you who provide constructive input and working solutions. Thank you all for the help you've given and continue giving. It's amazing seeing what's been accomplished over the last few years.1 point
-
Let it be the past, we are in the present and we don't need anymore drama around here. I see it that way, we've lost staff members in the past few weeks but also have won some new members.1 point
-
Yes, there is a fork of a fork and yes, there has been A LOT of things that happened behind the scenes. There is no limitations on who can create a fork and who can't; whatever their reasons may be. But does this really all matter, as long as there is an emulator out there for the community to use? And like Yuki said, it's in the past now. There is no need to waste time in dealing with these things as they've already happened. It is definitely better to focus on the present and the future. The best that each project can do now is to improve their own project and hope for some collaboration between the two.1 point
-
Nope this AppleGirl is a guy from Mexico. (I like stalking people.) And somebody said that this AppleGirl creates better and complete statements than the original AppleGirl.1 point
-
Haha, great job with the edits =D - I think it looks much better than the free design I offered on rAthena (though we do have different colour schemes). Yep, you can make the black box in the background more transparent as mentioned by Mysterious~ It'll make your blue colour scheme look better XD. Furthermore, it looks a bit empty at the bottom (after the newsfeed and WoE flags sections) - Will something be added there? A bit empty on the left and right sides as well overally... maybe you can add more RO characters or have more of a background, but this is just a suggestion. Looking good!1 point
-
Yes, I still think reading the stand animation externally is the best solution. If you are interested I attempted to explain where the client gets nType from on the previous page. I don't think there is any other table we need to concern ourselves with. Here a hex edit which makes it load the stand animation from %nType%_stand.gr2 from the 3dmob_bone folder instead of from the model. Nothing needs to be changed for the Gravity mobs. 2012-04-10a (verified to work) Find: 83 FE 09 0F 87 8A 00 00 00 83 FF 04 0F 87 81 00 00 00 Replace: 83 FF 04 0F 87 8A 00 00 00 83 FE 09 77 30 90 90 90 90 2011-03-15a (untested) Find: 83 FE 09 0F 87 84 00 00 00 83 FF 04 77 7F Replace: 83 FF 04 0F 87 84 00 00 00 83 FE 09 77 2C So to add a new mob with this, the stand animation needs to be exported as well and put in the 3dmob_bone folder. (For instance for "mymonster_100.gr2" you'd need to add "100_stand.gr2" as well as the other regular bone animation files.) After that it can just be added as a normal monster with any job ID you want. How this works: instead of returning NULL when invalid nType is found, it jumps to load from 3dmob_bone instead. It also moves the comparison on nAnimIdx so it's done first making sure it won't crash on animations which aren't available to GR2 monsters.1 point
-
1 point
-
I like it o_O. I like how it's simple, colour friendly, and your depictions are nice. The navigation seems reasonable, though, I can't understand it so I can't really tell The only thing is the black box. I think you should make it fade a little bit so that people's eyes don't look straight to it. You'll find that since your background and images are colourful and "lively" and you toss in a bold dark colour, such as black, in the mix, people's eyes will tend to focus on the darker area.1 point
-
the shortest way is to disable atcommands in all castle maps using the mapflag nocommand1 point
-
Correct, in this setup there is only 1 login server, so only one set of login-server configurations. In order to limit who can login to the 2nd char/map server, you need to limit it at the char-server or map-server level. How about in trunk/conf/char_athena.conf // Maximum users able to connect to the server. Set to 0 for unlimited. max_connect_user: 0 // Group ID that is allowed to bypass the server limit of users. // Default: -1 = nobody (there are no groups with ID < 0) // See: conf/groups.conf gm_allow_group: -1 You could set max_connect_user to 1, then use gm_allow_group to allow GMs to override that limit? The only problem I found with that was that a single player could be online if they wanted to, so I just set char_new to 0 to disable character creation. Thanks for that clarification Brian, you've been really helpful. c:1 point
-
Yeah, I messed up while disassembling with two things (nAniIdx TEST and the bone string). Unlike you guys I do not use IDA+HexRays, so stuff like that can slip in while processing the assembly. Corrected version would be this: struct granny_animation* __cdecl C3dGrannyBoneRes::GetAnimation(int nType, int nAniIdx) { if( this->m_Animation[nType][nAniIdx] == NULL ) { g_Unknown1[0] = 0; if( nType >= 0 && nType <= 9 ) { if( nAniIdx >=0 && nAniIdx <= 4 ) { if( !nAniIdx ) { sprintf(g_Unknown1, "model\\3dmob\\%s", g_session.GetJobName(g_Unknown2[nType])); } else { sprintf(g_Unknown1, "model\\3dmob_bone\\%d_%s.gr2", nType, g_Unknown3[nAniIdx]); } if( g_Unknown1[0] && CFile::IsFileExist(g_Unknown1) ) { if( nType != 1 ) {// prevent guild flag from animating this->AddBone(g_Unknown1, nType, nAniIdx); } return this->m_Animation[nType][nAniIdx]; } } } } else { return this->m_Animation[nType][nAniIdx]; } return NULL; } Also do not forget the space to add assembly is scarce and relocating blocks of code annoying, so let stick with the easier approach, that was suggested at first. That is, official mobs keep their current mechanics and custom mobs (nType 10+) are all saved as bones, with nAniIdx 0 (non-bone) being "stand"-bone since the client also declares the string. Thus you also do not need to maintain the nType2MobId table, just add monsters at will into data\\ and lua. Remains to figure out how the client comes up with nType; I assume with an another table which we will need to maintain.1 point
-
Correct, in this setup there is only 1 login server, so only one set of login-server configurations. In order to limit who can login to the 2nd char/map server, you need to limit it at the char-server or map-server level. How about in trunk/conf/char_athena.conf // Maximum users able to connect to the server. Set to 0 for unlimited. max_connect_user: 0 // Group ID that is allowed to bypass the server limit of users. // Default: -1 = nobody (there are no groups with ID < 0) // See: conf/groups.conf gm_allow_group: -1 You could set max_connect_user to 1, then use gm_allow_group to allow GMs to override that limit?1 point
-
1 point
-
clientinfo and change the langtype, either 0 or 1 should work. I think that was teh solution1 point
-
Not to be picky or anything but changing the format of your image uploads to jpeg will save a lot more space. Also helps people download them faster in order to help you out. =) Can you provide us info on your item.bmp file (this is the image that appears in your inventory). Make sure it matches 24x24 pixels, 8 bit depth.1 point
-
Try this: 1288,EMPELIUM,Emperium,Emperium,90,68430,0,0,0,1,60,71,40,50,1,17,80,50,26,20,10,12,0,8,26,0x120,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01 point
-
hmm looks like the first time you will have to manually stop the servers. After that, if you use restart.sh to start the servers, then stop.sh will stop them.1 point
-
If I want to give a player an item I can put a fake reason down. Trusting that system still requires trusting the staff, something which most players no longer do. RCC will be open for all servers to use. There is no issues there. It's up to the servers how far they want to integrate, the site will offer varying levels of control. I didn't mean you were trying to start a get rich quick scheme but that you were wording your post like one would word a get rich quick scheme. Here's the latest one that found it's way to my inbox: Your post has lots of buzz words and unverifiable original research. Just like get rich quick schemes. It's understandable that you want to keep your information secret, but until it's verified by a third party it could just be all made up for all anyone else knows.1 point
-
I decided to try my luck with assembly and it seems to be working. With my amazing assembly skills I managed to come up with something like this: L_START: cmp esi, 10 jna L_ELSE mov edx, esi add edx, 9C4 jmp L_END L_ELSE: mov edx, job[esi*4] L_END: jmp L_REF ; back to function I tested by adding the test monster with nType = 20 and job ID 2520 and everything seems to be working perfectly without having to hex the new ID into the client. Gravity mobs work as normal. So with this it should be possible add any amount of monsters with no hex editing by putting some nType > 10 in the file name, then adding the monster with job ID = 2500 + nType in npcidentity.lua.1 point
-
So in order to clean my head and to combine all the information we have gathered so far I have combined the C, C++ and ASM code parts and also the value informations for the variables we have cleared so far. Additionally I found something strange in Ai4rei's post: Shouldn't this line refer to "model\\3dmob_bone\\%d_%s.gr2"? After that and seeing the combined output I have come to the same conclusion as you curiosity and that is, that we have to deal with ids higher than 9 by ourselfes. So you might want to take a look at the pseudo code(C/C++ combination) source I came up with and here is the way I guess we should deal with it(I also fixed what I mentioned above): #define CUSTOMGRANNYSTARTID 2500 int __thiscall getGrannyModel( void *this, int grannyId, int animationType ){ // C++ this reference decompiled to C is my guess here // It is just like it is setting up the "this" pointer here void *objSelfReference; // some object self reference - need info about object structure // My guess is that it is the set up modelname, which is set in the function // readGrannyModelFromDisk after/before reading it char *v4; char *monster_name; objSelfReference = this; v4 = (char *)this + 4 * ( animationType + 4 * ( 5 * grannyId + 40 ) ); if( *(_DWORD *)v4 ){ return *(_DWORD *)v4; } modelResPath = 0; if( (unsigned int)grannyId <= 9 ){ if( (unsigned int)animationType <= 4 ){ if( animationType ){ sprintf( &modelResPath, "model\\3dmob_bone\\%d_%s.gr2", grannyId, animationType[animationType] ); }else{ monster_name = g_session.GetJobName( grannyModelMappingId2MonsterId[grannyId] ); sprintf( &modelResPath, "model\\3dmob\\%s", monster_name ); } if( modelResPath && fileExists(&modelResPath) ){ if( grannyId != 1 ){ readGrannyModelFromDisk( objSelfReference, &modelResPath, grannyId, animationType ); } return *(_DWORD *) v4; } } }else{ if( (unsigned int)animationType <= 4 ){ if( animationType ){ sprintf( &modelResPath, "model\\3dmob_bone\\%d_%s.gr2", grannyId, animationType[animationType] ); }else{ sprintf( &modelResPath, "model\\3dmob\\%d", grannyId ); } if( modelResPath && fileExists(&modelResPath) ){ if( grannyId != 1 ){ // I hope this function doesnt make any problems readGrannyModelFromDisk( objSelfReference, &modelResPath, grannyId, animationType ); } return *(_DWORD *) v4; } } } return NULL; } struct granny_animation* __cdecl C3dGrannyBoneRes::GetAnimation( int grannyId, int animationType ){ if( this->m_Animation[grannyId][animationType] == NULL ){ tmpGrannyModelName[0] = 0; if( grannyId >= 0 && grannyId <= 9 ){ if( animationType >= 0 && animationType <= 4 ){ if( animationType ){ sprintf( tmpGrannyModelName, "model\\3dmob\\%s", g_session.GetJobName( grannyModelMappingId2MonsterId[grannyId] ) ); }else{ sprintf( tmpGrannyModelName, "model\\3dmob_bone\\%d_%s.gr2", grannyId, animationType[animationType] ); } if( tmpGrannyModelName[0] && CFile::IsFileExist( tmpGrannyModelName ) ){ if( grannyId != 1 ){ this->AddBone( tmpGrannyModelName, grannyId, animationType ); } return this->m_Animation[grannyId][animationType]; } } }else{ if( animationType >= 0 && animationType <= 4 ){ if( animationType ){ sprintf( tmpGrannyModelName, "model\\3dmob\\%s", g_session.GetJobName( grannyModelMappingId2MonsterId[CUSTOMGRANNYSTARTID + grannyId] ) ); }else{ sprintf( tmpGrannyModelName, "model\\3dmob_bone\\%d_%s.gr2", grannyId, animationType[animationType] ); } if( tmpGrannyModelName[0] && CFile::IsFileExist( tmpGrannyModelName ) ){ if( grannyId != 1 ){ this->AddBone( tmpGrannyModelName, grannyId, animationType ); } return this->m_Animation[grannyId][animationType]; } } } }else{ return this->m_Animation[grannyId][animationType]; } return NULL; } [Edit]: Forgot to press the attach button, also the board will not let me upload .c files... granny.c.txt1 point
-
The nType is the index used in the names of the bone animation files. I think it just gets it from the file name of the GR2 model, at least it very much seems that way. For instance if you add "spider90_10.gr2" to the LUA files, it means that the model is rotated 90 degrees and uses nType/animation index 10. It also means that it will try to get the bone animation files "10_move.gr2", "10_attack.gr2" and so on from the 3dmob_bone folder when displaying the model. The problem is just that standing animation, which it needs the job ID to get the job name for. So it first gets the nType from the job name/GR2 file name, then it "forgets" the job name and just has the nType when it needs to get the animations in this function. nType 0-9 are used by Gravity's models, so we know when nType is 10 or above it will be a custom monster. So if we could just make it do something like if(nType < 10) jobId = job[nType]; else jobId = 2500 + nType; ...instead of just the table look-up we could for instance just add a monster as "name_20.gr2" in the job name entry and ID 2520 in the LUA files. The nType = 20 would get passed to this function, which would instead of the table look-up just add the constant 2500 and end up with the right job ID. Or if you use nType 100 in the GR2 file names you would add it as mob ID 2600 in the LUA files. For Gravity mobs it would continue to use the table, since they are nType < 10. Well, that's at least one solution... @Diconfrost: Ha ha, thanks.1 point
-
Curiosity could you look into the client a little bit deeper and look for the lookup in the mapping table and maybe post it here, because I think that would be the easiest way to recreate the whole GR2 loading function and point it to our own version of a loading function, which would maybe even work out as a WeeDiffPlugin. I am sorry that I cannot do this myself, but I only have an ugly decompiled C version of the client not a nice C++ one like you all seem to have.1 point
-
Lemongrass has it right. This approach requires some handiwork, which is why it'll hopefully just be a temporary solution. Something like mapping a range of IDs could probably work OK. For instance, for nType > 9 set monster ID to some constant + nType instead of doing the table look-up. Hopefully someone more skilled than me can help out, because I'm falling a little short here. I'll PM you a little tutorial for your client, Olrox!1 point
-
1 point
-
Reads like a get rich quick scheme. Just needs the "Normally this all would cost $199, but today only you can have it for the reduced price of $99..." at the end. "Trust me!" "I have tons of data in the form of spreadsheets!" "Of course, I can't show you any of it." No, but seriously, it sounds nice. But I've been in RO since late 2003 and I've seen many a project come and go. Staff selection is one of the hardest things to do as a server owner. You think some of these ideas are original but they aren't. There are several servers that pay their staff and still end up with terrible staff. While there is no shortage of people lining up to be GM, there is a shortage of quality people. Most quality GM's get sick of the same thing and go on to be server owners and run into that very same problem themselves. What most of us would call a "good server" rarely takes off. A lot of people get confused by this. They do everything right, they get in balanced custom items, some don't take donations of any sort. You name it, it's been tried. But they never take off. Why? If you paid any attention at all you'd realize most RO players are drama queens. They like the drama. Sure, they say they don't and they might even think they don't -- but they do. Look at the largest record holding RO servers around today. Most, if not all, of them either have had massive drama or still do. Drama makes the world go 'round. But to be fair, making commands public won't do anything but cause drama. GM A needs to reimburse Player 1, who happens to be a guild leader, for his item that was lost due to a bug and does so. The logs show that it happened but not why it happened. Player 2, of a rival guild, sees this and immediately starts a conspiracy theory that GM A is favoring Player 1 and his guild. His guild will think this no matter what you say from that point on. Even if you put why, people won't believe it if they don't want to. As I said, people like drama and where there isn't drama they will make it. You could blank out names from commands, sure, but then the information is useless and you might as well not do it to begin with. You'd be better off limiting in game powers completely. Binding GMs to their own "world" (map) and limiting their influence to this area. Do support over the web site most of the time, only interacting in game when required. In fact, some of the things I've been working on will nearly remove the need for GMs to have in game powers to start with. When have you ever seen a GM in any other game you've played? I've never seen a GM in another game. I've talked to them over the support system, sure... but never seen them. I've never had a problem where they needed to actually be there in front of me. If GMs can show off in front of other players and you keep it all work and no play, there's less of a reason for people to want to be GM for the wrong reasons. When we instituted this on a server I worked for most of the staff quit -- all of them later found to be corrupt. The current staff has no known or suspected corruption. Some food for thought. P.S. I've said this before.1 point
-
Verifique também o seu firewall, se necessário, faça um teste desativando-o.1 point
-
Servidor localhost? feche os IPs, o emulador auto-reconhece. Libere as postas do seu roteador1 point
-
Remix Designs Yes, Its me again Remix from eAthena the old designer who stopped designing few years ago. Now, I'm trying to get it back the designing skills that I have before. I was a web designer few years ago but never really had a chance to make it better. I am not skilled as what you guys think but at least I'm giving it a try all haters/trashtalkers are wecome to criticized this simple art work of mine. The Logos Hero Server Logo (Website domain is not real)1 point
-
*scrolling this page "oh fk yeah too long dem lazy to read"* .... *hits back button*1 point
-
This is how I used to do it: http://www.eathena.w...ost&pid=1165563 Brainstorm also describes another method in that topic.1 point