PDA

View Full Version : |Source| Comando Alterar Classe Sem Relogar



Instance
09/01/2018, 06:13 PM
Oie, aqui esta um presente..., se for postar em outros lugares favor colocar os créditos.

Funcionalidade : Alterar a classe ingame para qualquer outra (dw/sm/dk/bk/fe/me/dl/mg).


void CCommands::AltClass(int aIndex, BYTE btType){
for(int i = 0; i < 11; i++)
{
if(gObj[aIndex].pInventory[i].m_Type > 0)
{
MsgUser(aIndex, 1, "[%s] Remova todos os items.", gObj[aIndex].Name);
return;
}
}
// ---
char * szBuffer = {""};
// ---
switch(btType)
{
case 0: // -> Classe (Dark Wizard)
{
szBuffer = "Dark Wizard";
// ---
gObj[aIndex].Class = CLASS_WIZARD;
gObj[aIndex].ChangeUP = 0;
gObj[aIndex].DbClass = 0;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
case 1: // -> Classe (Soul Master)
{
szBuffer = "Soul Master";
// ---
gObj[aIndex].Class = CLASS_WIZARD;
gObj[aIndex].ChangeUP = 1;
gObj[aIndex].DbClass = 1;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
case 2: // -> Classe (Dark Knight)
{
szBuffer = "Dark Knight";
// ---
gObj[aIndex].Class = CLASS_KNIGHT;
gObj[aIndex].ChangeUP = 0;
gObj[aIndex].DbClass = 16;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
case 3: // -> Classe (Blade Knight)
{
szBuffer = "Blade Knight";
// ---
gObj[aIndex].Class = CLASS_KNIGHT;
gObj[aIndex].ChangeUP = 1;
gObj[aIndex].DbClass = 17;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
case 4: // -> Classe (Fairy Elf)
{
szBuffer = "Fairy Elf";
// ---
gObj[aIndex].Class = CLASS_ELF;
gObj[aIndex].ChangeUP = 0;
gObj[aIndex].DbClass = 32;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
case 5: // -> Classe (Muse Elf)
{
szBuffer = "Muse Elf";
// ---
gObj[aIndex].Class = CLASS_ELF;
gObj[aIndex].ChangeUP = 1;
gObj[aIndex].DbClass = 33;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
case 6: // -> Classe (Magic Gladiator)
{
szBuffer = "Magic Gladiator";
// ---
gObj[aIndex].Class = CLASS_MAGUMSA;
gObj[aIndex].ChangeUP = 0;
gObj[aIndex].DbClass = 48;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
case 7: // -> Classe (Dark Lord)
{
szBuffer = "Dark Lord";
// ---
gObj[aIndex].Class = CLASS_DARKLORD;
gObj[aIndex].ChangeUP = 0;
gObj[aIndex].DbClass = 64;
gObj[aIndex].AddLeadership;
// ---
BYTE btClass = (gObj[aIndex].Class << 5) & 0xE0;
btClass |= (gObj[aIndex].ChangeUP << 4) & 0x10;
// ---
GCSendQuestPrize(gObj[aIndex].m_Index, 201, btClass);
}
break;
// ---
default: break;
}
// ---
for(int n = 0; n < MAGIC_SIZE;n++)
{
if(gObj[aIndex].Magic[n].IsMagic() == 1)
{
gObj[aIndex].Magic[n].Clear();
}
}
// ---
gObjMakePreviewCharSet(aIndex);
// ---
gObjClearViewport(&gObj[aIndex]);
gObjViewportListProtocolCreate(&gObj[aIndex]);
// ---
gObjCalCharacter(aIndex);
// ---
MsgUser(aIndex, 1, "%s Você se tornou um %s !", gObj[aIndex].Name, szBuffer);
}

Creditos : Instance | IDeveloper

louis
09/01/2018, 06:20 PM
O interessante do relogar é que ao fazer isso o personagem é salvo no banco de dados, evitando outros problemas, mais você também pode executar o comando para salvar no final da função ^^

Instance
09/01/2018, 06:28 PM
O interessante do relogar é que ao fazer isso o personagem é salvo no banco de dados, evitando outros problemas, mais você também pode executar o comando para salvar no final da função ^^
mas pelo gameserver já ter o auto save isso fica inviável no comando, mas caso queiram adicionar só colocar GJSetCharacterInfo(&gObj[aIndex], aIndex, 0); no final do comando.

louis
09/01/2018, 06:41 PM
mas pelo gameserver já ter o auto save isso fica inviável no comando, mas caso queiram adicionar só colocar GJSetCharacterInfo(&gObj[aIndex], aIndex, 0); no final do comando.

Sim está excelente xD

coloca aquele efeito quando você evolui para a terceira classe quando trocar de classe...ficaria doido xD

Instance
09/01/2018, 06:55 PM
Sim está excelente xD

coloca aquele efeito quando você evolui para a terceira classe quando trocar de classe...ficaria doido xD

ai já fica a gosto de quem for utilizar s2.5 + pois estou utilizando em uma 1.0 :D