diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index e4fe7bfcc..5c71c96c5 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -93,8 +93,8 @@ set(common_sources patches/sod_limits.cpp patches/sof.cpp patches/sof_limits.cpp - patches/tob.cpp - patches/tob_limits.cpp + patches/tob.cpp + patches/tob_limits.cpp patches/titanium.cpp patches/titanium_limits.cpp patches/uf.cpp @@ -676,10 +676,10 @@ set(common_headers patches/sof_limits.h patches/sof_ops.h patches/sof_structs.h - patches/tob.h - patches/tob_limits.h - patches/tob_ops.h - patches/tob_structs.h + patches/tob.h + patches/tob_limits.h + patches/tob_ops.h + patches/tob_structs.h patches/ss_declare.h patches/ss_define.h patches/ss_register.h @@ -736,24 +736,7 @@ set(common_headers ) # Source Groups (Regex based for automatic subdirectory handling) -source_group("CLI" REGULAR_EXPRESSION "^cli/") -source_group("Content" REGULAR_EXPRESSION "^content/") -source_group("Cron" REGULAR_EXPRESSION "^cron/") -source_group("Database" REGULAR_EXPRESSION "^database/") -source_group("Discord" REGULAR_EXPRESSION "^discord/") -source_group("Event" REGULAR_EXPRESSION "^event/") -source_group("Events" REGULAR_EXPRESSION "^events/") -source_group("Http" REGULAR_EXPRESSION "^http/") -source_group("Json" REGULAR_EXPRESSION "^json/") -source_group("Memory" REGULAR_EXPRESSION "^memory/") -source_group("Net" REGULAR_EXPRESSION "^net/") -source_group("Patches" REGULAR_EXPRESSION "^patches/") -source_group("Process" REGULAR_EXPRESSION "^process/") -source_group("Repositories" REGULAR_EXPRESSION "^repositories/") -source_group("StackWalker" REGULAR_EXPRESSION "^StackWalker/") -source_group("Stacktrace" REGULAR_EXPRESSION "^stacktrace/") -source_group("Termcolor" REGULAR_EXPRESSION "^termcolor/") -source_group("Util" REGULAR_EXPRESSION "^util/") +source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${common_headers} ${common_sources} ${repositories}) option(EQEMU_ADD_PROFILER "Link with Google perftools profiler" OFF) #PRNG options diff --git a/common/patches/tob.cpp b/common/patches/tob.cpp index 5858faed4..1f578a296 100644 --- a/common/patches/tob.cpp +++ b/common/patches/tob.cpp @@ -854,86 +854,86 @@ namespace TOB ENCODE(OP_LogServer) { SETUP_VAR_ENCODE(LogServer_Struct); - ALLOC_LEN_ENCODE(1840); + ALLOC_LEN_ENCODE(1932); //pvp if (emu->enable_pvp) { - *(char*)&__packet->pBuffer[0x04] = 1; + *(char*)&__packet->pBuffer[0x06] = 1; } if (emu->enable_FV) { //FV sets these both to 1 //one appears to enable the no drop flag the other just marks the server as special? - *(char*)&__packet->pBuffer[0x08] = 1; *(char*)&__packet->pBuffer[0x0a] = 1; + *(char*)&__packet->pBuffer[0x0c] = 1; } //This has something to do with heirloom and prestige items but im not sure what it does //Seems to sit at 0 - *(char*)&__packet->pBuffer[0x71d] = 0; + *(char*)&__packet->pBuffer[0x75f] = 0; //not sure what this does, something to do with server select - *(char*)&__packet->pBuffer[0x09] = 0; - - //this appears to have some effect on the tradeskill system; disabling made by tags perhaps? *(char*)&__packet->pBuffer[0x0b] = 0; + //this appears to have some effect on the tradeskill system; disabling made by tags perhaps? + *(char*)&__packet->pBuffer[0x0d] = 0; + //not sure, setting it to the value ive seen - *(char*)&__packet->pBuffer[0x0c] = 1; + *(char*)&__packet->pBuffer[0x0e] = 1; //Something to do with languages - *(char*)&__packet->pBuffer[0x0d] = 1; + *(char*)&__packet->pBuffer[0x0f] = 1; //These seem to affect if server has betabuff enabled - *(char*)&__packet->pBuffer[0x5c0] = 0; - *(char*)&__packet->pBuffer[0x5c1] = 0; + *(char*)&__packet->pBuffer[0x602] = 0; + *(char*)&__packet->pBuffer[0x603] = 0; //This is set on test so it's probably indicating this is a test server - *(char*)&__packet->pBuffer[0x5c2] = 0; + *(char*)&__packet->pBuffer[0x604] = 0; //not sure, but it's grouped with the beta and test stuff - *(char*)&__packet->pBuffer[0x5c3] = 0; + *(char*)&__packet->pBuffer[0x605] = 0; //world short name - strncpy((char*)&__packet->pBuffer[0x15], emu->worldshortname, 32); + strncpy((char*)&__packet->pBuffer[0x17], emu->worldshortname, 32); //not sure, affects some player calculation but didn't care to look more - *(char*)&__packet->pBuffer[0x5c2] = 0; + *(char*)&__packet->pBuffer[0x5ee] = 0; //Looks right if (emu->enablemail) { - *(char*)&__packet->pBuffer[0x5b5] = 1; + *(char*)&__packet->pBuffer[0x5f7] = 1; } //Looks right if (emu->enablevoicemacros) { - *(char*)&__packet->pBuffer[0x5b4] = 1; + *(char*)&__packet->pBuffer[0x5f6] = 1; } //Not sure, sending what we've seen - *(char*)&__packet->pBuffer[0x5b6] = 0; + *(char*)&__packet->pBuffer[0x5f8] = 0; //Not sure sending what we've seen - *(char*)&__packet->pBuffer[0x5b8] = 1; + *(char*)&__packet->pBuffer[0x5fa] = 1; //Not sure sending what we've seen - *(int32_t*)&__packet->pBuffer[0x5fc] = -1; + *(int32_t*)&__packet->pBuffer[0x63e] = -1; //Test sets this to 1, everyone else seems to set it to 0 - *(int32_t*)&__packet->pBuffer[0x600] = 0; + *(int32_t*)&__packet->pBuffer[0x642] = 0; //Disassembly puts it next to code dealing with commands, ive not seen anyone send anything but 0 - *(char*)&__packet->pBuffer[0x705] = 0; + *(char*)&__packet->pBuffer[0x747] = 0; //Something about item restrictions, seems to always be set to 1 - *(char*)&__packet->pBuffer[0x710] = 1; + *(char*)&__packet->pBuffer[0x752] = 1; //This and 0x724 are often multiplied together in guild favor calcs, live and test send 1.0f - *(float*)&__packet->pBuffer[0x720] = 1.0f; - *(float*)&__packet->pBuffer[0x724] = 1.0f; + *(float*)&__packet->pBuffer[0x762] = 1.0f; + *(float*)&__packet->pBuffer[0x766] = 1.0f; //This and 0x72c are often multiplied together in non-guild favor calcs, live and test send 1.0f - *(float*)&__packet->pBuffer[0x728] = 1.0f; - *(float*)&__packet->pBuffer[0x72c] = 1.0f; + *(float*)&__packet->pBuffer[0x76a] = 1.0f; + *(float*)&__packet->pBuffer[0x76e] = 1.0f; FINISH_ENCODE(); } diff --git a/obr/packets/world/CharCreateResponse.txt b/obr/packets/world/CharCreateResponse.txt new file mode 100644 index 000000000..2d9a3766b --- /dev/null +++ b/obr/packets/world/CharCreateResponse.txt @@ -0,0 +1,26 @@ +struct CharacterCreateAllocation +{ + u32 index; + u32 base_stats[7]; + u32 default_allocations[7]; +}; + +struct RaceClassCombo +{ + u64 expansion_req; + u32 race; + u32 class; + u32 deity; + u32 allocation_index; + u32 zone; +}; + +struct Packet { + u8 padding1; + u32 allocation_count; + CharacterCreateAllocation allocations[allocation_count]; + u32 race_class_combo_count; + RaceClassCombo race_class_combos[race_class_combo_count]; +}; + +Packet p @ 0x00; \ No newline at end of file diff --git a/obr/packets/world/MembershipDetails.txt b/obr/packets/world/MembershipDetails.txt new file mode 100644 index 000000000..5c18d68a5 --- /dev/null +++ b/obr/packets/world/MembershipDetails.txt @@ -0,0 +1,26 @@ +struct MembershipEntry +{ + u32 purchase_id; + u32 bitwise_entry; +}; + +struct MembershipSetting +{ + s8 setting_index; + s32 setting_id; // 0 to 23 actually seen but the OP_Membership packet has up to 32 + s32 setting_value; +}; + +struct Membership +{ + u32 membership_setting_count; + MembershipSetting membership_settings[membership_setting_count]; + u32 race_entry_count; + MembershipEntry membership_races[race_entry_count]; + u32 class_entry_count; + MembershipEntry membership_classes[class_entry_count]; + u32 exit_url_length; + char exit_url[exit_url_length]; +}; + +Membership m @ 0x00; \ No newline at end of file