xranzei 1
xranzei
zendor2 1
zendor2
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
D 1
delimuratt
melankolıa18 1
melankolıa18
shrpnl 1
shrpnl
Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com
Kaynak ikonu

[C++] Çeşitli Fixler 1.0

indirmek için izniniz yok
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 ;

[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]


Direk olarak cpp dosyasından almak isteyenler için link ;

DosyaUpload - VirüsTotal
Yazar
Ectoor
Kaynak İndirilme
13
Görüntüleme
275
İlk yayınlama
Son Güncelleme

Ratings

0.00 yıldız(lar) 0 rating

Ectoor - Kaynakları

Geri
Üst