- Katılım
- 30 Ocak 2020
- Konular
- 50
- Mesajlar
- 812
- Çözüm
- 6
- Online süresi
- 26d 15h
- Reaksiyon Skoru
- 735
- Altın Konu
- 1
- Başarım Puanı
- 184
- MmoLira
- 8,746
- DevLira
- 123
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Merhaba TurkMMO ;
Metin2Dev'de paylaşılan fixleri incelerken içinden beğendiğim fixleri aldım, bazılarına eklemeler yaparak kendi src dosyalarımda kullandım, işinize yarar diye düşünüyorum.Fixlerin ham hallerini paylaşan Metin2Dev'den WeedHex'e teşekkürler.
Nasıl Yapacağız ;
Anlatıma geçelim gayet detaylı belirttim ;
Direk olarak cpp dosyasından almak isteyenler için link ;
Metin2Dev'de paylaşılan fixleri incelerken içinden beğendiğim fixleri aldım, bazılarına eklemeler yaparak kendi src dosyalarımda kullandım, işinize yarar diye düşünüyorum.Fixlerin ham hallerini paylaşan Metin2Dev'den WeedHex'e teşekkürler.
Nasıl Yapacağız ;
Anlatıma geçelim gayet detaylı belirttim ;
[CODE lang="cpp" title="Cesitli_Fixler.cpp"]
// MT2Dev - Fİxler //
/*------------------------------------*/
/* Dungeon Count Monster Fix Başlangıç*/
/*------------------------------------*/
// NE DÜZELTİYORUZ ; Zindanda yanlış sayıma sebebiyet verebilecek bir kod bloğuna gerekli kontrolleri ekliyoruz.//
//Dungeon.cpp açılır ;
struct FCountMonster
//Bulunur
LPCHARACTER ch = (LPCHARACTER) ent;
if (!ch->IsPC())
//Bu kısım aşağıdaki gibi değiştirilir ;
LPCHARACTER ch = (LPCHARACTER) ent;
if (ch->IsMonster() || ch->IsStone()) // Dungeon Count Monster Fix - MT2Dev
//SON HALİ BÖYLE GÖZÜKMELİ ;
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()) // Dungeon Count Monster Fix - MT2Dev
n++;
}
}
};
/*--------------------------------*/
/* Dungeon Count Monster Fix Bitiş*/
/*--------------------------------*/
/*--------------------------------*/
/*----------------------------------*/
/* Dungeon Memory Leak Fix Başlangıç*/
/*----------------------------------*/
// NE DÜZELTİYORUZ ; Ekleyeceğimiz kontrol ile notice sisteminin sadece char girişi olduğunda tetiklenmesini sağlıyoruz, aksi halde sürekli tetiklenerek gereksiz memory kullanacak.//
//Dungeon.cpp açılır ;
struct FNotice
//Bulunur
if (ent->IsType(ENTITY_CHARACTER))
{
LPCHARACTER ch = (LPCHARACTER) ent;
ch->ChatPacket(CHAT_TYPE_NOTICE, "%s", m_psz);
}
//Bu kısım aşağıdaki gibi değiştirilir ;
if (ent->IsType(ENTITY_CHARACTER))
{
LPCHARACTER ch = (LPCHARACTER) ent;
if (ch->IsPC()) //Dungeon Memory Leak Fix - MT2Dev
ch->ChatPacket(CHAT_TYPE_NOTICE, "%s", m_psz);
}
//SON HALİ BÖYLE GÖZÜKMELİ ;
void operator() (LPENTITY ent)
{
if (ent->IsType(ENTITY_CHARACTER))
{
LPCHARACTER ch = (LPCHARACTER) ent;
if (ch->IsPC()) //Dungeon Memory Leak Fix - MT2Dev
ch->ChatPacket(CHAT_TYPE_NOTICE, "%s", m_psz);
}
}
/*------------------------------*/
/* Dungeon Memory Leak Fix Bitiş*/
/*------------------------------*/
/*------------------------------*/
/*----------------------------------------------------*/
/* Binek Üzerinde Evlilik İtemi Giyme Engeli Başlangıç*/
/*----------------------------------------------------*/
// NE DÜZELTİYORUZ ; At veya binek üzerindeyken smokin, gelinlik ve buket gibi itemlerin giyilmesini engelliyoruz.//
//char_item.cpp Açılır ;
bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
//Bulunur
if (iWearCell < 0)
return false;
//Bu Kodun Altına Eklenir ;
//MT2Dev-BINEK UZERINDEYKEN EVLILIK ITEMI GIYME ENGELI BASLANGIC//
if (iWearCell == WEAR_BODY && IsRiding() && (item->GetVnum() >= 11902 && item->GetVnum() <= 11911 && item->GetVnum() <= 11912)) //Damatlıklar
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸»À» ź »óÅ¿¡¼ ¿¹º¹À» ÀÔÀ» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (iWearCell == WEAR_BODY && IsRiding() && (item->GetVnum() >= 11903 && item->GetVnum() <= 11913 && item->GetVnum() <= 11914)) //Gelinlikler
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸»À» ź »óÅ¿¡¼ ¿¹º¹À» ÀÔÀ» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (iWearCell == WEAR_WEAPON && IsRiding() && (item->GetVnum() == 50201 && item->GetVnum() <= 50202)) //Buketler
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸»À» ź »óÅ¿¡¼ ¿¹º¹À» ÀÔÀ» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
//MT2Dev-BINEK UZERINDEYKEN EVLILIK ITEMI GIYME ENGELI BITIS//
/*------------------------------------------------*/
/* Binek Üzerinde Evlilik İtemi Giyme Engeli Bitiş*/
/*------------------------------------------------*/
/*------------------------------------------------*/
/*------------------------------------*/
/* Questlua_global Düzenleme Başlangıç*/
/*------------------------------------*/
// NE DÜZELTİYORUZ ; İki kod bloğunu detaylandırıyoruz.//
//questlua_global.cpp Açılır.
int _clear_server_timer(lua_State* L)
/*Bulunur*/
//MT2Dev-Clear_Server_Timer Fonksiyonu Detaylandırıldı
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;
}
//MT2Dev-Clear_Server_Timer Fonksiyonu Detaylandırıldı
/*Kod bloğu tamamen değiştirilir.*/
int _char_log(lua_State * L)
/*Bulunur*/
//MT2Dev-Char_Log Fonksiyonu Detaylandırıldı
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;
}
//MT2Dev-Char_Log Fonksiyonu Detaylandırıldı
/*Kod bloğu tamamen değiştirilir.*/
/*--------------------------------*/
/* Questlua_global Düzenleme Bitiş*/
/*--------------------------------*/
/*--------------------------------*/
/*--------------------------------*/
/* Battle Ekstra Kontrol Başlangıç*/
/*--------------------------------*/
// NE DÜZELTİYORUZ ; Ekstra kontrol ekliyoruz.//
//battle.cpp Açılır
bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
//Bulunur
bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
{
if (victim->IsDead() || victim->IsObserverMode()) //Ekstra Kontrol - MT2Dev
return false;
{
SECTREE *sectree = NULL;
sectree = ch->GetSectree();
if (sectree && sectree->IsAttr(ch->GetX(), ch->GetY(), ATTR_BANPK))
return false;
sectree = victim->GetSectree();
if (sectree && sectree->IsAttr(victim->GetX(), victim->GetY(), ATTR_BANPK))
return false;
}
if (ch->IsStun() || ch->IsDead() || ch->IsObserverMode()) //Ekstra Kontrol - MT2Dev
return false;
if (ch->IsPC() && victim->IsPC())
{
CGuild* g1 = ch->GetGuild();
CGuild* g2 = victim->GetGuild();
if (g1 && g2)
{
if (g1->UnderWar(g2->GetID()))
return true;
}
}
if (IS_CASTLE_MAP(ch->GetMapIndex()) && false==castle_can_attack(ch, victim))
return false;
if (CArenaManager::instance().CanAttack(ch, victim) == true)
return true;
return CPVPManager::instance().CanAttack(ch, victim);
}
//KOD BLOĞU KOMPLE DEĞİŞTİRİLİR.
/*----------------------------*/
/* Battle Ekstra Kontrol Bitiş*/
/*----------------------------*/
/*----------------------------*/
/*-------------------------------*/
/* Cube Core Downer Fix Başlangıç*/
/*-------------------------------*/
// NE DÜZELTİYORUZ ; Zorda olsa core düşürebilecek bir sıkıntıyı çözüyoruz.//
//Cube.cpp Açılır
LogManager::instance().CubeLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(),
reward_value->vnum, new_item->GetID(), reward_value->count, 1);
//Bulunur
if (new_item)
LogManager::instance().CubeLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(),reward_value->vnum, new_item->GetID(), reward_value->count, 1); //Rare Core Downer Fix - MT2Dev
else
sys_err("Cannot find new_item on CUBE_MAKE!");
//Değiştirilir
/*---------------------------*/
/* Cube Core Downer Fix Bitiş*/
/*---------------------------*/
[/CODE]
// MT2Dev - Fİxler //
/*------------------------------------*/
/* Dungeon Count Monster Fix Başlangıç*/
/*------------------------------------*/
// NE DÜZELTİYORUZ ; Zindanda yanlış sayıma sebebiyet verebilecek bir kod bloğuna gerekli kontrolleri ekliyoruz.//
//Dungeon.cpp açılır ;
struct FCountMonster
//Bulunur
LPCHARACTER ch = (LPCHARACTER) ent;
if (!ch->IsPC())
//Bu kısım aşağıdaki gibi değiştirilir ;
LPCHARACTER ch = (LPCHARACTER) ent;
if (ch->IsMonster() || ch->IsStone()) // Dungeon Count Monster Fix - MT2Dev
//SON HALİ BÖYLE GÖZÜKMELİ ;
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()) // Dungeon Count Monster Fix - MT2Dev
n++;
}
}
};
/*--------------------------------*/
/* Dungeon Count Monster Fix Bitiş*/
/*--------------------------------*/
/*--------------------------------*/
/*----------------------------------*/
/* Dungeon Memory Leak Fix Başlangıç*/
/*----------------------------------*/
// NE DÜZELTİYORUZ ; Ekleyeceğimiz kontrol ile notice sisteminin sadece char girişi olduğunda tetiklenmesini sağlıyoruz, aksi halde sürekli tetiklenerek gereksiz memory kullanacak.//
//Dungeon.cpp açılır ;
struct FNotice
//Bulunur
if (ent->IsType(ENTITY_CHARACTER))
{
LPCHARACTER ch = (LPCHARACTER) ent;
ch->ChatPacket(CHAT_TYPE_NOTICE, "%s", m_psz);
}
//Bu kısım aşağıdaki gibi değiştirilir ;
if (ent->IsType(ENTITY_CHARACTER))
{
LPCHARACTER ch = (LPCHARACTER) ent;
if (ch->IsPC()) //Dungeon Memory Leak Fix - MT2Dev
ch->ChatPacket(CHAT_TYPE_NOTICE, "%s", m_psz);
}
//SON HALİ BÖYLE GÖZÜKMELİ ;
void operator() (LPENTITY ent)
{
if (ent->IsType(ENTITY_CHARACTER))
{
LPCHARACTER ch = (LPCHARACTER) ent;
if (ch->IsPC()) //Dungeon Memory Leak Fix - MT2Dev
ch->ChatPacket(CHAT_TYPE_NOTICE, "%s", m_psz);
}
}
/*------------------------------*/
/* Dungeon Memory Leak Fix Bitiş*/
/*------------------------------*/
/*------------------------------*/
/*----------------------------------------------------*/
/* Binek Üzerinde Evlilik İtemi Giyme Engeli Başlangıç*/
/*----------------------------------------------------*/
// NE DÜZELTİYORUZ ; At veya binek üzerindeyken smokin, gelinlik ve buket gibi itemlerin giyilmesini engelliyoruz.//
//char_item.cpp Açılır ;
bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
//Bulunur
if (iWearCell < 0)
return false;
//Bu Kodun Altına Eklenir ;
//MT2Dev-BINEK UZERINDEYKEN EVLILIK ITEMI GIYME ENGELI BASLANGIC//
if (iWearCell == WEAR_BODY && IsRiding() && (item->GetVnum() >= 11902 && item->GetVnum() <= 11911 && item->GetVnum() <= 11912)) //Damatlıklar
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸»À» ź »óÅ¿¡¼ ¿¹º¹À» ÀÔÀ» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (iWearCell == WEAR_BODY && IsRiding() && (item->GetVnum() >= 11903 && item->GetVnum() <= 11913 && item->GetVnum() <= 11914)) //Gelinlikler
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸»À» ź »óÅ¿¡¼ ¿¹º¹À» ÀÔÀ» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (iWearCell == WEAR_WEAPON && IsRiding() && (item->GetVnum() == 50201 && item->GetVnum() <= 50202)) //Buketler
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸»À» ź »óÅ¿¡¼ ¿¹º¹À» ÀÔÀ» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
//MT2Dev-BINEK UZERINDEYKEN EVLILIK ITEMI GIYME ENGELI BITIS//
/*------------------------------------------------*/
/* Binek Üzerinde Evlilik İtemi Giyme Engeli Bitiş*/
/*------------------------------------------------*/
/*------------------------------------------------*/
/*------------------------------------*/
/* Questlua_global Düzenleme Başlangıç*/
/*------------------------------------*/
// NE DÜZELTİYORUZ ; İki kod bloğunu detaylandırıyoruz.//
//questlua_global.cpp Açılır.
int _clear_server_timer(lua_State* L)
/*Bulunur*/
//MT2Dev-Clear_Server_Timer Fonksiyonu Detaylandırıldı
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;
}
//MT2Dev-Clear_Server_Timer Fonksiyonu Detaylandırıldı
/*Kod bloğu tamamen değiştirilir.*/
int _char_log(lua_State * L)
/*Bulunur*/
//MT2Dev-Char_Log Fonksiyonu Detaylandırıldı
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;
}
//MT2Dev-Char_Log Fonksiyonu Detaylandırıldı
/*Kod bloğu tamamen değiştirilir.*/
/*--------------------------------*/
/* Questlua_global Düzenleme Bitiş*/
/*--------------------------------*/
/*--------------------------------*/
/*--------------------------------*/
/* Battle Ekstra Kontrol Başlangıç*/
/*--------------------------------*/
// NE DÜZELTİYORUZ ; Ekstra kontrol ekliyoruz.//
//battle.cpp Açılır
bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
//Bulunur
bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
{
if (victim->IsDead() || victim->IsObserverMode()) //Ekstra Kontrol - MT2Dev
return false;
{
SECTREE *sectree = NULL;
sectree = ch->GetSectree();
if (sectree && sectree->IsAttr(ch->GetX(), ch->GetY(), ATTR_BANPK))
return false;
sectree = victim->GetSectree();
if (sectree && sectree->IsAttr(victim->GetX(), victim->GetY(), ATTR_BANPK))
return false;
}
if (ch->IsStun() || ch->IsDead() || ch->IsObserverMode()) //Ekstra Kontrol - MT2Dev
return false;
if (ch->IsPC() && victim->IsPC())
{
CGuild* g1 = ch->GetGuild();
CGuild* g2 = victim->GetGuild();
if (g1 && g2)
{
if (g1->UnderWar(g2->GetID()))
return true;
}
}
if (IS_CASTLE_MAP(ch->GetMapIndex()) && false==castle_can_attack(ch, victim))
return false;
if (CArenaManager::instance().CanAttack(ch, victim) == true)
return true;
return CPVPManager::instance().CanAttack(ch, victim);
}
//KOD BLOĞU KOMPLE DEĞİŞTİRİLİR.
/*----------------------------*/
/* Battle Ekstra Kontrol Bitiş*/
/*----------------------------*/
/*----------------------------*/
/*-------------------------------*/
/* Cube Core Downer Fix Başlangıç*/
/*-------------------------------*/
// NE DÜZELTİYORUZ ; Zorda olsa core düşürebilecek bir sıkıntıyı çözüyoruz.//
//Cube.cpp Açılır
LogManager::instance().CubeLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(),
reward_value->vnum, new_item->GetID(), reward_value->count, 1);
//Bulunur
if (new_item)
LogManager::instance().CubeLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(),reward_value->vnum, new_item->GetID(), reward_value->count, 1); //Rare Core Downer Fix - MT2Dev
else
sys_err("Cannot find new_item on CUBE_MAKE!");
//Değiştirilir
/*---------------------------*/
/* Cube Core Downer Fix Bitiş*/
/*---------------------------*/
[/CODE]
Direk olarak cpp dosyasından almak isteyenler için link ;
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
-
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
- Katılım
- 6 Eki 2015
- Konular
- 200
- Mesajlar
- 3,404
- Çözüm
- 49
- Online süresi
- 11mo 6d
- Reaksiyon Skoru
- 2,894
- Altın Konu
- 0
- Başarım Puanı
- 293
- MmoLira
- 21,011
- DevLira
- 21
Eline sağlık
- Katılım
- 6 Eyl 2009
- Konular
- 66
- Mesajlar
- 2,434
- Çözüm
- 1
- Online süresi
- 3d 9h
- Reaksiyon Skoru
- 2,157
- Altın Konu
- 0
- TM Yaşı
- 16 Yıl 9 Ay 5 Gün
- Başarım Puanı
- 283
- MmoLira
- 239
- DevLira
- 56
Fixman en delici coreler için Kalıcı Çözümler..
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 62
- Görüntüleme
- 13K