Jump to content
M2Tec Community

Search the Community

Showing results for tags 'release'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • 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


  • M2Tec Files
  • Kori Files
  • Starfoul - ServerFiles


  • Support
  • Sales
  • Administration
  • Other


There are no results to display.

There are no results to display.

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start



About Me

Found 83 results

  1. huhu, Ich war gerade am überlegen wo ich das genau reinposte, es gab auf dem alten Board ja ein Extra Bereich aber seis drum. Was es genau ist, brauch ich glaub nicht sagen.. viel Spaß damit. Bild: Download: [Hidden Content] Gruß, Kalibor
  2. Hello, I want to introduce you my Instant equip funciton. It is mini release (easy to make and somebody maybe finds it useful) This function instantly-equips (if slot is not already equiped) items. You can use it for quests like "first login" (sample in pictures below). Link: HERE or click on Signature (Section Free Stuff) Enjoy.
  3. Hello, I want to introduce you my IP Account security system. IP Security is easy to install system. IP assignments are in database. This function provides players a particular safety and nobody else can break through player's account. Nobody with different IP as assigned to account can not login. Link: HERE or click on Signature (Section Free Stuff) Enjoy.
  4. Hallo ! - I upload my vdi for compile source and start server - I upload fliege files v2.1 source and serverfiles - Ready for start (/usr/home/game) - Ready for compile (/usr/src/Source) Informations: Download:
  5. The code it was mostly extracted from WoM2. i fixed some bug -#@ROOT uiquestcategory.py > 193 #@fixme001: Note: Didn't have the scrollbar. DOWNLOAD
  6. 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
  7. Hi, Donwload: [Hidden Content] Bye :*
  8. How many people found this error on pserver or Official Metin2? With Windows >= 8 we found this problem and we have fixed with the compatibility checker but this is not the best way! The real problem is this string on the source of client EterLib/GrpDevice.cpp if (!ms_kD3DDetector.Find(800, 600, 32, TRUE, &ms_iD3DModeInfo, &ms_iD3DDevInfo, &ms_iD3DAdapterInfo)) The application go to find the default resolution "800x600" but this is not the correct way! With new generation some computer have deleted the 800x600 resolution and this cause problems! to solve this we change previous line with this: if (!ms_kD3DDetector.Find(iHres, iVres, 32, TRUE, &ms_iD3DModeInfo, &ms_iD3DDevInfo, &ms_iD3DAdapterInfo)) We force the application to find the resolution we have set up with config.exe "I remind you that config.exe get the possible resolutions automatically"! With this method the application always start without problem and compatibility setting. And if you have a Metin2 Official? if you have intel chip with the intel control panel you can add personal resolution if not you can add the resolution with edit some things in the registry but i not suggest it if you not know how registry work! Hope can i help someone!
  9. Screen: Video: [Hidden Content] Why is this feature good? Cause every yang goes on this little window and players can see the chat log with out the yang spamming when the farm ^^ Download: Mega
  10. Oficial seller: VEGAS [Hidden Content] DOWNLOAD
  11. Patch contains: - All GR2 model and DSS - icon - SQL for item_proto.txt - item_scale.txt Download [Hidden Content] [Hidden Content]
  12. Hi everybody, Today I come to share the item_scale from me. "Reworked from A to Z for positions and size. The big sash not suitable for charactere did not suit me, that's why I decided to redo them one by one. Here are some images of the rendering:" [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] Link of the item_scale.txt: Click-here ! If you want to share it, do not forget the source
  13. Gut M2tec! Entschuldigen Sie die Übersetzung von "Google" Die Quelle ist mainline_sg (CLEAN) mit den folgenden Änderungen: limit_time entfernt check_server entfernt server_key entfernt locale_newcbin entfernt fix constants.cpp / .h auth_brazil entfernt pcbang entfernt xtrap entfernt Teen entfernt Die meisten gelösten Warnungen Entfernte alle locale {links nur ymir Korea und (Europa, dass ich rumänien in allen Quell-Spiel / db umbenannte)} Im Archiv finden Sie auch die Quelle vor "UPDATE" (bevor Sie die lokalen entfernen) Es kompiliert .vdi auf dev 9.2 Es ist ideal, um einen Old-School-Server zu starten Viel Spaß und viel Gesundheit! UNTEN!
  15. [Hidden Content] Funktioniert zu 100% selbst getestet
  16. 1. Vegas [Hidden Content] 2. Lennt [Hidden Content]
  17. [Hidden Content] Nicht von mir ist von nem anderen Forum, Funktioniert laut kollegen
  18. [Hidden Content]
  19. The download : [Hidden Content]
  20. Hey! Today I'm gonna share this reversed stuff from the official binary by named "Relative Move" for the reef_attack skill. If you have any problem, just post it into this thread. 1.) GameLib/RaceMotionDataEvent.h -> Add to the bottom of the file: // RelativeMoveOn typedef struct SMotionEventDataRelativeMoveOn : public SMotionEventData { int baseVelocity; SMotionEventDataRelativeMoveOn() : baseVelocity(0) {} virtual ~SMotionEventDataRelativeMoveOn() {} void Save(FILE* File, int iTabs){} bool Load(CTextFileLoader& rTextFileLoader) { if (!rTextFileLoader.GetTokenInteger("basevelocity", &baseVelocity)) { return false; } return true; } } TMotionEventDataRelativeMoveOn; // RelativeMoveOff typedef struct SMotionEventDataRelativeMoveOff : public SMotionEventData { SMotionEventDataRelativeMoveOff() {} virtual ~SMotionEventDataRelativeMoveOff() {} void Save(FILE* File, int iTabs) {} bool Load(CTextFileLoader& rTextFileLoader) { return true; } } TMotionEventDataRelativeMoveOff; 2.) GameLib/RaceMotionData.h 2.1.) Extend the "EMotionEventType" enum with these(b4 the maxnum): MOTION_EVENT_TYPE_RELATIVE_MOVE_ON, MOTION_EVENT_TYPE_RELATIVE_MOVE_OFF, 2.2.) Jump to this: "TMotionEffectToTargetEventData" and add below: typedef struct NMotionEvent::SMotionEventDataRelativeMoveOn TMotionRelativeMoveOn; typedef struct NMotionEvent::SMotionEventDataRelativeMoveOff TMotionRelativeMoveOff; 3.) GameLib/RaceMotionData.cpp -> Extend the switch statement in the function: "CRaceMotionData::LoadMotionData" with these: case MOTION_EVENT_TYPE_RELATIVE_MOVE_ON: pData = new TMotionRelativeMoveOn; break; case MOTION_EVENT_TYPE_RELATIVE_MOVE_OFF: pData = new TMotionRelativeMoveOff; break; 4.) GameLib/ActorInstance.h 4.1.) Add the followings below of this declaration: "void ProcessMotionEventWarp(const CRaceMotionData::TMotionEventData * c_pData);" void ProcessMotionEventRelativeMoveOn(const CRaceMotionData::TMotionEventData * c_pData); void ProcessMotionEventRelativeMoveOff(const CRaceMotionData::TMotionEventData * c_pData); 4.2.) Define the next variables as protected at the bottom: protected: bool m_bIsRelativeMoveMode; float m_fRelativeMoveMul; 5.) GameLib/ActorInstance.cpp 5.1.) Add the initial values above of this: "memset(&m_kCurMotNode, 0, sizeof(m_kCurMotNode));" in the "CActorInstance::__InitializeMotionData()" function: m_fRelativeMoveMul = 0.0f; m_bIsRelativeMoveMode = false; 5.2.) Replace the whole function: void "CActorInstance::__AccumulationMovement(float fRot)" with this: void CActorInstance::__AccumulationMovement(float fRot) { // NOTE - ŔĎ´ÜŔş WAIT·Î ąĚ˛ô·ŻÁü ąćÁö // ĂßČÄżˇ´Â RaceMotionData°ˇ Ŕ̵żµÇ´Â ¸đĽÇŔÎÁöżˇ ´ëÇŃ Flag¸¦ °®°í ŔÖ°Ô˛ű ÇŃ´Ů. - [levites] if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex()) return; D3DXMATRIX s_matRotationZ; D3DXMatrixRotationZ(&s_matRotationZ, D3DXToRadian(fRot)); UpdateTransform(&s_matRotationZ, GetAverageSecondElapsed()); if (m_bIsRelativeMoveMode) AddMovement(m_fRelativeMoveMul * s_matRotationZ._41, m_fRelativeMoveMul * s_matRotationZ._42, m_fRelativeMoveMul * s_matRotationZ._43); else AddMovement(s_matRotationZ._41, s_matRotationZ._42, s_matRotationZ._43); } 6.) GameLib/ActorInstanceMotion.cpp 6.1.) Set the relative move mode variable to false in the "void CActorInstance::__MotionEventProcess(BOOL isPC)" function like this: void CActorInstance::__MotionEventProcess(BOOL isPC) { if (isAttacking()) { DWORD dwNextFrame = DWORD(GetAttackingElapsedTime() * g_fGameFPS); for (; m_kCurMotNode.dwcurFrame < dwNextFrame; ++m_kCurMotNode.dwcurFrame) { MotionEventProcess(); SoundEventProcess(!isPC); } } else { m_bIsRelativeMoveMode = false; MotionEventProcess(); SoundEventProcess(!isPC); ++m_kCurMotNode.dwcurFrame; } } 6.2.) Extend the if statements in the "CActorInstance::__IsNeedFlyTargetMotion" function with this: if (c_pData->iType == CRaceMotionData::MOTION_EVENT_TYPE_RELATIVE_MOVE_ON) return true; 6.3.) Do the same in the "CActorInstance::__HasMotionFlyEvent" function as well: if (c_pData->iType == CRaceMotionData::MOTION_EVENT_TYPE_RELATIVE_MOVE_ON) return true; 7.) GameLib/ActorInstanceMotionEvent.cpp 7.1.) Extend the switch statement in this function: "CActorInstance::MotionEventProcess" with these: case CRaceMotionData::MOTION_EVENT_TYPE_RELATIVE_MOVE_ON: #ifndef WORLD_EDITOR ProcessMotionEventRelativeMoveOn(c_pData); #endif break; case CRaceMotionData::MOTION_EVENT_TYPE_RELATIVE_MOVE_OFF: #ifndef WORLD_EDITOR ProcessMotionEventRelativeMoveOff(c_pData); #endif break; 7.2.) Add the following functions to the bottom of the file: void CActorInstance::ProcessMotionEventRelativeMoveOn(const CRaceMotionData::TMotionEventData * c_pData) { if (CRaceMotionData::MOTION_EVENT_TYPE_RELATIVE_MOVE_ON != c_pData->iType) return; const CRaceMotionData::TMotionRelativeMoveOn * c_pRelativeMoveOnData = (const CRaceMotionData::TMotionRelativeMoveOn *)c_pData; static const float sc_fDistanceFromTarget = 270.0f; if (m_kFlyTarget.IsValidTarget()) { D3DXVECTOR3 v3MainPosition(m_x, m_y, m_z); const D3DXVECTOR3 & c_rv3TargetPosition = __GetFlyTargetPosition(); D3DXVECTOR3 v3Distance = c_rv3TargetPosition - v3MainPosition; D3DXVECTOR3 v3DistanceNormal(0.0f, 0.0f, 0.0f); D3DXVec3Normalize(&v3DistanceNormal, &v3Distance); float fDot = D3DXVec3Dot(&v3DistanceNormal, &v3Distance); m_fRelativeMoveMul = (fDot - sc_fDistanceFromTarget) / static_cast<float>(c_pRelativeMoveOnData->baseVelocity); m_bIsRelativeMoveMode = true; } } void CActorInstance::ProcessMotionEventRelativeMoveOff(const CRaceMotionData::TMotionEventData * c_pData) { if (CRaceMotionData::MOTION_EVENT_TYPE_RELATIVE_MOVE_OFF != c_pData->iType) return; m_bIsRelativeMoveMode = false; } I hope I didn't miss any part of it :D Have fun.
  21. Hello, here you have the leaked branches from ymir, included: dev, dev_wolf_branch, mainline, mainline_cython, mainline_released, mainline_w2.0, mainline_w2.1, novaline. You find the binarysrc under novaline. Download: [Hidden Content]