Bom, ta ai uma funcao que poe um item no banco e atualiza ele.SetItemBankvoid SetItemBank(int clientid, int slot, st_Item item) { PInt(0x7B31A9C + (slot * 8) + clientid * 0xC4C) = item.Index; PInt(0x7B31A9C + (slot * 8) + clientid * 0xC4C + 0x2) = item.EF1; PInt(0x7B31A9C + (slot * 8) + clientid * 0xC4C + 0x3) = item.EFV1; PInt(0x7B31A9C + (slot * 8) + clientid * 0xC4C + 0x4) = item.EF2; PInt(0x7B31A9C + (slot * 8) + clientid * 0xC4C + 0x5) = item.EFV2; PInt(0x7B31A9C + (slot * 8) + clientid * 0xC4C + 0x6) = item.EF3; PInt(0x7B31A9C + (slot * 8) + clientid * 0xC4C + 0x7) = item.EFV3;}Packet 0x182:struct pCL_182h{ PacketHeader Header; short invType; short invSlot; st_Item itemData;};void p182(int clientid, int type, int slot, st_Item item) { pCL_182h p; p.Header.ClientId = clientid; p.Header.Size = sizeof pCL_182h; p.Header.PacketId = 0x182; p.invType = type; p.invSlot = slot; memcpy(&p.itemData, &item, sizeof st_Item); SendPacket((BYTE*)&p, clientid, sizeof pCL_182h);}Adicione o define:#define BancoSlot(clientid, slot) *(unsigned short*)(0x7B31A9C + (slot * 8) + clientid * 0xC4C)Agora adicione a funcao:int GetFirstSlotInBank(int clientid, int item){ st_Mob * player = (st_Mob*)GetMobFromIndex(clientid); int cSlot; int slot = -1; for(int i = 0;i < 128;i++) { cSlot = BancoSlot(clientid, i); if(cSlot == item) { slot = i; break; } } return slot;}Para usar basta:st_Item item;item.Index = 5138;p182(clientid, 2, GetFirstSlotInBank(clientid, 0), item);Em item voce bota todas as informacoes do item.Creditos:shepher Aula 9 - MobKilledEvent Uma aula exclusiva para a minha DLL, ja que outras DLLs nao sao iguais. Entao vamos a uma breve explicacao do que e:MobKilledEvent e uma funcao que acontece quando um mob especifico morre. Pode ser qualquer MOB. Desde que voce tenha os numeros do status dele. Todos os dados podem ser verificados, como nome, exp, level, learn, set, arma, e etc. Voce pode ser bem especifico caso voce queira que nao ocorra algum bug, como por exemplo ter um mob com o mesmo nome, so que esse mob seria um boss e se o servidor, por algum caso misterioso, "confundisse" os dois e identificasse como boss, seria um problema.Eu deixei na DLL o seguinte codigo como principal:void MobKilledEvent(BYTE *m_PacketBuffer){ p338 *p = (p338*)m_PacketBuffer; char tmp[1024]; WORD clientid = p->killer; WORD mobid = p->killed; st_Mob *mob = (st_Mob*)GetMobFromIndex(p->killed); MobKilledE *MobKilled = new MobKilledE(); if(strcmp((char*)mob->Name, "Kefra") == 0) MobKilled->Kefra(clientid, mobid); else if(strcmp((char*)mob->Name, "NOMEQUEQUISER") == 0) return; // Funcao que quiser; else { sprintf(tmp, "Nome do mob e: %s", (char*)mob->Name); SendClientMsg(clientid, tmp); } return;}Source OverDestiny v1.1Bom, o codigo e bem simples, nao tem segredo. Deixei ali como exemplo para quando o personagem matar um mob com o nome "Kefra". .E como faco pra adicionar outro MOB pelo nome?Simples, como ta mostrando ali, voce so tem que adicionar o else if com uma comparacao do nome do mob morto pelo que quiser. Ali tem um exemplo: "NOMEQUEQUISER".else if(strcmp((char*)mob->Name, "NOMEQUEQUISER") == 0)Voce so trocaria o NOMEQUEQUISER pelo nome do Mob que quer que faca algo.Caso queira mais um, adicione logo abaixo outro else if desse.Alem do nome, quero verificar outras coisas. Como faco?Voce simplesmente adiciona um else if com a condicao que quiser. Caso queira pelo