Jump to content

Como Alterar Nível Máximo [Src]


Dynamic Things
 Share

Recommended Posts

Game/src

Abrir char.cpp

Procurar por:

void CHARACTER::SetLevel(BYTE level)

Alterar por:

void CHARACTER::SetLevel(int level)

Abrir char.h

Procurar por:

void			SetLevel(BYTE level);

Alterar por:

void			SetLevel(int level);

No mesmo ficheiro procurar por:

BYTE			level;

Alterar por:

int				level;

Abrir party.cpp

procurar por:

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

Alterar por:

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

no mesmo ficheiro procurar por:

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

alterar por :

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

E ainda no mesmo ficheiro procurar por:

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

Alterar por:

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

No mesmo ficheiro procurar por:

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

Alterar por:

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

Abrir ficheiro party.h

procurar por:

BYTE	bLevel;
(isso é por baixo do: typedef struct SMember)

Alterar por:

int	bLevel;

Também procurar por:

	BYTE		GetMemberMaxLevel();
	BYTE		GetMemberMinLevel();

Alterar por:

	int		GetMemberMaxLevel();
	int		GetMemberMinLevel();

Procurar também por:

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

Alterar por:

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

Abrir char_battle.cpp

Procurar por:

struct FPartyTotaler
{
	int		total;

Alterar por:

struct FPartyTotaler
{
	long		total;

Procurar também por:

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) 

Por isto:

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) 

Abrir config.h

procurar por:

extern BYTE	PK_PROTECT_LEVEL;

Alterar por:

extern int	PK_PROTECT_LEVEL;

Abrir locale_service.cpp

Alterar isso:

BYTE PK_PROTECT_LEVEL

Por isso:

int PK_PROTECT_LEVEL

Abrir constants.cpp

Aqui é o local, onde decides o nível máximo que queres adicionar, Se quiseres adicionar nível máximo 400 ou mais, então tens que adicionar 400 ou mais tabelas.

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]

Abrir log.h

procurar por:

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

Alterar por:

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

Abrir log.cpp

procurar por:

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

Alterar por:

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

Abrir guild.h

Procurar por:

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;

Alterar por:

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

Procurar também por:

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

Alterar por:

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

Procurar:

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

Alterar por:

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

Procurar também por:

DWORD pid; // player Ĺ×ŔĚşíŔÇ id; primary key
BYTE grade; // ±ćµĺ»óŔÇ ÇĂ·ąŔĚľîŔÇ °č±Ţ 1 to 15 (1ŔĚ ÂŻ)
BYTE is_general;
BYTE job;
BYTE level;
DWORD offer_exp; // °řÇĺÇŃ °ćÇčġ
BYTE _dummy;

e alterar por:

DWORD pid; // player Ĺ×ŔĚşíŔÇ id; primary key
BYTE grade; // ±ćµĺ»óŔÇ ÇĂ·ąŔĚľîŔÇ °č±Ţ 1 to 15 (1ŔĚ ÂŻ)
BYTE is_general;
BYTE job;
int level;
DWORD offer_exp; // °řÇĺÇŃ °ćÇčġ
BYTE _dummy;

Depois ainda no mesmo ficheiro procurar por:

void		LevelChange(DWORD pid, BYTE level);

Alterar por:

void		LevelChange(DWORD pid, int level);

Abrir guild.cpp

Procurar por:

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

Alterar por:

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

No mesmo ficheiro procurar por:

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

Alterar por:

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

Procurar por:

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

Alterar a função por:

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());
	}
}
}

Procurar por:

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

Alterar a função por:

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());
	}
}
}

Procurar por:

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

Alterar função por:

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("<±ćµĺ> Á¦°řÇĎ°íŔÚ ÇĎ´Â °ćÇčġ°ˇ ł˛Ŕş °ćÇčġş¸´Ů ¸ą˝Ŕ´Ď´Ů."));
	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;
}

Procurar por:

void CGuild::SendListPacket(LPCHARACTER ch)

Alterar a função por:

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

   Header
   Count (byte)
   [
   ...
   name_flag 1 - Ŕ̸§Ŕ» ş¸ł»´ŔłÄ ľČş¸ł»´ŔłÄ
   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);
}

}

Procurar por:

void CGuild::SendListOneToAll(DWORD pid)

Alterar a função por:

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());
}
}

Procurar por:

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

Alterar por:

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

common/

Abrir tables.h

Procurar por:

BYTE		byLevel;

Alterar por:

int		byLevel;

Procurar por:

int		byLevel;

Alterar por:

int	level;

Procurar por:

BYTE level;

Alterar por:

int level;

Procurar por:

(depois de typedef struct SPacketPartySetMemberLevel)

BYTE	bLevel;

Alterar por:

int	bLevel;

Procurar por isso:

(depois de typedef struct SPacketDGGuildMember)

BYTE	bLevel;

Alterar por:

int	bLevel;

Abrir lenght.h

Aqui adicionamos o nível máximo que queremos.

PLAYER_EXP_TABLE_MAX	= 120,
PLAYER_MAX_LEVEL_CONST	= 120,

db/src

Abrir ClientManager.h

Procurar por:

struct TPartyInfo
{
    BYTE bRole;
    BYTE bLevel;

Alterar por:

struct TPartyInfo
{
    BYTE bRole;
    int bLevel;

Abrir ClientManagerPlayer.cpp

Procurar:

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

Alterar por:

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

Procurar por:

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

Alterar por:

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

cliente/src

Abrir packet.h

Procurar por:

BYTE                byLevel;

Alterar por:

int                byLevel;

procurar por:

BYTE byLevel;

Alterar por:

int byLevel;

Abrir PythonGuild.h

Procurar por:

BYTE byLevel;

Alterar por:

int byLevel;

E finalmente, edita a coluna level na tabela player da base de dados player. Define o tipo de tinyint para smallint ( ou int, depende do valor do nível máximo) e aumenta o tamanho para 3 ( ou maior ).

Como fazer em video.

Fonte Metin2Dev.

Créditos ~masodikbela

Link to comment
Share on other sites

  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...