domingo, 1 de julho de 2012

[Função] Colocar itens no banco e atualizá-lo

Bom, tá aí uma função que poe um item no banco e atualiza ele.

SetItemBank
void 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 função:
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 você bota todas as informações do item.


Créditos:
shepher

Um comentário: