Jump to content
metin2dev

Leaderboard


Popular Content

Showing most liked content since 10/19/2017 in all areas

  1. 13 points
    Hey there, I have an Halloween gift for you all. i have been working for a few hours on official like element image on target window(See screenshots below). When you click on a mob if it is defined as elemental, it will open an element image in addition to the target window. Don't forget to hit the like button! (C) Metin2 guild wars - coded by [GA]Ruin - 27/10/2017 (I create custom metin2 systems in c++/python. if you want a custom system send me a pm and we can talk over skype). Client files: element_image_client_files.rar Let's begin! Server Side: Open service.h, add in the end: #define ELEMENT_TARGET Open char.cpp, search for else { p.dwVID = 0; p.bHPPercent = 0; } add below: #ifdef ELEMENT_TARGET const int ELEMENT_BASE = 11; DWORD curElementBase = ELEMENT_BASE; DWORD raceFlag; if (m_pkChrTarget && m_pkChrTarget->IsMonster() && (raceFlag = m_pkChrTarget->GetMobTable().dwRaceFlag) >= RACE_FLAG_ATT_ELEC) { for (int i = RACE_FLAG_ATT_ELEC; i <= RACE_FLAG_ATT_DARK; i *= 2) { curElementBase++; int diff = raceFlag - i; if (abs(diff) <= 1024) break; } p.bElement = curElementBase - ELEMENT_BASE; } else { p.bElement = 0; } #endif open packet.h, search for: } TPacketGCTarget; add above: #ifdef ELEMENT_TARGET BYTE bElement; #endif Client side: open locale_inc.h, add in the end: #define ELEMENT_TARGET open packet.h, search for } TPacketGCTarget; add above: #ifdef ELEMENT_TARGET BYTE bElement; #endif open PythonNetworkPhaseGame.cpp, look for: else if (pInstPlayer->CanViewTargetHP(*pInstTarget)) replace below with the following: #ifdef ELEMENT_TARGET PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement)); #else PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent)); #endif open PythonApplicationModule.cpp, look for #ifdef ENABLE_ENERGY_SYSTEM add above: #ifdef ELEMENT_TARGET PyModule_AddIntConstant(poModule, "ENABLE_VIEW_ELEMENT", 1); #else PyModule_AddIntConstant(poModule, "ENABLE_VIEW_ELEMENT", 0); #endif open game.py, look for def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() replace with: if app.ENABLE_VIEW_ELEMENT: def SetHPTargetBoard(self, vid, hpPercentage,bElement): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.SetElementImage(bElement) self.targetBoard.Show() else: def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() open uitarget.py, look for import background add below: if app.ENABLE_VIEW_ELEMENT: ELEMENT_IMAGE_DIC = {1: "elect", 2: "fire", 3: "ice", 4: "wind", 5: "earth", 6 : "dark"} look for: self.isShowButton = False add below: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None inside Destroy method, look for: self.__Initialize() add below: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None inside ResetTargetBoard method, look for: self.hpGauge.Hide() add below: if app.ENABLE_VIEW_ELEMENT and self.elementImage: self.elementImage = None look for : def SetElementImage(self,elementId): add above: if app.ENABLE_VIEW_ELEMENT: def SetElementImage(self,elementId): try: if elementId > 0 and elementId in ELEMENT_IMAGE_DIC.keys(): self.elementImage = ui.ImageBox() self.elementImage.SetParent(self.name) self.elementImage.SetPosition(-60,-12) self.elementImage.LoadImage("d:/ymir work/ui/game/12zi/element/%s.sub" % (ELEMENT_IMAGE_DIC[elementId])) self.elementImage.Show() except: pass Compile server, client source and root pack and that's it! Enjoy! Happy halloween! element_image_client_files.rar
  2. 9 points
    Please stop posting this ...
  3. 9 points
    I want a ferrari, ships and bitches. TY
  4. 6 points
    1. Make a guild 2. Put that code in uiGuild.py in OnUpdate function net.SendGuildPostCommentPacket("") 3. In your console type "top" and check "mysql" process 4. Check your table player.guild_comment to... Fix: ## 1.guild.h // 1.1.Search: EventMap m_GuildInviteEventMap; // 1.1.Add after: protected: int m_guildPostCommentPulse; ## 2.guild.cpp // 2.1.Search function: void CGuild::AddComment(LPCHARACTER ch, const std::string& str) { ... } // 2.1.Replace with: void CGuild::AddComment(LPCHARACTER ch, const std::string& str) { if (str.length() > GUILD_COMMENT_MAX_LEN || str.length() == 0) // Added string null verification return; // Compare last pulse with current pulse and notify the player if (m_guildPostCommentPulse > thecore_pulse()) { int deltaInSeconds = ((m_guildPostCommentPulse / PASSES_PER_SEC(1)) - (thecore_pulse() / PASSES_PER_SEC(1))); int minutes = deltaInSeconds / 60; int seconds = (deltaInSeconds - (minutes * 60)); ch->ChatPacket(CHAT_TYPE_INFO, "You can post a new comment in: %02d minutes and %02d seconds!", minutes, seconds); return; } char text[GUILD_COMMENT_MAX_LEN * 2 + 1]; DBManager::instance().EscapeString(text, sizeof(text), str.c_str(), str.length()); DBManager::instance().FuncAfterQuery(void_bind(std::bind1st(std::mem_fun(&CGuild::RefreshCommentForce),this),ch->GetPlayerID()), "INSERT INTO guild_comment%s(guild_id, name, notice, content, time) VALUES(%u, '%s', %d, '%s', NOW())", get_table_postfix(), m_data.guild_id, ch->GetName(), (str[0] == '!') ? 1 : 0, text); // Set comment pulse to 10 minutes m_guildPostCommentPulse = thecore_pulse() + PASSES_PER_SEC(10*60); }
  5. 6 points
    Hello, This little thing is marks your pet seal into your inventory like the autopotion. This arrives with the v17.5 patch. Open PetSystem.cpp and replace or make it fit for you: void CPetActor::SetSummonItem(LPITEM pItem) { if (NULL == pItem) { LPITEM pSummonItem = ITEM_MANAGER::instance().FindByVID(m_dwSummonItemVID); if (NULL != pSummonItem) pSummonItem->SetSocket(1, FALSE); m_dwSummonItemVID = 0; m_dwSummonItemVnum = 0; return; } pItem->SetSocket(1, TRUE); m_dwSummonItemVID = pItem->GetVID(); m_dwSummonItemVnum = pItem->GetVnum(); } After that open the uiInventory.py and paste this code below the autopotion if-statement in the RefreshBagSlotWindow function. elif itemVnum >= 53001 and itemVnum <= 53256: metinSocket = [player.GetItemMetinSocket(globalSlotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]# <!> globalSlotNumber may be different <!> isActivated = 0 != metinSocket[1] if isActivated: self.wndItem.ActivateSlot(i) else: self.wndItem.DeactivateSlot(i)
  6. 6 points
    Hello. The most people here and on every board in this section don't have any clue about programming and they cannot do even nothing with the open source library codes, so here are the cryptlib(5.6.3 and 5.6.5) and libjpeg(9a) libraries what built with vc141 by me on the latest(I think) SDK on Windows10 10.0.16299.0. Sorry for my raw style but this is the truth. https://mega.nz/#!6VBxWIRQ!_lsb7efyt2agFvb3rMqw0DQZBdfyFWw7UlmiBLllRMU https://mega.nz/#!OIBynKrK!BqxqT9OymvnFn0folypyaKBXXt8xohAMG5TX7CtRp3I Aaaand I don't wanna talk about the services, that is another story... Peace.
  7. 6 points
    Hello, Today I'm gonna share with you a little fix from the official server. https://pastebin.com/15aqnrif
  8. 6 points
    THIS IS YOU TRYING TO FIX YOUR PROBLEMS: Please man.....
  9. 5 points
    Hello guys, Today i have new model (Death guard) you can add it in Tower of demons screen: Download : Mega download Scan Virus : Virustotal
  10. 5 points
    (Video at the end) Lockpicking is the new system which allows you to train special ability. This ability upgrade your skill of opening new boxes which are on maps(like npc). Every level gives higher chance to open box and probability to get more rewards. To train Lockpicking skill players have to read special books. You can set the level from which players can use this system. Maximum level of skill is 40, but it's configurable. Player can check how many boxes found. System support multilang servers. Missions Additionaly you will get special missions for this sytem, you can easily configure them or add new ones(just add new item to the table). After finished mission player receive reward directly in Quest Scroll. Configuration ItemShop Also you can earn some money from itemshop by this system : ) Magical key rises you chance to open box to 100%, but count of items which you can get from box still depends on skill level. The Key can be used only 10 times. Download & Scan http://www19.zippyshare.com/v/ECjEXsuj/file.html https://www.virustotal.com/#/file/d4fb8b52a8ed74f3a2fbf74efdbd2cc2c042ed82b243fea4d7d18561fa206750/detection
  11. 5 points
    Auto Announcements This system allows you to send announcements at chosen time. There are 3 categories of announcements. Hourly Announcements You can set announcements which will appears at chosen minute after every full hour. Special Announcements You can set announcements which appears at chosen time in chosen day. If you want to show messageeveryday in same hour simply set day to EVERYDAY. Special Announcements | from h - to h You can set announcements which appears in chosen by you time intervals(ex. 17:00 - 21:00) 00, 20 and 40 minutes after full hour. Like in preview mode you can set it to EVERYDAY if you want show announcement everyday. By default it support 5 lines of message, but it's configurable. If you want to hide line simply set it to "". Dwonload & Scan http://www89.zippyshare.com/v/R6aMRmtr/file.html https://www.virustotal.com/#/file/350f23a008f2ec7d972be88c1e28247477d03d12e7e64e0d28e91a556ea5ab09/detection
  12. 5 points
    Hello everyone. Here is a little snippet for the chat history. I made this to turn back the "All" state if you turn off every each button.
  13. 5 points
    Small update: Added tool tip to make it more clear for players, follow the steps below to have it. Like this post if you find it useful Screens: in _init_ and in Destroy methods look for: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None replace with: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None self.elementId = None self.elementImageToolTip = None search for: def Close(self): add inside the method: if app.ENABLE_VIEW_ELEMENT and self.elementImage: self.elementImage.Hide() Search for: ELEMENT_IMAGE_DIC = {1: "elect", 2: "fire", 3: "ice", 4: "wind", 5: "earth", 6: "dark"} add above: import uiToolTip inside ResetTargetBoard method look for: if app.ENABLE_VIEW_ELEMENT and self.elementImage: self.elementImage = None replace with: if app.ENABLE_VIEW_ELEMENT and self.elementImage: self.elementImage = None self.elementId = None if self.elementImageToolTip: self.elementImageToolTip.Hide() Look for: def SetElementImage(self, elementId): replace the whole method with: def SetElementImage(self, elementId): try: if elementId > 0 and elementId in ELEMENT_IMAGE_DIC.keys(): self.elementId = elementId self.elementImage = ui.ImageBox() self.elementImage.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OnElementImageOverIn) self.elementImage.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OnElementImageOverOut) self.elementImage.SetPosition(self.GetLeft() - 40, self.GetTop()) self.elementImage.LoadImage( "d:/ymir work/ui/game/12zi/element/%s.sub" % (ELEMENT_IMAGE_DIC[elementId])) self.elementImage.Show() except: pass def OnElementImageOverIn(self): if not self.elementImageToolTip: self.elementImageToolTip = uiToolTip.ToolTip() self.elementImageToolTip.ClearToolTip() self.elementImageToolTip.AppendTextLine(ELEMENT_IMAGE_DIC[self.elementId] + " element") self.elementImageToolTip.SetToolTipPosition(self.GetLeft() - 40, self.GetTop() + 70) self.elementImageToolTip.Show() def OnElementImageOverOut(self): if self.elementImageToolTip: self.elementImageToolTip.Hide() That's it. Enjoy!
  14. 4 points
    Download: workupload.com/file/wZymNkb Password: m2dl-cxlgizeh
  15. 4 points
    Version 1.0 Hair pinned with Japanese pins for shaman girl. - a face with artificial shadow on the texture was added to the hair. This solution recompense to some extent the lack of shadows in the game engine - the model is carefully crafted - the model has a hair icon - the texture is in good quality NOTE: Please do not change hair to other characters class. The hair looks just fine only on shaman girl. Do not spoil it. Comment or Like = more good models, remember. DOWNLOAD: http://www.mediafire.com/file/m3i7008yw8jiw7w/Włosy+spięte+japońskimi+szpilkami+(wersja+1.0).rar SCAN: https://www.virustotal.com/#/url/ab2b684929773b8c7a93c806405dedd30f915bbf6c68698e013f2f27c21642a7/detection
  16. 4 points
    You should go to a psychiatrist. You had been obsessed with Slait before, and now with Marty.
  17. 4 points
    In 17.5 GF update with Talismans GF also introduce new type of bonuses - strong against weapons So here's it! I'm not 100% sure about bonuses numbers cuz in my revision i have also other new bonuses. Server Side open service.h and add: #define ENABLE_BONUS_STRONG_AGAINST_WEAPON open length.h, find APPLY_ANTI_PENETRATE_PCT, (or last of urs bonuses) add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON APPLY_ATTBONUS_SWORD, // 92 APPLY_ATTBONUS_TWOHANDED, // 93 APPLY_ATTBONUS_DAGGER, // 94 APPLY_ATTBONUS_BELL, // 95 APPLY_ATTBONUS_FAN, // 96 APPLY_ATTBONUS_BOW, // 97 #endif open ProtoReader.cpp and find "APPLY_ANTI_PENETRATE_PCT", (or last of urs bonuses) add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON , "APPLY_ATTBONUS_SWORD" "APPLY_ATTBONUS_TWOHANDED", "APPLY_ATTBONUS_DAGGER", "APPLY_ATTBONUS_BELL", "APPLY_ATTBONUS_FAN", "APPLY_ATTBONUS_BOW" #endif open Battle.cpp and inf int CalcAttBonus find: if (pkAttacker->IsNPC() && pkVictim->IsPC()) { iAtk = (iAtk * CHARACTER_MANAGER::instance().GetMobDamageRate(pkAttacker)) / 100; } add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON if (pkVictim->IsPC()) { LPITEM pkWeapon = pkVictim->GetWear(WEAR_WEAPON); if (pkWeapon) { switch (pkWeapon->GetSubType()) { case WEAPON_SWORD: iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_SWORD)) / 100; break; case WEAPON_TWO_HANDED: iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_TWOHANDED)) / 100; break; case WEAPON_DAGGER: iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_DAGGER)) / 100; break; case WEAPON_BELL: iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_BELL)) / 100; break; case WEAPON_FAN: iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_FAN)) / 100; break; case WEAPON_BOW: iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_BOW)) / 100; break; } } } #endif in char.cpp find: case POINT_ATTBONUS_DEVIL: // 47 add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON case POINT_ATTBONUS_SWORD: case POINT_ATTBONUS_TWOHANDED: case POINT_ATTBONUS_DAGGER: case POINT_ATTBONUS_BELL: case POINT_ATTBONUS_FAN: case POINT_ATTBONUS_BOW: #endif find(in CHARACTER::ApplyPoint): case APPLY_ATTBONUS_MONSTER: // 63 add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON case APPLY_ATTBONUS_SWORD: case APPLY_ATTBONUS_TWOHANDED: case APPLY_ATTBONUS_DAGGER: case APPLY_ATTBONUS_BELL: case APPLY_ATTBONUS_FAN: case APPLY_ATTBONUS_BOW: #endif in char.h find: POINT_RESIST_PENETRATE = 137, add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON POINT_ATTBONUS_SWORD = 138, POINT_ATTBONUS_TWOHANDED = 139, POINT_ATTBONUS_DAGGER = 140, POINT_ATTBONUS_BELL = 141, POINT_ATTBONUS_FAN = 142, POINT_ATTBONUS_BOW = 143, #endif in cmd_general.cpp find: case POINT_RESIST_SHAMAN: return LC_TEXT("ą«´ç°ř°Ýżˇ %d%% ŔúÇ×"); add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON case POINT_ATTBONUS_SWORD: return LC_TEXT("Sword resistance: %d%%"); case POINT_ATTBONUS_TWOHANDED: return LC_TEXT("Two Hand resistance: %d%%"); case POINT_ATTBONUS_DAGGER: return LC_TEXT("Dagger resistance: %d%%"); case POINT_ATTBONUS_BELL: return LC_TEXT("Bell resistance: %d%%"); case POINT_ATTBONUS_FAN: return LC_TEXT("Fan resistance: %d%%"); case POINT_ATTBONUS_BOW: return LC_TEXT("Bow resistance: %d%%"); #endif in constants.cpp find: { POINT_RESIST_PENETRATE, }, // APPLY_ANTI_PENETRATE_PCT, 91 add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON { POINT_ATTBONUS_SWORD, }, { POINT_ATTBONUS_TWOHANDED, }, { POINT_ATTBONUS_DAGGER, }, { POINT_ATTBONUS_BELL, }, { POINT_ATTBONUS_FAN, }, { POINT_ATTBONUS_BOW, }, #endif find: { "MELEE_MAGIC_ATTBONUS_PER", APPLY_MELEE_MAGIC_ATTBONUS_PER }, add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON { "ATT_BONUS_TO_SWORD", APPLY_ATTBONUS_SWORD }, { "ATT_BONUS_TO_TWOHAND", APPLY_ATTBONUS_TWOHANDED }, { "ATT_BONUS_TO_DAGGER", APPLY_ATTBONUS_DAGGER }, { "ATT_BONUS_TO_BELL", APPLY_ATTBONUS_BELL }, { "ATT_BONUS_TO_FAN", APPLY_ATTBONUS_FAN }, { "ATT_BONUS_TO_BOW", APPLY_ATTBONUS_BOW }, #endif let's go into client source side: open Locale_inc.h and add where you want: #define ENABLE_BONUS_STRONG_AGAINST_WEAPON open packet.h and find: POINT_RESIST_PENETRATE = 137, add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON POINT_ATTBONUS_SWORD = 138, POINT_ATTBONUS_TWOHANDED = 139, POINT_ATTBONUS_DAGGER = 140, POINT_ATTBONUS_BELL = 141, POINT_ATTBONUS_FAN = 142, POINT_ATTBONUS_BOW = 143, #endif open Itemdata.h and find: APPLY_ANTI_PENETRATE_PCT, //91 add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON APPLY_ATTBONUS_SWORD, // 92 APPLY_ATTBONUS_TWOHANDED, // 93 APPLY_ATTBONUS_DAGGER, // 94 APPLY_ATTBONUS_BELL, // 95 APPLY_ATTBONUS_FAN, // 96 APPLY_ATTBONUS_BOW, // 97 #endif open PythonItemModule.cpp and find: PyModule_AddIntConstant(poModule, "APPLY_ANTI_PENETRATE_PCT", CItemData::APPLY_ANTI_PENETRATE_PCT); add bellow: #ifdef ENABLE_BONUS_STRONG_AGAINST_WEAPON PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_SWORD", CItemData::APPLY_ATTBONUS_SWORD); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_TWOHANDED", CItemData::APPLY_ATTBONUS_TWOHANDED); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DAGGER", CItemData::APPLY_ATTBONUS_DAGGER); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_BELL", CItemData::APPLY_ATTBONUS_BELL); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_FAN", CItemData::APPLY_ATTBONUS_FAN); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_BOW", CItemData::APPLY_ATTBONUS_BOW); #endif let's go into Dump Proto source: open ItemCSVReader.cpp and find(in string arApplyType[]): "APPLY_ANTI_PENETRATE_PCT", add after: "APPLY_ATTBONUS_SWORD","APPLY_ATTBONUS_TWOHANDED","APPLY_ATTBONUS_DAGGER","APPLY_ATTBONUS_BELL","APPLY_ATTBONUS_FAN","APPLY_ATTBONUS_BOW", let's go into Client root/locale part: open uiToolTip.py and find: item.APPLY_ANTI_PENETRATE_PCT : locale.TOOLTIP_ANTI_PENETRATE_PCT, add bellow: item.APPLY_ATTBONUS_SWORD : locale.TOOLTIP_ATTBONUS_SWORD, item.APPLY_ATTBONUS_TWOHANDED : locale.TOOLTIP_ATTBONUS_TWOHANDED, item.APPLY_ATTBONUS_DAGGER : locale.TOOLTIP_ATTBONUS_DAGGER, item.APPLY_ATTBONUS_BELL : locale.TOOLTIP_ATTBONUS_BELL, item.APPLY_ATTBONUS_FAN : locale.TOOLTIP_ATTBONUS_FAN, item.APPLY_ATTBONUS_BOW : locale.TOOLTIP_ATTBONUS_BOW, inside locale folder, open locale_game.txt, add in the end: TOOLTIP_ATTBONUS_SWORD Strong Against Sword +%d%% SA TOOLTIP_ATTBONUS_TWOHANDED Strong Against Two-Handed Weapon +%d%% SA TOOLTIP_ATTBONUS_DAGGER Strong Against Dagger +%d%% SA TOOLTIP_ATTBONUS_BELL Strong Against Bell +%d%% SA TOOLTIP_ATTBONUS_FAN Strong Against Fan +%d%% SA TOOLTIP_ATTBONUS_BOW Strong Against Bow +%d%% SA To use new bonuses please use in you item_proto.txt: APPLY_ATTBONUS_SWORD APPLY_ATTBONUS_TWOHANDED APPLY_ATTBONUS_DAGGER APPLY_ATTBONUS_BELL APPLY_ATTBONUS_FAN APPLY_ATTBONUS_BOW
  18. 4 points
    Hello again! Im working on new dungeon and its finally done!! Right now im working on monsters and effects. Here are first screens from the dungeon
  19. 4 points
    Vanilla Core r71480 is released! A few words about this release: This release brings a lot of unifying and more security options. I'm sorry that the development wasn't as fast as I wanted it to be. RL and stuff. And with that little time it's hard to test and as you may know I've had no options to debug or even test the code I was writing. But this is now gone since I have a working compile station. Also I have great news for those who really want to work with Windows. I'm working on a windows-working port for the source. Of course this won't be another branch or something. It'll be part of the main source. But please, don't expect it to be done ASAP since I have other things in my mind which I consider more important. As you may have noted most changes are about security. I want server-owners to have the option to add as much security as possible. It was the main goal in the earlierst revisions and will still be. This time we'll have a few things thanks to contributors from all over the world. I tried to mention them when it's fitting, if I missed someone, please immediately send me a pm and I'll add it! This release should help to reduce the problems that could occur when leaking databases and other stuff. I hope you enjoy it! Oh, and additionally I returned to include the qc-program into my bundled pre-built package. This way people without compiling vanilla core from source are able to use it at it's full extent. Note that this release still uses boost. Next release will drop boost entirely and declares it's implementation as deprecated. We don't need a library if everything we need is already supplied by newer c++ revisions. CHANGES from 70220 -> 71480 ~general stuff~ * fixed a bug with cancelling servertimers (thanks to Socialized and Yiv) * fixed crashes due to wrong Compiler flags under release mode (thanks to Damn) * cleaned a few code lines and rewrote some stuff + added unifying stuff to the core Unify-mode is a new mode which forces the encoding to be utf8. Note that this does NOT break backwards-compatibility and your locale is still set to the region you chose to have. So if you're running on locale/euckr (example) before, the core will still fetch it's files from that place like it did before. It only changes how the server core processes data internally and sends it to client/db. The advantages of utf-8 can be looked up, it'd be obvious. But since it affects the core in one way or another, I moved it to a CONFIG flag. ~Database changes (optional for you)~ + If you want to use utf-8 mode it's recommended to convert your whole database to utf-8 (you can use the utf_general_ci collate) + If you want to use the /su command with a customized passphrase per player you'll have to add a new column called 'passphrase' as varchar(45) and add the passphrase of the user as a mysql-Password (just like you'd add a Password to an account). ~CONFIG options~ + elevation_enable (bool, default false) Enables the elevation mode. This way you have to use the /su command along with the passphrase in order to get superuser access. The session ends with teleporting or relogging. Note that using the master-passphrase is only allowed in testserver unless elevation_use_key (see below) is enabled. + elevation_key (string, default 'vanilla') Sets the default passphrase if you want to use it. It's like a master-password for the su-system and works only + elevation_use_key (bool, default false) If enabled, it allows you to use the masterkey even without testserver being enabled. + interrupt_interval (int, max 32767) sets the time how long the player must wait until he can execute another command. This way you can prevent command spamming since all players/gms have to wait until the timer is over. Note that this does not count for admins, so GM_IMPLEMENTOR will not be affected by this! + pepper_key (string, default "peppertest12345") If you set this to anything else than "peppertest12345" it'll automaticall enable the pepper system. This way all passwords will be hashed with an additional phrase appended. This further enhances security. Note that all passwords should be encoded with the new pepper phrase. It works just like this: Instead of calling PASSWORD(userpass) it appends the pepper-phrase which results in this: PASSWORD(userpass + pepper_phrase). So be careful if you change this since your database must have valid entries, otherwise users will fail to log in. + MYSQL_PASSWORD_FUNCTION (string, default 'PASSWORD') this variable sets the name of the password-function that will be called when dealing with passwords. You can further enhance security this way if you define your own function to your database. You can for example first encode the passwords and then hash it. Note that if you change this value, your database must have a proper function that returns the encoded/hashed/whatever password out from plain text. If the function doesn't exist or your passwords aren't adapted to work with your custom function, login will fail! + unify_enable (bool, default false) Enables the unify-mode. This way the server forces utf-8 as it's encoding standard. Note: If you enable this, you'd change your database etc. to use utf-8 too! ~commands~ + su passphrase(string) Tries to elevate the player and grants him the permissions stored in gmlist after successfully elevating. Minimum rank: GM_PLAYER + promote user(string) gm_level(string, optional) First the command elevates the player. So if no gm_level is given, the player will receive the permissions he'd have if he elevates normally. If a gm_level is given (just type it like it's labeled, so if you want to give him high-wizard, type GM_HIGH_WIZARD) it'll overwrite the gm level for the current session (relog/teleport will remove it). Download Download (prebuilt): r71480 Download (source): r71480_source pass (for both): vanilla
  20. 4 points
    About drops, i can send you this when i finish it (gather drops info drop wiki, creates drops from it): v0.1 v0.2:
  21. 4 points
    Hi, I have worked on official like new elemental bonuses(strong against elec,fire,ice,wind,earth,dark), follow the guide below to add it to your server. Please like this topic if you find it useful! (C) Metin2 Guild wars - (If you're looking for a custom made metin2 systems in c++/python send me a pm). Screenshots: Let's begin! Server side: open service.h,add at the bottom: #define ELEMENT_NEW_BONUSES open length.h, look for: MAX_APPLY_NUM, }; add above: #ifdef ELEMENT_NEW_BONUSES APPLY_ATTBONUS_ELEC, APPLY_ATTBONUS_FIRE, APPLY_ATTBONUS_ICE, APPLY_ATTBONUS_WIND, APPLY_ATTBONUS_EARTH, APPLY_ATTBONUS_DARK, #endif in the same file replace enumERaceFlags with: enum ERaceFlags { RACE_FLAG_ANIMAL = (1 << 0), RACE_FLAG_UNDEAD = (1 << 1), RACE_FLAG_DEVIL = (1 << 2), RACE_FLAG_HUMAN = (1 << 3), RACE_FLAG_ORC = (1 << 4), RACE_FLAG_MILGYO = (1 << 5), RACE_FLAG_INSECT = (1 << 6), RACE_FLAG_FIRE = (1 << 7), RACE_FLAG_ICE = (1 << 8), RACE_FLAG_DESERT = (1 << 9), RACE_FLAG_TREE = (1 << 10), RACE_FLAG_ELEC = (1 << 11), RACE_FLAG_WIND = (1 << 12), RACE_FLAG_EARTH = (1 << 13), RACE_FLAG_DARK = (1 << 14), RACE_FLAG_ATT_ELEC = (1 << 15), RACE_FLAG_ATT_FIRE = (1 << 16), RACE_FLAG_ATT_ICE = (1 << 17), RACE_FLAG_ATT_WIND = (1 << 18), RACE_FLAG_ATT_EARTH = (1 << 19), RACE_FLAG_ATT_DARK = (1 << 20), }; open battle.cpp, look for: else if (pkVictim->IsRaceFlag(RACE_FLAG_ICE)) iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_ICE)) / 100; add below: #ifdef ELEMENT_NEW_BONUSES else if (pkVictim->IsRaceFlag(RACE_FLAG_ELEC)) iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_ELEC)) / 100; else if (pkVictim->IsRaceFlag(RACE_FLAG_WIND)) iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_WIND)) / 100; else if (pkVictim->IsRaceFlag(RACE_FLAG_EARTH)) iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_EARTH)) / 100; else if (pkVictim->IsRaceFlag(RACE_FLAG_DARK)) iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_DARK)) / 100; #endif open char.cpp, look for: case POINT_NORMAL_HIT_DEFEND_BONUS: add below: #ifdef ELEMENT_NEW_BONUSES case POINT_ATTBONUS_ELEC: case POINT_ATTBONUS_FIRE: case POINT_ATTBONUS_ICE: case POINT_ATTBONUS_WIND: case POINT_ATTBONUS_EARTH: case POINT_ATTBONUS_DARK: #endif in char.cpp, look for: PointChange(aApplyInfo[bApplyType].bPointType, iVal); add above: #ifdef ELEMENT_NEW_BONUSES case APPLY_ATTBONUS_ELEC: case APPLY_ATTBONUS_FIRE: case APPLY_ATTBONUS_ICE: case APPLY_ATTBONUS_WIND: case APPLY_ATTBONUS_EARTH: case APPLY_ATTBONUS_DARK: #endif in char.h, look for: }; enum EPKModes add above: #ifdef ELEMENT_NEW_BONUSES POINT_ATTBONUS_ELEC, POINT_ATTBONUS_WIND, POINT_ATTBONUS_EARTH, POINT_ATTBONUS_DARK, #endif in constants.cpp, look for: }; const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL] = {30, 40, 20, 8, 2}; add above: #ifdef ELEMENT_NEW_BONUSES { POINT_ATTBONUS_ELEC,}, { POINT_ATTBONUS_FIRE, }, { POINT_ATTBONUS_ICE, }, { POINT_ATTBONUS_WIND, }, { POINT_ATTBONUS_EARTH, }, { POINT_ATTBONUS_DARK, }, #endif now go into db source. open ProtoReader.cpp, look for: string arApplyType[] = { "APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED", "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT", "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL", "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP", "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD", "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW","APPLY_RESIST_FIRE", "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE", "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS", "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE", "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT", "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN", "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS", "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS","APPLY_NORMAL_HIT_DAMAGE_BONUS", "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS", "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN", "APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER", "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT", "APPLY_ATTBONUS_WOLF", "APPLY_RESIST_WOLF", "APPLY_RESIST_CLAW", "APPLY_ANTI_RESIST_MAGIC", "APPLY_ATTBONUS_ELECT", "APPLY_ATTBONUS_FIRE", "APPLY_ATTBONUS_ICE", "APPLY_ATTBONUS_WIND", "APPLY_ATTBONUS_EARTH", "APPLY_ATTBONUS_DARK" }; replace with: #ifdef ELEMENT_NEW_BONUSES string arApplyType[] = { "APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED", "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT", "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL", "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP", "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD", "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW","APPLY_RESIST_FIRE", "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE", "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS", "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE", "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT", "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN", "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS", "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS","APPLY_NORMAL_HIT_DAMAGE_BONUS", "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS", "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN", "APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER", "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT", "APPLY_ATTBONUS_WOLF", "APPLY_RESIST_WOLF", "APPLY_RESIST_CLAW", "APPLY_ANTI_RESIST_MAGIC", "APPLY_ATTBONUS_ELECT", "APPLY_ATTBONUS_FIRE", "APPLY_ATTBONUS_ICE", "APPLY_ATTBONUS_WIND", "APPLY_ATTBONUS_EARTH", "APPLY_ATTBONUS_DARK" }; #else string arApplyType[] = { "APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED", "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT", "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL", "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP", "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD", "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW", "APPLY_RESIST_FIRE", "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE", "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS", "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE", "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT", "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN", "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS", "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS", "APPLY_NORMAL_HIT_DAMAGE_BONUS", "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS", "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN", "APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER", "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT", "APPLY_ATTBONUS_WOLF", "APPLY_RESIST_WOLF", "APPLY_RESIST_CLAW", "APPLY_ANTI_RESIST_MAGIC", }; #endif Compile. Client side: open locale_inc.h, add at the bottom: #define ELEMENT_NEW_BONUSES open PythonItemModule.cpp, look for: #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM add above: #ifdef ELEMENT_NEW_BONUSES PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ELEC", CItemData::APPLY_ATTBONUS_ELEC); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_FIRE", CItemData::APPLY_ATTBONUS_FIRE); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ICE", CItemData::APPLY_ATTBONUS_ICE); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_WIND", CItemData::APPLY_ATTBONUS_WIND); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_EARTH", CItemData::APPLY_ATTBONUS_EARTH); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DARK", CItemData::APPLY_ATTBONUS_DARK); #endif open Packet.h,look for: POINT_MIN_WEP = 200, add above: #ifdef ELEMENT_NEW_BONUSES POINT_ATTBONUS_ELEC, POINT_ATTBONUS_WIND, POINT_ATTBONUS_EARTH, POINT_ATTBONUS_DARK, #endif open itemData.h, look for: MAX_APPLY_NUM, }; enum EImmuneFlags add above: #ifdef ELEMENT_NEW_BONUSES APPLY_ATTBONUS_ELEC, APPLY_ATTBONUS_FIRE, APPLY_ATTBONUS_ICE, APPLY_ATTBONUS_WIND, APPLY_ATTBONUS_EARTH, APPLY_ATTBONUS_DARK, #endif go to root pack. open uiToolTip.py look for: } ATTRIBUTE_NEED_WIDTH = { add above: item.APPLY_ATTBONUS_ELEC : localeInfo.TOOLTIP_APPLY_ATTBONUS_ELEC, item.APPLY_ATTBONUS_FIRE : localeInfo.TOOLTIP_APPLY_ATTBONUS_FIRE, item.APPLY_ATTBONUS_ICE : localeInfo.TOOLTIP_APPLY_ATTBONUS_ICE, item.APPLY_ATTBONUS_WIND : localeInfo.TOOLTIP_APPLY_ATTBONUS_WIND, item.APPLY_ATTBONUS_EARTH : localeInfo.TOOLTIP_APPLY_ATTBONUS_EARTH, item.APPLY_ATTBONUS_DARK : localeInfo.TOOLTIP_APPLY_ATTBONUS_DARK, go to dump_proto folder, open ItemCSVReader.cpp,look for: #include "ItemCSVReader.h" add below: #define ELEMENT_NEW_BONUSES search for: string arApplyType[] = {"APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED", "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT", "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL", "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP", "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD", "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW","APPLY_RESIST_FIRE", "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE", "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS", "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE", "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT", "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN", "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS", "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS","APPLY_NORMAL_HIT_DAMAGE_BONUS", "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS", "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN", "APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER", "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT", "APPLY_ATTBONUS_WOLF", "APPLY_RESIST_WOLF", "APPLY_RESIST_CLAW","APPLY_ANTI_RESIST_MAGIC","APPLY_ATTBONUS_ELECT","APPLY_ATTBONUS_FIRE","APPLY_ATTBONUS_ICE","APPLY_ATTBONUS_WIND","APPLY_ATTBONUS_EARTH","APPLY_ATTBONUS_DARK"}; replace with: #ifdef ELEMENT_NEW_BONUSES string arApplyType[] = {"APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED", "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT", "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL", "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP", "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD", "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW","APPLY_RESIST_FIRE", "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE", "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS", "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE", "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT", "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN", "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS", "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS","APPLY_NORMAL_HIT_DAMAGE_BONUS", "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS", "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN", "APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER", "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT", "APPLY_ATTBONUS_WOLF", "APPLY_RESIST_WOLF", "APPLY_RESIST_CLAW","APPLY_ANTI_RESIST_MAGIC","APPLY_ATTBONUS_ELECT","APPLY_ATTBONUS_FIRE","APPLY_ATTBONUS_ICE","APPLY_ATTBONUS_WIND","APPLY_ATTBONUS_EARTH","APPLY_ATTBONUS_DARK"}; #else string arApplyType[] = { "APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED", "APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT", "APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL", "APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP", "APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD", "APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW", "APPLY_RESIST_FIRE", "APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE", "APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS", "APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE", "APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT", "APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN", "APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS", "APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS", "APPLY_NORMAL_HIT_DAMAGE_BONUS", "APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS", "APPLY_PC_BANG_EXP_BONUS", "APPLY_PC_BANG_DROP_BONUS", "APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN", "APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER", "APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT", "APPLY_ATTBONUS_WOLF", "APPLY_RESIST_WOLF", "APPLY_RESIST_CLAW", "APPLY_ANTI_RESIST_MAGIC", }; #endif inside locale folder, open locale_game.txt, add in the end: TOOLTIP_APPLY_ATTBONUS_ELEC Strong against Lightning +%d%% SA TOOLTIP_APPLY_ATTBONUS_FIRE Strong against Fire +%d%% SA TOOLTIP_APPLY_ATTBONUS_ICE Strong against Ice +%d%% SA TOOLTIP_APPLY_ATTBONUS_WIND Strong against Wind +%d%% SA TOOLTIP_APPLY_ATTBONUS_EARTH Strong against Earth +%d%% SA TOOLTIP_APPLY_ATTBONUS_DARK Strong against Dark +%d%% SA Compile and that's it! to use it in item_proto.txt you can use: APPLY_ATTBONUS_ELEC, APPLY_ATTBONUS_FIRE, APPLY_ATTBONUS_ICE, APPLY_ATTBONUS_WIND, APPLY_ATTBONUS_EARTH, APPLY_ATTBONUS_DARK Enjoy!
  22. 4 points
  23. 3 points
  24. 3 points
    Hi there devs, A few months ago I've made a solution for the well-known problems with the character select/logging out which is: once you are about to change character, the stats (ht, st, playtime, etc...) and parts (armor/head) don't update properly: you have to do it twice to see the correct values/items when a character is logging out from the game near to your character you can see a fast equipment change (the character is unequipping everything from him/herself) Explanation for the problems The usual coding video The fix GL for the setup and if you have further question(s), remark(s), or anything that you want to ask or suggest, feel free to post it here, or send it in PM. If you get error(s) please upload the affected (and edited) file(s) to http://pastebin.com/ and link it in your post, to make my work easier and probably I will be able to help you only in one post, so please spare me from asking basic requests like "Could you upload...". Thank you Have a nice day, ~masodikbela
  25. 3 points
    Greetings! The new beta is finished! I'm proud to present r71480. This time a few things have changed. And in this revision, we have a lot of new stuff. In the following I'll provide the download link along with the things I'd love you to test. *** DISCLAIMER *** The core is marked as stable. Anyway, I'll make it clear that I'm not responsible if you use this core since I can't give a warranty that I fixed every single security breach that potentially could happen - that's totally impossible. But we all together made the source great and secure so every public issue is fixed by now. You can use it in production environments now. So... What's new? boot-trigger for quests With this you can execute commands, timers, and all the stuff you'd like to have just on boot-time! revisioning of the 'unique class' (+ a ton of posibilities) added the functionality to create unique-groups temp-Variables for quests upgraded all libs moved completely to the newest clang version fixed some big security issues in the source code fixed the ingame ban and unban commands unified tables and gave them a new way: unify! file clean-up revisioned the makefiles gave the source a new, easier structure removed all external dependencies just install them by ports.. No external-folder necessary! removed 'boost' dependency (no boost lib needed yay) partial implementation of the wolfman (claws etc. are added, needs review) And basically everything that has been offered in the earlier versions of the vanilla core. Nothing should be missing. And if you miss something, just feel free to tell me! What needs testing? There are few things I'd love you to test out: Please check if the core is vulnerable to any security breaches you may know (also the public ones, don't know if I missed something) Please test out the new features! I'd really love to know if the new unique-functions and the boot-trigger does the job. Explanation to new features: Unique with container support Unique has evolved! This time you have a few new possibilities. Don't know what unique is? Here's a short explanation: With the unique-questfunctions you can spawn or set mobs, npcs and now even players to have a unique name. This name is stored into a unique-container. You can access this container and get all the vid's by their unique name (also called: the key) So for example you can spawn a boss with a key. Later on you can check if this specific mob has been killed or not. Or you can set his hp on-the-fly. There's basically no limits! And now with the revised system you'll have even more options. The new unique system works with containers. By default there are two containers reserved: __DEFAULT__ and __CHARACTER__. The first one is for all the basic stuff. And the second one is reserved for players. Now, as you may have noticed, there's a default one which means that the container-stuff is optional. If you just use the unique functions without specifying a container, it'll just use the default stuff. But you CAN use your own containers just as you want to. You can create, delete and list all the containers running. There is a list with all the quest-functions down below. boot-trigger This is pretty self-explanatory. With this release you can use "when boot begin" to specify a block of code that will be executed once the core has been booted. temp-variables With the new temp-variables you can set and remove player-specific variables. They are stored in the core and not written to disk or database. So be careful because they might get dropped once the core shutdowns. It's just a quick storage for people who want to have something like a cache for quick access. new quest functions nil unique.spawn_unique(string key, int vnum, string pos=unused, string container=optional) nil unique.set_unique(string key, int vid, string container=optional) nil unique.purge_unique(string key, string container=optional) nil unique.kill_unique(string key, string container=optional) bool unique.is_unique_dead(string key, string container=optional) int unique.get_hp_perc(string key, string container=optional) nil unique.set_def_grade(string key, int def, string container=optional) nil unique.set_hp(string key, int hp, string container=optional) nil unique.set_max_hp(string key, int maxhp, string container=optional) int unique.get_vid(string key, string container=optional) bool unique.exists(string key, string container=optional) table unique.get_container_list() this prints out all the unique containers table unique.get_container_list(string key) this prints out all the vids in the unique-container "key" nil unique.remove_container(string key) removes a whole container (flushes it when called on standard containers) nil pc.temp_var_set(string key, string value) string pc.temp_var_get(string key) nil pc.temp_var_delete(string key) Thanks a lot for participating! If there are any questions, this is the topic related to it. Further releases will be made public here too! If you'd like to contribute, just post code additions here. Changelog older changelogs Download Useful information: All necessary libs are included. If you're building your own vanilla binary you'll first have to move into every project of the Internal directory and rebuild the libs. The main makefile is not adapted yet, I was too lazy (ps: Still too lazy!) rev 71480 see this post: rev 70220 STABLE Core Sourcecode rev 70140 BETA Core Sourcecode Password for the archive is: vanilla Password for older source archives: vanillamt2 Best Regards Vanilla
  26. 3 points
    Hi, I've released magc cave dungeon so i'm releasing one of the bosses for free. The model is took from blade and soul, i just edited it a little for metin. You need granny 2.9 for this boss. Pack including model + effects. You can find the boss at 8:25 Download
  27. 3 points
  28. 3 points
  29. 3 points
  30. 3 points
    Of course it isn't problem. But let me to inform you; on the official, they are using a new part value stores the vnum of pendant, and than querying the values from it. int *__cdecl playerGetElementByVID(int a1, int a2) { int *result; // eax int iPendantVnum; // eax signed int iN; // [esp+8h] [ebp-1Ch] char tItemApply; // [esp+Ch] [ebp-18h] char *pPendantItemData; // [esp+14h] [ebp-10h] int iVID; // [esp+18h] [ebp-Ch] _DWORD *pDestInstance; // [esp+1Ch] [ebp-8h] int _dummy; // [esp+20h] [ebp-4h] if ( !PyTuple_GetLong(a2, 0, &iVID) ) return (int *)Py_BadArgument(); _dummy = 0; pDestInstance = (_DWORD *)(*(int (__thiscall **)(signed int, int))(MEMORY[4] + 8))(4, iVID);// CPythonCharacterManager::Instance().GetInstancePtr(iVID); if ( !pDestInstance ) return python27_Py_BuildValue((int)"i", 0); iPendantVnum = CInstanceBase::GetPart(pDestInstance, 6);// New PART_PENDANT to querying the equipped item of the target if ( !CItemManager::GetItemDataPointer(0, iPendantVnum, &pPendantItemData) ) return python27_Py_BuildValue((int)"i", 0); iN = 0; while ( 2 ) { if ( iN >= 3 ) return python27_Py_BuildValue((int)"i", 0); CItemData::GetApply(pPendantItemData, iN, (int)&tItemApply); switch ( tItemApply.bType ) { case 99: // APPLY_ENCHANT_ELECT result = python27_Py_BuildValue((int)"i", 2048); break; case 100: // APPLY_ENCHANT_FIRE result = python27_Py_BuildValue((int)"i", 4096); break; case 101: // APPLY_ENCHANT_ICE result = python27_Py_BuildValue((int)"i", 8192); break; case 102: // APPLY_ENCHANT_WIND result = python27_Py_BuildValue((int)"i", 16384); break; case 103: // APPLY_ENCHANT_EARTH result = python27_Py_BuildValue((int)"i", 32768); break; case 104: // APPLY_ENCHANT_DARK result = python27_Py_BuildValue((int)"i", 65536); break; default: ++iN; continue; } break; } return result; }
  31. 3 points
    use sys_err function server side(char.cpp) and print in python(game.py) to find bElement value. it should be between 1 and 6 for elemental mobs. if it's not in this range then you did something wrong. Also, make sure in mob_proto server side the mobs race is with ATT_ for example: ATT_ICE, ATT_FIRE, ATT_WIND etc etc
  32. 3 points
    Hello, here i have create last day this tutorial for npc ripping to Export new npc's from another game. is for german guys but you can download the files (npc) to make own npc's. Ace
  33. 2 points
  34. 2 points
    I seen this on 2089 game (3-4 years ago), but is not actually a bug and the "fix" is not in server source. Check item_proto -> GainSocket collumn (for accessories need to pe 0) =))) I don't know why you try to fix everything on server source. To look smart ? if (table->bGainSocketPct) item->AlterToSocketItem(table->bGainSocketPct);
  35. 2 points
  36. 2 points
    Poly Marble Shop It's simple system which allows players to buy marbles directly from gui. You can set price for each marble. Remember to set same price in client and server. Download & Scan http://www119.zippyshare.com/v/WMw5CLGZ/file.html https://www.virustotal.com/#/file/6350a3180977189c454a70217461ce1aa061ac9845b79e3412079e4d313b5e07/detection
  37. 2 points
    // Open service.h and add #define ENABLE_VNUMRANGE // 1. Open ClientManagerBoot.cpp and earch enum IProtoT and after , value5 add #ifdef ENABLE_VNUMRANGE , vnum_range #endif // 2. Search bool CClientManager::InitializeItemTableFromDB() and after , value5" add #ifdef ENABLE_VNUMRANGE " , vnum_range" #endif // or replace the function with bool CClientManager::InitializeItemTableFromDB() { char query[2048]; fprintf(stdout, "Loading item_proto from MySQL\n"); snprintf(query, sizeof(query), "SELECT vnum, type, subtype, name, %s, gold, shop_buy_price, weight, size," " flag, wearflag, antiflag, immuneflag+0, refined_vnum, refine_set, magic_pct," " socket_pct, addon_type, limittype0, limitvalue0, limittype1, limitvalue1," " applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2," " value0, value1, value2, value3, value4, value5" #ifdef ENABLE_VNUMRANGE " , vnum_range" #endif " FROM item_proto%s ORDER BY vnum;", g_stLocaleNameColumn.c_str(), GetTablePostfix() ); // 3. Search VERIFY_IFIELD(IProto::addon_type, item_table->sAddonType); and after add #ifdef ENABLE_VNUMRANGE VERIFY_IFIELD(IProto::vnum_range, item_table->dwVnumRange); #endif // 4. Open player.item_proto, select Design Table and add `vnum_range` tinyint(4) NOT NULL DEFAULT '0',
  38. 2 points
    Support Character System by Anyone Pentru ca mi se falfaie de el ... Mia vandut systemul dupa la durut fix in p.... Si akm ma tine la block pe motivul ca sunt reseler ... Ca sa vada cu adevarat ca nu sunt reseler il postez in mod gratuit !! Si nu va luati dupa el ca nu e complect etc ... Numai minciuni ... Pot face dovada ca lam cumparat de la el !! Bucurativa de el Numai bine [hidden]http://darghedon.com/Shaman.zip[/hidden] Parola Arhiva 4ny0n3dev@!#SupportSystemR
  39. 2 points
    Hi! I didnt release something more useful long time.. So today i'm releasing new weapon set for free. The package including weapons for all 5 characters. - Twohand sword + normal swrod (warrior) - Axe (sura) - Bow + dagger (assassin) - Fan + bell (shaman) - Claw (lycan) Also my new map magic cave is coming (not for free), this is one of the reasons why im releasing this set too... So stay tuned! Download
  40. 2 points
  41. 2 points
  42. 2 points
    @metin2-factory Just try that code what you paste
  43. 2 points
  44. 2 points
    Just a visual error. If is that important for you: ## uiaffectshower.py ## Search: if level==0: self.horseImage=None else: ## Replace with: if level==0: self.horseImage=None self.__ArrangeImageList() else:
  45. 2 points
  46. 2 points
    Yo, This may be useful to someone. Preview: Download Software: http://mysticcoder.net/mysticthumbs.aspx#download
  47. 2 points
    I found this bug at a player on my server and I managed to do some tests in his computer to find the problem. He couldn't open the client because of an error NO_APPROPRIATE_DEVICE To fix the problem comment the lines from below(binary src): If you have a better solution please share it with the community. Note: The player had a laptop with 1360x768 resolution and this was his minimum resolution (he didn't even have 800x600)
  48. 2 points
    Hi to everyone! Halloween is again here after 1 year and i've made this pet for free! No bullshits and enjoy this pet! Download here
  49. 2 points
  50. 1 point
    Using the pkg system isn't as effective. It's faster but it's not better. You'd compile the ports on your machine. I for myself experienced a lot of trouble especially when installing compilers via pkg. Additionally you don't need everything, just like in devil. And you sure know that we use clang and some ports may or may not use it depending on the system you're using? We don't need to link to gcc-prebuilt packages...
×