Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 12/21/20 in all areas

  1. Hi all! This is recommended for those who are testing or running on windows. The reason for the error is that they have a 100% chance of dropp. C++11. Based on the video, you can watch: number_ex old version: [Hidden Content] number_ex fixed: [Hidden Content] FIX: #include <random> int number_ex(int from, int to, const char* file, int line) { if (from > to) { int tmp = from; sys_err("number(): first argument is bigger than second argument %d -> %d, %s %d", from, to, file, line); from = to; to = tmp; } int returnValue = 0; std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> distrib(from, to); if ((to - from + 1) != 0) returnValue = distrib(gen); else sys_err("number(): devided by 0"); return returnValue; }
    5 points
  2. Open pvp.cpp Search for pkPVP->Win(dwKillerPID); paste under: LPCHARACTER pkVictim = CHARACTER_MANAGER::instance().FindByPID(dwKillerPID); if (pkVictim) { pkVictim->ChatPacket(CHAT_TYPE_INFO, "You have %d of %d TP left", pkVictim->GetHP(), pkVictim->GetMaxHP()); pkChr->ChatPacket(CHAT_TYPE_INFO, "opponent had %d of %d TP left", pkVictim->GetHP(), pkVictim->GetMaxHP()); }
    3 points
  3. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) I would not recommend using this as it's missing many features, head over to Mali's release for an updated version. [Hidden Content]
    2 points
  4. M2 Download Center Download Here ( Internal ) Download Here ( GitHub )
    1 point
  5. When cancelling server timers a core will crash as it is removing a timer from the map and increasing the iterator twice by calling erase() function and afterwards increasing it once again when entering a new cycle of loop. One way of solving this issue is to first collect the timers which must be removed and clean them up at the end. You can also add a simple counter which is increased at each end of the loop's cycle and remove the timer directly from the first loop by specifying the position with the counter itself. Note that this issue seems to appear after upgrading code to C++11 or higher. Replace the following function inside questmanager.cpp: void CQuestManager::CancelServerTimers(DWORD arg) { vector<pair<string, DWORD>> ServerTimersToDelete; for (const auto& kv : m_mapServerTimer) { if (kv.first.second == arg) { LPEVENT event = kv.second; event_cancel(&event); ServerTimersToDelete.push_back(kv.first); } } // Delete all the required server timers for (const auto &timer : ServerTimersToDelete) m_mapServerTimer.erase(timer); // Clean up ServerTimersToDelete.clear(); }
    1 point
  6. M2 Download Center Download Here ( Internal ) GitHub repository: [Hidden Content]
    1 point
  7. Hi guys, I need your help. I am using sources with the following upgrades by blackdragonx61: Granny 2.11.8 libjpeg-9a Python-2.7 Boost-1.71 Crypto++ 8.2.0 DevIL-1.8.0 lzo-2.10 When I add the pet system, I choose the character the client crashes and I get this: 0817 22:53:13712 :: Property already registered, replace property/devils_dragon_island/thing/obj_mtthund_thorn01.prb to property/devils_dragon_island/mtthunder_thorn01.prb 0817 22:53:13758 :: LoadWaterMapFile metin2_map_a1\000001\water.wtr 0 0817 22:53:13758 :: LoadRawHeightMapFile metin2_map_a1\000001\height.raw 0817 22:53:13761 :: LoadHeightMap::CalculateNormal 3 ms 0817 22:53:13761 :: LoadAttrMapFile metin2_map_a1\000001\attr.atr 0817 22:53:13762 :: 0 0817 22:53:13762 :: LoadSplatFile metin2_map_a1\000001\tile.raw 0817 22:53:13779 :: CTerrain::RAW_AllocateSplats 17 0817 22:53:13780 :: CTerrain::LoadShadowTexture 1 ms 0817 22:53:13780 :: LoadShadowMap metin2_map_a1\000001\shadowmap.raw 0817 22:53:13780 :: 0 ms 0817 22:53:13780 :: CTerrain::LoadMiniMapTexture 0 ms 0817 22:53:13781 :: CMapOutdoor::LoadTerrain 24 0817 22:53:13782 :: CMapOutdoor::LoadArea1 0 By debugging I get this: If I comment on the following function, the game starts but I only see NPCs and Mobs: if ( !pArea->Load(szAreaPathName) ) Can you tell me why it crashes and how to solve it if necessary? Thanks in advance!
    1 point
  8. hi. You can do like this> file> pvp.cpp, function>dead [Hidden Content]
    1 point
  9. 1 point
  10. M2 Download Center Download Here ( Internal ) Download Here ( Github ) Advanced Duel Options (50% by ZeNu) Delete Random HP DMG Fix New Command for General DMG Tactical DMG
    1 point
  11. Hello, the steps for installing a new monster/NPC in your server as are follows: 1. Add monster folder in your pack in monster.eix/.epk(or where you have monster data in client). !! Attention: You have to check the Texture Path with Granny Viewer and put the monster in that location, otherwise your monster will be white(you cand find more about this in other threads I guess). 2. Add info in npclist.txt, if the monster will be located in D:/ymir work/monster/my_monster for example, you will just put the vnum and monster's folder name, example: 249 my_monster Where 249 is vnum and my_monster is monster's folder name. You will use TAB to make space between 249 and my_monster. If you make a subfolder in D:/ymir work/monster/ you have to add it in npclist.txt too, as follows: Let's take this path as an example: D:/ymir work/monster/my_collection/my_monster/ Normally, the game will search for "my_monster.msm" in D:/ymir work/monster/, but if you make a new sub folder you have to tell the game where to search for that in npclist: At the top of npclist.txt we will write: 0 my_monster my_collection\my_monster With this, we tell the game to search for my_monster IN MY_COLLECTION SUB-FOLDER. After that, we go little bit down and we put 249 my_monster. Ok, so let' say everything is ok until here... the rest is gonna be pretty easy. 3. You have to put your monster's data in mob_names/mob_proto; !!!! You have to put your monster's folder name in FOLDER category of your monster from mob_proto! If it is a NPC or a static thing like a metin stone, it is not needed! otherwise you have to put it! Also, you have to put the folder with your monster's data in server in share/data/monster. Use dump_proto to make the mob_proto for client too(I assume you use 40k serverfiles) and you are done, I guess.. If I missed anything, may someone correct me. If there is anything you do not understand or you encounter any problem, I would gladly ask. Sincerely, regal.
    1 point
  12. That is the other way I was talking about and you are right, this is much more efficient way of doing it as we are not copying elements to another vector and cleaning them up afterwards. Thank you for the code
    1 point
  13. UPDATE: you can now delete by right click radius is shown around your mouse pointer Download updated, but here's the link again: [Hidden Content] @ASIKOO can you please update it in the Download Center too?
    1 point
  14. oh thanks i found everything i need and more soo happy
    1 point
  15. M2 Download Center Download Here ( Internal ) Hello guys, so today i was messing arround with the maxmi source, and i manage to compile, and here you have the link for the oficial release. No errors when you start the server, you can use the origial Maxmi 4.1 released server files database and client. Also you can compile it using the 9.2 VDI with compiler, its posted here in the forum. Ingame Also all the features that you have on the 4.1 maxmi release you have in this Source. Just Enjoy Original post from @Blackk61
    1 point
  16. M2 Download Center Download Here ( Internal ) Download: [Hidden Content]
    1 point
  17. The idea isn't so bad, but the code has too many useless lines, here's what you can do to improve it. def RefreshPickupFilter(self): #Weapon if systemSetting.IsPickUpFilterWeapon(): self.PickUpFilterList[0].Down() else: self.PickUpFilterList[0].SetUp() #Armor if systemSetting.IsPickUpFilterArmor(): self.PickUpFilterList[1].Down() else: self.PickUpFilterList[1].SetUp() #Ear if systemSetting.IsPickUpFilterEar(): self.PickUpFilterList[2].Down() else: self.PickUpFilterList[2].SetUp() #Neck if systemSetting.IsPickUpFilterNeck(): self.PickUpFilterList[3].Down() else: self.PickUpFilterList[3].SetUp() #Foots if systemSetting.IsPickUpFilterFoots(): self.PickUpFilterList[4].Down() else: self.PickUpFilterList[4].SetUp() #Shield if systemSetting.IsPickUpFilterShield(): self.PickUpFilterList[5].Down() else: self.PickUpFilterList[5].SetUp() #Book if systemSetting.IsPickUpFilterBook(): self.PickUpFilterList[6].Down() else: self.PickUpFilterList[6].SetUp() #Stone if systemSetting.IsPickUpFilterStone(): self.PickUpFilterList[7].Down() else: self.PickUpFilterList[7].SetUp() #Etc if systemSetting.IsPickUpFilterEtc(): self.PickUpFilterList[8].Down() else: self.PickUpFilterList[8].SetUp() To: def RefreshPickupFilter(self): checkFilterList = ( systemSetting.IsPickUpFilterWeapon(), systemSetting.IsPickUpFilterArmor(), systemSetting.IsPickUpFilterEar(), systemSetting.IsPickUpFilterNeck(), systemSetting.IsPickUpFilterFoots(), systemSetting.IsPickUpFilterShield(), systemSetting.IsPickUpFilterBook(), systemSetting.IsPickUpFilterStone(), systemSetting.IsPickUpFilterEtc() ) for child, flag in zip(self.PickUpFilterList, checkFilterList): if flag: child.Down() else: child.SetUp() self.PickUpFilterList.append(GetObject("Pick_Up_FilterWeapon")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterArmor")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterEar")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterNeck")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterFoots")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterShield")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterBook")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterStone")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterEtc")) To: for name in ('Weapon','Armor','Ear','Neck','Foots','Shield','Book','Stone','Etc'): self.PickUpFilterList.append(GetObject("Pick_Up_Filter{}".format(name))) self.PickUpFilterList[0].SetToggleUpEvent(self.__OnClickPickupFilterButtonWeapon) # Weapon self.PickUpFilterList[0].SetToggleDownEvent(self.__OnClickPickupFilterButtonWeapon) # Weapon self.PickUpFilterList[1].SetToggleUpEvent(self.__OnClickPickupFilterButtonArmor) # Armor self.PickUpFilterList[1].SetToggleDownEvent(self.__OnClickPickupFilterButtonArmor) # Armor self.PickUpFilterList[2].SetToggleUpEvent(self.__OnClickPickupFilterButtonEar) # Ear self.PickUpFilterList[2].SetToggleDownEvent(self.__OnClickPickupFilterButtonEar) # Ear self.PickUpFilterList[3].SetToggleUpEvent(self.__OnClickPickupFilterButtonNeck) # Neck self.PickUpFilterList[3].SetToggleDownEvent(self.__OnClickPickupFilterButtonNeck) # Neck self.PickUpFilterList[4].SetToggleUpEvent(self.__OnClickPickupFilterButtonFoots) # Foots self.PickUpFilterList[4].SetToggleDownEvent(self.__OnClickPickupFilterButtonFoots) # Foots self.PickUpFilterList[5].SetToggleUpEvent(self.__OnClickPickupFilterButtonShield) # Shield self.PickUpFilterList[5].SetToggleDownEvent(self.__OnClickPickupFilterButtonShield) # Shield self.PickUpFilterList[6].SetToggleUpEvent(self.__OnClickPickupFilterButtonBook) # Books self.PickUpFilterList[6].SetToggleDownEvent(self.__OnClickPickupFilterButtonBook) # Books self.PickUpFilterList[7].SetToggleUpEvent(self.__OnClickPickupFilterButtonStone) # Stone self.PickUpFilterList[7].SetToggleDownEvent(self.__OnClickPickupFilterButtonStone) # Stone self.PickUpFilterList[8].SetToggleUpEvent(self.__OnClickPickupFilterButtonEtc) # Etc self.PickUpFilterList[8].SetToggleDownEvent(self.__OnClickPickupFilterButtonEtc) # Etc To: eventFuncList = ( self.__OnClickPickupFilterButtonWeapon, self.__OnClickPickupFilterButtonArmor, self.__OnClickPickupFilterButtonEar, self.__OnClickPickupFilterButtonNeck, self.__OnClickPickupFilterButtonFoots, self.__OnClickPickupFilterButtonShield, self.__OnClickPickupFilterButtonBook, self.__OnClickPickupFilterButtonStone, self.__OnClickPickupFilterButtonEtc ) for child, event in zip(self.PickUpFilterList, eventFuncList): child.SetToggleUpEvent(event) child.SetToggleDownEvent(event)
    1 point
  18. M2 Download Center Download Here ( Internal ) WaterCreation is a small and easy-to-use program for creating water animations from a sequence of changing textures. The program generates textures based on predefined settings. We can, among other things, set the number of textures that make up the animation and their size, the color of the water and the brightness, and we can even add our own texture that will serve as a reflection on the water.
    1 point
  19. You're right, but if you really want to use something like this, you should do a customizable class, like: [Hidden Content]
    1 point
  20. I hereby call this bullshit. "Reinstall the system if you can't install just updare and yeah you are noob ." A bit arrogant?
    1 point
  21. Hey guys, i just noticed that if my character is level 120 he still drops everything from Death Reaper for example. My Drop Group looks like this for 1093: Group 사신 { Level_limit 75 Mob 1093 Type limit 1 50082 1 100 } Does anyone know if something is wrong? Because i don't think its the problem of the text file.
    0 points
  22. Like you, too. And no, just a bad day.
    0 points
  23. Maybe i am perfect like that , how about that ?
    0 points
×
×
  • Create New...

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.