Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/18/21 in all areas

  1. M2 Download Center Download Here ( Internal ) The textures have alpha channel ready made (specular). It does not contain icons, make them right from the picture above. Download
    4 points
  2. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content]
    1 point
  3. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content]
    1 point
  4. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Python-Code-Translator-2-to-3 Is a Python program that reads Python 2.x source code and applies a series of fixers to transform it into valid Python 3.x code that works on all versions (py2.x - py3.x). The standard library contains a rich set of fixers that will handle almost all code. A flexible and generic library, so it is possible to write your own fixers based on your purposes. Warning: This tool purpose wasn't for doing the transition to python3, is just for the IDE purpose. INSTALLATION [Hidden Content] USING Add your .py scripts to the modules folder. Run main.bat Take the output files and move them into your application. FIXERS print Converts the print statement to the print() function. Matching multiple formats, comments, and more. Exception handling Convert except to except BaseException, since BaseException is the base class for all built-in exceptions. Converts except X, T to except X as T. xrange Renames xrange() to range() and wraps existing range() calls with list. has_key Changed dict.has_key(key) to dict..contains__(key) dict Fixes dictionary iteration methods. dict.iteritems() is converted to dict.items(), dict.iterkeys() to dict.keys(), and dict.itervalues() to dict.values(). Similarly, dict.viewitems(), dict.viewkeys() and dict.viewvalues() are converted respectively to dict.items(), dict.keys() and dict.values(). It also wraps existing usages of dict.items(), dict.keys(), and dict.values() in a call to list. exec - TODO Converts the exec statement to the exec() function. apply - TODO Removes usage of apply(). For example apply(function, *args, **kwargs) is converted to function(*args, **kwargs). raise - TODO Converts raise E, V to raise E(V), and raise E, V, T to raise E(V).with_traceback(T). If E is a tuple, the translation will be incorrect because substituting tuples for exceptions has been removed in 3.0. You can use it together with Skeleton of Python modules for IDE, from @Takuma. Download: [hide][Hidden Content]]
    1 point
  5. I only had the classics.. that's why i was confused. Thank you, i appreciate! Quick question: do you have the design image for warrior as well?
    1 point
  6. tab_button_large_01.sub title subImage version 1.0 image "Windows.dds" left 227 top 116 right 305 bottom 135 tab_button_large_02.sub title subImage version 1.0 image "Windows.dds" left 305 top 116 right 383 bottom 135 tab_button_large_03.sub title subImage version 1.0 image "Windows.dds" left 383 top 116 right 461 bottom 135 Buttons Should be in any Windows.dds be the same
    1 point
  7. There was no website what came with this file. You probably mean the old china website what got leaked too, sadly ~2 years ago i spent months to find it. You can guess, no luck. [Hidden Content] You can find here the images and pure html if you have time and knowledge to rebuild it.
    1 point
  8. Python version. Work in both ways. From inventory to safebox and from safebox to inventory. [Hidden Content]
    1 point
  9. Hello folks. Today i will show you have to solve some more or less serious bugs. P2P BASHPANEL: DB Account BUG: Kind regards.
    1 point
  10. @HITRON After a brief test i noticed that the flag AFF_EUNHYUNG is set after skill computation, so it needs a fix, i will edit the first post as well. Full fix tested and working in char.h add friend struct RemoveInvisibleVictim; then in char_skill.cpp add this struct struct RemoveInvisibleVictim{ RemoveInvisibleVictim(LPCHARACTER pkOldVictim) { m_pkOldVictim = pkOldVictim; } void operator () (LPENTITY ent) { if (ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER pkChr = (LPCHARACTER) ent; if (pkChr && pkChr->IsMonster()) { LPCHARACTER pkVictim = pkChr->GetVictim(); if (pkVictim && pkVictim == m_pkOldVictim) { LPCHARACTER new_victim = pkChr->GetNearestVictim(pkChr); // or optional GetHighestDpsVictim(pkChr) if (new_victim != m_pkOldVictim) //NEED TO ADD CHECK HERE AFF_EUNHYUNG WILL BE SET LATER pkChr->SetVictim(new_victim); else pkChr->SetVictim(NULL); } } } } LPCHARACTER m_pkOldVictim; }; then in function (char_skill.cpp) int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel) add if (dwVnum == SKILL_EUNHYUNG && GetSectree()) { RemoveInvisibleVictim f(this); GetSectree()->ForEachAround(f); } OPTIONAL: GetHighestDpsVictim in char_battle.cpp LPCHARACTER CHARACTER::GetHighestDpsVictim(LPCHARACTER pkChr) { if (NULL == pkChr) pkChr = this; float fMinDist = 99999.0f; float fMaxDamage = 0.0f; LPCHARACTER pkVictim = NULL; TDamageMap::iterator it = m_map_kDamage.begin(); // 일단 주위에 없는 사람을 걸러 낸다. while (it != m_map_kDamage.end()) { const VID & c_VID = it->first; float fDamage = it->second.iTotalDamage; ++it; LPCHARACTER pAttacker = CHARACTER_MANAGER::instance().Find(c_VID); if (!pAttacker) continue; if (pAttacker->IsAffectFlag(AFF_EUNHYUNG) || pAttacker->IsAffectFlag(AFF_INVISIBILITY) || pAttacker->IsAffectFlag(AFF_REVIVE_INVISIBLE)) continue; float fDist = DISTANCE_APPROX(pAttacker->GetX() - pkChr->GetX(), pAttacker->GetY() - pkChr->GetY()); if (fDist < fMinDist && !pAttacker->IsDead() && fDamage > fMaxDamage) { pkVictim = pAttacker; fMaxDamage = fDamage; } } return pkVictim; }
    1 point
  11. M2 Download Center Download Here ( Internal ) Github repository: [Hidden Content]
    1 point
  12. M2 Download Center Download Here ( Block Drop Hack | Binary Check Name ) Download Here ( Quest Functions - Get IP | Get Version | Disconnect | Delayed DC ) Hi everyone, It's finally time to open a topic for the small tutorials, it's better than flooding the board with one sentence topics. 1. Binary name check: Sure, it's possible to do it on client-side, but if we can do it on server-side, theres no reason to do it on client-side. 1. Search for this function in game/input.cpp: void CInputProcessor::Version(LPCHARACTER ch, const char* c_pData) 2. Replace the entire function with this: if (!ch) { return; } TPacketCGClientVersion * p = (TPacketCGClientVersion *) c_pData; // If the file name is not metin2client.exe and the GM level is not equal with GM_IMPLEMENTOR kick the player if (strcmp(p->filename, "metin2client.exe") && ch->GetGMLevel() != GM_IMPLEMENTOR) { // immediately close the connection with the player sys_err("%s[%d] has been disconnected: %s", ch->GetName(), ch->GetPlayerID(), p->filename); ch->GetDesc()->SetPhase(PHASE_CLOSE); return; } sys_log(0, "VERSION: %s %s %s", ch->GetName(), p->timestamp, p->filename); ch->GetDesc()->SetClientVersion(p->timestamp); 2. Block the drop hacks: This issue is surely known by everybody, the server gets overloaded when dropping too many items in short time. 1. Open game/char_item.cpp and search for this: if (pkItemToDrop->AddToGround(GetMapIndex(), pxPos)) 2. Add this under that: // Clear the variable, it looks the player does not dropped any item in the past second. if (thecore_pulse() > LastDropTime + 25) CountDrops = 0; // It looks the player dropped min. 4 items in the past 1 second if (thecore_pulse() < LastDropTime + 25 && CountDrops >= 4) { // Set it to 0 CountDrops = 0; sys_err("%s[%d] has been disconnected because of drophack using", GetName(), GetPlayerID()); // Disconnect the player GetDesc()->SetPhase(PHASE_CLOSE); return false; } 3. Search for this still in game/char_item.cpp: LogManager::instance().ItemLog(this, pkItemToDrop, "DROP", szHint); 4. Add this under that: LastDropTime = thecore_pulse(); CountDrops++; 5. Open game/char.h and add these: int LastDropTime; int CountDrops; 6. Open game/char.cpp and search for this: void CHARACTER::Initialize() 7. Add these to the function: CountDrops = 0; LastDropTime = 0;
    1 point
  13. This isn't really a fix you just commenting abort(); You must find what really causes this error and fix it there and not just commenting the function
    1 point
  14. I just answered a question here about how to load up the exp_table from a txt file, but maybe it will be useful for someone else too: Open main.cpp and add this to the top: #include "fstream" Search for this still in main.cpp: PanamaLoad(); Add this under that: // START_OF_EXP_TABLE_LOADING std::string temp_exp_line; std::ifstream exp_table_open("exptable.txt"); if (!exp_table_open.is_open()) return 0; int exp_table_counter = 0; while (!exp_table_open.eof()) { exp_table_open >> temp_exp_line; str_to_number(exp_table_common[exp_table_counter], temp_exp_line.c_str()); exp_table_counter++; } // END_OF_EXP_TABLE_LOADING Open constants.cpp and replace this: const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1] = { ... }; With this: DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1]; Open constants.h and replace this: extern const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1]; With this: extern DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1]; exptable.txt example: [Hidden Content]
    1 point
  15. Here are some new small Quest functions: Get the IP address of the player: int pc_get_ip(lua_State* L) { lua_pushstring(L, CQuestManager::instance().GetCurrentCharacterPtr()->GetDesc()->GetHostName()); return 1; } Get the client version of the player: int pc_get_version(lua_State* L) { lua_pushstring(L, CQuestManager::instance().GetCurrentCharacterPtr()->GetDesc()->GetClientVersion()); return 1; } Delayed disconnect the player: int pc_delayed_dc(lua_State* L) { if (!lua_isnumber(L, 1)) return 0; int dctime = (int)lua_tonumber(L, 1); if (dctime <= 0) return 0; CQuestManager::instance().GetCurrentCharacterPtr()->GetDesc()->DelayedDisconnect(dctime); return 0; } Disconnect the player (with reason): int pc_dc(lua_State* L) { const char * reason = lua_tostring(L, 1); CQuestManager::instance().GetCurrentCharacterPtr()->Disconnect(reason); return 0; } { "get_ip", pc_get_ip }, { "get_version", pc_get_version }, { "delayed_dc", pc_delayed_dc }, { "disconnect", pc_dc },
    1 point
  16. M2 Download Center Download Here ( Internal ) I combined 3 tools for metin2 into one. Tools in the form of separate scripts are publicly available and can be found on this forum (come from two users ThunderCore and ricky92). Download: [Hidden Content]
    0 points
  17. Go to: /usr/src/your source/Srcs/Server/libthecore/src and open : signal.c Search: RETSIGTYPE checkpointing(int sig) and delete: sys_err("CHECKPOINT shutdown: tics did not updated."); abort(); Like this: old: New: DONE This tutorial was made by AleXso Source: freakplay.net (no advertising)
    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.