mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-24 17:48:20 +00:00
Validated through OP_SetServerFilter
This commit is contained in:
+27
-29
@@ -3845,7 +3845,7 @@ namespace TOB
|
|||||||
|
|
||||||
int r;
|
int r;
|
||||||
for (r = 0; r < 29; r++) {
|
for (r = 0; r < 29; r++) {
|
||||||
// Size 68 in TOB
|
// Size 69 in TOB
|
||||||
IN(filters[r]);
|
IN(filters[r]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4149,7 +4149,7 @@ namespace TOB
|
|||||||
//s32 Variation;
|
//s32 Variation;
|
||||||
//s32 NewArmorId;
|
//s32 NewArmorId;
|
||||||
//s32 NewArmorType;
|
//s32 NewArmorType;
|
||||||
buffer.WriteUInt32(item->Material);
|
buffer.WriteUInt32(item->Material); // this isn't labeled well, material is material *type*
|
||||||
buffer.WriteUInt32(0); //unsupported atm
|
buffer.WriteUInt32(0); //unsupported atm
|
||||||
buffer.WriteUInt32(item->EliteMaterial);
|
buffer.WriteUInt32(item->EliteMaterial);
|
||||||
buffer.WriteUInt32(item->HerosForgeModel);
|
buffer.WriteUInt32(item->HerosForgeModel);
|
||||||
@@ -4267,9 +4267,20 @@ namespace TOB
|
|||||||
|
|
||||||
//u8 SpellDataSkillMask[78];
|
//u8 SpellDataSkillMask[78];
|
||||||
for (int j = 0; j < 78; ++j) {
|
for (int j = 0; j < 78; ++j) {
|
||||||
buffer.WriteUInt8(0); //unsure what this is exactly
|
buffer.WriteUInt8(0); // TODO: collection of ints for bitfield for each skill required to use. reads 19 ints byte by byte in the client, leave like this for further investigation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* There are a static 7 spell data entries on an item:
|
||||||
|
Clicky
|
||||||
|
Proc
|
||||||
|
Worn
|
||||||
|
Focus
|
||||||
|
Scroll
|
||||||
|
Focus2
|
||||||
|
Blessing
|
||||||
|
*/
|
||||||
|
|
||||||
/* SpellData:
|
/* SpellData:
|
||||||
s32 SpellId;
|
s32 SpellId;
|
||||||
u8 RequiredLevel;
|
u8 RequiredLevel;
|
||||||
@@ -4678,55 +4689,42 @@ namespace TOB
|
|||||||
//ItemDefinition Item;
|
//ItemDefinition Item;
|
||||||
SerializeItemDefinition(buffer, item);
|
SerializeItemDefinition(buffer, item);
|
||||||
|
|
||||||
//u32 RealEstateArrayCount;
|
|
||||||
// buffer.WriteInt32(0);
|
|
||||||
//s32 RealEstateArray[RealEstateArrayCount];
|
|
||||||
|
|
||||||
//bool bRealEstateItemPlaceable;
|
|
||||||
// buffer.WriteInt8(0);
|
|
||||||
|
|
||||||
//u32 SubContentSize;
|
//u32 SubContentSize;
|
||||||
uint32 subitem_count = 0;
|
|
||||||
|
|
||||||
int16 SubSlotNumber = EQ::invbag::SLOT_INVALID;
|
int16 SubSlotNumber = EQ::invbag::SLOT_INVALID;
|
||||||
|
|
||||||
if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::GENERAL_BEGIN)
|
if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::GENERAL_BEGIN)
|
||||||
SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT);
|
SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + (slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT;
|
||||||
else if (slot_id_in == EQ::invslot::slotCursor)
|
else if (slot_id_in == EQ::invslot::slotCursor)
|
||||||
SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN;
|
SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN;
|
||||||
else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN)
|
else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN)
|
||||||
SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT);
|
SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + (slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT;
|
||||||
else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN)
|
else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN)
|
||||||
SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT);
|
SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + (slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT;
|
||||||
else
|
else
|
||||||
SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now
|
SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now
|
||||||
|
|
||||||
if (SubSlotNumber != EQ::invbag::SLOT_INVALID) {
|
if (SubSlotNumber != EQ::invbag::SLOT_INVALID) {
|
||||||
|
std::vector<std::pair<int, EQ::ItemInstance*>> subitems;
|
||||||
for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) {
|
for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) {
|
||||||
EQ::ItemInstance* sub = inst->GetItem(index);
|
EQ::ItemInstance* sub = inst->GetItem(index);
|
||||||
if (!sub)
|
if (sub != nullptr)
|
||||||
continue;
|
subitems.emplace_back(index, sub);
|
||||||
|
|
||||||
++subitem_count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.WriteUInt32(subitem_count);
|
buffer.WriteUInt32(subitems.size());
|
||||||
|
|
||||||
for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) {
|
|
||||||
EQ::ItemInstance* sub = inst->GetItem(index);
|
|
||||||
if (!sub)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
|
// This must be guaranteed to have subitem_count members, where the index is the correct index. The client doesn't loop through all slots here
|
||||||
|
for (const auto& [index, subitem] : subitems) {
|
||||||
buffer.WriteUInt32(index);
|
buffer.WriteUInt32(index);
|
||||||
|
SerializeItem(buffer, subitem, SubSlotNumber, depth + 1, packet_type);
|
||||||
SerializeItem(buffer, sub, SubSlotNumber, (depth + 1), packet_type);
|
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
|
buffer.WriteUInt32(0); // no subitems, client needs to know that
|
||||||
|
|
||||||
//bool bCollected;
|
//bool bCollected;
|
||||||
buffer.WriteInt8(0); //unsupported atm
|
buffer.WriteInt8(0); //unsupported atm
|
||||||
//u64 DontKnow;
|
//u64 DontKnow;
|
||||||
buffer.WriteUInt64(0); //unsupported atm
|
buffer.WriteInt64(0); //unsupported atm
|
||||||
//s32 Luck;
|
//s32 Luck;
|
||||||
buffer.WriteInt32(0); //unsupported atm
|
buffer.WriteInt32(0); //unsupported atm
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -516,7 +516,7 @@ namespace TOB {
|
|||||||
|
|
||||||
//OP_SetServerFilter
|
//OP_SetServerFilter
|
||||||
struct SetServerFilter_Struct {
|
struct SetServerFilter_Struct {
|
||||||
uint32 filters[68];
|
uint32 filters[69];
|
||||||
};
|
};
|
||||||
|
|
||||||
// Was new to RoF2, doesn't look changed
|
// Was new to RoF2, doesn't look changed
|
||||||
@@ -748,10 +748,10 @@ namespace TOB {
|
|||||||
struct ManaChange_Struct
|
struct ManaChange_Struct
|
||||||
{
|
{
|
||||||
uint32 new_mana;
|
uint32 new_mana;
|
||||||
uint32 stamina;
|
uint32 stamina; // endurance
|
||||||
uint32 spell_id;
|
uint32 spell_id;
|
||||||
uint32 keepcasting;
|
uint32 keepcasting;
|
||||||
int32 slot;
|
int32 slot; // gem slot
|
||||||
};
|
};
|
||||||
|
|
||||||
//This is what we call OP_Action
|
//This is what we call OP_Action
|
||||||
|
|||||||
+8
-8
@@ -85,7 +85,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th
|
|||||||
| `OP_ChangePetName` | 🔴 Not-Set | | |
|
| `OP_ChangePetName` | 🔴 Not-Set | | |
|
||||||
| `OP_CharacterCreate` | 🟢 Verified | Sends heroic type, can be used for something? | |
|
| `OP_CharacterCreate` | 🟢 Verified | Sends heroic type, can be used for something? | |
|
||||||
| `OP_CharacterCreateRequest` | 🟢 Verified | | |
|
| `OP_CharacterCreateRequest` | 🟢 Verified | | |
|
||||||
| `OP_CharInventory` | 🟡 Unverified | | |
|
| `OP_CharInventory` | 🟢 Verified | | |
|
||||||
| `OP_Charm` | 🟡 Unverified | | |
|
| `OP_Charm` | 🟡 Unverified | | |
|
||||||
| `OP_ChatMessage` | 🔴 Not-Set | | |
|
| `OP_ChatMessage` | 🔴 Not-Set | | |
|
||||||
| `OP_ClearAA` | 🟢 Verified | | |
|
| `OP_ClearAA` | 🟢 Verified | | |
|
||||||
@@ -98,9 +98,9 @@ Below is a status list for the 450 opcodes we currently use on the server for th
|
|||||||
| `OP_ClickObject` | 🟡 Unverified | | |
|
| `OP_ClickObject` | 🟡 Unverified | | |
|
||||||
| `OP_ClickObjectAction` | 🟡 Unverified | | |
|
| `OP_ClickObjectAction` | 🟡 Unverified | | |
|
||||||
| `OP_ClientError` | 🔴 Not-Set | | |
|
| `OP_ClientError` | 🔴 Not-Set | | |
|
||||||
| `OP_ClientReady` | 🟡 Unverified | | |
|
| `OP_ClientReady` | 🟢 Verified | | |
|
||||||
| `OP_ClientTimeStamp` | 🔴 Not-Set | | |
|
| `OP_ClientTimeStamp` | 🔴 Not-Set | | |
|
||||||
| `OP_ClientUpdate` | 🟡 Unverified | | |
|
| `OP_ClientUpdate` | 🟢 Verified | | |
|
||||||
| `OP_CloseContainer` | 🔴 Not-Set | | |
|
| `OP_CloseContainer` | 🔴 Not-Set | | |
|
||||||
| `OP_CloseTributeMaster` | 🔴 Not-Set | | |
|
| `OP_CloseTributeMaster` | 🔴 Not-Set | | |
|
||||||
| `OP_ColoredText` | 🟡 Unverified | | |
|
| `OP_ColoredText` | 🟡 Unverified | | |
|
||||||
@@ -279,7 +279,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th
|
|||||||
| `OP_Heartbeat` | 🔴 Not-Set | | |
|
| `OP_Heartbeat` | 🔴 Not-Set | | |
|
||||||
| `OP_Hide` | 🟡 Unverified | | |
|
| `OP_Hide` | 🟡 Unverified | | |
|
||||||
| `OP_HideCorpse` | 🟡 Unverified | | |
|
| `OP_HideCorpse` | 🟡 Unverified | | |
|
||||||
| `OP_HPUpdate` | 🟡 Unverified | | |
|
| `OP_HPUpdate` | 🟢 Verified | | |
|
||||||
| `OP_Illusion` | 🟡 Unverified | | |
|
| `OP_Illusion` | 🟡 Unverified | | |
|
||||||
| `OP_IncreaseStats` | 🟡 Unverified | | |
|
| `OP_IncreaseStats` | 🟡 Unverified | | |
|
||||||
| `OP_InitialHPUpdate` | 🔴 Not-Set | | |
|
| `OP_InitialHPUpdate` | 🔴 Not-Set | | |
|
||||||
@@ -346,7 +346,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th
|
|||||||
| `OP_LootComplete` | 🟡 Unverified | | |
|
| `OP_LootComplete` | 🟡 Unverified | | |
|
||||||
| `OP_LootItem` | 🟡 Unverified | | |
|
| `OP_LootItem` | 🟡 Unverified | | |
|
||||||
| `OP_LootRequest` | 🟡 Unverified | | |
|
| `OP_LootRequest` | 🟡 Unverified | | |
|
||||||
| `OP_ManaChange` | 🟡 Unverified | | |
|
| `OP_ManaChange` | 🟢 Verified | | |
|
||||||
| `OP_ManaUpdate` | 🔴 Not-Set | | |
|
| `OP_ManaUpdate` | 🔴 Not-Set | | |
|
||||||
| `OP_MarkNPC` | 🔴 Not-Set | | |
|
| `OP_MarkNPC` | 🔴 Not-Set | | |
|
||||||
| `OP_MarkRaidNPC` | 🔴 Not-Set | | |
|
| `OP_MarkRaidNPC` | 🔴 Not-Set | | |
|
||||||
@@ -503,7 +503,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th
|
|||||||
| `OP_SetGuildMOTD` | 🔴 Not-Set | | |
|
| `OP_SetGuildMOTD` | 🔴 Not-Set | | |
|
||||||
| `OP_SetGuildRank` | 🔴 Not-Set | | |
|
| `OP_SetGuildRank` | 🔴 Not-Set | | |
|
||||||
| `OP_SetRunMode` | 🟡 Unverified | | |
|
| `OP_SetRunMode` | 🟡 Unverified | | |
|
||||||
| `OP_SetServerFilter` | 🟡 Unverified | | |
|
| `OP_SetServerFilter` | 🟢 Verified | | |
|
||||||
| `OP_SetStartCity` | 🔴 Not-Set | | |
|
| `OP_SetStartCity` | 🔴 Not-Set | | |
|
||||||
| `OP_SetTitle` | 🔴 Not-Set | | |
|
| `OP_SetTitle` | 🔴 Not-Set | | |
|
||||||
| `OP_SetTitleReply` | 🔴 Not-Set | | |
|
| `OP_SetTitleReply` | 🔴 Not-Set | | |
|
||||||
@@ -543,7 +543,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th
|
|||||||
| `OP_SpawnAppearance` | 🟢 Verified | | |
|
| `OP_SpawnAppearance` | 🟢 Verified | | |
|
||||||
| `OP_SpawnDoor` | 🟢 Verified | | |
|
| `OP_SpawnDoor` | 🟢 Verified | | |
|
||||||
| `OP_SpawnPositionUpdate` | 🔴 Not-Set | | |
|
| `OP_SpawnPositionUpdate` | 🔴 Not-Set | | |
|
||||||
| `OP_SpecialMesg` | 🟡 Unverified | | |
|
| `OP_SpecialMesg` | 🟢 Verified | | |
|
||||||
| `OP_SpellEffect` | 🟡 Unverified | | |
|
| `OP_SpellEffect` | 🟡 Unverified | | |
|
||||||
| `OP_Split` | 🟡 Unverified | | |
|
| `OP_Split` | 🟡 Unverified | | |
|
||||||
| `OP_Stamina` | 🟢 Verified | These values are 0-32k instead of 0-127 | |
|
| `OP_Stamina` | 🟢 Verified | These values are 0-32k instead of 0-127 | |
|
||||||
@@ -603,7 +603,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th
|
|||||||
| `OP_VoiceMacroIn` | 🟡 Unverified | | |
|
| `OP_VoiceMacroIn` | 🟡 Unverified | | |
|
||||||
| `OP_VoiceMacroOut` | 🟡 Unverified | | |
|
| `OP_VoiceMacroOut` | 🟡 Unverified | | |
|
||||||
| `OP_WeaponEquip1` | 🔴 Not-Set | | |
|
| `OP_WeaponEquip1` | 🔴 Not-Set | | |
|
||||||
| `OP_WearChange` | 🟡 Unverified | | |
|
| `OP_WearChange` | 🟢 Verified | | |
|
||||||
| `OP_Weather` | 🟢 Verified | | |
|
| `OP_Weather` | 🟢 Verified | | |
|
||||||
| `OP_Weblink` | 🟡 Unverified | | |
|
| `OP_Weblink` | 🟡 Unverified | | |
|
||||||
| `OP_WhoAllRequest` | 🟡 Unverified | | |
|
| `OP_WhoAllRequest` | 🟡 Unverified | | |
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ OP_KeyRing=0x0000
|
|||||||
OP_WhoAllRequest=0x3328
|
OP_WhoAllRequest=0x3328
|
||||||
OP_WhoAllResponse=0x4dfd
|
OP_WhoAllResponse=0x4dfd
|
||||||
OP_FriendsWho=0x3547
|
OP_FriendsWho=0x3547
|
||||||
OP_ConfirmDelete=0x14a8
|
OP_ConfirmDelete=0x14a8 # This is sent fromt the client after a movement update (with just spawn ID as the content)
|
||||||
OP_Logout=0x46f8
|
OP_Logout=0x46f8
|
||||||
OP_Rewind=0x898a
|
OP_Rewind=0x898a
|
||||||
OP_TargetCommand=0x46bf
|
OP_TargetCommand=0x46bf
|
||||||
|
|||||||
Reference in New Issue
Block a user