Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/13/20 in all areas

  1. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Hello , this is one of my first systems that i made for my pvp server 1-2 years ago and since then i was using it and it has no problems. I'm not a system's developer i only made things for my servers and this one i want to share with you.
    2 points
  2. M2 Download Center Download Here ( Internal ) Hello i seen it's an old post about this serverfiles but all links is down and i seen people still want this serverfile so if saved it on my mega account i can share it with all xD Here it is the serverfile link SF Rain2007 for passwords,installer passowrd is classic Client For this SFile Metin2US 2007 Client! Please don't delete this post i seen the original post about rain files and all links is down so i decided to Reupload it!
    1 point
  3. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Cheque system full ~ like official The tutorial was remade and uploaded to github Monetary unit: Won - Not compatible with long long gold - Max won 999 (like official) - Added support for OfflineShop(great) Best regards.
    1 point
  4. M2 Download Center Download Here ( Internal ) Hi, here I publish my edit of the public Render Target System. I hate it, when people earn money with public systems. Preview: [Hidden Content] DL: [Hidden Content] Original Thread [Hidden Content]
    1 point
  5. M2 Download Center Download Here ( Advance Refine Systems ) Download Here ( Cheque System ) Download Here ( Soul Bind System ) Hello everyone ! I've been away from metin2 for about 6 months and i've get back from less then a month and made thoes systems , i've start selling them but i didn't sell it to anyone and i got bored from metin2 again so i'm going to release it and go off from metin2 for ever . about the Advance Refine System here some info: so download and have fun [Hidden Content]
    1 point
  6. Hey, In different Games always Ninja's have the ability to hide example in Wow when Rogue hide the Monsters losing their aggro, but in Metin2 when you hide with the Skill Eunhyung the Monster still have aggro on you, this seems little wrong, Hided and Monster still can reach you? Maybe because you can use Poison / Bleeding / Fire that make this little bit difficult, but i think i come up with a solution. I think the only part that missing is when you clean the Target from the Monster to move again back but is not really necessary. * I Added also for GMs in /in command the function. In the Tutorial bellow, you can find the Function ForgetMyAttacker with my improvements.
    1 point
  7. As promised, here's to you: 1 - NullPtr + NewCase on famous Item MYTHICAL_PEACH char_item.cpp Find for: case 71107: Add below of this line: quest::PC* pPC = quest::CQuestManager::instance().GetPC(GetPlayerID()); This prevent: if (!pPC) return false; In your database there is an item like 71107, add the other case for it. case 71107: case 39032: 2 - Warp_all_to_village function was keeping also STAFF out. Replace the struct like this in questlua_global.cpp struct FWarpAllToVillage { FWarpAllToVillage() {}; void operator()(LPENTITY ent) { if (ent->IsType(ENTITY_CHARACTER)) { const LPCHARACTER ch = (LPCHARACTER) ent; if (ch) { if (ch->IsPC() && !ch->IsGM()) { const auto bEmpire = ch->GetEmpire(); if (!bEmpire) return; ch->WarpSet( g_start_position[bEmpire][0], g_start_position[bEmpire][1] ); } } } } }; 3 - Enable Syserr also in LUA. In file questlua_global.cpp find for int _syserr(lua_State* L) or ALUA(_syserr) If you don't have it or if you have, replace or insert this function . int _syserr(lua_State* L) { if (!lua_isstring(L, 1)) return 0; sys_err("From LUA: %s", lua_tostring(L, 1)); /* PC* pc = CQuestManager::instance().GetCurrentPC(); if (!pc) return 0; LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (!ch) return 0; ch->ChatPacket(CHAT_TYPE_INFO, "QUEST_SYSERR %s", lua_tostring(L, 1)); */ return 0; } OR int _syserr(lua_State* L) { if (!lua_isstring(L, 1)) return 0; sys_err("From LUA: %s", lua_tostring(L, 1)); PC* pc = CQuestManager::instance().GetCurrentPC(); if (!pc) return 0; LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (ch) ch->ChatPacket(CHAT_TYPE_INFO, "QUEST_SYSERR %s", lua_tostring(L, 1)); return 0; } As you can see I commented the char part, because I suggest to use without! For server_timer and automatic things without char entity etc. Don't forget to add the function in RegisterGlobalFunctionTable and quest_functions file. 4 - Fix of bonus application like Official on special mineral slots. File item.cpp find for: if (0 != accessoryGrade) replace the if statement with this for 2 bonus only: if (0 != accessoryGrade && i < ITEM_APPLY_MAX_NUM - 1) UPDATE: From 2020-21 in official site, the bonus are shown and apply x3. So if you want to have like official, just leave c++ default and fix in python the show of the 3rd bonus. 5 - item with remain time stay into a shop, time shows: "Remain time 0 Sec.". In file uitooltip.py replace these functions: def AppendUniqueItemLastTime(self, restMin): def AppendMallItemLastTime(self, endTime): Like this: def AppendUniqueItemLastTime(self, restMin): if restMin > 0: restSecond = restMin*60 self.AppendSpace(5) self.AppendTextLine(localeInfo.LEFT_TIME + " : " + localeInfo.SecondToHM(restSecond), self.NORMAL_COLOR) def AppendMallItemLastTime(self, endTime): if endTime > 0: leftSec = max(0, endTime - app.GetGlobalTimeStamp()) self.AppendSpace(5) self.AppendTextLine(localeInfo.LEFT_TIME + " : " + localeInfo.SecondToDHM(leftSec), self.NORMAL_COLOR)
    1 point
  8. M2 Download Center Download Here ( Internal ) Hey, Today i will share how can you change the Whitemark in Minimap with a new one. I saw that there is a topic in Questions & Answers but seems not complete so. Minimap Whitemark - New Download:
    1 point
  9. Install VS 2008, then VS 2013 can use that toolset too.
    1 point
  10. skype : hamdou5551 i recommand this guy!
    1 point
  11. I am mapper and 3d export from italy. I can help you @Asso
    1 point
  12. I don't like so much Lua, but i did something fast, i hope that's what you wanted. Replace npc.get_level() with npc.get_level0() if you use marty source. quest common_drop_quest begin state start begin function CanDrop(pc_level, npc_level, isPC) local DIFF_LEVEL_CONST = 10 return not isPC and math.abs(pc_level - npc_level) <= DIFF_LEVEL_CONST end function GetSettings() local PLAYER_MAX_LEVEL_CONST = 105 return { { 20, 40, {27001, 27001, 27001, 27001, 27001, 27001} }, -- from 20 to 39 { 40, 60, {27002, 27002, 27002, 27002, 27002, 27002} }, -- from 40 to 59 { 60, 80, {27003, 27003, 27003, 27003, 27003, 27003} }, -- from 60 to 79 { 80, 100, {27004, 27004, 27004, 27004, 27004, 27004} }, -- from 80 to 99 { 100, PLAYER_MAX_LEVEL_CONST + 1, {27005, 27005, 27005, 27005, 27005, 27005} }, -- from 100 to PLAYER_MAX_LEVEL_CONST } end when kill with common_drop_quest.CanDrop(pc.get_level(), npc.get_level(), npc.is_pc()) begin local common_drop_table = common_drop_quest.GetSettings() for i = 1, table.getn(common_drop_table) do local dropLevelMin, dropLevelMax, dropItemTable = unpack(common_drop_table[i]) local dropItemVnum = dropItemTable[number(1, table.getn(dropItemTable))] if pc.get_level() >= dropLevelMin and pc.get_level() < dropLevelMax then if number(1, 10000) <= 100 then game.drop_item_with_ownership(dropItemVnum) break end end end end end end
    1 point
  13. I think it is better to make the item render target appear when pressing "alt + right click or left click or what ever" to the item Anyway thank you for sharing
    1 point
  14. @V0lvox i have this error
    1 point
  15. NextUpdate will include Hair [Hidden Content] UiToolTip-Fix_2.0.txt UiToolTip-Fix_3.0.txt 2.0 -> Rüstung Costüme/Waffen 3.0 -> Hair bug Fix + On/Off Render Target on Gameoptions
    1 point
  16. Bug-Fix for all others. Preview is now only on Items in Inventory UiToolTip-Fix.txt
    1 point
  17. M2 Download Center Download Here ( Internal ) Hi everyone! So, after serveral days of searching a tool that could change the texture path of a .gr2 file, I found the tool(probably all of you know it, the texture changer by marv). After that I tried to change the texture paths of some gr2 models of a weapon, and guess what, it didn't work. I'm gonna reupload the file, because I didn't seen it on metin2dev, and I'm gonna teach you how to use it. First of all, I don't know about others, but for me it didn't work to change anything with this (I'm running windows 7 x64 bit). Some of guys told me that this "texture changer" works only on windows 7 x86 bit, so I reinstalled my windows(I really needed that tool), of course, it didn't work either way. So, go in Start and search cmd, and run it. After the cmd started you'll see a path right there C:\Users\Name (Instead of Name you'll have your username of computer administrator, or the account you're logged in), now that's the path where we can work with the tool. PAY ATTENTION!!! IF YOU START THE TOOL IN OTHER FOLDER INSTEAD OF C:\Users\Name THE TOOL WILL NOT WORK, AND YOU WILL NOT BE ABLE TO SAVE THE NEW MODEL. Exctract all the files from the archive(I'll post it below), and start Metin2TextureChanger.exe. Now click "Load" to choose a gr2 file you want to change texture path, BUT, the model name can't have spaces in name(devil sword.gr2 for example, it's wrong, the tool won't read it, and you'll not be able to save your new gr2 model), so if you want to change for example devil sword.gr2 you need to rename it into devil_sword.gr2 or devilsword.gr2 or any other name without spaces betwen. Where is "Neuer Texturpfad" we will chose the new path for texture, for example d:\ymir work\test\devil_sword_blue.dds , there you can choose any other path, but you can't modify "d:\ymir work" or you won't be able to see the weapon/armour in-game. Now we save the file wherever we want, it doesn't matter, this way must work for everybody. AGAIN, THIS TOOL WASN'T MADE BY ME. And I made this post because I've searched many days a tool that would work, but neither didn't work, and this tool didn't work for me either just when I used this method. So, this post is for guys who had the same problem like me (they had the tool, but couldn't save the new model) that's why I wanted to help them, and any other people who weren't been able to use it. And about the other tool I've found on this forum, the tool "made" by thunder-core, I didn't find that tool satisfying, it worked, but after the new model was made, I wasn't been able to import it in 3d max, or to convert the model from file format revision 7 to 6. So you were basicaly forced to upgrade your client to granny 2.9, and I found that inconvenient, because, I don't know about others, but I don't use source for binary, and because of that it's imposible to see the model in-game. And of course, the new model you've created, with the tool in attachement, is revision 7, so you need the new granny if you want to see it in-game, but you can use the converter from archive to convert from revision 7, to revision 6 (old), and you'll be able to see it in-game. If you already see it in-game, you don't need to use the converter. If you found this post helpful I'm glad I could help you.
    1 point
  18. Fix Dungeon count monsters: Dungeon.cpp struct FCountMonster { int n; FCountMonster() : n(0) {}; void operator()(LPENTITY ent) { if (ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER ch = (LPCHARACTER) ent; if (ch->IsMonster() || ch->IsStone())//FIX n++; } } }; (Function was keeping also NPC, it could make you ugly problems). Fix Dungeon memory usage: namespace { struct FNotice { FNotice(const char * psz) : m_psz(psz) { } void operator() (LPENTITY ent) { if (ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER ch = (LPCHARACTER) ent; if (ch->IsPC()) //FIX ch->ChatPacket(CHAT_TYPE_NOTICE, "%s", m_psz); } } const char * m_psz; }; } Just 2 errors. I hope that it'll be useful
    1 point
  19. M2 Download Center Download Here ( Internal ) Hi devs, this is rather nothing than something and I am not really sure if somene's done it earlier but I am sure that it could be a nice improvement for those who are into mapping just like me. The archive contains a few .mdatr files of buildings from the devils_dragon_update that I improved. From now on you will be able to walk through the gazebo, to visit some of the tents and to get closer to the buildings in general. I might be sharing a lot more stuff related to mapping in the future. Credits goes to Ace for a nice collision HowTo. Enjoy! svndbvnv
    1 point
  20. Hello, let's start! 1- char_item.cpp Find for double ";;" It's ok for compiler but not good for other things that may happen. 2- On bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell) Find: if (iWearCell < 0) return false; Add below: //FIX BLOCK MARRIAGE ITEMS WHILE RIDING if (iWearCell == WEAR_BODY && IsRiding() && (item->GetVnum() >= 11901 && item->GetVnum() <= 11914)) //Marriage Armors { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?????????????????????????????")); return false; } if (iWearCell == WEAR_WEAPON && IsRiding() && (item->GetVnum() == 50201)) //Marriage Weapon { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?????????????????????????????")); return false; } 3- SMALL PREVENTS ON questlua_global.cpp int _clear_server_timer(lua_State* L) { CQuestManager & q = CQuestManager::instance(); const char * name = lua_tostring(L, 1); DWORD arg = (DWORD) lua_tonumber(L, 2); if (name && arg) q.ClearServerTimer(name, arg); else sys_err("LUA PREVENT: Wrong argument on ClearServerTimer!"); return 0; } int _char_log(lua_State * L) { CQuestManager& q = CQuestManager::instance(); LPCHARACTER ch = q.GetCurrentCharacterPtr(); DWORD what = 0; const char* how = ""; const char* hint = ""; if (lua_isnumber(L, 1)) what = (DWORD)lua_tonumber(L, 1); if (lua_isstring(L, 2)) how = lua_tostring(L, 2); if (lua_tostring(L, 3)) hint = lua_tostring(L, 3); if (ch) LogManager::instance().CharLog(ch, what, how, hint); else sys_err("LUA PREVENT: !ch on _char_log!"); return 0; } 4- FIX ISSUE ON WAR: battle.cpp Find: battle_is_attackable Must be like this: if (victim->IsDead() || victim->IsObserverMode()) return false; if (ch->IsStun() || ch->IsDead() || ch->IsObserverMode()) return false; Hope it'll be useful.
    1 point
  21. M2 Download Center Download Here ( Internal ) Hello, I publish the light version of my ProtoReader here, the light version has one functionality. It converts client item_proto and mob_proto the their server version Input: item_proto mob_proto Output: item_names.txt item_proto.txt mob_names.txt mob_proto.txt Its fully automated just double click on it when its in the same folder as the item_proto and mob_proto. It works like dump_proto but in reverse. Attention! Not every value is included in the clientside proto tables it could happen that you have to change some values on your own. ProtoReader is for old item_proto files (before dragon soul (dragon stone alchemy)). ProtoReaderNewFormat is for the current files. Virustotal: [Hidden Content] You find the download in the attachments. When you like my work and this tool, go and visit: I might also do a Pro Version with some other Features like clientside proto to xml or sql or sql to server item_proto and so
    0 points
  22. what settings do you have that you need to use a very old toolset? And why wouldn't that be possible with more recent toolsets?
    0 points
  23. Btw, instead of removing the calculation, i would set a MIN-MAX value for duration of stun flag. So, let's take a look how the duration is calculated for POINT_PARTY_BUFFER_BONUS. iDur += m_pkChr->GetPoint(POINT_PARTY_BUFFER_BONUS); m_iLeadership = Leader skill ship skill level which is increased by (book vnum: 50301, 50302, 50303) Let's take a example, a warrior, skill group 1. CHARACTER::GetSkillPowerByLevel << CTableBySkill::GetSkillPowerByLevelFromType idx = 0 * 2 + 1 - 1 = 0 skilllevel = m_iLeadership m_iLeadership = 40 (Skill Perfect Master) // 0 5 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 50 52 54 56 58 60 63 66 69 72 82 85 88 91 94 98 102 106 110 115 125 125 125 125 125 m_aiSkillPowerByLevelFromType[0][40] = 125 int iBonus = (int) (5 + 45 * k); float k = (float) ch->GetSkillPowerByLevel( MIN(SKILL_MAX_LEVEL, m_iLeadership ) ) / 100.0f; k = 125 / 100 = 1.25 iBonus = 5 + 45 * 1.25 = 5 + 56.5 (converted to integer will be 61) leadership Set as attacker Set as berserker Set as melee Set as blocker Set as defender Set as wizzard Image G1 +59 AP +5 AS MaxHP +1.239 Length of spell: +41 From P on From G6 on G2 +61 AP +5 AS MaxHP +1.282 Length of spell: +43 From P on From G6 on G3 +62 AP +5 AS MaxHP +1.326 Length of spell: +44 From P on From G6 on G4 +64 AP +5 AS MaxHP +1.369 Length of spell: +45 From P on From G6 on G5 +66 AP +5 AS MaxHP +1.413 Length of spell: +47 From P on From G6 on G6 +68 AP +5 AS MaxHP +1.471 Length of spell: +49 From P on MaxMP +613 G7 +71 AP +6 AS MaxHP +1.529 Length of spell: +50 From P on MaxSP +637 G8 +73 AP +6 AS MaxHP +1.587 Length of spell: +52 From P on MaxSP +661 G9 +76 AP +6 AS MaxHP +1.645 Length of spell: +54 From P on MaxSP +685 G10 +79 AW +6 AG MaxHP +1.717 Length of spell: +56 From P on MaxSP +715 P +85 AW +7 AG MaxHP +1.862 Length of spell: +61 Defence: +42 MaxSP +775 That means 61 seconds of duration are getted from the party role bonus, so you can set a limit. // Set a min-max value for party role bonus just when flag is stun. const uint16_t iMaxStunDuration = 30; if (IS_SET(m_pkSk->dwFlag, SKILL_FLAG_STUN)) { iDur += MINMAX(static_cast<int>(m_pkSk->kDurationPoly2.Eval()), m_pkChr->GetPoint(POINT_PARTY_BUFFER_BONUS), iMaxStunDuration); } else { // SLOW, FIRE_CONT, POISON, BLEEDING will still be working with the default calculation. iDur += m_pkChr->GetPoint(POINT_PARTY_BUFFER_BONUS); }
    0 points
  24. I didn't tested that "bug", but you can disable the calculation from char_skill.cpp. (not tested) iDur += m_pkChr->GetPoint(POINT_PARTY_BUFFER_BONUS); By change it with: // Ignore the party role bonus just for stun flag. // SLOW, FIRE_CONT, POISON, BLEEDING will still be working. if (!IS_SET(m_pkSk->dwFlag, SKILL_FLAG_STUN)) iDur += m_pkChr->GetPoint(POINT_PARTY_BUFFER_BONUS);
    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.