Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Com OFFSETS


THERGUS

Pergunta

Bom estou com uma source para criar certos comandos em um servidor de jogo que estou desenvolvendo mas a source não possui as offsets e como é a primeira vez que estou fazendo este tipo de desenvolvimento venho aqui pedir a ajuda de vocês..

O negócio é o seguinte, tenho visual studio 2008 express edition, sei como compilar e hookar no arquivo .exe cujo o nome é gameserver.exe, como a source não está totalmente completa (faltando as offsets) não sei oque tenho que fazer para adiciona-las na mesma, ou seja, qual comando utilizar para puxar as offsets etc...

Source:

arquivo .cpp

void English::ResetSystemInitialize(int lpIndex)

{

OBJECTSTRUCT* lpObj = (OBJECTSTRUCT*)OBJECT_PONTEIRO(lpIndex);

for(DWORD n = 0; n < ResetSystemControl; n++)

{

if(lpObj->vip == reset[n].reset_vip) // VERIFICA O TIPO DE VIP

{

if(reset[n].reset_active == 0)

{

// ENVIA A MENSAGEM DE COMANDO DESATIVADO;

for(DWORD a = 0; a < ResetSystemApplyMsg; a++)

{

if(reset[a].reset_mensagem_type == 0)

this->SendMessage(lpObj->m_Index,reset[a].reset_mensagem_msg,reset[a].reset_mensagem_formato);

}

return;

}

if(reset[n].reset_type == 0)

{

// LEITURA DO RESET ACUMULATIVO

this->ResetSystemTypelP(lpObj->m_Index);

}

else if(reset[n].reset_type == 1)

{

// LEITURA DO RESET PONTUATIVO

this->ResetSystemTypelP(lpObj->m_Index);

}

}

}

}

void English::ResetSystemTypelP(int lpIndex)

{

OBJECTSTRUCT* lpObj = (OBJECTSTRUCT*)OBJECT_PONTEIRO(lpIndex);

this->ConnectQuery(lpObj->m_Index,0); // SELECIONA A TABELA DO RESET E VERIFICA A QUANTIDADE.

for(DWORD a = 0; a < ResetSystemType; a++)

{

if(lpObj->vip == reset[a].reset_type_vip) // VERIFICA O TIPO DE VIP

{

if( (lpObj->reset >= reset[a].reset_type_reset_min) && (lpObj->reset <= reset[a].reset_type_reset_max) ) // VERIFICA RESETS MINIMO E MAXIMO

{

if(reset[a].reset_type_remove_item == 1)

{

// LEITURA PARA REMOVER OS ITEMS

if( (this->ResetSystemRemoveItem(lpObj->m_Index) == TRUE) )

{

return;

}

}

if(lpObj->Level < reset[a].reset_type_level) // VERIFICA O LEVEL DO RESET

{

// ENVIA A MENSAGEM DE LEVEL INSUFICIENTE;

for(DWORD a = 0; a < ResetSystemApplyMsg; a++)

{

if(reset[a].reset_mensagem_type == 1)

this->SendMessage(lpObj->m_Index,reset[a].reset_mensagem_msg,reset[a].reset_mensagem_formato);

}

return;

}

if(lpObj->Money < reset[a].reset_type_money) // VERIFICA A QUANTIDADE DE ZEN

{

// ENVIA A MENSAGEM DE ZEN INSUFICIENTE;

for(DWORD b = 0; b < ResetSystemApplyMsg; a++)

{

if(reset.reset_mensagem_type == 2)

this->SendMessage(lpObj->m_Index,reset.reset_mensagem_msg,reset.reset_mensagem_formato);

}

return;

}

if(reset[a].reset_type_item == 1)

{

// LEITURA DO REQUERIMENTO DE ITEMS

int ItemType = ITEMGET(reset[a].reset_type_item_x,reset[a].reset_type_item_y);

int ItemLevel = reset[a].reset_type_item_level;

int ItemCount = this->ResetSystemItemInvetoryCount(lpObj->m_Index,ItemType, ItemLevel);

if(ItemCount < reset[a].reset_type_item_count) // FAZ A CONTAGEM DOS ITEMS

{

// ENVIA A MENSAGEM DE QUANTIDADE DE ITEMS INVALIDA

this->SendMessage(lpObj->m_Index,reset[a].reset_type_mensagem,reset[a].reset_type_tipo_mensagem);

return;

}

else

{

// DELETA OS ITEMS E RESETA O PERSONAGEM

this->ResetSystemDeleteItemCount(lpObj->m_Index,ItemType,ItemLevel,reset[a].reset_type_item_count);

this->ResetSystemApplyReset(lpObj->m_Index);

}

}

else if(reset[a].reset_type_item == 0)

{

// RESETA O PERSONAGEM

this->ResetSystemApplyReset(lpObj->m_Index);

}

}

}

}

}

int English::ResetSystemRemoveItem(int lpIndex)

{

OBJECTSTRUCT* lpObj = (OBJECTSTRUCT*)OBJECT_PONTEIRO(lpIndex);

for ( int x = 0; x < 11; x++)

{

if( (lpObj->pInventory

* .m_Type > NULL) )

{

// ENVIA MENSAGEM DE QUE É NECESSÁRIO REMOVER OS ITEMS

for(DWORD a = 0; a < ResetSystemApplyMsg; a++)

{

if(reset[a].reset_mensagem_type == 3)

this->SendMessage(lpObj->m_Index,reset[a].reset_mensagem_msg,reset[a].reset_mensagem_formato);

}

return TRUE;

}

}

return FALSE;

}

int English::ResetSystemItemInvetoryCount(int aIndex, int Type, int Level)

{

OBJECTSTRUCT* lpObj = (OBJECTSTRUCT*)OBJECT_PONTEIRO(aIndex);

int count = 0;

for(unsigned i = 0; i < 76; i++)

{

if(lpObj->pInventory.m_Type == Type)

{

if(Level != -1)

{

if(!lpObj->pInventory.m_Level == Level)

{

continue;

}

}

count++;

}

}

return count;

}

int English::ResetSystemDeleteItemCount(int aIndex, short Type, short Level, int Count)

{

OBJECTSTRUCT* lpObj = (OBJECTSTRUCT*)OBJECT_PONTEIRO(aIndex);

int count = 0;

for(unsigned i = 0; i < 76; i++)

{

if(lpObj->pInventory.m_Type == Type)

{

if(Level != -1)

{

if(!lpObj->pInventory.m_Level == Level)

{

continue;

}

}

gObjInventoryDeleteItem(lpObj->m_Index, i);

this->GCInventoryItemDeleteSend(lpObj->m_Index, i, 1);

count++;

if(Count == count)

{

break;

}

}

}

return count;

}

void English::ResetSystemApplyReset(int lpIndex)

{

OBJECTSTRUCT* lpObj = (OBJECTSTRUCT*)OBJECT_PONTEIRO(lpIndex);

this->ConnectQuery(lpObj->m_Index,0); // SELECIONA A TABELA DO RESET E VERIFICA A QUANTIDADE.

for(DWORD a = 0; a < ResetSystemType; a++)

{

if(lpObj->vip == reset[a].reset_type_vip) // VERIFICA O TIPO DE VIP

{

if( (lpObj->reset >= reset[a].reset_type_reset_min) && (lpObj->reset <= reset[a].reset_type_reset_max) ) // VERIFICA RESETS MINIMO E MAXIMO

{

// NECESSÁRIO FAZER ESSAS DUAS VERIFICAÇÕES NOVAMENTE PARA TABELADO

for(DWORD b = 0; b < ResetSystemControl; b++)

{

if(lpObj->vip == reset.reset_vip)

{

if(reset.reset_type == 0)

{

lpObj->Experience = 1;

lpObj->Level = reset[a].reset_type_novo_level;

lpObj->Money -= reset[a].reset_type_money;

//----------------------------------------------------------//

GCMoneySend(lpObj->m_Index,lpObj->Money);

gObjCalCharacter(lpObj->m_Index);

GCLevelUpMsgSend(lpObj->m_Index,1);

//----------------------------------------------------------//

this->ConnectQuery(lpObj->m_Index,2); // QUERY DE RESETAR O PERSONAGEM

this->ResetSystemApplyTeleport(lpObj); // MOVE O PERSONAGEM

}

else if(reset.reset_type == 1)

{

lpObj->Experience = 1;

lpObj->Level = reset[a].reset_type_novo_level;

lpObj->Money -= reset[a].reset_type_money;

//----------------------------------------------------------//

if(lpObj->reset == 0)

{

lpObj->LevelUpPoint = reset[a].reset_type_pontos;

}

lpObj->LevelUpPoint = reset[a].reset_type_pontos * lpObj->reset + reset[a].reset_type_pontos;

//----------------------------------------------------------//

GCMoneySend(lpObj->m_Index,lpObj->Money);

gObjCalCharacter(lpObj->m_Index);

GCLevelUpMsgSend(lpObj->m_Index,1);

//----------------------------------------------------------//

this->ConnectQuery(lpObj->m_Index,2); // QUERY DE RESETAR O PERSONAGEM

this->ResetSystemApplyTeleport(lpObj); // MOVE O PERSONAGEM

this->ResetSystemAplyPointClass(lpObj);// APLICA O NOVO STATUS DA CLASSE

//----------------------------------------------------------//

gObjCloseSet(lpObj->m_Index,1);

}

}

}

}

}

}

}

void English::ResetSystemAplyPointClass(LPOBJ lpObj)

{

for(DWORD n = 0; n < ResetSystemApplyPoint; n++)

{

if(lpObj->vip == reset[n].reset_apply_vip)

{

if(lpObj->DbClass == reset[n].reset_apply_class)

{

lpObj->Strength = reset[n].reset_apply_strenght;

lpObj->Dexterity = reset[n].reset_apply_agility;

lpObj->Vitality = reset[n].reset_apply_vitality;

lpObj->Energy = reset[n].reset_apply_energy;

lpObj->Leadership = reset[n].reset_apply_leadership;

}

}

}

}

void English::ResetSystemApplyTeleport(LPOBJ lpObj)

{

this->ConnectQuery(lpObj->m_Index,0); // SELECIONA A TABELA DO RESET E VERIFICA A QUANTIDADE.

for(DWORD n = 0; n < ResetSystemApplyPoint; n++)

{

if(lpObj->vip == reset[n].reset_apply_vip)

{

if(lpObj->DbClass == reset[n].reset_apply_class)

{

int MapNumber = lpObj->MapNumber;

int CordX = lpObj->X;

int CordY = lpObj->Y;

if(reset[n].reset_apply_word == (-1) )

{

MapNumber = MapNumber;

}

else

{

MapNumber = reset[n].reset_apply_word;

}

if(reset[n].reset_coord_x == (-1) )

{

CordX = CordX;

}

else

{

CordX = reset[n].reset_coord_x;

}

if(reset[n].reset_coord_y == (-1) )

{

CordY = CordY;

}

else

{

CordY = reset[n].reset_coord_y;

}

gObjTeleport(lpObj->m_Index,MapNumber,CordX,CordY);

GCMagicAttackNumberSend(lpObj,reset[n].reset_effect, lpObj->m_Index, 1);

}

}

}

char Message[255];

for(DWORD a = 0; a < ResetSystemApplyMsg; a++)

{

if(reset[a].reset_mensagem_type == 4)

wsprintf(Message,reset[a].reset_mensagem_msg,lpObj->reset);

this->SendMessage(lpObj->m_Index,Message,reset[a].reset_mensagem_formato);

}

}

Arquivo .h

void ResetSystemInitialize(int lpIndex);

void ResetSystemTypelP(int lpIndex);

void ResetSystemApplyReset(int lpIndex);

void ResetSystemAplyPointClass(LPOBJ lpObj);

void ResetSystemApplyTeleport(LPOBJ lpObj);

int ResetSystemRemoveItem(int lpIndex);

int ResetSystemItemInvetoryCount(int aIndex, int Type, int Level);

int ResetSystemDeleteItemCount(int aIndex, short Type, short Level, int Count);

Preciso muito disso, muitos coders dessa área de criação de servidores simplesmente não ajudam, nunca postaram nenhum tutorial de como fazer nada, simplesmente jogam no forum e "virem-se", sei que não tem a obrigação de fazer, mas do mesmo geito, postando uma source o minimo a ser feito é dar suporte.

Att THERGUS

UWMT Development

----EDIT----

Se quizerem o arquivo .exe só falar!

Editado por THERGUS
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...