Leaderboard
Popular Content
Showing content with the highest reputation on 12/21/20 in all areas
-
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
-
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
-
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
-
1 point
-
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
-
M2 Download Center Download Here ( Internal ) GitHub repository: [Hidden Content]1 point
-
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
-
1 point
-
1 point
-
hi. You can do like this> file> pvp.cpp, function>dead [Hidden Content]1 point
-
1 point
-
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 DMG1 point
-
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
-
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 code1 point
-
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
-
1 point
-
1 point
-
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 @Blackk611 point
-
M2 Download Center Download Here ( Internal ) Download: [Hidden Content]1 point
-
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
-
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
-
You're right, but if you really want to use something like this, you should do a customizable class, like: [Hidden Content]1 point
-
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
-
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
-
0 points
-
0 points