terça-feira, 13 de março de 2012

SendRemoveMob - Remove summon do mapa


Essa função faz com que um summon saia do mapa e do grupo.

No caso de catalisadores, quando uma Cria vira Adulto, o mob tem que sair do mapa, mas isso não acontece. Agora basta usar essa função.


Declare no seu .h a struct:


Código:
struct pCL_P1h
{
    PacketHeader Header;
    int dat1;
};




Declare também:

Código:
void SendRemoveMob(int clientid);
void SendRemoveParty(int clientid, int mobId);

#define DELETE_NORMAL 0 // Somente desaparece
#define DELETE_DEAD 1 // Animacao da morte do spawn
#define DELETE_DISCONNECT 2 // Efeito de quando o personagem sai do jogo
#define DELETE_UNSPAWN 3 // Efeito quando os monstros ancts somem

No seu .cpp adicione:

Código:


void SendRemoveParty(int clientid, int mobId)
{
 int removeparty_addr = 0x00442410;
 _asm
 {
  PUSH mobId
  PUSH clientid
  CALL removeparty_addr
  ADD ESP,0x04
 }
}

void SendRemoveMob(int clientid)
{
 pCL_P1h pRemMob;
    pRemMob.Header.Size = sizeof(pCL_P1h);
 pRemMob.Header.PacketId = 0x165;
 char tmp[1024];
 for(int i = 0; i < 12; i++)
 {
  int masterIndex = clientid * 0x410;
  int memberId = *(WORD*)(masterIndex + 0x015C6D86 + (i * 2));
  if(*(DWORD*)(memberId * 0xC4C + 0x07B318E0) == 0x00)
  {
   if(memberId != 0x0)
   {
    pRemMob.dat1 = DELETE_UNSPAWN;
    pRemMob.Header.ClientId = memberId;
    AddMessage((BYTE*)&pRemMob ,clientid);
    SendRemoveParty(clientid, memberId);
                                return;
   }
  }
 }
}


Para usar chame:

SendRemoveMob(clientid);


Créditos:
Shepher

3 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Desculpa, cara. O SendRemoveMob fui em que fiz aqui. Só utilizei a struct e os defines que peguei de lá.
    O SendRemoveParty é da própria TMSRV pega no .map.

    ResponderExcluir
    Respostas
    1. é verdade, foi mal, dei uma olhada rapida voce utilizou a struct somente, coment removido

      Excluir