Fethi Polat 1
Fethi Polat
xranzei 1
xranzei
Bvural41 1
Bvural41
kralhakan2009 1
kralhakan2009
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Vahsi Uzman 1
Vahsi Uzman
Cannn6161 1
Cannn6161
B 1
berione65
sen272 1
sen272
Mt2Hizmet 1
Mt2Hizmet
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Max level sınırını yükseltme (source)

  • Konuyu başlatan Konuyu başlatan Shiver
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 39
  • Görüntüleme Görüntüleme 13K
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Shiver

Level 5
TM Üye
Katılım
14 Nis 2014
Konular
206
Mesajlar
600
Reaksiyon Skoru
98
Altın Konu
0
TM Yaşı
12 Yıl 1 Ay 26 Gün
Başarım Puanı
82
MmoLira
-43
DevLira
50
Ticaret - 0%
0   0   0

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!

Selamlar,
Konuyu açıyorum ama, yorumlar için öncelikle bir ön bildilendirme yapayım, yeni başladım bu source işlerine pek fazla bilgim yok yavaş yavaş ilerliyorum. Yabancı forumları gezerek, bilgili arkadaşlardan yardım alarak devam ediyorum..

O yüzden eleştirmeden önce, tavsiye vermeniz daha önemli benim için.

Her neyse, konu alıntı zaten, türkçeleştirip açıyorum konuyu kendi source'me ekledim game deneme fırsatım olmadı ama konuyu burada paylaşmak istedim.
Konuda uzman arkadaşlar, gerekli uyarılara,tavsiyelere,yorumlara açığım.

Eksik gördüğünüz bir yer ya da bir sıkıntı varsa, iletin hep beraber çözelim.

Başlayalım..






game/src



char.cpp



Aratılır,


void CHARACTER::SetLevel(BYTE level)


Bununla değiştirilir,


void CHARACTER::SetLevel(int level)

char.h


Aratılır,


void SetLevel(BYTE level);


Değiştirilir,


void SetLevel(int level);


Aratılır,



(typedef struct character_point'in altında)


Değiştirilir,




party.cpp


Aratılır,


void CParty::P2PSetMemberLevel(DWORD pid, BYTE level)


Değiştirilir,


void CParty::P2PSetMemberLevel(DWORD pid, int level)


Aratılır,


BYTE CParty::GetMemberMaxLevel()
{
BYTE bMax = 0;


Değiştirilir,


int CParty::GetMemberMaxLevel()
{
int bMax = 0;


Aratılır,


BYTE CParty::GetMemberMinLevel()
{
BYTE bMin = PLAYER_MAX_LEVEL_CONST;


Değiştirilir,


int CParty::GetMemberMinLevel()
{
int bMin = PLAYER_MAX_LEVEL_CONST;


Aratılır,


void CParty::RequestSetMemberLevel(DWORD pid, BYTE level)


Değiştirilir,


void CParty::RequestSetMemberLevel(DWORD pid, int level)


party.h


Aratılır




(typedef struct SMember 'ın altında)


Değiştirilir,




Aratılır,


BYTE GetMemberMaxLevel();
BYTE GetMemberMinLevel();


Değiştirilir,


int GetMemberMaxLevel();
int GetMemberMinLevel();

Aratılır,


void RequestSetMemberLevel(DWORD pid, BYTE level);
void P2PSetMemberLevel(DWORD pid, BYTE level);


Değiştirilir,


void RequestSetMemberLevel(DWORD pid, int level);
void P2PSetMemberLevel(DWORD pid, int level);


char_battle.cpp


Aratılır,


struct FPartyTotaler
{
int total;


Değiştirilir,


struct FPartyTotaler
{
long total;


Aratılır,


struct FPartyDistributor
{
int total;
LPCHARACTER c;
int x, y;
DWORD _iExp;
int m_iMode;
int m_iMemberCount;


FPartyDistributor(LPCHARACTER center, int member_count, int total, DWORD iExp, int iMode)

Değiştirilir,


struct FPartyDistributor
{
long total;
LPCHARACTER c;
int x, y;
DWORD _iExp;
int m_iMode;
int m_iMemberCount;


FPartyDistributor(LPCHARACTER center, int member_count, long total, DWORD iExp, int iMode)




config.h


Aratılır,


extern BYTE PK_PROTECT_LEVEL;


Değiştirilir,


extern int PK_PROTECT_LEVEL;


locale_service.cpp


Aratılır,


BYTE PK_PROTECT_LEVEL


Değiştirilir,


int PK_PROTECT_LEVEL


constants.cpp
( Bu bölümde max level sınırını seçeceksiniz. Her bir dizinin altında aşağıda vereceğim resimdeki gibi 10'dan 120'ye vs source göre değişir.
Leveller verilen expler var, siz en son 120'yse onların explerini kopyalayıp hemen altına yapıştırarak sadece //120 olan yerleri gerekli şekilde
max level kaça kadar yaptıysanız 5'er 5'er artırarak yapacaksınız.)


Örneğin 300 yapacaksanız sınırı, exp tabloları 300'e kadar gitmeli)

Resimler,





Şimdi dosyamıza dönelim tekrar.


constants.cpp açılır.


const DWORD exp_table_euckr[PLAYER_EXP_TABLE_MAX + 1]
const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1]
const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1 ]
const DWORD party_exp_distribute_table[PLAYER_MAX_LEVEL_CONST + 1]
const int aiExpLossPercents[PLAYER_EXP_TABLE_MAX + 1]


Yukarıda belirtilen dizinler tek tek aratılır, ve aşağısında exp oranlarının tabloları yer alır,
Bunları açıkladığım şekilde düzenleyin. Ayrıca const DWORD party_exp_distribute_table' a kadar aynı şekil ondan sonra biraz farklı durum ama
anlayacaksınız gördüğünüzde aynı mantıkla onu da o şekilde düzenleyeceksiniz.


log.h


Aratılır,


void LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, BYTE bLevel, BYTE bJob, DWORD dwPlayTime);


Değiştirilir,


void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, int bLevel, BYTE bJob, DWORD dwPlayTime)


log.cpp


Aratılır,


void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, BYTE bLevel, BYTE bJob, DWORD dwPlayTime)


Değiştirilir,


void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, int bLevel, BYTE bJob, DWORD dwPlayTime)


guild.h


Aratılır,

typedef struct SGuildMemberPacketData
{
DWORD pid;
BYTE grade;
BYTE is_general;
BYTE job;
BYTE level;
DWORD offer;
BYTE name_flag;
char name[CHARACTER_NAME_MAX_LEN+1];
} TGuildMemberPacketData;


Değiştirilir,

typedef struct SGuildMemberPacketData
{
DWORD pid;
BYTE byGrade;
BYTE byIsGeneral;
BYTE byJob;
int byLevel;
DWORD dwOffer;
BYTE byNameFlag;
} TGuildMemberPacketData;

Aratılır,


void ChangeMemberData(DWORD pid, DWORD offer, BYTE level, BYTE grade);

Değiştirilir,


void ChangeMemberData(DWORD pid, DWORD offer, int level, BYTE grade);


Aratılır,


SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, BYTE level, DWORD offer_exp, char* name);

Değiştirilir,


SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, int level, DWORD offer_exp, char* name);


Aratılır,


DWORD pid; // player L×REşíRÇ id; primary key
BYTE grade; // ±cµl»óRÇ ÇA·aRElîRÇ °c±T 1 to 15 (1RE ÂZ)
BYTE is_general;
BYTE job;
BYTE level;
DWORD offer_exp; // °rÇlÇN °cÇcÄ^
BYTE _dummy;

Değiştirilir,


DWORD pid; // player L×REşíRÇ id; primary key
BYTE grade; // ±cµl»óRÇ ÇA·aRElîRÇ °c±T 1 to 15 (1RE ÂZ)
BYTE is_general;
BYTE job;
int level;
DWORD offer_exp; // °rÇlÇN °cÇcÄ^
BYTE _dummy;

NOT : Bu kısımda değişik harfler var bunları bulamayabilir, DWORD pid; //player diye aratın. Harfleri görünce anlarsınız zaten
Değiştirip kaydettikten sonra unicode uyarısı verebilir evet diyin buna, ( visual studio ile yapıyorsanız işlemleri)

Aratılır,


void LevelChange(DWORD pid, BYTE level);


Değiştirilir,


void LevelChange(DWORD pid, int level);


guild.cpp


Aratılır,


BYTE level = (BYTE)strtoul(row[4], (char**) NULL, 10);


Değiştirilir,


int level = (int)strtoul(row[4], (char**) NULL, 10);


Aratılır,


sys_log(0, "GUILD: AddMember PID %u, grade %u, job %u, level %u, offer %u, name %s ptr %p",


Değiştirilir,


sys_log(0, "GUILD: AddMember PID %u, grade %u, job %u, level %d, offer %u, name %s ptr %p",


Aratılır,


void CGuild::ChangeMemberData(DWORD pid, DWORD offer, BYTE level, BYTE grade)


Değiştirilir,

void CGuild::ChangeMemberData(DWORD pid, DWORD offer, int level, BYTE grade)
{
TGuildMemberContainer::iterator cit = m_member.find(pid);


if (cit == m_member.end())
return;


cit->second.offer_exp = offer;
cit->second.level = level;
cit->second.grade = grade;
cit->second._dummy = 0;


TPacketGCGuild pack;
TGuildMemberPacketData mbData;
pack.header = HEADER_GC_GUILD;
pack.subheader = GUILD_SUBHEADER_GC_LIST;
pack.size = sizeof(TPacketGCGuild);
pack.size += sizeof(TGuildMemberPacketData);


for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
{
LPDESC d = (*it)->GetDesc();
if (d)
{
TEMP_BUFFER buf;


buf.write(&pack, sizeof(pack));


mbData.byNameFlag = 0;
mbData.byGrade = cit->second.grade;
mbData.byIsGeneral = cit->second.is_general;
mbData.byJob = cit->second.job;
mbData.byLevel = cit->second.level;
mbData.dwOffer = cit->second.offer_exp;
mbData.pid = cit->second.pid;
buf.write(&mbData, sizeof(TGuildMemberPacketData));


d->Packet(buf.read_peek(), buf.size());
}
}
}


Aratılır,


void CGuild::LevelChange(DWORD pid, BYTE level)

Değiştirilir,


void CGuild::LevelChange(DWORD pid, int level)
{
TGuildMemberContainer::iterator cit = m_member.find(pid);


if (cit == m_member.end())
return;


cit->second.level = level;


TPacketGuildChangeMemberData gd_guild;


gd_guild.guild_id = GetID();
gd_guild.pid = pid;
gd_guild.offer = cit->second.offer_exp;
gd_guild.grade = cit->second.grade;
gd_guild.level = level;


db_clientdesc->DBPacket(HEADER_GD_GUILD_CHANGE_MEMBER_DATA, 0, &gd_guild, sizeof(gd_guild));


TPacketGCGuild pack;
TGuildMemberPacketData mbData;
pack.header = HEADER_GC_GUILD;
pack.subheader = GUILD_SUBHEADER_GC_LIST;
pack.size = sizeof(TPacketGCGuild);
pack.size += sizeof(TGuildMemberPacketData);
cit->second._dummy = 0;


for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
{
LPDESC d = (*it)->GetDesc();


if (d)
{
TEMP_BUFFER buf;


buf.write(&pack, sizeof(pack));


mbData.byNameFlag = 0;
mbData.byGrade = cit->second.grade;
mbData.byIsGeneral = cit->second.is_general;
mbData.byJob = cit->second.job;
mbData.byLevel = cit->second.level;
mbData.dwOffer = cit->second.offer_exp;
mbData.pid = cit->second.pid;
buf.write(&mbData, sizeof(TGuildMemberPacketData));


d->Packet(buf.read_peek(), buf.size());
}
}
}

Aratılır,


bool CGuild::OfferExp(LPCHARACTER ch, int amount)


Değiştirilir,


bool CGuild::OfferExp(LPCHARACTER ch, int amount)
{
TGuildMemberContainer::iterator cit = m_member.find(ch->GetPlayerID());


if (cit == m_member.end())
return false;


if (m_data.exp+amount < m_data.exp)
return false;


if (amount < 0)
return false;


if (ch->GetExp() < (DWORD) amount)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±cµl> Á¦°rÇD°íRÚ ÇD´Â °cÇcÄ^°^ l¸Rş °cÇcÄ^ş¸´U ¸a¨R´D´U."));
return false;
}


if (ch->GetExp() - (DWORD) amount > ch->GetExp())
{
sys_err("Wrong guild offer amount %d by %s[%u]", amount, ch->GetName(), ch->GetPlayerID());
return false;
}


ch->PointChange(POINT_EXP, -amount);


TPacketGuildExpUpdate guild_exp;
guild_exp.guild_id = GetID();
guild_exp.amount = amount / 100;
db_clientdesc->DBPacket(HEADER_GD_GUILD_EXP_UPDATE, 0, &guild_exp, sizeof(guild_exp));
GuildPointChange(POINT_EXP, amount / 100, true);


cit->second.offer_exp += amount / 100;
cit->second._dummy = 0;


TPacketGCGuild pack;
TGuildMemberPacketData mbData;
pack.header = HEADER_GC_GUILD;
pack.subheader = GUILD_SUBHEADER_GC_LIST;
pack.size = sizeof(TPacketGCGuild);
pack.size += sizeof(TGuildMemberPacketData);


for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
{
LPDESC d = (*it)->GetDesc();
if (d)
{


TEMP_BUFFER buf;


buf.write(&pack, sizeof(pack));


mbData.byNameFlag = 0;
mbData.byGrade = cit->second.grade;
mbData.byIsGeneral = cit->second.is_general;
mbData.byJob = cit->second.job;
mbData.byLevel = cit->second.level;
mbData.dwOffer = cit->second.offer_exp;
mbData.pid = cit->second.pid;
buf.write(&mbData, sizeof(TGuildMemberPacketData));


d->Packet(buf.read_peek(), buf.size());
}
}


SaveMember(ch->GetPlayerID());


TPacketGuildChangeMemberData gd_guild;


gd_guild.guild_id = GetID();
gd_guild.pid = ch->GetPlayerID();
gd_guild.offer = cit->second.offer_exp;
gd_guild.level = ch->GetLevel();
gd_guild.grade = cit->second.grade;


db_clientdesc->DBPacket(HEADER_GD_GUILD_CHANGE_MEMBER_DATA, 0, &gd_guild, sizeof(gd_guild));
return true;
}


Aratılır,


void CGuild::SendListPacket(LPCHARACTER ch)


Değiştirilir,


void CGuild::SendListPacket(LPCHARACTER ch)
{
/*
List Packet


Header
Count (byte)
[
...
name_flag 1 - RE¸§R» ş¸l»´RlÄ lCş¸l»´RlÄ
name CHARACTER_NAME_MAX_LEN+1
] * Count


*/
LPDESC d;
if (!(d=ch->GetDesc()))
return;


TPacketGCGuild pack;
pack.header = HEADER_GC_GUILD;
pack.size = sizeof(TPacketGCGuild);
pack.subheader = GUILD_SUBHEADER_GC_LIST;


pack.size += sizeof(TGuildMemberPacketData) * m_member.size();


TEMP_BUFFER buf;


TGuildMemberPacketData mbData;


buf.write(&pack,sizeof(pack));


char c[CHARACTER_NAME_MAX_LEN+1];


for (TGuildMemberContainer::iterator it = m_member.begin(); it != m_member.end(); ++it)
{
it->second._dummy = 1;


mbData.byNameFlag = 1;
mbData.byGrade = it->second.grade;
mbData.byIsGeneral = it->second.is_general;
mbData.byJob = it->second.job;
mbData.byLevel = it->second.level;
mbData.dwOffer = it->second.offer_exp;
mbData.pid = it->second.pid;


buf.write(&mbData, sizeof(TGuildMemberPacketData));


strlcpy(c, it->second.name.c_str(), MIN(sizeof(c), it->second.name.length() + 1));


buf.write(c, CHARACTER_NAME_MAX_LEN+1 );


if ( test_server )
sys_log(0 ,"name %s job %d ", it->second.name.c_str(), it->second.job );
}


d->Packet(buf.read_peek(), buf.size());


for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
{
SendLoginPacket(ch, *it);
}


for (TGuildMemberP2POnlineContainer::iterator it = m_memberP2POnline.begin(); it != m_memberP2POnline.end(); ++it)
{
SendLoginPacket(ch, *it);
}


}

Aratılır,


void CGuild::SendListOneToAll(DWORD pid)


Değiştirilir,


void CGuild::SendListOneToAll(DWORD pid)
{


TPacketGCGuild pack;
pack.header = HEADER_GC_GUILD;
pack.size = sizeof(TPacketGCGuild);
pack.subheader = GUILD_SUBHEADER_GC_LIST;


pack.size += sizeof(TGuildMemberPacketData);


TGuildMemberPacketData mbData;


char c[CHARACTER_NAME_MAX_LEN+1];
memset(c, 0, sizeof(c));


TGuildMemberContainer::iterator cit = m_member.find(pid);
if (cit == m_member.end())
return;


for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it!= m_memberOnline.end(); ++it)
{
LPDESC d = (*it)->GetDesc();
if (!d)
continue;


TEMP_BUFFER buf;


buf.write(&pack, sizeof(pack));


cit->second._dummy = 1;


mbData.byNameFlag = 1;
mbData.byGrade = cit->second.grade;
mbData.byIsGeneral = cit->second.is_general;
mbData.byJob = cit->second.job;
mbData.byLevel = cit->second.level;
mbData.dwOffer = cit->second.offer_exp;
mbData.pid = cit->second.pid;
//buf.write(&(cit->second), sizeof(DWORD) * 3 +1);
buf.write(&mbData, sizeof(TGuildMemberPacketData));
buf.write(cit->second.name.c_str(), cit->second.name.length());
buf.write(c, CHARACTER_NAME_MAX_LEN + 1 - cit->second.name.length());
d->Packet(buf.read_peek(), buf.size());
}
}

Aratılır,


SGuildMember::SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, BYTE level, DWORD offer_exp, char* name)

Değiştirilir,


SGuildMember::SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, int level, DWORD offer_exp, char* name)


SOURCE KLASÖRÜNÜZÜN İÇERİSİNDE BULUNAN common dosyasına giriyoruz.


tables.h


Aratılır,




Değiştirilir,



Aratılır,




Değiştirilir,




Aratılır,



Değiştirilir,




Aratılır,



(SPacketPartySetMemberLevel'ın altında)


Değiştirilir,




Aratılır,


(typedef struct SPacketDGGuildMember'ın altında)


Değiştirilir,




lenght.h


Şimdi max level sınırını seçiyoruz, aşağıdaki kısmı aratın ve 120'leri max level sınırını kaç istiyorsanız ona göre değiştirip,kaydedin.


PLAYER_EXP_TABLE_MAX = 120,
PLAYER_MAX_LEVEL_CONST = 120,



COMMON İLE İŞİMİZ BİTTİ. ŞİMDİ SOURCE KLASÖRÜMÜZDEN DB'YE ORADAN SRC'YE GİRİYORUZ. (DB/SRC)


ClientManager.h


Aratılır,


struct TPartyInfo
{
BYTE bRole;
BYTE bLevel;


Değiştirilir,


struct TPartyInfo
{
BYTE bRole;
int bLevel;


ClientManagerPlayer.cpp


Aratılır,


"PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d"


Değiştirilir,


"PLAYER_DELETE FAILED LEVEL %d >= DELETE LIMIT %d"


Aratılır, ( 2 tane bulacaksınız, biraz altında bir tane daha var ikisini de değiştirin)


"PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d"

Değiştirilir,


"PLAYER_DELETE FAILED LEVEL %d >= DELETE LIMIT %d"

DB İLE İŞİMİZ BİTTİ SIRA CLİENT'DA (client)


packet.h


Aratılır,


Değiştirilir,




Aratılır,




Değiştirilir,




PythonGuild.h


Aratılır,




Değiştirilir,





NOT : Son olarak navicattan player databesini açın player tablosuna sağ tıklayıp design table diyin ve gerekli level sütun düzenlemelerini yapın.



 
Son düzenleme:
max 250 level kullancak biri sadece constant.cpp ve lengh.h editlese yeterlidir. teşekkürler konu için
 
max 250 level kullancak biri sadece constant.cpp ve lengh.h editlese yeterlidir. teşekkürler konu için

Yorum için teşekkürler,
Bu kısım önemli sanırım altını çizelim max 250 level kullancak biri sadece constant.cpp ve lengh.h editlese yeterlidir.
 
Çok zahmetli bir iş gibi görünüyor maximum 250 level yeterli galiba :p
 
Teşekkürler 40k da salti yapacaklar için yararlı bir konu :ka19:
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst