Code:
//Adiciona pontos para o personagem
#define CMD_FORCA "/addstr "
#define CMD_AGILIDADE "/addagi "
#define CMD_VITALIDADE "/addvit "
#define CMD_ENERGIA "/addene "
#define CMD_CARISMA "/addcmd "
bool IsPonto(DWORD PlayerID, LPCSTR Comando)
{
int CmdLen, Pontos;
char* Atributo = "";
char Mensagem[100] = "";
PMSG_USE_STAT_FRUIT pResult;
PHeadSetB((LPBYTE)&pResult,0x2C,sizeof(pResult));
if(memicmp(CMD_FORCA, Comando, sizeof(CMD_FORCA)-1) == 0)
{
if( CheckIfLevelUpPoint(PlayerID) == TRUE)
return false;
CmdLen = sizeof(CMD_FORCA)-1;
sscanf(Comando+CmdLen,"%d", &Pontos);
Pontos = abs(Pontos);
Atributo = msg[14].Message;
if((CheckLevelUpPoint(PlayerID,Pontos,3)) == FALSE)
{
wsprintf(Mensagem, msg[19].Message, Atributo); // "Essa quantidade de pontos excede o maximo de pontos em %s para sua classe"
C1TipPlayer(PlayerID,Mensagem,1);
return false;
}
pResult.result = 0;
pResult.btStatValue = Pontos;
pResult.btFruitType = 3;
DataSend(PlayerID,(unsigned char *)&pResult,pResult.h.size);
Obj[PlayerID].Strength += Pontos;
wsprintf(Mensagem, msg[20].Message, Pontos, Atributo); // "Foram adicionados %d pontos em %s"
C1TipPlayer(PlayerID,Mensagem,1);
}
else if(memicmp(CMD_AGILIDADE, Comando, sizeof(CMD_AGILIDADE)-1) == 0)
{
if( CheckIfLevelUpPoint(PlayerID) == TRUE)
return false;
CmdLen = sizeof(CMD_AGILIDADE)-1;
sscanf(Comando+CmdLen,"%d", &Pontos);
Pontos = abs(Pontos);
Atributo = msg[15].Message;
if((CheckLevelUpPoint(PlayerID,Pontos,2)) == FALSE)
{
wsprintf(Mensagem, msg[19].Message, Atributo); // "Essa quantidade de pontos excede o maximo de pontos em %s para sua classe"
C1TipPlayer(PlayerID,Mensagem,1);
return false;
}
pResult.result = 0;
pResult.btStatValue = Pontos;
pResult.btFruitType = 2;
DataSend(PlayerID,(unsigned char *)&pResult,pResult.h.size);
Obj[PlayerID].Dexterity += Pontos;
wsprintf(Mensagem, msg[20].Message, Pontos, Atributo); // "Foram adicionados %d pontos em %s"
C1TipPlayer(PlayerID,Mensagem,1);
}
else if(memicmp(CMD_VITALIDADE, Comando, sizeof(CMD_VITALIDADE)-1) == 0)
{
if( CheckIfLevelUpPoint(PlayerID) == TRUE)
return false;
CmdLen = sizeof(CMD_VITALIDADE)-1;
sscanf(Comando+CmdLen,"%d", &Pontos);
Pontos = abs(Pontos);
Atributo = msg[16].Message;
if((CheckLevelUpPoint(PlayerID,Pontos,1)) == FALSE)
{
wsprintf(Mensagem, msg[19].Message, Atributo); // "Essa quantidade de pontos excede o maximo de pontos em %s para sua classe"
C1TipPlayer(PlayerID,Mensagem,1);
return false;
}
pResult.result = 0;
pResult.btStatValue = Pontos;
pResult.btFruitType = 1;
DataSend(PlayerID,(unsigned char *)&pResult,pResult.h.size);
Obj[PlayerID].Vitality += Pontos;
Obj[PlayerID].MaxLife += Obj[PlayerID].VitalityToLife * Pontos;
wsprintf(Mensagem, msg[20].Message, Pontos, Atributo); // "Foram adicionados %d pontos em %s"
C1TipPlayer(PlayerID,Mensagem,1);
}
else if(memicmp(CMD_ENERGIA, Comando, sizeof(CMD_ENERGIA)-1) == 0)
{
if( CheckIfLevelUpPoint(PlayerID) == TRUE)
return false;
CmdLen = sizeof(CMD_ENERGIA)-1;
sscanf(Comando+CmdLen,"%d", &Pontos);
Pontos = abs(Pontos);
Atributo = msg[17].Message;
if((CheckLevelUpPoint(PlayerID,Pontos,0)) == FALSE)
{
wsprintf(Mensagem, msg[19].Message, Atributo); // "Essa quantidade de pontos excede o maximo de pontos em %s para sua classe"
C1TipPlayer(PlayerID,Mensagem,1);
return false;
}
pResult.result = 0;
pResult.btStatValue = Pontos;
pResult.btFruitType = 0;
DataSend(PlayerID,(unsigned char *)&pResult,pResult.h.size);
Obj[PlayerID].Energy += Pontos;
Obj[PlayerID].MaxMana += Obj[PlayerID].EnergyToMana * Pontos;
gObjSetBP(PlayerID);
wsprintf(Mensagem, msg[20].Message, Pontos, Atributo); // "Foram adicionados %d pontos em %s"
C1TipPlayer(PlayerID,Mensagem,1);
}
else if(memicmp(CMD_CARISMA, Comando, sizeof(CMD_CARISMA)-1) == 0)
{
if( CheckIfLevelUpPoint(PlayerID) == TRUE)
return false;
if(Obj[PlayerID].DbClass == DarkLord || Obj[PlayerID].DbClass == LordEmperor){
CmdLen = sizeof(CMD_CARISMA)-1;
sscanf(Comando+CmdLen,"%d", &Pontos);
Pontos = abs(Pontos);
Atributo = msg[18].Message;
if((CheckLevelUpPoint(PlayerID,Pontos,4)) == FALSE)
{
wsprintf(Mensagem, msg[19].Message, Atributo); // "Essa quantidade de pontos excede o maximo de pontos em %s para sua classe"
C1TipPlayer(PlayerID,Mensagem,1);
return false;
}
pResult.result = 0;
pResult.btStatValue = Pontos;
pResult.btFruitType = 4;
DataSend(PlayerID,(unsigned char *)&pResult,pResult.h.size);
Obj[PlayerID].Leadership += Pontos;
wsprintf(Mensagem, msg[20].Message, Pontos, Atributo); // "Foram adicionados %d pontos em %s"
C1TipPlayer(PlayerID,Mensagem,1);
}
else
{
MenssagemAlerta(4,PlayerID);
return false;
}
}
else {
return false;
}
Obj[PlayerID].LevelUpPoint -= Pontos;
gObjCalCharacter(PlayerID);
GCReFillSend(Obj[PlayerID].m_Index,(WORD)Obj[PlayerID].MaxLife + Obj[PlayerID].AddLife,0xFE,0,Obj[PlayerID].iMaxShield + Obj[PlayerID].iAddShield);
gObjSetBP(PlayerID);
GCManaSend(Obj[PlayerID].m_Index,(short)Obj[PlayerID].MaxMana + Obj[PlayerID].AddMana,0xFE,0,Obj[PlayerID].MaxBP + Obj[PlayerID].AddBP);
GCLevelUpMsgSend( Obj[PlayerID].m_Index , FALSE );
return true;
}
bool CheckIfLevelUpPoint(DWORD PlayerID)
{
if( Obj[PlayerID].Level < Load.AddLevel )
{
MenssagemAlerta(1,PlayerID);
return true;
}
if( (TiraZen(PlayerID, Load.AddCost)) == FALSE )
{
MenssagemAlerta(0,PlayerID);
return true;
}
return false;
}