Jump to content
M2Tec Community

Search the Community

Showing results for tags 'howto'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • M2Tec
    • M2Tec - News
    • M2Tec - Rules
    • Feedback
  • Metin2
    • Binaries & Clients/Serverfiles
    • Discussions & Questions
    • Guides & Releases
    • 2D/3D Graphics
    • File requests
    • Private Servers
  • General
    • Programming / Scripts
    • Tools/Programs
    • Releases
  • Offtopic
    • Introductions
    • General Talk
    • Games Talk
    • Music/Videos/Art
    • M2tec Birthdays
  • M2tec Files's Updates

Product Groups

  • Premium
  • Source
  • Advertisement
  • Donate

Categories

  • M2Tec Files
  • Kori Files
  • Starfoul - ServerFiles

Categories

  • Support
  • Sales
  • Administration
  • Other

Blogs

There are no results to display.

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 47 results

  1. (uitooltip.py)search: def __AppendPotionInformation(self): Add below: [Hidden Content] Search: def AddItemData Add before: self.ShowToolTip() This: self.AppendAntiFlagInformation() Image in game:
  2. !! BIN NICHT MEHR AKTIV !!! VLT. FOLGEN IRGENDWANN WIEDER WEITERE SYSTEME ABER AKTUELL NICHT MEHR !! !! KEIN SUPPORT MEHR !! [Hatte ich im Alten Forum schon gemacht , führe ich hier Aktiv weiter] Vorab es sind nicht meine "Systeme" ich Poste diese hier nur Falls sie Jemand braucht Jedes" System " habe ich durchgetestet und Notfalls auch entbuggt. ---- Bei Fragen etc. bin ich Jederzeit in Skype erreichbar ---- [TABS MÜSSEN GEGEBENFALLS ANGEPASST WERDEN] 1. TextTail System [✔] [] 2. Uppsystem Erweiterung [✔] [] 3. Upgrade Python Version (2.7) [✔][] 4. Vermögensfenster [✔] [] 5. Start Level über Source [✔] [] 1. gmake: warning [✔] [] 1. Weißes Kaninchen-Siegel(OSTERN18)[✔] [] 2. Baby_Baashido_(Siegel)[✔] [] bis zu erweiterung der Zeilen anzahl kommt das in die Kommentare. Und das teste ich
  3. Server erstellen Hallo, in diesem HowTo erläutere ich euch, wie Ihr einen Server mithilfe des Localhost's erstellen könnt. In diesem Tutorial machen wir das Anhand der Kori Serverfiles Version 1.3. Was benötigen wir? Serverfiles 64BIT (1.3) Serverfiles 32BIT (1.3) Client (1.3) FTP Programm Datenbank-Programm VirtualBox Kopf Tutorial VDI einstellen!
  4. Hello m2tech, Today i will release the fix for invisibility effect bug and the AFFECT_EUNHYEONG = sealth ninja skill from 17.5 Official update. What has my hide system, it is imperative to apply this fix. Open instancebase.cpp and search for: BOOL CInstanceBase::IsInvisibility() { if (IsAffect(AFFECT_INVISIBILITY)) return true; return false; } Replace with: BOOL CInstanceBase::IsInvisibility() { if (IsAffect(AFFECT_INVISIBILITY) || IsAffect(AFFECT_EUNHYEONG)) return true; return false; } Search for: void CInstanceBase::Update() { Inside the function search for: if (IsMountingHorse()) { m_kHorse.m_pkActor->HORSE_MotionProcess(false); } } Add bellow: if (IsAffect(AFFECT_INVISIBILITY) || IsAffect(AFFECT_EUNHYEONG)) m_GraphicThingInstance.HideAllAttachingEffect(); Open InstanceBaseEffect.cpp and search for: void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) { Inside the function search: case AFFECT_INVISIBILITY: if (isVisible) { m_GraphicThingInstance.ClearAttachingEffect(); __EffectContainer_Destroy(); DetachTextTail(); } else { m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f); AttachTextTail(); RefreshTextTail(); } return; break; } Replace with: case AFFECT_INVISIBILITY: if (isVisible) { // m_GraphicThingInstance.ClearAttachingEffect(); // __EffectContainer_Destroy(); // DetachTextTail(); m_GraphicThingInstance.HideAllAttachingEffect(); } else { m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f); m_GraphicThingInstance.ShowAllAttachingEffect(); // AttachTextTail(); // RefreshTextTail(); } return; break; Thanks to legend for this sharing.
  5. Hi everybody, I just share the results of my test after a few months. 1. Less unexplained disconnection related to the game. 2. No more errors related to the sequence in syserrs 3. Server Source & Clients Lightened As you can see, the removal of this system is entirely beneficial since it is an incomplete system causing disconnection in play for no reason. The system also generated this server-side error: On the other hand, if you have deactivated the encryption of the packets on your sources, it will require a lot of other important changes. If you want to do a series of tests you have the opportunity to act in 3 different ways: - #define SEQUENCE_SYSTEM_ENABLED - Comment the code - Delete the code Open input.cpp and search: if (bHeader == HEADER_CG_PONG) sys_log(0, "PONG! %u %u", m_pPacketInfo->IsSequence(bHeader), *(BYTE *) (c_pData + iPacketLen - sizeof(BYTE))); Here, the syslog linked to the Header of the key pong uses the function IsSequence, we will modify it by: if (bHeader == HEADER_CG_PONG) sys_log(0, "PONG! %u", *(BYTE *) (c_pData + iPacketLen - sizeof(BYTE))); Just down you have: if (m_pPacketInfo->IsSequence(bHeader)) { BYTE bSeq = lpDesc->GetSequence(); BYTE bSeqReceived = *(BYTE *) (c_pData + iPacketLen - sizeof(BYTE)); if (bSeq != bSeqReceived) { sys_err("SEQUENCE %x mismatch 0x%x != 0x%x header %u", get_pointer(lpDesc), bSeq, bSeqReceived, bHeader); LPCHARACTER ch = lpDesc->GetCharacter(); char buf[1024]; int offset, len; offset = snprintf(buf, sizeof(buf), "SEQUENCE_LOG [%s]-------------\n", ch ? ch->GetName() : "UNKNOWN"); if (offset < 0 || offset >= (int) sizeof(buf)) offset = sizeof(buf) - 1; for (size_t i = 0; i < lpDesc->m_seq_vector.size(); ++i) { len = snprintf(buf + offset, sizeof(buf) - offset, "\t[%03d : 0x%x]\n", lpDesc->m_seq_vector[i].hdr, lpDesc->m_seq_vector[i].seq); if (len < 0 || len >= (int) sizeof(buf) - offset) offset += (sizeof(buf) - offset) - 1; else offset += len; } snprintf(buf + offset, sizeof(buf) - offset, "\t[%03d : 0x%x]\n", bHeader, bSeq); sys_err("%s", buf); lpDesc->SetPhase(PHASE_CLOSE); return true; } else { lpDesc->push_seq(bHeader, bSeq); lpDesc->SetNextSequence(); //sys_err("SEQUENCE %x match %u next %u header %u", lpDesc, bSeq, lpDesc->GetSequence(), bHeader); } } Add the ifdef, comment or delete the entire code. Look for: CInputHandshake::CInputHandshake() { CPacketInfoCG * pkPacketInfo = M2_NEW CPacketInfoCG; pkPacketInfo->SetSequence(HEADER_CG_PONG, false); m_pMainPacketInfo = m_pPacketInfo; BindPacketInfo(pkPacketInfo); } We will delete the sending of the sequence of the key pong here like this: CInputHandshake::CInputHandshake() { CPacketInfoCG * pkPacketInfo = M2_NEW CPacketInfoCG; // pkPacketInfo->SetSequence(HEADER_CG_PONG, false); m_pMainPacketInfo = m_pPacketInfo; BindPacketInfo(pkPacketInfo); } That's it for the input.cpp, let's open the file desc.cpp: #include "sequence.h" Add a comment to the include. Search and comment the code: m_iCurrentSequence Search and comment the code: m_seq_vector.clear(); Add a comment here too Search again & comment the code: m_seq_vector.clear(); Search: BYTE DESC::GetSequence() { return gc_abSequence[m_iCurrentSequence]; } void DESC::SetNextSequence() { if (++m_iCurrentSequence == SEQUENCE_MAX_NUM) m_iCurrentSequence = 0; } Comment all. Look for: void DESC::push_seq(BYTE hdr, BYTE seq) { if (m_seq_vector.size()>=20) { m_seq_vector.erase(m_seq_vector.begin()); } seq_t info = { hdr, seq }; m_seq_vector.push_back(info); } Comment also the whole function. Let's open the desc.h for the statement. Look for: // sequence 버그 찾기용 데이타 struct seq_t { BYTE hdr; BYTE seq; }; typedef std::vector<seq_t> seq_vector_t; // sequence 버그 찾기용 데이타 Comment on everything. Look for: BYTE GetSequence(); void SetNextSequence(); Comment on the 2 functions. Look for: int m_iCurrentSequence; Comment on the function. Look for: public: seq_vector_t m_seq_vector; void push_seq (BYTE hdr, BYTE seq); Comment everything. Let's open the packet_info.cpp and look for: void CPacketInfo::Set(int header, int iSize, const char * c_pszName, bool bSeq) { if (m_pPacketMap.find(header) != m_pPacketMap.end()) return; TPacketElement * element = M2_NEW TPacketElement; element->iSize = iSize; element->stName.assign(c_pszName); element->iCalled = 0; element->dwLoad = 0; element->bSequencePacket = bSeq; if (element->bSequencePacket) element->iSize += sizeof(BYTE); m_pPacketMap.insert(std::map<int, TPacketElement *>::value_type(header, element)); } Edit by: void CPacketInfo::Set(int header, int iSize, const char * c_pszName) { if (m_pPacketMap.find(header) != m_pPacketMap.end()) return; TPacketElement * element = M2_NEW TPacketElement; element->iSize = iSize; element->stName.assign(c_pszName); element->iCalled = 0; element->dwLoad = 0; /* element->bSequencePacket = bSeq; if (element->bSequencePacket) element->iSize += sizeof(BYTE); */ m_pPacketMap.insert(std::map<int, TPacketElement *>::value_type(header, element)); } Search: bool CPacketInfo::IsSequence(int header) { TPacketElement * pkElement = GetElement(header); return pkElement ? pkElement->bSequencePacket : false; } void CPacketInfo::SetSequence(int header, bool bSeq) { TPacketElement * pkElem = GetElement(header); if (pkElem) { if (bSeq) { if (!pkElem->bSequencePacket) pkElem->iSize++; } else { if (pkElem->bSequencePacket) pkElem->iSize--; } pkElem->bSequencePacket = bSeq; } } Comment the whole function. Now, we will modify all the packages of the CPacketInfoCG :: CPacketInfoCG () function. Search: Set(HEADER_CG_GUILD_SYMBOL_UPLOAD, sizeof(TPacketCGGuildSymbolUpload), "SymbolUpload", false); Edit by: Set(HEADER_CG_GUILD_SYMBOL_UPLOAD, sizeof(TPacketCGGuildSymbolUpload), "SymbolUpload"); Do this for any header with a true or false. You should have something like this: Let's open the packet_info.h and look for: typedef struct SPacketElement { int iSize; std::string stName; int iCalled; DWORD dwLoad; bool bSequencePacket; } TPacketElement; Edit by: typedef struct SPacketElement { int iSize; std::string stName; int iCalled; DWORD dwLoad; //bool bSequencePacket; } TPacketElement; Search: void Set(int header, int size, const char * c_pszName, bool bSeq=false); Edit by: void Set(int header, int size, const char * c_pszName); Search and comment the code: bool IsSequence(int header); void SetSequence(int header, bool bSeq); To conclude the tutorial, open input udp.cpp and search for: Set(1, sizeof(ServerStateChecker_RequestPacket), "ServerStateRequest", false); Edit by: Set(1, sizeof(ServerStateChecker_RequestPacket), "ServerStateRequest"); Finally, remove the 2 sequence files from your source and do not forget to remove them from the makefile. 2) CLIENT PART I will not do any tutorial since this file is never modified so you can take mine (I made one for you as I have disabled the encryption of the packets on my side): Link: Click-here ! Source: Madara, please quote the source if you wish to share this tutorial elsewhere. Sorry for my english, i use google translate, if someone can edit my post for my mistakes
  6. Navicat Monitor applies agentless architecture to monitor your MySQL, MariaDB and Percona servers, and collect metrics at regular intervals. It collects process metrics such as CPU load, RAM usage, and a variety of other resources over SSH/SNMP. Navicat Monitor can be installed on any local computer or virtual machine and does not require any software installation on the servers being monitored. Navicat Monitor includes a rich set of real-time and historical graphs that allow you to drill down into server statistic details. It gives you a detailed view of each server load and performance regarding its availability, disk usage, network I/O, table locks and more, which allows you to easily track the deviations and traffic among servers, as well as examine possible solutions and adjust your server settings. Set UP:
  7. Hello, today i release from my source, the fix for offline shop by great to work good with transmutation system. My source is kori source 1.4 but with fixed bugs. You dont have to replace the whole functions. You can compare with mine. If you install them correctly like i tell you, it should work. Its tested to my server, and it works 100%. Download link: [Hidden Content] I hope I helped, Yours sincerely, VoiD.
  8. Hello M2tec User, My HowTo about MariaDB ( MariaDB vs mysql-server56 ) HowTo : MariaDB is drop-in replacement of MySQL. To install MariaDB, run: # pkg install mariadb103-server Next, copy MariaDB configuration file from directory ‘/usr/local/share/mysql/’ to ‘/usr/local/etc/’ as shown below. # cp /usr/local/share/mysql/my-medium.cnf /usr/local/etc/my.cnf Then, enable and start MariaDB service using commands: # sysrc mysql_enable=yes # service mysql-server start Setup MariaDB root user password As you probably know, MariaDB root user has empty, which is not recommended, at the time of installation. So to secure MariaDB root user, it is mandatory to setup a strong password for the root user. To do so, run: # mysql_secure_installation When prompt “Enter current password for root”, just press ENTER key and set the password twice. Then simply press Y to accept the default values. Thanks
  9. So guys i've been messing around with Ore on items and i saw that despite an item has 3 bonus when you add an ore only two appear, but the character get all the bonuses. The fix for that is: Open root/uitooltip.py and then follow the instructions. Search for: affectList2=[0, max(1, affectValue2*10/100), max(2, affectValue2*20/100), max(3, affectValue2*40/100)] And add below: affectType3, affectValue3 = item.GetAffect(2) affectList3=[0, max(1, affectValue3*10/100), max(2, affectValue3*20/100), max(3, affectValue3*40/100)] Then Search for: affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos+1]-affectList2[mtrlPos]) And add below: affectString3 = self.__GetAffectString(affectType3, affectList2[mtrlPos+1]-affectList3[mtrlPos]) Find: self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, leftTime) Replace with: self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, affectString3, leftTime) Find: def __AppendMetinSlotInfo_AppendMetinSocketData(self, index, metinSlotData, custumAffectString="", custumAffectString2="", leftTime=0): Replace with: def __AppendMetinSlotInfo_AppendMetinSocketData(self, index, metinSlotData, custumAffectString="", custumAffectString2="", custumAffectString3="", leftTime=0): Last find: if custumAffectString2: And add below: if custumAffectString3: affectTextLine = ui.TextLine() affectTextLine.SetParent(self) affectTextLine.SetFontName(self.defFontName) affectTextLine.SetPackedFontColor(self.POSITIVE_COLOR) affectTextLine.SetPosition(50, self.toolTipHeight + 16 + 2 + 16 + 2) affectTextLine.SetOutline() affectTextLine.SetFeather() affectTextLine.Show() affectTextLine.SetText(custumAffectString3) self.childrenList.append(affectTextLine) self.toolTipHeight += 16 + 2 I know thats something that some might never noticed and that's super easy to fix, but some people might do not know.
  10. Guten Tag, Ich hatte damals schon mal ein Release gemacht, wie man einen Metin2-Root installiert.. Also fangen wir mal an: portsnap fetch extract && portsnap fetch update cd /usr/ports/ports-mgmt/pkg && make install clean && make reinstall pkg install mysql56-server mysql56-client echo 'mysql_enable="YES"' >> /etc/rc.conf pkg install Python cd /usr/bin && ln -s /usr/local/bin/python2.7 python
  11. A collision or crash is an event in which two or more bodies exert forces on each other for a relatively short time. Although the most common colloquial use of the word "collision" refers to incidents in which two or more objects collide, the scientific use of the word "collision" implies nothing about the magnitude of the force. Some examples of physical interactions that scientists would consider collisions: An insect touches its antenna to the leaf of a plant. The antenna is said to collide with leaf. A cat walks delicately through the grass. Each contact that its paws make with the ground is a collision. Each brush of its fur against a blade of grass is a collision. [File: src/Client/Source/GameLib/ActorInstanceCollisionDetection.cpp] //1.) Search: #include "../eterLib/GrpMath.h" //2.) Add bellow: #include "../UserInterface/PythonBackground.h" #include "../UserInterface/Locale_inc.h" //3.) Search: BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim) { //4.) Add bellow: #ifdef ENABLE_STOP_COLISSION_GLOBAL /********************************************************************* * date : 2016.02.16 * function : Stop Colission * developer : VegaS * skype : sacadatt.amazon * description : Checks if the victim is one of the examples below you can easily configure. If the victim was found success as vnum site / breed ve you could go through it no longer block. */ /************ * The first value is the minimum value and the second value is the maximum value of pet vnum (mob_proto) - change 34051 with your max vnum of pet */ int pListPet[2] = {34001, 34051}; /************ * You can add whatever you like vnum of npc or monster (mob_proto) */ int pListGlobal[] = {9001, 9002, 9003, 9004, 9005, 9006, 20011, 20091, 20092, 20093, 20094, 20095, 30000}; /************ * You can add what mapname you want for enable this stop collission global like pet / npc */ const char* strMapListGlobal[] = {"metin2_map_a1", "metin2_map_a3", "metin2_map_b1", "metin2_map_b3", "metin2_map_c1", "metin2_map_c3", "season2/metin2_map_skipia_dungeon_01", "season2/metin2_map_skipia_dungeon_02", "metin2_map_duel"}; /************ * Location name of the map where the event takes place ox */ const char* strMapEventOx = "season1/metin2_map_oxevent"; std::string stringName = CPythonBackground::Instance().GetWarpMapName(); for (int i = 0; i < _countof(strMapListGlobal); i++) { #ifdef ENABLE_STOP_COLLISION_PLAYER_OX if (strMapEventOx == stringName) // Check if u are place in map ox { if (0 <= rVictim.GetRace() && rVictim.GetRace() <= 7) // Check if the victim through which pass over a player (change 7 with 8 if u have wolfman) return FALSE; // Stop collission for player --> You can go through players now successfully without lock yourself } #endif if (strMapListGlobal[i] == stringName) // Check if you are in one of the maps listed in the global list { for (int i = 0; i < _countof(pListGlobal); i++) { if (rVictim.GetRace() == pListGlobal[i] || pListPet[0] <= rVictim.GetRace() && rVictim.GetRace() <= pListPet[1]) // Verify that the victim is npc vnum listed above, or if a pet. return FALSE; // Stop collission for global vnum like a pet or npc } } } #endif [File: src/Client/Source/UserInterface/Locale_inc.h] //1.) Search: #define ENABLE_COSTUME_SYSTEM //2.) Add bellow: #ifndef ENABLE_STOP_COLISSION_GLOBAL #define ENABLE_STOP_COLISSION_GLOBAL #define ENABLE_STOP_COLLISION_PLAYER_OX #endif
  12. Es wurde nicht von mir geschrieben ich Release es nur auf diesem Forum. Open dungeon.h void JoinParty_Coords(LPPARTY pParty, long X, long Y); void Join_Coords(LPCHARACTER ch, long X, long Y); Open dungeon.cpp struct FWarpToDungeonCoords { FWarpToDungeonCoords(long lMapIndex, long X, long Y, LPDUNGEON d) : m_lMapIndex(lMapIndex), m_x(X), m_y(Y), m_pkDungeon(d) { } void operator () (LPCHARACTER ch) { ch->SaveExitLocation(); ch->WarpSet(m_x, m_y, m_lMapIndex); } long m_lMapIndex; long m_x; long m_y; LPDUNGEON m_pkDungeon; }; void CDungeon::Join_Coords(LPCHARACTER ch, long X, long Y) { if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL) { sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex); return; } X*=100; Y*=100; FWarpToDungeonCoords(m_lMapIndex, X, Y, this) (ch); } void CDungeon::JoinParty_Coords(LPPARTY pParty, long X, long Y) { pParty->SetDungeon(this); m_map_pkParty.insert(std::make_pair(pParty,0)); if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL) { sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex); return; } X*=100; Y*=100; FWarpToDungeonCoords f(m_lMapIndex, X, Y, this); pParty->ForEachOnlineMember(f); } Open questlua_dungeon.cpp int dungeon_join_coords(lua_State* L) { if (lua_gettop(L)<3 || !lua_isnumber(L,1) || !lua_isnumber(L, 2) || !lua_isnumber(L,3)) { sys_err("not enough argument"); return 0; } long lMapIndex = (long)lua_tonumber(L, 1); LPDUNGEON pDungeon = CDungeonManager::instance().Create(lMapIndex); if (!pDungeon) return 0; LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (ch->GetParty() && ch->GetParty()->GetLeaderPID() == ch->GetPlayerID()) pDungeon->JoinParty_Coords(ch->GetParty(), (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3)); else if (!ch->GetParty()) pDungeon->Join_Coords(ch, (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3)); return 0; } questlua_dungeon.cpp INTO RegisterDungeonFunctionTable() { "join_coords", dungeon_join_coords }, Beispiel für die Quest: d.join_coords(12, 21385, 16395)
  13. Guten Morgen, da ich aktuell das proplem hatte mit dem fehler : Clock skew detected. Your build may be incomplete dachte ich mir ich helfe euch auch mal :D hier der fixx ( voll simple ) zb: cd /pfad/zum/src/ && touch * damit ist der fehler behoben
  14. System ist getestet von dem Sender des Systems. [Hidden Content] Credit to @DarthNeno
  15. Hello, because i saw some people asking for that, there is: Replace the cmd_emotion.cpp With this file: Download: [Hidden Content] I couldn't find other way to do this, i just add the duration time in the file and i writed a code for hide & show with time event, everything working fine.
  16. Bei diesem Beitrag handelt es sich um ein Backup aus dem alten Forum Weil im November mal jemand danach gefragt hat^^
  17. You do not need to explain it, you will do the build process with visual studio, you already have the direct dll out, inject it inode, some of your tricks are blocked. [Hidden Content]
  18. Hello, pretty sure anyone of you knows about the Dispel and Heal Lag problem that has been around since always. This little modification will fix both these problems completely. Problem: The RemoveAffect function calls ComputePoints() (Complete rearrange of all the player stats and equip parts, one of the heaviest checks). The correct function to use is RefreshAffect() which does its job pretty fine! But that's not the only problem: Based on the current code, that function would get called every single time an affect gets removed or added, while it should only get called once, at the end of the process. Solution: We could make new functions for those 2 special flags (REMOVE_BAD_AFFECT and REMOVE_GOOD_AFFECT), but in order to keep things simple for you guys, i'll simply "dynamicize" the RemoveAffect function. 1. go to char_affect.cpp: Find: bool CHARACTER::RemoveAffect(CAffect * pkAff) Substitute with: bool CHARACTER::RemoveAffect(CAffect * pkAff, bool single) Inside it, find: if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType) ComputePoints(); else UpdatePacket(); Substitute with: if (single) if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType) ComputePoints(); else UpdatePacket(); 2: go to char.h: Find: bool RemoveAffect(CAffect * pkAff); Substitute with: bool RemoveAffect(CAffect * pkAff, bool single = true); 3. In char_affect.cpp: Find: void CHARACTER::RemoveGoodAffect() { RemoveAffect(AFFECT_MOV_SPEED); RemoveAffect(AFFECT_ATT_SPEED); RemoveAffect(AFFECT_STR); RemoveAffect(AFFECT_DEX); RemoveAffect(AFFECT_INT); RemoveAffect(AFFECT_CON); RemoveAffect(AFFECT_CHINA_FIREWORK); RemoveAffect(SKILL_JEONGWI); RemoveAffect(SKILL_GEOMKYUNG); RemoveAffect(SKILL_CHUNKEON); RemoveAffect(SKILL_EUNHYUNG); RemoveAffect(SKILL_GYEONGGONG); RemoveAffect(SKILL_GWIGEOM); RemoveAffect(SKILL_TERROR); RemoveAffect(SKILL_JUMAGAP); RemoveAffect(SKILL_MANASHILED); RemoveAffect(SKILL_HOSIN); RemoveAffect(SKILL_REFLECT); RemoveAffect(SKILL_KWAESOK); RemoveAffect(SKILL_JEUNGRYEOK); RemoveAffect(SKILL_GICHEON); #ifdef ENABLE_WOLFMAN_CHARACTER // ¼öÀÎÁ·(WOLFMEN) ¹öÇÁ Ãß°¡ RemoveAffect(SKILL_JEOKRANG); RemoveAffect(SKILL_CHEONGRANG); #endif } Substitute with: const std::vector<WORD> GoodAffects = { AFFECT_MOV_SPEED, AFFECT_ATT_SPEED, AFFECT_STR, AFFECT_DEX, AFFECT_INT, AFFECT_CON, AFFECT_CHINA_FIREWORK, // Body Warrior SKILL_JEONGWI, // 3 (Berserk) SKILL_GEOMKYUNG, // 4 (Aura of the Sword) // Mental Warrior SKILL_CHUNKEON, // 19 (Strong Body) // Blade-Fight Ninja SKILL_EUNHYUNG, // 34 (Stealth) // Archery Ninja SKILL_GYEONGGONG, // 49 (Feather Walk) // Weaponry Sura SKILL_GWIGEOM, // 63 (Enchanted Blade) SKILL_TERROR, // 64 (Fear) SKILL_JUMAGAP, // 65 (Enchanted Armour) // Black Magic Sura SKILL_MANASHILED, // 79 (Dark Protection) // Dragon Force Shaman SKILL_HOSIN, // 94 (Blessing) SKILL_REFLECT, // 95 (Reflection) SKILL_GICHEON, // 96 (Dragon's Strength) // Healing Force Shaman SKILL_KWAESOK, // 110 (Swiftness) SKILL_JEUNGRYEOK, // 111 (Attack Up) // Instinct Lykan SKILL_JEOKRANG, // 174 (Crimson Wolf Soul) SKILL_CHEONGRANG, // 175 (Indigo Wolf Soul) }; void CHARACTER::RemoveGoodAffect() { for (auto it : GoodAffects) { const CAffect * pkAff = FindAffect(it); if (pkAff) RemoveAffect(const_cast<CAffect *>(pkAff), false); } ComputePoints(); } Then find: void CHARACTER::RemoveBadAffect() { sys_log(0, "RemoveBadAffect %s", GetName()); // µ¶ RemovePoison(); RemoveFire(); // ½ºÅÏ : Value%·Î »ó´ë¹æÀ» 5ÃÊ°£ ¸Ó¸® À§¿¡ º°ÀÌ µ¹¾Æ°£´Ù. (¶§¸®¸é 1/2 È®·ü·Î Ç®¸²) AFF_STUN RemoveAffect(AFFECT_STUN); // ½½·Î¿ì : Value%·Î »ó´ë¹æÀÇ °ø¼Ó/ÀÌ¼Ó ¸ðµÎ ´À·ÁÁø´Ù. ¼ö·Ãµµ¿¡ µû¶ó ´Þ¶óÁü ±â¼ú·Î »ç¿ë ÇÑ °æ¿ì¿¡ AFF_SLOW RemoveAffect(AFFECT_SLOW); // Åõ¼Ó¸¶·É RemoveAffect(SKILL_TUSOK); // ÀúÁÖ //RemoveAffect(SKILL_CURSE); // ÆĹý¼ú //RemoveAffect(SKILL_PABUP); // ±âÀý : Value%·Î »ó´ë¹æÀ» ±âÀý½ÃŲ´Ù. 2ÃÊ AFF_FAINT //RemoveAffect(AFFECT_FAINT); // ´Ù¸®¹­ÀÓ : Value%·Î »ó´ë¹æÀÇ À̵¿¼Óµµ¸¦ ¶³¾îÆ®¸°´Ù. 5ÃÊ°£ -40 AFF_WEB //RemoveAffect(AFFECT_WEB); // Àáµé±â : Value%·Î »ó´ë¹æÀ» 10ÃÊ°£ ÀáÀç¿î´Ù. (¶§¸®¸é Ç®¸²) AFF_SLEEP //RemoveAffect(AFFECT_SLEEP); // ÀúÁÖ : Value%·Î »ó´ë¹æÀÇ °øµî/¹æµî ¸ðµÎ ¶³¾îÆ®¸°´Ù. ¼ö·Ãµµ¿¡ µû¶ó ´Þ¶óÁü ±â¼ú·Î »ç¿ë ÇÑ °æ¿ì¿¡ AFF_CURSE //RemoveAffect(AFFECT_CURSE); // ¸¶ºñ : Value%·Î »ó´ë¹æÀ» 4ÃÊ°£ ¸¶ºñ½ÃŲ´Ù. AFF_PARA //RemoveAffect(AFFECT_PARALYZE); // ºÎµ¿¹ÚºÎ : ¹«´ç ±â¼ú //RemoveAffect(SKILL_BUDONG); } Substitute with: const std::vector<WORD> BadAffects = { AFFECT_FIRE, AFFECT_POISON, AFFECT_STUN, AFFECT_SLOW, SKILL_TUSOK, }; void CHARACTER::RemoveBadAffect() { for (auto it : BadAffects) { const CAffect * pkAff = FindAffect(it); if (pkAff) { RemoveAffect(const_cast<CAffect *>(pkAff), false); switch (it) { case AFFECT_FIRE: event_cancel(&m_pkFireEvent); break; case AFFECT_POISON: event_cancel(&m_pkPoisonEvent); break; } } } UpdatePacket(); } Done! Comparison:
  19. Here is the change if you want to make the pickup of items faster Go on client source PythonPlayer.cpp and search for this: void CPythonPlayer::SendClickItemPacket(DWORD dwIID) if you do s_dwNextTCPTime = 0 and comment the: s_dwNextTCPTime=dwCurTime + 500; down there it will have no delay. example code: void CPythonPlayer::SendClickItemPacket(DWORD dwIID) { if (IsObserverMode()) return; static DWORD s_dwNextTCPTime = 0; DWORD dwCurTime=ELTimer_GetMSec(); if (dwCurTime >= s_dwNextTCPTime) { // s_dwNextTCPTime=dwCurTime + 500; const char * c_szOwnerName; if (!CPythonItem::Instance().GetOwnership(dwIID, &c_szOwnerName)) return; if (strlen(c_szOwnerName) > 0) if (0 != strcmp(c_szOwnerName, GetName())) { CItemData * pItemData; if (!CItemManager::Instance().GetItemDataPointer(CPythonItem::Instance().GetVirtualNumberOfGroundItem(dwIID), &pItemData)) { Tracenf("CPythonPlayer::SendClickItemPacket(dwIID=%d) : Non-exist item.", dwIID); return; } if (!IsPartyMemberByName(c_szOwnerName) || pItemData->IsAntiFlag(CItemData::ITEM_ANTIFLAG_DROP | CItemData::ITEM_ANTIFLAG_GIVE)) { PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotPickItem", Py_BuildValue("()")); return; } } CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.SendItemPickUpPacket(dwIID); } }
  20. Hayho da ich dieses System bei Leya2 und Anderen servern gesehen hab Hab ich mich mal rangesetzt und es mal für euch raus gesucht Vilt ist es ja nützlich dieser AntiBot ist verfügtbar auf svside.com rasch mal rübergezogen das how to Sicherlich ist es Nützlich für andere Server die Probleme mit Botter haben. SVSIDEBOT DOWNLOAD Dies ist nicht mein Howto File / game.py Code / svsidedia = None svsidedi_cp = "" from svsideoi import SvsideDialog import binascii Code / Kod: global svsidedia if svsidedia == None: svsidedia = SvsideDialog() svsidedia.Board.Hide() Code / Kod: if name.find("<svside>") != -1: global svsidedia if line[line.find(",")-4:line.find(",")].isdigit(): svsidedia.nm_updateimgoffline(line[line.find(", ")-4:line.find(", ")]) else: svsidedia.Board.Hide() return Code : if message.find("#ebvs.svside:") != -1: message2 = message[message.find("#ebvs.svside:")+13:] global svsidedi_cp if message.find("4A464946") != -1: svsidedi_cp = str(app.GetRandom(55555, 99999999)) + ".jpg" f = open('svside/' + svsidedi_cp, 'wb') else: f = open('svside/' + svsidedi_cp, 'ab') f.write(binascii.unhexlify(message2)) f.close() if len(message2) < 450: svsidedia.nm_updateimgoffline2(svsidedi_cp) if os.path.exists('svside/' + svsidedi_cp): os.remove('svside/' + svsidedi_cp) return if message.find("#ebvs:VerifyOK") != -1: svsidedia.Board.Hide() return First way / birinci yol : Open client source and add code / Client kaynak kodu açın ve kodu ekleyin UserInterface\PythonChat.cpp : if (strstr(c_szChat, "#ebvs")) return; Second way / ikinci yol : Use svside application for client binary / Client dosyası için svside uygulamasını kullanın Drag the client binary to svside application / client dosyasını svside uygulamasına sürükleyin : New client binary is ready / yeni client dosyası hazır.
  21. Da ich den Fix hier noch nicht gesehen hatte dachte ich mir ich republiziere ihn hier mal es geht um folgendes sobald ihr euer Pet gerufen habt und einen Shop öffnet verschwindet das Pet wieder.. Video Fix öffnet New_PetSystem.cpp sucht in der Funktion "bool CNewPetActor::Update(DWORD deltaTime)" if (m_pkOwner->IsDead() || (IsSummoned() && m_pkChar->IsDead()) || (IsSummoned() && (m_pkOwner->GetExchange() || m_pkOwner->GetMyShop() || m_pkOwner->GetShopOwner() || m_pkOwner->IsOpenSafebox() || m_pkOwner->IsCubeOpen() || m_dwduration <= 0)) || NULL == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID()) || ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetOwner() != this->GetOwner() ) { this->Unsummon(); return true; } ändert dies nun ab in if (m_pkOwner->IsDead() || (IsSummoned() && m_pkChar->IsDead()) || (IsSummoned() && (m_pkOwner->IsCubeOpen() || m_dwduration <= 0)) || NULL == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID()) || ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetOwner() != this->GetOwner() ) { this->Unsummon(); return true; } das war's auch schon (: Liebe Grüße Meleys
  22. Patcher by Hanashi Originalthread: [Hidden Content] Mir war mal langweilig und hab dazu mal n Video gemacht #outdate aber egal ^^
×