Jump to content
Forgot your email address? ×
  • Create New...


  • Posts

  • Joined

  • Last visited


About niokio

  • Birthday October 22


  • Gender

Recent Profile Visitors

1229 profile views

niokio's Achievements


Enthusiast (6/14)

  • Reacting Well
  • Dedicated Rare
  • First Post
  • Collaborator
  • Conversation Starter

Recent Badges



  1. Good job. Here are some more small additions. You can add to the post 1. file: DragonSoul.cpp sys_err ("Cannot create DRAGON_HEART(%d).", DRAGON_HEART_VNUM); return NULL; replace to: sys_err ("Cannot create DRAGON_HEART(%d).", DRAGON_HEART_VNUM); return false; 2. file utils.cpp return thecore_random() / (RAND_MAX + 1.f) * (b - a) + a; replace to: return thecore_random() / ((double)RAND_MAX + 1.f) * (b - a) + a;
  2. Good updated source, but needs improvement
  3. Hi dev. Why use such a bad method? Why is there "HairDataCount" there? Let's fix this. Because specifying 999 is a bad decision. Since our loop costs 999 iterations (although that much is not required). Group HairData { PathName "d:/ymir Work/pc2/assassin/" HairDataCount 999 Group HairData00 { HairIndex 0 Model "hair/hair_1_1.gr2" SourceSkin "hair/hair_1_1.dds" TargetSkin "assassin_hair_01.dds" } 1. Go to GameLib->RaceDataFile.cpp 2. looking for a string "if (TextFileLoader.SetChildNode("shapedata"))" 3. look for "FIX_SHAPE_GROUP_COUNT" and do how if (TextFileLoader.SetChildNode("shapedata")) { std::string strPathName; DWORD dwShapeDataCount = 0; if ( TextFileLoader.GetTokenString("pathname", &strPathName) #ifndef FIX_SHAPE_GROUP_COUNT && TextFileLoader.GetTokenDoubleWord("shapedatacount", &dwShapeDataCount) #endif ) { #ifdef FIX_SHAPE_GROUP_COUNT while (TextFileLoader.SetChildNode("shapedata", dwShapeDataCount)) #else for (DWORD i = 0; i < dwShapeDataCount; ++i) #endif { #ifndef FIX_SHAPE_GROUP_COUNT if (!TextFileLoader.SetChildNode("shapedata", i)) { continue; } #endif ///////////////////////// // Temporary - АМєҐЖ®ё¦ А§ЗС АУЅГ ±вґЙ TextFileLoader.GetTokenString("specialpath", &strPathName); ///////////////////////// DWORD dwShapeIndex; if (!TextFileLoader.GetTokenDoubleWord("shapeindex", &dwShapeIndex)) { #ifdef FIX_SHAPE_GROUP_COUNT dwShapeDataCount++; #endif continue; } // LOCAL_PATH_SUPPORT std::string strModel; if (TextFileLoader.GetTokenString("model", &strModel)) { SetShapeModel(dwShapeIndex, (strPathName + strModel).c_str()); } else { if (!TextFileLoader.GetTokenString("local_model", &strModel)) { #ifdef FIX_SHAPE_GROUP_COUNT dwShapeDataCount++; #endif continue; } SetShapeModel(dwShapeIndex, strModel.c_str()); } // END_OF_LOCAL_PATH_SUPPORT std::string strSourceSkin; std::string strTargetSkin; // LOCAL_PATH_SUPPORT if (TextFileLoader.GetTokenString("local_sourceskin", &strSourceSkin) && TextFileLoader.GetTokenString("local_targetskin", &strTargetSkin)) { AppendShapeSkin(dwShapeIndex, 0, strSourceSkin.c_str(), strTargetSkin.c_str()); } // END_OF_LOCAL_PATH_SUPPORT if (TextFileLoader.GetTokenString("sourceskin", &strSourceSkin) && TextFileLoader.GetTokenString("targetskin", &strTargetSkin)) { AppendShapeSkin(dwShapeIndex, 0, (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str()); } if (TextFileLoader.GetTokenString("sourceskin2", &strSourceSkin) && TextFileLoader.GetTokenString("targetskin2", &strTargetSkin)) { AppendShapeSkin(dwShapeIndex, 0, (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str()); } #ifdef FIX_SHAPE_GROUP_COUNT dwShapeDataCount++; #endif TextFileLoader.SetParentNode(); } } TextFileLoader.SetParentNode(); } 4. and do the same with hair part if (TextFileLoader.SetChildNode("hairdata")) { std::string strPathName; DWORD dwHairDataCount = 0; if ( TextFileLoader.GetTokenString("pathname", &strPathName) #ifndef FIX_HAIR_GROUP_COUNT && TextFileLoader.GetTokenDoubleWord("hairdatacount", &dwHairDataCount) #endif ) { #ifdef FIX_HAIR_GROUP_COUNT while(TextFileLoader.SetChildNode("hairdata", dwHairDataCount)) #else for (DWORD i = 0; i < dwHairDataCount; ++i) #endif { #ifndef FIX_HAIR_GROUP_COUNT if (!TextFileLoader.SetChildNode("hairdata", i)) { continue; } #endif ///////////////////////// // Temporary - АМєҐЖ®ё¦ А§ЗС АУЅГ ±вґЙ TextFileLoader.GetTokenString("specialpath", &strPathName); ///////////////////////// DWORD dwShapeIndex; if (!TextFileLoader.GetTokenDoubleWord("hairindex", &dwShapeIndex)) { #ifdef FIX_HAIR_GROUP_COUNT dwHairDataCount++; #endif continue; } std::string strModel; std::string strSourceSkin; std::string strTargetSkin; if (TextFileLoader.GetTokenString("model", &strModel) && TextFileLoader.GetTokenString("sourceskin", &strSourceSkin) && TextFileLoader.GetTokenString("targetskin", &strTargetSkin)) { SetHairSkin(dwShapeIndex, 0, (strPathName + strModel).c_str(), (strPathName + strSourceSkin).c_str(), (strPathName + strTargetSkin).c_str()); } #ifdef FIX_HAIR_GROUP_COUNT dwHairDataCount++; #endif TextFileLoader.SetParentNode(); } } TextFileLoader.SetParentNode(); } 5. Add to Userinterface->Locale_inc.h #define FIX_SHAPE_GROUP_COUNT #define FIX_HAIR_GROUP_COUNT 6. And most importantly, you need to have the correct sequence of groups. For example: Group ShapeData08 { ShapeIndex 9 Model "assassin_yonga.GR2" SourceSkin "assassin_yonga.DDS" TargetSkin "assassin_yonga.DDS" } Group ShapeData09 { ShapeIndex 10 Model "assassin_yonga.GR2" SourceSkin "assassin_yonga.DDS" TargetSkin "assassin_salpung.DDS" } Group ShapeData10 { ShapeIndex 11 Model "assassin_bihyeon.GR2" SourceSkin "assassin_bihyeon.DDS" TargetSkin "assassin_bihyeon.DDS" } (if, for example, after ShapeData08 there is ShapeData11, then the loop will end on ShapeData08 and finish its work.) If anyone has any ideas on how to improve the code, please share.
  4. Great system. Is it intended? GameLib -> ItemManager.cpp if (!CCrypt::Instance().Decompress(zObj, pbData, CryptationTypes::LZO, s_adwItemProtoKey)) change to if (!CCrypt::Instance().Decompress(zObj, pbData, types, s_adwItemProtoKey))
  5. Hi devs, some times a go, I remove a billing system from my source. But after i found errors in auth core. and these errors are repeated every time you connect to the server. Maybe someone knows why this is and how to fix it?
  6. I update a pic, mb its help...
  7. Hey guys, i have the bug with inventory. Can anyone know where i could make a mistake? ItemData.h: GameType.h: length.h: inventorywindow.py:
  8. New, add latest update (i think). Add: - little fix (from binary) - upload src PS: I'm new and my code is not perfect, if it seems to you that you could write better, write in the comments to this post. Thank you in advance
  9. Yep, but u need put folders without space (ymir work)
  10. This converter convert all .gr2 in a folder and subfolder... What u mean?
  11. #Update 0.2 - Added change log. - Writes paths to all files (on "granny_list"). - Converter goes through all folders and subfolders. - The converter is written in C++ - Recompile preprocessor. - Removed .bat bullshit Note: The folder name can not contain spaces. Example: "...\converter\old\ymir work\monster" -> "...\converter\old\monster"
  12. Hi DEV, I decided to update all and encountered a problem. After update Devil to 1.8.0 icons of guilds ceased to work. Can anyone knows how to fix it, I will be grateful. Thank you in advance.
  13. @z35 Try install granny 2.11.8 (link). And u are right, your english is better than mine
  14. Do you use last version? Try download from my github, again

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.