اغلاق ثغرات السورس Metin2

F4res

PGxPO MC - Developer
14 نوفمبر 2020
347
115
43
الجنس
ذكر
السلام عليكم ورحمة الله وبركاته

أولاً

إغلاق ثغرة التدبيل بشكل نهائي في كل من التفعيلات, الأحبال و الجرع

قم بفتح ملف char_item.cpp وأضف فيه الآتي

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

ثم ابعث عن ( علماً انها مكرره 3 مرات )
case USE_ABILITY_UP:
{


قم بإضافه:
if ((CheckTimeUsed(item) == false))
{
return false;

}

ثم قم بالبحث عن ( علماً انها مكرره مرتين )
case USE_AFFECT :
{

ثم أضف بعدها
if ((CheckTimeUsed(item) == false))
{
return false;
}


قم بالبحث عن
case ITEM_BLEND:
ثم أضف بعدها

if ((CheckTimeUsed(item) == false))
{
return false;
}


ثانياً

قم بفتح ملف char.h وأبحث عن :
void SetName(const std::string& name) { m_stName = name; }

ثم أضف فوقها :
bool CheckTimeUsed(LPITEM item);

قم بفتح ملف i*nput_login.cpp
وقم بالبحث عن :
ch->StartCheckSpeedHackEvent();
أضف بعدها :
ch->SetQuestFlag("item.last_time", get_global_time());


ثالثاً
إصلاح علاوة إستعادة نقاط الحياةالأسلوب

قم بفتح ملف char_battle.cpp

قم بالبحث عن :

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

استبدلها بـ :

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود


رابعاً
إصلاح ثغرة الأسم الطويل من السورس
قم بفتح ملف i*nput_login.cpp وقم بالبحث عن :

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

أضف بعدها :
Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

خامساً
إصلاح ثغرة حقن تخص DBManager
قم بفتح ملف db.cpp وقم بإستبدال الآتي :

void DBManager::Query(const char * c_pszFormat, ...)
{

الكود هذا

}
SQLMsg * DBManager::DirectQuery(const char * c_pszFormat, ...)
{


بالآتي :

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

خامساً
إصلاح Game Core بسبب أمر GetQuestFlag
قم بفتح ملف char.cpp وقم بالبحث عن :
return pPC->GetFlag(flag);

أضف فوقها :

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

سابعاً

إغلاق ثغرة تغيير الإمبراطورية أثناء الوجود في مجموعة
قم بفتح ملف questlua_pc.cpp وقم بالبحث عن :

lua_pushnumber(L, ch->ChangeEmpire((unsigned char)lua_tonumber(L, 1)));

أضف فوقها :
Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود


ثامناً
منع قتل اللاعبين أثناء فتحهم لمتاجر خاصة
قم بفتح ملف battle.cpp وقم بالبحث عن :


Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

أضف بعدها :

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود


قم بفتح ملف char_battle.cpp
قم بالبحث عن :

bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
{

أضف بعدها :


Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود


تاسعاً
إصلاح Game Core بسبب المجموعة
قم بفتح ملف party.cpp وقم بالبحث عن دالة :
void CParty::UpdateOfflineState(DWORD dwPID)
{
محتوى الدالة هنا ..

}

استبدلها كاملةً بـ :

Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

تاسعاً
إغلاق ثغرة إلتقاط العتاد في المجموعة
قم بالبحث عن :
if (!owner)
return false;

أضف بعدها :
Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود


عاشراً
إغلاق ثغرة إرتداء نفس البند مرتين
قم بفتح ملف char_item.cpp
قم بالبحث عن دالة :

bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TItemPos& destCell)

بنهاية الدالة قبل return true;

أضف الآتي :


Python:
نرجو منك تسجيل الدخول او تسجيل لتتمكن من رؤية الكود

طبعا بإمكانك إزالة جميع شروط #ifdef وجعلها أساسية لملفاتك لكن قمت بوضعها إحتياطاً - وإن أردت تعطيلها فقط بوضع علامتي // قبل الdefine#

واخيراً
إصلاح خطأ دالة pc.select_vid (قد تتسبب في مشاكل ربما منها Game Core)

قم فتح ملف questlua_pc.cpp وقم بالبحث عن :
lua_pushnumber(L, (DWORD)ch->GetVID());

استبدلها بـ :
lua_pushnumber(L, ch ? (DWORD)ch->GetVID() : 0); // return 0 if no player exist


والسلام عليكم ورحمه الله وبركاته