mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 13:16:39 +00:00
Implement Guild Banks for RoF/RoF2
Everything appears to work, but please test!
This commit is contained in:
@@ -1179,6 +1179,54 @@ namespace RoF
|
||||
dest->FastQueuePacket(&outapp);
|
||||
}
|
||||
|
||||
ENCODE(OP_GuildBank)
|
||||
{
|
||||
auto in = *p;
|
||||
*p = nullptr;
|
||||
auto outapp = new EQApplicationPacket(OP_GuildBank, in->size + 4); // all of them are 4 bytes bigger
|
||||
|
||||
// The first action in the enum was removed, everything 1 less
|
||||
// Normally we cast them to their structs, but there are so many here! will only do when it's easier
|
||||
switch (in->ReadUInt32()) {
|
||||
case 10: // GuildBankAcknowledge
|
||||
outapp->WriteUInt32(9);
|
||||
outapp->WriteUInt32(in->ReadUInt32());
|
||||
outapp->WriteUInt32(0);
|
||||
break;
|
||||
case 5: // GuildBankDeposit (ack)
|
||||
outapp->WriteUInt32(4);
|
||||
outapp->WriteUInt32(in->ReadUInt32());
|
||||
outapp->WriteUInt32(0);
|
||||
outapp->WriteUInt32(in->ReadUInt32());
|
||||
break;
|
||||
case 1: { // GuildBankItemUpdate
|
||||
auto emu = (GuildBankItemUpdate_Struct *)in->pBuffer;
|
||||
auto eq = (structs::GuildBankItemUpdate_Struct *)outapp->pBuffer;
|
||||
eq->Action = 0;
|
||||
OUT(Unknown004);
|
||||
eq->Unknown08 = 0;
|
||||
OUT(SlotID);
|
||||
OUT(Area);
|
||||
OUT(Unknown012);
|
||||
OUT(ItemID);
|
||||
OUT(Icon);
|
||||
OUT(Quantity);
|
||||
OUT(Permissions);
|
||||
OUT(AllowMerge);
|
||||
OUT(Useable);
|
||||
OUT_str(ItemName);
|
||||
OUT_str(Donator);
|
||||
OUT_str(WhoFor);
|
||||
OUT(Unknown226);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
delete in;
|
||||
dest->FastQueuePacket(&outapp);
|
||||
}
|
||||
|
||||
ENCODE(OP_GuildMemberList)
|
||||
{
|
||||
//consume the packet
|
||||
@@ -4590,6 +4638,92 @@ namespace RoF
|
||||
DECODE_FORWARD(OP_GroupInvite);
|
||||
}
|
||||
|
||||
DECODE(OP_GuildBank)
|
||||
{
|
||||
// all actions are 1 off due to the removal of one of enums
|
||||
switch (__packet->ReadUInt32()) {
|
||||
case 2: {// GuildBankPromote
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankPromote_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankPromote_Struct, structs::GuildBankPromote_Struct);
|
||||
emu->Action = 3;
|
||||
IN(Unknown04);
|
||||
IN(Slot);
|
||||
IN(Slot2);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 3: { // GuildBankViewItem
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankViewItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankViewItem_Struct, structs::GuildBankViewItem_Struct);
|
||||
emu->Action = 4;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Unknown16);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 4: { // GuildBankDeposit
|
||||
__packet->WriteUInt32(5);
|
||||
return;
|
||||
}
|
||||
case 5: { // GuildBankPermissions
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankPermissions_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankPermissions_Struct, structs::GuildBankPermissions_Struct);
|
||||
emu->Action = 6;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Unknown10);
|
||||
IN(ItemID);
|
||||
IN(Permissions);
|
||||
strn0cpy(emu->MemberName, eq->MemberName, 64);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 6: { // GuildBankWithdraw
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankWithdrawItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankWithdrawItem_Struct, structs::GuildBankWithdrawItem_Struct);
|
||||
emu->Action = 7;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Quantity);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 7: { // GuildBankSplitStacks
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankWithdrawItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankWithdrawItem_Struct, structs::GuildBankWithdrawItem_Struct);
|
||||
emu->Action = 8;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Quantity);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 8: { // GuildBankMergeStacks
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankWithdrawItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankWithdrawItem_Struct, structs::GuildBankWithdrawItem_Struct);
|
||||
emu->Action = 9;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Quantity);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
default:
|
||||
Log.Out(Logs::Detail, Logs::Netcode, "Unhandled OP_GuildBank action");
|
||||
__packet->SetOpcode(OP_Unknown); /* invalidate the packet */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
DECODE(OP_GuildDemote)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::GuildDemoteStruct);
|
||||
|
||||
@@ -1250,6 +1250,54 @@ namespace RoF2
|
||||
dest->FastQueuePacket(&outapp);
|
||||
}
|
||||
|
||||
ENCODE(OP_GuildBank)
|
||||
{
|
||||
auto in = *p;
|
||||
*p = nullptr;
|
||||
auto outapp = new EQApplicationPacket(OP_GuildBank, in->size + 4); // all of them are 4 bytes bigger
|
||||
|
||||
// The first action in the enum was removed, everything 1 less
|
||||
// Normally we cast them to their structs, but there are so many here! will only do when it's easier
|
||||
switch (in->ReadUInt32()) {
|
||||
case 10: // GuildBankAcknowledge
|
||||
outapp->WriteUInt32(9);
|
||||
outapp->WriteUInt32(in->ReadUInt32());
|
||||
outapp->WriteUInt32(0);
|
||||
break;
|
||||
case 5: // GuildBankDeposit (ack)
|
||||
outapp->WriteUInt32(4);
|
||||
outapp->WriteUInt32(in->ReadUInt32());
|
||||
outapp->WriteUInt32(0);
|
||||
outapp->WriteUInt32(in->ReadUInt32());
|
||||
break;
|
||||
case 1: { // GuildBankItemUpdate
|
||||
auto emu = (GuildBankItemUpdate_Struct *)in->pBuffer;
|
||||
auto eq = (structs::GuildBankItemUpdate_Struct *)outapp->pBuffer;
|
||||
eq->Action = 0;
|
||||
OUT(Unknown004);
|
||||
eq->Unknown08 = 0;
|
||||
OUT(SlotID);
|
||||
OUT(Area);
|
||||
OUT(Unknown012);
|
||||
OUT(ItemID);
|
||||
OUT(Icon);
|
||||
OUT(Quantity);
|
||||
OUT(Permissions);
|
||||
OUT(AllowMerge);
|
||||
OUT(Useable);
|
||||
OUT_str(ItemName);
|
||||
OUT_str(Donator);
|
||||
OUT_str(WhoFor);
|
||||
OUT(Unknown226);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
delete in;
|
||||
dest->FastQueuePacket(&outapp);
|
||||
}
|
||||
|
||||
ENCODE(OP_GuildMemberList)
|
||||
{
|
||||
//consume the packet
|
||||
@@ -4739,6 +4787,92 @@ namespace RoF2
|
||||
DECODE_FORWARD(OP_GroupInvite);
|
||||
}
|
||||
|
||||
DECODE(OP_GuildBank)
|
||||
{
|
||||
// all actions are 1 off due to the removal of one of enums
|
||||
switch (__packet->ReadUInt32()) {
|
||||
case 2: {// GuildBankPromote
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankPromote_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankPromote_Struct, structs::GuildBankPromote_Struct);
|
||||
emu->Action = 3;
|
||||
IN(Unknown04);
|
||||
IN(Slot);
|
||||
IN(Slot2);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 3: { // GuildBankViewItem
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankViewItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankViewItem_Struct, structs::GuildBankViewItem_Struct);
|
||||
emu->Action = 4;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Unknown16);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 4: { // GuildBankDeposit
|
||||
__packet->WriteUInt32(5);
|
||||
return;
|
||||
}
|
||||
case 5: { // GuildBankPermissions
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankPermissions_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankPermissions_Struct, structs::GuildBankPermissions_Struct);
|
||||
emu->Action = 6;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Unknown10);
|
||||
IN(ItemID);
|
||||
IN(Permissions);
|
||||
strn0cpy(emu->MemberName, eq->MemberName, 64);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 6: { // GuildBankWithdraw
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankWithdrawItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankWithdrawItem_Struct, structs::GuildBankWithdrawItem_Struct);
|
||||
emu->Action = 7;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Quantity);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 7: { // GuildBankSplitStacks
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankWithdrawItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankWithdrawItem_Struct, structs::GuildBankWithdrawItem_Struct);
|
||||
emu->Action = 8;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Quantity);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
case 8: { // GuildBankMergeStacks
|
||||
DECODE_LENGTH_EXACT(structs::GuildBankWithdrawItem_Struct);
|
||||
SETUP_DIRECT_DECODE(GuildBankWithdrawItem_Struct, structs::GuildBankWithdrawItem_Struct);
|
||||
emu->Action = 9;
|
||||
IN(Unknown04);
|
||||
IN(SlotID);
|
||||
IN(Area);
|
||||
IN(Unknown12);
|
||||
IN(Quantity);
|
||||
FINISH_DIRECT_DECODE();
|
||||
return;
|
||||
}
|
||||
default:
|
||||
Log.Out(Logs::Detail, Logs::Netcode, "Unhandled OP_GuildBank action");
|
||||
__packet->SetOpcode(OP_Unknown); /* invalidate the packet */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
DECODE(OP_GuildDemote)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::GuildDemoteStruct);
|
||||
|
||||
@@ -57,6 +57,7 @@ E(OP_GroupFollow)
|
||||
E(OP_GroupFollow2)
|
||||
E(OP_GroupInvite)
|
||||
E(OP_GroupUpdate)
|
||||
E(OP_GuildBank)
|
||||
E(OP_GuildMemberList)
|
||||
E(OP_GuildMemberUpdate)
|
||||
E(OP_GuildsList)
|
||||
@@ -152,6 +153,7 @@ D(OP_GroupFollow)
|
||||
D(OP_GroupFollow2)
|
||||
D(OP_GroupInvite)
|
||||
D(OP_GroupInvite2)
|
||||
D(OP_GuildBank)
|
||||
D(OP_GuildDemote)
|
||||
D(OP_GuildRemove)
|
||||
D(OP_GuildStatus)
|
||||
|
||||
@@ -1859,6 +1859,114 @@ struct GuildUpdate_Struct {
|
||||
GuildsListEntry_Struct entry;
|
||||
};
|
||||
|
||||
struct GuildBankAck_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 10
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
};
|
||||
|
||||
struct GuildBankDepositAck_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 10
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint32 Fail; //1 = Fail, 0 = Success
|
||||
};
|
||||
|
||||
struct GuildBankPromote_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 3
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*12*/ uint32 Slot;
|
||||
/*16*/ uint32 Slot2; // Always appears to be the same as Slot for Action code 3
|
||||
/*20*/ uint32 unknown20;
|
||||
};
|
||||
|
||||
struct GuildBankPermissions_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 6
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint16 SlotID;
|
||||
/*10*/ uint16 Unknown10; // Saw 1, probably indicating it is the main area rather than deposits
|
||||
/*12*/ uint32 ItemID;
|
||||
/*16*/ uint32 Permissions;
|
||||
/*20*/ char MemberName[64];
|
||||
};
|
||||
|
||||
struct GuildBankViewItem_Struct
|
||||
{
|
||||
/*00*/ uint32 Action;
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint16 SlotID; // 0 = Deposit area, 1 = Main area
|
||||
/*10*/ uint16 Area;
|
||||
/*12*/ uint32 Unknown12;
|
||||
/*16*/ uint32 Unknown16;
|
||||
};
|
||||
|
||||
struct GuildBankWithdrawItem_Struct
|
||||
{
|
||||
/*00*/ uint32 Action;
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint16 SlotID;
|
||||
/*10*/ uint16 Area;
|
||||
/*12*/ uint32 Unknown12;
|
||||
/*16*/ uint32 Quantity;
|
||||
/*20*/
|
||||
};
|
||||
|
||||
struct GuildBankItemUpdate_Struct
|
||||
{
|
||||
void Init(uint32 inAction, uint32 inUnknown004, uint16 inSlotID, uint16 inArea, uint16 inUnknown012, uint32 inItemID, uint32 inIcon, uint32 inQuantity,
|
||||
uint32 inPermissions, uint32 inAllowMerge, bool inUseable)
|
||||
{
|
||||
Action = inAction;
|
||||
Unknown004 = inUnknown004;
|
||||
SlotID = inSlotID;
|
||||
Area = inArea;
|
||||
Unknown012 = inUnknown012;
|
||||
ItemID = inItemID;
|
||||
Icon = inIcon;
|
||||
Quantity = inQuantity;
|
||||
Permissions = inPermissions;
|
||||
AllowMerge = inAllowMerge;
|
||||
Useable = inUseable;
|
||||
ItemName[0] = '\0';
|
||||
Donator[0] = '\0';
|
||||
WhoFor[0] = '\0';
|
||||
};
|
||||
|
||||
/*000*/ uint32 Action;
|
||||
/*004*/ uint32 Unknown004;
|
||||
/*008*/ uint32 Unknown08;
|
||||
/*012*/ uint16 SlotID;
|
||||
/*014*/ uint16 Area;
|
||||
/*016*/ uint32 Unknown012;
|
||||
/*020*/ uint32 ItemID;
|
||||
/*024*/ uint32 Icon;
|
||||
/*028*/ uint32 Quantity;
|
||||
/*032*/ uint32 Permissions;
|
||||
/*036*/ uint8 AllowMerge;
|
||||
/*037*/ uint8 Useable; // Used in conjunction with the Public-if-useable permission.
|
||||
/*038*/ char ItemName[64];
|
||||
/*102*/ char Donator[64];
|
||||
/*166*/ char WhoFor[64];
|
||||
/*230*/ uint16 Unknown226;
|
||||
};
|
||||
|
||||
struct GuildBankClear_Struct
|
||||
{
|
||||
/*00*/ uint32 Action;
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*12*/ uint32 DepositAreaCount;
|
||||
/*16*/ uint32 MainAreaCount;
|
||||
};
|
||||
|
||||
/*
|
||||
** Money Loot
|
||||
** Length: 22 Bytes
|
||||
|
||||
@@ -42,6 +42,7 @@ E(OP_GroupFollow)
|
||||
E(OP_GroupFollow2)
|
||||
E(OP_GroupInvite)
|
||||
E(OP_GroupUpdate)
|
||||
E(OP_GuildBank)
|
||||
E(OP_GuildMemberList)
|
||||
E(OP_GuildMemberUpdate)
|
||||
E(OP_GuildsList)
|
||||
@@ -137,6 +138,7 @@ D(OP_GroupFollow)
|
||||
D(OP_GroupFollow2)
|
||||
D(OP_GroupInvite)
|
||||
D(OP_GroupInvite2)
|
||||
D(OP_GuildBank)
|
||||
D(OP_GuildDemote)
|
||||
D(OP_GuildRemove)
|
||||
D(OP_GuildStatus)
|
||||
|
||||
@@ -1889,6 +1889,114 @@ struct GuildUpdate_Struct {
|
||||
GuildsListEntry_Struct entry;
|
||||
};
|
||||
|
||||
struct GuildBankAck_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 10
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
};
|
||||
|
||||
struct GuildBankDepositAck_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 10
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint32 Fail; //1 = Fail, 0 = Success
|
||||
};
|
||||
|
||||
struct GuildBankPromote_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 3
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*12*/ uint32 Slot;
|
||||
/*16*/ uint32 Slot2; // Always appears to be the same as Slot for Action code 3
|
||||
/*20*/ uint32 unknown20;
|
||||
};
|
||||
|
||||
struct GuildBankPermissions_Struct
|
||||
{
|
||||
/*00*/ uint32 Action; // 6
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint16 SlotID;
|
||||
/*10*/ uint16 Unknown10; // Saw 1, probably indicating it is the main area rather than deposits
|
||||
/*12*/ uint32 ItemID;
|
||||
/*16*/ uint32 Permissions;
|
||||
/*20*/ char MemberName[64];
|
||||
};
|
||||
|
||||
struct GuildBankViewItem_Struct
|
||||
{
|
||||
/*00*/ uint32 Action;
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint16 SlotID; // 0 = Deposit area, 1 = Main area
|
||||
/*10*/ uint16 Area;
|
||||
/*12*/ uint32 Unknown12;
|
||||
/*16*/ uint32 Unknown16;
|
||||
};
|
||||
|
||||
struct GuildBankWithdrawItem_Struct
|
||||
{
|
||||
/*00*/ uint32 Action;
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*08*/ uint16 SlotID;
|
||||
/*10*/ uint16 Area;
|
||||
/*12*/ uint32 Unknown12;
|
||||
/*16*/ uint32 Quantity;
|
||||
/*20*/
|
||||
};
|
||||
|
||||
struct GuildBankItemUpdate_Struct
|
||||
{
|
||||
void Init(uint32 inAction, uint32 inUnknown004, uint16 inSlotID, uint16 inArea, uint16 inUnknown012, uint32 inItemID, uint32 inIcon, uint32 inQuantity,
|
||||
uint32 inPermissions, uint32 inAllowMerge, bool inUseable)
|
||||
{
|
||||
Action = inAction;
|
||||
Unknown004 = inUnknown004;
|
||||
SlotID = inSlotID;
|
||||
Area = inArea;
|
||||
Unknown012 = inUnknown012;
|
||||
ItemID = inItemID;
|
||||
Icon = inIcon;
|
||||
Quantity = inQuantity;
|
||||
Permissions = inPermissions;
|
||||
AllowMerge = inAllowMerge;
|
||||
Useable = inUseable;
|
||||
ItemName[0] = '\0';
|
||||
Donator[0] = '\0';
|
||||
WhoFor[0] = '\0';
|
||||
};
|
||||
|
||||
/*000*/ uint32 Action;
|
||||
/*004*/ uint32 Unknown004;
|
||||
/*008*/ uint32 Unknown08;
|
||||
/*012*/ uint16 SlotID;
|
||||
/*014*/ uint16 Area;
|
||||
/*016*/ uint32 Unknown012;
|
||||
/*020*/ uint32 ItemID;
|
||||
/*024*/ uint32 Icon;
|
||||
/*028*/ uint32 Quantity;
|
||||
/*032*/ uint32 Permissions;
|
||||
/*036*/ uint8 AllowMerge;
|
||||
/*037*/ uint8 Useable; // Used in conjunction with the Public-if-useable permission.
|
||||
/*038*/ char ItemName[64];
|
||||
/*102*/ char Donator[64];
|
||||
/*166*/ char WhoFor[64];
|
||||
/*230*/ uint16 Unknown226;
|
||||
};
|
||||
|
||||
struct GuildBankClear_Struct
|
||||
{
|
||||
/*00*/ uint32 Action;
|
||||
/*04*/ uint32 Unknown04;
|
||||
/*08*/ uint32 Unknown08;
|
||||
/*12*/ uint32 DepositAreaCount;
|
||||
/*16*/ uint32 MainAreaCount;
|
||||
};
|
||||
|
||||
/*
|
||||
** Money Loot
|
||||
** Length: 22 Bytes
|
||||
|
||||
Reference in New Issue
Block a user