diff options
41 files changed, 3745 insertions, 2638 deletions
diff --git a/src/admin/ladmin.cpp b/src/admin/ladmin.cpp index b9819cd..f6c5985 100644 --- a/src/admin/ladmin.cpp +++ b/src/admin/ladmin.cpp @@ -2019,7 +2019,7 @@ void parse_fromlogin(Session *s) { AccountName userid = stringish<AccountName>(RFIFO_STRING<24>(s, i + 5)); VString<23> lower_userid = userid.to_lower(); - // what? + // this is ad-hoc block streaming list_first = next(wrap<AccountId>(RFIFOL(s, i))); // here are checks... if (list_type == 0 diff --git a/src/compat/iter.hpp b/src/compat/iter.hpp index 130bdf9..659aca9 100644 --- a/src/compat/iter.hpp +++ b/src/compat/iter.hpp @@ -94,4 +94,58 @@ IteratorPair<ValueIterator<T>> value_range(T b, T e) return {b, e}; } + +template<class T, bool(*filter)(T), class C> +class FilterIterator +{ + C *container; + using InnerIterator = decltype(std::begin(*container)); + InnerIterator impl; +public: + void post_adv() + { + while (impl != std::end(*container)) + { + if (filter(*impl)) + break; + ++impl; + } + } + + FilterIterator(C *c) + : container(c), impl(std::begin(*c)) + { + post_adv(); + } + + void operator ++() + { + ++impl; + post_adv(); + } + + T operator *() + { + return *impl; + } + + friend + bool operator != (FilterIterator l, FilterIterator) + { + return l.impl != std::end(*l.container); + } +}; + +template<class T> +bool is_truthy(T v) +{ + return v; +} + +template<class T, bool(*filter)(T)=is_truthy, class C> +IteratorPair<FilterIterator<T, filter, C>> filter_iterator(C *c) +{ + return {FilterIterator<T, filter, C>(c), FilterIterator<T, filter, C>(c)}; +} + #endif // TMWA_COMPAT_ITER_HPP diff --git a/src/compat/iter_test.cpp b/src/compat/iter_test.cpp index 2c3cdc8..f6f59d4 100644 --- a/src/compat/iter_test.cpp +++ b/src/compat/iter_test.cpp @@ -102,3 +102,56 @@ TEST(iterpair, unsigned8) }; EXPECT_TRUE(std::equal(pair.begin(), pair.end(), arr)); } + +static +bool is_odd_ref(int& i) +{ + return i % 2; +} + +TEST(iterpair, filter1) +{ + int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; + + int expected_arr[] = {1, 3, 5, 7}; + int *expected_it = expected_arr; + int *expected_end = expected_arr + 4; + + for (int& i : filter_iterator<int&, is_odd_ref>(&arr)) + { + EXPECT_EQ(i, *expected_it); + ++expected_it; + } + EXPECT_EQ(expected_it, expected_end); +} + +TEST(iterpair, filter2) +{ + std::vector<int> vals = {0, 1, 0, 2, 0, 3, 0}; + + int sum = 0, count = 0; + for (int i : filter_iterator<int>(&vals)) + { + sum += i; + count++; + } + EXPECT_EQ(sum, 6); + EXPECT_EQ(count, 3); +} + +TEST(iterpair, filter3) +{ + int one = 1; + int two = 2; + int three = 3; + std::vector<int *> vals = {0, &one, 0, &two, 0, &three, 0}; + + int sum = 0, count = 0; + for (int *i : filter_iterator<int *>(&vals)) + { + sum += *i; + count++; + } + EXPECT_EQ(sum, 6); + EXPECT_EQ(count, 3); +} diff --git a/src/ints/little.hpp b/src/ints/little.hpp index d7d57ff..68f8683 100644 --- a/src/ints/little.hpp +++ b/src/ints/little.hpp @@ -73,7 +73,7 @@ namespace ints { if (__BYTE_ORDER == __BIG_ENDIAN) nat = __builtin_bswap32(nat); - __builtin_memcpy(net, &nat, 2); + __builtin_memcpy(net, &nat, 4); return true; } inline __attribute__((warn_unused_result)) @@ -81,7 +81,7 @@ namespace ints { if (__BYTE_ORDER == __BIG_ENDIAN) nat = __builtin_bswap64(nat); - __builtin_memcpy(net, &nat, 2); + __builtin_memcpy(net, &nat, 8); return true; } diff --git a/src/login/login.cpp b/src/login/login.cpp index 184272e..3f91025 100644 --- a/src/login/login.cpp +++ b/src/login/login.cpp @@ -50,6 +50,7 @@ #include "../io/tty.hpp" #include "../io/write.hpp" +#include "../net/packets.hpp" #include "../net/socket.hpp" #include "../net/timer.hpp" #include "../net/vomit.hpp" @@ -64,6 +65,11 @@ #include "../mmo/utils.hpp" #include "../mmo/version.hpp" +#include "../proto2/any-user.hpp" +#include "../proto2/login-admin.hpp" +#include "../proto2/login-char.hpp" +#include "../proto2/login-user.hpp" + #include "../poison.hpp" constexpr int MAX_SERVERS = 30; @@ -96,8 +102,6 @@ struct mmo_char_server static AccountId account_id_count = START_ACCOUNT_NUM; static -int server_num; -static int new_account = 0; static int login_port = 6900; @@ -222,7 +226,7 @@ AccountPass admin_pass; static AString gm_pass; static -int level_new_gm = 60; +GmLevel level_new_gm = GmLevel::from(60u); static Map<AccountId, GM_Account> gm_account_db; @@ -273,7 +277,7 @@ void delete_fromchar(Session *sess) IP4Address ip = sess->client_ip; PRINTF("Char-server '%s' has disconnected.\n"_fmt, server[id].name); LOGIN_LOG("Char-server '%s' has disconnected (ip: %s).\n"_fmt, - server[id].name, ip); + server[id].name, ip); server_session[id] = nullptr; server[id] = mmo_char_server{}; } @@ -318,7 +322,7 @@ int read_gm_account(void) gm_account_filename); PRINTF(" Actually, there is no GM accounts on the server.\n"_fmt); LOGIN_LOG("read_gm_account: GM accounts file [%s] not found.\n"_fmt, - gm_account_filename); + gm_account_filename); LOGIN_LOG(" Actually, there is no GM accounts on the server.\n"_fmt); return 1; } @@ -332,7 +336,7 @@ int read_gm_account(void) GM_Account p {}; if (!extract(line, record<' '>(&p.account_id, &p.level))) PRINTF("read_gm_account: file [%s], invalid 'id_acount level' format: '%s'\n"_fmt, - gm_account_filename, line); + gm_account_filename, line); else { GmLevel GM_level = isGM(p.account_id); @@ -340,10 +344,10 @@ int read_gm_account(void) { // if it's not a new account if (GM_level == p.level) PRINTF("read_gm_account: GM account %d defined twice (same level: %d).\n"_fmt, - p.account_id, p.level); + p.account_id, p.level); else PRINTF("read_gm_account: GM account %d defined twice (levels: %d and %d).\n"_fmt, - p.account_id, GM_level, p.level); + p.account_id, GM_level, p.level); } if (GM_level != p.level) { // if new account or new level @@ -364,7 +368,7 @@ int read_gm_account(void) PRINTF("read_gm_account: file '%s' readed (%d GM accounts found).\n"_fmt, gm_account_filename, c); LOGIN_LOG("read_gm_account: file '%s' readed (%d GM accounts found).\n"_fmt, - gm_account_filename, c); + gm_account_filename, c); return 0; } @@ -587,7 +591,7 @@ int mmo_auth_init(void) // no account file -> no account -> no login, including char-server (ERROR) // not anymore! :-) PRINTF(SGR_BOLD SGR_RED "mmo_auth_init: Accounts file [%s] not found." SGR_RESET "\n"_fmt, - account_filename); + account_filename); return 0; } @@ -645,26 +649,26 @@ void mmo_auth_sync(void) return; } FPRINTF(fp, - "// Accounts file: here are saved all information about the accounts.\n"_fmt); + "// Accounts file: here are saved all information about the accounts.\n"_fmt); FPRINTF(fp, - "// Structure: ID, account name, password, last login time, sex, # of logins, state, email, error message for state 7, validity time, last (accepted) login ip, memo field, ban timestamp, repeated(register text, register value)\n"_fmt); + "// Structure: ID, account name, password, last login time, sex, # of logins, state, email, error message for state 7, validity time, last (accepted) login ip, memo field, ban timestamp, repeated(register text, register value)\n"_fmt); FPRINTF(fp, "// Some explanations:\n"_fmt); FPRINTF(fp, - "// account name : between 4 to 23 char for a normal account (standard client can't send less than 4 char).\n"_fmt); + "// account name : between 4 to 23 char for a normal account (standard client can't send less than 4 char).\n"_fmt); FPRINTF(fp, "// account password: between 4 to 23 char\n"_fmt); FPRINTF(fp, - "// sex : M or F for normal accounts, S for server accounts\n"_fmt); + "// sex : M or F for normal accounts, S for server accounts\n"_fmt); FPRINTF(fp, - "// state : 0: account is ok, 1 to 256: error code of packet 0x006a + 1\n"_fmt); + "// state : 0: account is ok, 1 to 256: error code of packet 0x006a + 1\n"_fmt); FPRINTF(fp, - "// email : between 3 to 39 char (a@a.com is like no email)\n"_fmt); + "// email : between 3 to 39 char (a@a.com is like no email)\n"_fmt); FPRINTF(fp, - "// error message : text for the state 7: 'Your are Prohibited to login until <text>'. Max 19 char\n"_fmt); + "// error message : text for the state 7: 'Your are Prohibited to login until <text>'. Max 19 char\n"_fmt); FPRINTF(fp, - "// valitidy time : 0: unlimited account, <other value>: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)\n"_fmt); + "// valitidy time : 0: unlimited account, <other value>: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)\n"_fmt); FPRINTF(fp, "// memo field : max 254 char\n"_fmt); FPRINTF(fp, - "// ban time : 0: no ban, <other value>: banned until the date: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)\n"_fmt); + "// ban time : 0: no ban, <other value>: banned until the date: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)\n"_fmt); for (const AuthData& ad : auth_data) { if (!ad.account_id) @@ -714,21 +718,11 @@ void check_auth_sync(TimerData *, tick_t) return; } -//-------------------------------------------------------------------- -// Packet send to all char-servers, except one (wos: without our self) -//-------------------------------------------------------------------- + static -void charif_sendallwos(Session *ss, const uint8_t *buf, size_t len) +auto iter_char_sessions() -> decltype(filter_iterator<Session *>(&server_session)) { - for (int i = 0; i < MAX_SERVERS; i++) - { - Session *s = server_session[i]; - if (s && s != ss) - { - WFIFO_BUF_CLONE(s, buf, len); - WFIFOSET(s, len); - } - } + return filter_iterator<Session *>(&server_session); } //----------------------------------------------------- @@ -737,23 +731,23 @@ void charif_sendallwos(Session *ss, const uint8_t *buf, size_t len) static void send_GM_accounts(void) { - uint8_t buf[32000]; - int len; + std::vector<SPacket_0x2732_Repeat> tail; - len = 4; - WBUFW(buf, 0) = 0x2732; for (const AuthData& ad : auth_data) { // send only existing accounts. We can not create a GM account when server is online. if (GmLevel GM_value = isGM(ad.account_id)) { - WBUFL(buf, len) = unwrap<AccountId>(ad.account_id); - WBUFB(buf, len + 4) = static_cast<uint8_t>(GM_value.get_all_bits()); - len += 5; + SPacket_0x2732_Repeat item; + item.account_id = ad.account_id; + item.gm_level = GM_value; + tail.push_back(item); } } - WBUFW(buf, 2) = len; - charif_sendallwos(nullptr, buf, len); + for (Session *ss : iter_char_sessions()) + { + send_packet_repeatonly<0x2732, 4, 5>(ss, tail); + } } //----------------------------------------------------- @@ -852,14 +846,14 @@ int mmo_auth(struct mmo_account *account, Session *s) if (new_account_sex) { LOGIN_LOG("Attempt of creation of an already existant account (account: %s_%c, ip: %s)\n"_fmt, - account->userid, new_account_sex, ip); + account->userid, new_account_sex, ip); return 9; // 9 = Account already exists } if ((!pass_ok(account->passwd, ad->pass)) && !encpasswdok) { if (account->passwdenc == 0) LOGIN_LOG("Invalid password (account: %s, ip: %s)\n"_fmt, - account->userid, ip); + account->userid, ip); return 1; // 1 = Incorrect Password } @@ -867,8 +861,8 @@ int mmo_auth(struct mmo_account *account, Session *s) if (ad->state) { LOGIN_LOG("Connection refused (account: %s, state: %d, ip: %s)\n"_fmt, - account->userid, ad->state, - ip); + account->userid, ad->state, + ip); switch (ad->state) { // packet 0x006a value + 1 case 1: // 0 = Unregistered ID @@ -896,14 +890,14 @@ int mmo_auth(struct mmo_account *account, Session *s) { // always banned LOGIN_LOG("Connection refused (account: %s, banned until %s, ip: %s)\n"_fmt, - account->userid, tmpstr, ip); + account->userid, tmpstr, ip); return 6; // 6 = Your are Prohibited to log in until %s } else { // ban is finished LOGIN_LOG("End of ban (account: %s, previously banned until %s -> not more banned, ip: %s)\n"_fmt, - account->userid, tmpstr, ip); + account->userid, tmpstr, ip); ad->ban_until_time = TimeT(); // reset the ban time } } @@ -912,27 +906,27 @@ int mmo_auth(struct mmo_account *account, Session *s) && ad->connect_until_time < TimeT::now()) { LOGIN_LOG("Connection refused (account: %s, expired ID, ip: %s)\n"_fmt, - account->userid, ip); + account->userid, ip); return 2; // 2 = This ID is expired } LOGIN_LOG("Authentification accepted (account: %s (id: %d), ip: %s)\n"_fmt, - account->userid, ad->account_id, ip); + account->userid, ad->account_id, ip); } else { if (new_account_sex == '\0') { LOGIN_LOG("Unknown account (account: %s, ip: %s)\n"_fmt, - account->userid, ip); + account->userid, ip); return 0; // 0 = Unregistered ID } else { AccountId new_id = mmo_auth_new(account, sex_from_char(new_account_sex), DEFAULT_EMAIL); LOGIN_LOG("Account creation and authentification accepted (account %s (id: %d), sex: %c, connection with _F/_M, ip: %s)\n"_fmt, - account->userid, new_id, - new_account_sex, ip); + account->userid, new_id, + new_account_sex, ip); ad = &auth_data.back(); } } @@ -967,9 +961,9 @@ void char_anti_freeze_system(TimerData *, tick_t) if (server_freezeflag[i]-- < 1) { // Char-server anti-freeze system. Counter. 5 ok, 4...0 freezed PRINTF("Char-server anti-freeze system: char-server #%d '%s' is freezed -> disconnection.\n"_fmt, - i, server[i].name); + i, server[i].name); LOGIN_LOG("Char-server anti-freeze system: char-server #%d '%s' is freezed -> disconnection.\n"_fmt, - i, server[i].name); + i, server[i].name); server_session[i]->set_eof(); } } @@ -994,66 +988,81 @@ void parse_fromchar(Session *s) return; } - while (RFIFOREST(s) >= 2) + RecvResult rv = RecvResult::Complete; + uint16_t packet_id; + while (rv == RecvResult::Complete && packet_peek_id(s, &packet_id)) { - if (display_parse_fromchar == 2 || (display_parse_fromchar == 1 && RFIFOW(s, 0) != 0x2714)) // 0x2714 is done very often (number of players) + if (display_parse_fromchar == 2 || (display_parse_fromchar == 1 && packet_id != 0x2714)) // 0x2714 is done very often (number of players) PRINTF("parse_fromchar: connection #%d, packet: 0x%x (with being read: %zu bytes).\n"_fmt, - s, RFIFOW(s, 0), RFIFOREST(s)); + s, packet_id, packet_avail(s)); - switch (RFIFOW(s, 0)) + switch (packet_id) { // request from map-server via char-server to reload GM accounts (by Yor). case 0x2709: + { + RPacket_0x2709_Fixed fixed; + rv = recv_fpacket<0x2709, 2>(s, fixed); + if (rv != RecvResult::Complete) + break; + LOGIN_LOG("Char-server '%s': Request to re-load GM configuration file (ip: %s).\n"_fmt, - server[id].name, ip); + server[id].name, ip); read_gm_account(); // send GM accounts to all char-servers send_GM_accounts(); - RFIFOSKIP(s, 2); break; + } case 0x2712: // request from char-server to authentify an account - if (RFIFOREST(s) < 19) - return; + { + RPacket_0x2712_Fixed fixed; + rv = recv_fpacket<0x2712, 19>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); + AccountId acc = fixed.account_id; int i; for (i = 0; i < AUTH_FIFO_SIZE; i++) { if (auth_fifo[i].account_id == acc && - auth_fifo[i].login_id1 == RFIFOL(s, 6) && - auth_fifo[i].login_id2 == RFIFOL(s, 10) && // relate to the versions higher than 18 - auth_fifo[i].sex == static_cast<SEX>(RFIFOB(s, 14)) && + auth_fifo[i].login_id1 == fixed.login_id1 && + auth_fifo[i].login_id2 == fixed.login_id2 && // relate to the versions higher than 18 + auth_fifo[i].sex == fixed.sex && (!check_ip_flag - || auth_fifo[i].ip == RFIFOIP(s, 15)) + || auth_fifo[i].ip == fixed.ip) && !auth_fifo[i].delflag) { - int p; auth_fifo[i].delflag = 1; LOGIN_LOG("Char-server '%s': authentification of the account %d accepted (ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); for (const AuthData& ad : auth_data) { if (ad.account_id == acc) { - WFIFOW(s, 0) = 0x2729; // Sending of the account_reg2 - WFIFOL(s, 4) = unwrap<AccountId>(acc); + SPacket_0x2729_Head head_29; + head_29.account_id = acc; + std::vector<SPacket_0x2729_Repeat> repeat_29; int j; - for (p = 8, j = 0; + for (j = 0; j < ad.account_reg2_num; - p += 36, j++) + j++) { - WFIFO_STRING(s, p, ad.account_reg2[j].str, 32); - WFIFOL(s, p + 32) = ad.account_reg2[j].value; + SPacket_0x2729_Repeat item; + item.name = ad.account_reg2[j].str; + item.value = ad.account_reg2[j].value; + repeat_29.push_back(item); } - WFIFOW(s, 2) = p; - WFIFOSET(s, p); - WFIFOW(s, 0) = 0x2713; - WFIFOL(s, 2) = unwrap<AccountId>(acc); - WFIFOB(s, 6) = 0; - WFIFO_STRING(s, 7, ad.email, 40); - WFIFOL(s, 47) = static_cast<time_t>(ad.connect_until_time); - WFIFOSET(s, 51); + send_vpacket<0x2729, 8, 36>(s, head_29, repeat_29); + + SPacket_0x2713_Fixed fixed_13; + fixed_13.account_id = acc; + fixed_13.invalid = 0; + fixed_13.email = ad.email; + fixed_13.connect_until = ad.connect_until_time; + + send_fpacket<0x2713, 51>(s, fixed_13); break; } } @@ -1064,37 +1073,46 @@ void parse_fromchar(Session *s) if (i == AUTH_FIFO_SIZE) { LOGIN_LOG("Char-server '%s': authentification of the account %d REFUSED (ip: %s).\n"_fmt, - server[id].name, acc, ip); - WFIFOW(s, 0) = 0x2713; - WFIFOL(s, 2) = unwrap<AccountId>(acc); - WFIFOB(s, 6) = 1; - // It is unnecessary to send email - // It is unnecessary to send validity date of the account - WFIFOSET(s, 51); + server[id].name, acc, ip); + + SPacket_0x2713_Fixed fixed_13; + fixed_13.account_id = acc; + fixed_13.invalid = 1; + // fixed_13.email + // fixed_13.connect_until + + send_fpacket<0x2713, 51>(s, fixed_13); } } - RFIFOSKIP(s, 19); break; + } case 0x2714: - if (RFIFOREST(s) < 6) - return; - server[id].users = RFIFOL(s, 2); + { + RPacket_0x2714_Fixed fixed; + rv = recv_fpacket<0x2714, 6>(s, fixed); + if (rv != RecvResult::Complete) + break; + + server[id].users = fixed.users; if (anti_freeze_enable) server_freezeflag[id] = 5; // Char anti-freeze system. Counter. 5 ok, 4...0 freezed - RFIFOSKIP(s, 6); break; + } // we receive a e-mail creation of an account with a default e-mail (no answer) case 0x2715: - if (RFIFOREST(s) < 46) - return; { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); - AccountEmail email = stringish<AccountEmail>(RFIFO_STRING<40>(s, 6)); + RPacket_0x2715_Fixed fixed; + rv = recv_fpacket<0x2715, 46>(s, fixed); + if (rv != RecvResult::Complete) + break; + + AccountId acc = fixed.account_id; + AccountEmail email = fixed.email; if (!e_mail_check(email)) LOGIN_LOG("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - e-mail is invalid (account: %d, ip: %s)\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); else { for (AuthData& ad : auth_data) @@ -1104,7 +1122,7 @@ void parse_fromchar(Session *s) { ad.email = email; LOGIN_LOG("Char-server '%s': Create an e-mail on an account with a default e-mail (account: %d, new e-mail: %s, ip: %s).\n"_fmt, - server[id].name, acc, email, ip); + server[id].name, acc, email, ip); goto x2715_out; } } @@ -1112,48 +1130,57 @@ void parse_fromchar(Session *s) server[id].name, acc, ip); } x2715_out: - RFIFOSKIP(s, 46); break; - - // We receive an e-mail/limited time request, because a player comes back from a map-server to the char-server } + // We receive an e-mail/limited time request, because a player comes back from a map-server to the char-server case 0x2716: - if (RFIFOREST(s) < 6) - return; { - AccountId account_id = wrap<AccountId>(RFIFOL(s, 2)); + RPacket_0x2716_Fixed fixed; + rv = recv_fpacket<0x2716, 6>(s, fixed); + if (rv != RecvResult::Complete) + break; + + AccountId account_id = fixed.account_id; for (const AuthData& ad : auth_data) { if (ad.account_id == account_id) { LOGIN_LOG("Char-server '%s': e-mail of the account %d found (ip: %s).\n"_fmt, server[id].name, account_id, ip); - WFIFOW(s, 0) = 0x2717; - WFIFOL(s, 2) = unwrap<AccountId>(account_id); - WFIFO_STRING(s, 6, ad.email, 40); - WFIFOL(s, 46) = static_cast<time_t>(ad.connect_until_time); - WFIFOSET(s, 50); + + SPacket_0x2717_Fixed fixed_17; + fixed_17.account_id = account_id; + fixed_17.email = ad.email; + fixed_17.connect_until = ad.connect_until_time; + + send_fpacket<0x2717, 50>(s, fixed_17); + if (rv != RecvResult::Complete) + break; goto x2716_end; } } LOGIN_LOG("Char-server '%s': e-mail of the account %d NOT found (ip: %s).\n"_fmt, server[id].name, account_id, ip); - } x2716_end: - RFIFOSKIP(s, 6); break; + } case 0x2720: // To become GM request - if (RFIFOREST(s) < 4 || RFIFOREST(s) < RFIFOW(s, 2)) - return; + { + RPacket_0x2720_Head head; + AString repeat; + rv = recv_vpacket<0x2720, 8, 1>(s, head, repeat); + if (rv != RecvResult::Complete) + break; + { - unsigned char buf[10]; - AccountId acc = wrap<AccountId>(RFIFOL(s, 4)); - WBUFW(buf, 0) = 0x2721; - WBUFL(buf, 2) = unwrap<AccountId>(acc); - WBUFL(buf, 6) = 0; - size_t len = RFIFOW(s, 2) - 8; - AString pass = RFIFO_STRING(s, 8, len); + AccountId acc = head.account_id; + + SPacket_0x2721_Fixed fixed_21; + fixed_21.account_id = acc; + fixed_21.gm_level = GmLevel(); + + AString pass = repeat; if (pass == gm_pass) { @@ -1170,75 +1197,82 @@ void parse_fromchar(Session *s) timestamp_seconds_buffer tmpstr; stamp_time(tmpstr); FPRINTF(fp, - "\n// %s: @GM command on account %d\n%d %d\n"_fmt, - tmpstr, - acc, acc, level_new_gm); + "\n// %s: @GM command on account %d\n%d %d\n"_fmt, + tmpstr, + acc, acc, level_new_gm); if (!fp.close()) { PRINTF("warning: didn't actually save GM file\n"_fmt); } - WBUFL(buf, 6) = level_new_gm; + fixed_21.gm_level = level_new_gm; read_gm_account(); send_GM_accounts(); PRINTF("GM Change of the account %d: level 0 -> %d.\n"_fmt, - acc, level_new_gm); + acc, level_new_gm); LOGIN_LOG("Char-server '%s': GM Change of the account %d: level 0 -> %d (ip: %s).\n"_fmt, - server[id].name, acc, - level_new_gm, ip); + server[id].name, acc, + level_new_gm, ip); } else { PRINTF("Error of GM change (suggested account: %d, correct password, unable to add a GM account in GM accounts file)\n"_fmt, - acc); + acc); LOGIN_LOG("Char-server '%s': Error of GM change (suggested account: %d, correct password, unable to add a GM account in GM accounts file, ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); } } else { PRINTF("Error of GM change (suggested account: %d, correct password, but GM creation is disable (level_new_gm = 0))\n"_fmt, - acc); + acc); LOGIN_LOG("Char-server '%s': Error of GM change (suggested account: %d, correct password, but GM creation is disable (level_new_gm = 0), ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); } } else { PRINTF("Error of GM change (suggested account: %d (already GM), correct password).\n"_fmt, - acc); + acc); LOGIN_LOG("Char-server '%s': Error of GM change (suggested account: %d (already GM), correct password, ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); } } else { PRINTF("Error of GM change (suggested account: %d, invalid password).\n"_fmt, - acc); + acc); LOGIN_LOG("Char-server '%s': Error of GM change (suggested account: %d, invalid password, ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); + } + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2721, 10>(ss, fixed_21); } - charif_sendallwos(nullptr, buf, 10); } - RFIFOSKIP(s, RFIFOW(s, 2)); - return; + break; + } // Map server send information to change an email of an account via char-server case 0x2722: // 0x2722 <account_id>.L <actual_e-mail>.40B <new_e-mail>.40B - if (RFIFOREST(s) < 86) - return; + { + RPacket_0x2722_Fixed fixed; + rv = recv_fpacket<0x2722, 86>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); - AccountEmail actual_email = stringish<AccountEmail>(RFIFO_STRING<40>(s, 6).to_print()); - AccountEmail new_email = stringish<AccountEmail>(RFIFO_STRING<40>(s, 46)); + AccountId acc = fixed.account_id; + AccountEmail actual_email = stringish<AccountEmail>(fixed.old_email.to_print()); + AccountEmail new_email = fixed.new_email; if (!e_mail_check(actual_email)) LOGIN_LOG("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual email is invalid (account: %d, ip: %s)\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); else if (!e_mail_check(new_email)) LOGIN_LOG("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a invalid new e-mail (account: %d, ip: %s)\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); else if (new_email == DEFAULT_EMAIL) LOGIN_LOG("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a default e-mail (account: %d, ip: %s)\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); else { for (AuthData& ad : auth_data) @@ -1249,14 +1283,14 @@ void parse_fromchar(Session *s) { ad.email = new_email; LOGIN_LOG("Char-server '%s': Modify an e-mail on an account (@email GM command) (account: %d (%s), new e-mail: %s, ip: %s).\n"_fmt, - server[id].name, acc, - ad.userid, new_email, ip); + server[id].name, acc, + ad.userid, new_email, ip); } else LOGIN_LOG("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual e-mail is incorrect (account: %d (%s), actual e-mail: %s, proposed e-mail: %s, ip: %s).\n"_fmt, - server[id].name, acc, - ad.userid, - ad.email, actual_email, ip); + server[id].name, acc, + ad.userid, + ad.email, actual_email, ip); goto x2722_out; } } @@ -1265,16 +1299,20 @@ void parse_fromchar(Session *s) } } x2722_out: - RFIFOSKIP(s, 86); break; + } // Receiving of map-server via char-server a status change resquest (by Yor) case 0x2724: - if (RFIFOREST(s) < 10) - return; + { + RPacket_0x2724_Fixed fixed; + rv = recv_fpacket<0x2724, 10>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); - int statut = RFIFOL(s, 6); + AccountId acc = fixed.account_id; + int statut = fixed.status; for (AuthData& ad : auth_data) { if (ad.account_id == acc) @@ -1282,41 +1320,52 @@ void parse_fromchar(Session *s) if (ad.state != statut) { LOGIN_LOG("Char-server '%s': Status change (account: %d, new status %d, ip: %s).\n"_fmt, - server[id].name, acc, statut, - ip); + server[id].name, acc, statut, + ip); if (statut != 0) { - unsigned char buf[16]; - WBUFW(buf, 0) = 0x2731; - WBUFL(buf, 2) = unwrap<AccountId>(acc); - WBUFB(buf, 6) = 0; // 0: change of statut, 1: ban - WBUFL(buf, 7) = statut; // status or final date of a banishment - charif_sendallwos(nullptr, buf, 11); + SPacket_0x2731_Fixed fixed_31; + fixed_31.account_id = acc; + fixed_31.ban_not_status = 0; + fixed_31.status_or_ban_until = static_cast<time_t>(statut); + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2731, 11>(ss, fixed_31); + } + for (int j = 0; j < AUTH_FIFO_SIZE; j++) + { if (auth_fifo[j].account_id == acc) auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification) + } } ad.state = statut; } else LOGIN_LOG("Char-server '%s': Error of Status change - actual status is already the good status (account: %d, status %d, ip: %s).\n"_fmt, - server[id].name, acc, statut, - ip); + server[id].name, acc, statut, + ip); goto x2724_out; } } LOGIN_LOG("Char-server '%s': Error of Status change (account: %d not found, suggested status %d, ip: %s).\n"_fmt, server[id].name, acc, statut, ip); x2724_out: - RFIFOSKIP(s, 10); + ; } - return; + break; + } case 0x2725: // Receiving of map-server via char-server a ban resquest (by Yor) - if (RFIFOREST(s) < 18) - return; + { + RPacket_0x2725_Fixed fixed; + rv = recv_fpacket<0x2725, 18>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); + AccountId acc = fixed.account_id; for (AuthData& ad : auth_data) { if (ad.account_id == acc) @@ -1329,8 +1378,7 @@ void parse_fromchar(Session *s) else timestamp = ad.ban_until_time; struct tm tmtime = timestamp; - HumanTimeDiff ban_diff; - RFIFO_STRUCT(s, 6, ban_diff); + HumanTimeDiff ban_diff = fixed.deltas; tmtime.tm_year += ban_diff.year; tmtime.tm_mon += ban_diff.month; tmtime.tm_mday += ban_diff.day; @@ -1346,7 +1394,6 @@ void parse_fromchar(Session *s) { if (timestamp) { - unsigned char buf[16]; timestamp_seconds_buffer tmpstr; if (timestamp) stamp_time(tmpstr, ×tamp); @@ -1355,11 +1402,16 @@ void parse_fromchar(Session *s) timestamp, tmpstr, ip); - WBUFW(buf, 0) = 0x2731; - WBUFL(buf, 2) = unwrap<AccountId>(ad.account_id); - WBUFB(buf, 6) = 1; // 0: change of statut, 1: ban - WBUFL(buf, 7) = static_cast<time_t>(timestamp); // status or final date of a banishment - charif_sendallwos(nullptr, buf, 11); + SPacket_0x2731_Fixed fixed_31; + fixed_31.account_id = ad.account_id; + fixed_31.ban_not_status = 1; + fixed_31.status_or_ban_until = timestamp; + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2731, 11>(ss, fixed_31); + } + for (int j = 0; j < AUTH_FIFO_SIZE; j++) { if (auth_fifo[j].account_id == acc) @@ -1369,21 +1421,21 @@ void parse_fromchar(Session *s) else { LOGIN_LOG("Char-server '%s': Error of ban request (account: %d, new date unbans the account, ip: %s).\n"_fmt, - server[id].name, acc, - ip); + server[id].name, acc, + ip); } ad.ban_until_time = timestamp; } else { LOGIN_LOG("Char-server '%s': Error of ban request (account: %d, no change for ban date, ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); } } else { LOGIN_LOG("Char-server '%s': Error of ban request (account: %d, invalid date, ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); } goto x2725_out; } @@ -1391,40 +1443,49 @@ void parse_fromchar(Session *s) LOGIN_LOG("Char-server '%s': Error of ban request (account: %d not found, ip: %s).\n"_fmt, server[id].name, acc, ip); x2725_out: - RFIFOSKIP(s, 18); + ; } - return; + break; + } case 0x2727: // Change of sex (sex is reversed) - if (RFIFOREST(s) < 6) - return; + { + RPacket_0x2727_Fixed fixed; + rv = recv_fpacket<0x2727, 6>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); + AccountId acc = fixed.account_id; for (AuthData& ad : auth_data) { if (ad.account_id == acc) { { - unsigned char buf[16]; SEX sex; if (ad.sex == SEX::FEMALE) sex = SEX::MALE; else sex = SEX::FEMALE; LOGIN_LOG("Char-server '%s': Sex change (account: %d, new sex %c, ip: %s).\n"_fmt, - server[id].name, acc, - sex_to_char(sex), - ip); + server[id].name, acc, + sex_to_char(sex), + ip); for (int j = 0; j < AUTH_FIFO_SIZE; j++) { if (auth_fifo[j].account_id == acc) auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification) } ad.sex = sex; - WBUFW(buf, 0) = 0x2723; - WBUFL(buf, 2) = unwrap<AccountId>(acc); - WBUFB(buf, 6) = static_cast<uint8_t>(sex); - charif_sendallwos(nullptr, buf, 7); + + SPacket_0x2723_Fixed fixed_23; + fixed_23.account_id = acc; + fixed_23.sex = sex; + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2723, 7>(ss, fixed_23); + } } goto x2727_out; } @@ -1432,36 +1493,52 @@ void parse_fromchar(Session *s) LOGIN_LOG("Char-server '%s': Error of sex change (account: %d not found, sex would be reversed, ip: %s).\n"_fmt, server[id].name, acc, ip); x2727_out: - RFIFOSKIP(s, 6); + ; } - return; + break; + } case 0x2728: // We receive account_reg2 from a char-server, and we send them to other char-servers. - if (RFIFOREST(s) < 4 || RFIFOREST(s) < RFIFOW(s, 2)) - return; + { + RPacket_0x2728_Head head; + std::vector<RPacket_0x2728_Repeat> repeat; + rv = recv_vpacket<0x2728, 8, 36>(s, head, repeat); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 4)); + AccountId acc = head.account_id; for (AuthData& ad : auth_data) { if (ad.account_id == acc) { LOGIN_LOG("Char-server '%s': receiving (from the char-server) of account_reg2 (account: %d, ip: %s).\n"_fmt, - server[id].name, acc, ip); - size_t len = RFIFOW(s, 2); - int j, p; - for (p = 8, j = 0; - p < len && j < ACCOUNT_REG2_NUM; - p += 36, j++) + server[id].name, acc, ip); + + const size_t count = std::min(ACCOUNT_REG2_NUM, repeat.size()); + for (size_t j = 0; j < count; ++j) { - ad.account_reg2[j].str = stringish<VarName>(RFIFO_STRING<32>(s, p).to_print()); - ad.account_reg2[j].value = RFIFOL(s, p + 32); + ad.account_reg2[j].str = repeat[j].name; + ad.account_reg2[j].value = repeat[j].value; } - ad.account_reg2_num = j; + ad.account_reg2_num = count; + // Sending information towards the other char-servers. - uint8_t buf[len]; - RFIFO_BUF_CLONE(s, buf, len); - WBUFW(buf, 0) = 0x2729; - charif_sendallwos(s, buf, WBUFW(buf, 2)); + SPacket_0x2729_Head head_29; + std::vector<SPacket_0x2729_Repeat> repeat_29(repeat.size()); + head_29.account_id = head.account_id; + for (size_t j = 0; j < count; ++j) + { + repeat_29[j].name = repeat[j].name; + repeat_29[j].value = repeat[j].value; + } + + for (Session *ss : iter_char_sessions()) + { + if (ss == s) + continue; + send_vpacket<0x2729, 8, 36>(ss, head_29, repeat_29); + } goto x2728_out; } } @@ -1469,14 +1546,18 @@ void parse_fromchar(Session *s) server[id].name, acc, ip); } x2728_out: - RFIFOSKIP(s, RFIFOW(s, 2)); break; + } case 0x272a: // Receiving of map-server via char-server a unban resquest (by Yor) - if (RFIFOREST(s) < 6) - return; + { + RPacket_0x272a_Fixed fixed; + rv = recv_fpacket<0x272a, 6>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); + AccountId acc = fixed.account_id; for (AuthData& ad : auth_data) { if (ad.account_id == acc) @@ -1485,12 +1566,12 @@ void parse_fromchar(Session *s) { ad.ban_until_time = TimeT(); LOGIN_LOG("Char-server '%s': UnBan request (account: %d, ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); } else { LOGIN_LOG("Char-server '%s': Error of UnBan request (account: %d, no change for unban date, ip: %s).\n"_fmt, - server[id].name, acc, ip); + server[id].name, acc, ip); } goto x272a_out; } @@ -1498,18 +1579,23 @@ void parse_fromchar(Session *s) LOGIN_LOG("Char-server '%s': Error of UnBan request (account: %d not found, ip: %s).\n"_fmt, server[id].name, acc, ip); x272a_out: - RFIFOSKIP(s, 6); + ; } - return; + break; + } // request from char-server to change account password case 0x2740: // 0x2740 <account_id>.L <actual_password>.24B <new_password>.24B - if (RFIFOREST(s) < 54) - return; + { + RPacket_0x2740_Fixed fixed; + rv = recv_fpacket<0x2740, 54>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId acc = wrap<AccountId>(RFIFOL(s, 2)); - AccountPass actual_pass = stringish<AccountPass>(RFIFO_STRING<24>(s, 6).to_print()); - AccountPass new_pass = stringish<AccountPass>(RFIFO_STRING<24>(s, 30).to_print()); + AccountId acc = fixed.account_id; + AccountPass actual_pass = stringish<AccountPass>(fixed.old_pass.to_print()); + AccountPass new_pass = stringish<AccountPass>(fixed.new_pass.to_print()); int status = 0; @@ -1526,29 +1612,29 @@ void parse_fromchar(Session *s) status = 1; ad.pass = MD5_saltcrypt(new_pass, make_salt()); LOGIN_LOG("Char-server '%s': Change pass success (account: %d (%s), ip: %s.\n"_fmt, - server[id].name, acc, - ad.userid, ip); + server[id].name, acc, + ad.userid, ip); } } else { status = 2; LOGIN_LOG("Char-server '%s': Attempt to modify a pass failed, wrong password. (account: %d (%s), ip: %s).\n"_fmt, - server[id].name, acc, - ad.userid, ip); + server[id].name, acc, + ad.userid, ip); } goto x2740_out; } } x2740_out: - WFIFOW(s, 0) = 0x2741; - WFIFOL(s, 2) = unwrap<AccountId>(acc); - WFIFOB(s, 6) = status; // 0: acc not found, 1: success, 2: password mismatch, 3: pass too short - WFIFOSET(s, 7); + SPacket_0x2741_Fixed fixed_41; + fixed_41.account_id = acc; + fixed_41.status = status; + send_fpacket<0x2741, 7>(s, fixed_41); } - RFIFOSKIP(s, 54); break; + } default: { @@ -1558,53 +1644,24 @@ void parse_fromchar(Session *s) timestamp_milliseconds_buffer timestr; stamp_time(timestr); FPRINTF(logfp, - "%s: receiving of an unknown packet -> disconnection\n"_fmt, - timestr); + "%s: receiving of an unknown packet -> disconnection\n"_fmt, + timestr); FPRINTF(logfp, - "parse_fromchar: connection #%d (ip: %s), packet: 0x%x (with being read: %zu).\n"_fmt, - s, ip, RFIFOW(s, 0), RFIFOREST(s)); + "parse_fromchar: connection #%d (ip: %s), packet: 0x%x (with being read: %zu).\n"_fmt, + s, ip, packet_id, packet_avail(s)); FPRINTF(logfp, "Detail (in hex):\n"_fmt); - FPRINTF(logfp, - "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"_fmt); - char tmpstr[16 + 1] {}; - int i; - for (i = 0; i < RFIFOREST(s); i++) - { - if ((i & 15) == 0) - FPRINTF(logfp, "%04X "_fmt, i); - FPRINTF(logfp, "%02x "_fmt, RFIFOB(s, i)); - if (RFIFOB(s, i) > 0x1f) - tmpstr[i % 16] = RFIFOB(s, i); - else - tmpstr[i % 16] = '.'; - if ((i - 7) % 16 == 0) // -8 + 1 - FPRINTF(logfp, " "_fmt); - else if ((i + 1) % 16 == 0) - { - FPRINTF(logfp, " %s\n"_fmt, tmpstr); - std::fill(tmpstr + 0, tmpstr + 17, '\0'); - } - } - if (i % 16 != 0) - { - for (int j = i; j % 16 != 0; j++) - { - FPRINTF(logfp, " "_fmt); - if ((j - 7) % 16 == 0) // -8 + 1 - FPRINTF(logfp, " "_fmt); - } - FPRINTF(logfp, " %s\n"_fmt, tmpstr); - } - FPRINTF(logfp, "\n"_fmt); + packet_dump(logfp, s); } - } PRINTF("parse_fromchar: Unknown packet 0x%x (from a char-server)! -> disconnection.\n"_fmt, - RFIFOW(s, 0)); + packet_id); s->set_eof(); PRINTF("Char-server has been disconnected (unknown packet).\n"_fmt); return; + } } } + if (rv == RecvResult::Error) + s->set_eof(); return; } @@ -1615,109 +1672,136 @@ static void parse_admin(Session *s) { IP4Address ip = s->client_ip; - - while (RFIFOREST(s) >= 2) + RecvResult rv = RecvResult::Complete; + uint16_t packet_id; + while (rv == RecvResult::Complete && packet_peek_id(s, &packet_id)) { if (display_parse_admin == 1) - PRINTF("parse_admin: connection #%d, packet: 0x%x (with being read: %zu).\n"_fmt, - s, RFIFOW(s, 0), RFIFOREST(s)); + PRINTF("parse_admin: connection #%d, packet: 0x%x (with being read: %zu bytes).\n"_fmt, + s, packet_id, packet_avail(s)); - switch (RFIFOW(s, 0)) + switch (packet_id) { case 0x7530: // Request of the server version + { + RPacket_0x7530_Fixed fixed; + rv = recv_fpacket<0x7530, 2>(s, fixed); + if (rv != RecvResult::Complete) + break; + LOGIN_LOG("'ladmin': Sending of the server version (ip: %s)\n"_fmt, - ip); - WFIFOW(s, 0) = 0x7531; - WFIFO_STRUCT(s, 2, CURRENT_LOGIN_SERVER_VERSION); - WFIFOSET(s, 10); - RFIFOSKIP(s, 2); + ip); + + SPacket_0x7531_Fixed fixed_31; + fixed_31.version = CURRENT_LOGIN_SERVER_VERSION; + send_fpacket<0x7531, 10>(s, fixed_31); break; + } case 0x7532: // Request of end of connection + { + RPacket_0x7532_Fixed fixed; + rv = recv_fpacket<0x7532, 2>(s, fixed); + if (rv != RecvResult::Complete) + break; + LOGIN_LOG("'ladmin': End of connection (ip: %s)\n"_fmt, - ip); - RFIFOSKIP(s, 2); + ip); s->set_eof(); - break; + return; + } case 0x7920: // Request of an accounts list - if (RFIFOREST(s) < 10) - return; + { + RPacket_0x7920_Fixed fixed; + rv = recv_fpacket<0x7920, 10>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - AccountId st = wrap<AccountId>(RFIFOL(s, 2)); - AccountId ed = wrap<AccountId>(RFIFOL(s, 6)); - RFIFOSKIP(s, 10); - WFIFOW(s, 0) = 0x7921; - if (!(ed < END_ACCOUNT_NUM) || ed < st) + AccountId st = fixed.start_account_id; + AccountId ed = fixed.end_account_id; + if (!(ed < END_ACCOUNT_NUM) || ed < st || !ed) ed = END_ACCOUNT_NUM; + LOGIN_LOG("'ladmin': Sending an accounts list (ask: from %d to %d, ip: %s)\n"_fmt, - st, ed, ip); + st, ed, ip); + // Sending accounts information - int len = 4; + std::vector<SPacket_0x7921_Repeat> repeat_21; + for (const AuthData& ad : auth_data) { - if (len >= 30000) - break; AccountId account_id = ad.account_id; if (!(account_id < st) && !(ed < account_id)) { - WFIFOL(s, len) = unwrap<AccountId>(account_id); - WFIFOB(s, len + 4) = static_cast<uint8_t>(isGM(account_id).get_all_bits()); - WFIFO_STRING(s, len + 5, ad.userid, 24); - WFIFOB(s, len + 29) = static_cast<uint8_t>(ad.sex); - WFIFOL(s, len + 30) = ad.logincount; + SPacket_0x7921_Repeat info; + info.account_id = account_id; + info.gm_level = isGM(account_id); + info.account_name = ad.userid; + info.sex = ad.sex; + info.login_count = ad.logincount; if (ad.state == 0 && ad.ban_until_time) // if no state and banished - WFIFOL(s, len + 34) = 7; // 6 = Your are Prohibited to log in until %s + info.status = 7; // 6 = Your are Prohibited to log in until %s else - WFIFOL(s, len + 34) = ad.state; - len += 38; + info.status = ad.state; + repeat_21.push_back(info); } } - WFIFOW(s, 2) = len; - WFIFOSET(s, len); + send_packet_repeatonly<0x7921, 4, 38>(s, repeat_21); } break; + } case 0x7924: { // [Fate] Itemfrob package: change item IDs - if (RFIFOREST(s) < 10) - return; - uint8_t buf[10]; - RFIFO_BUF_CLONE(s, buf, 10); - // forward package to char servers - charif_sendallwos(nullptr, buf, 10); - RFIFOSKIP(s, 10); - WFIFOW(s, 0) = 0x7925; - WFIFOSET(s, 2); + RPacket_0x7924_Fixed fixed; + rv = recv_fpacket<0x7924, 10>(s, fixed); + if (rv != RecvResult::Complete) + break; + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x7924, 10>(ss, fixed); + } + + SPacket_0x7925_Fixed fixed_25; + send_fpacket<0x7925, 2>(s, fixed_25); break; } case 0x7930: // Request for an account creation - if (RFIFOREST(s) < 91) - return; + { + RPacket_0x7930_Fixed fixed; + rv = recv_fpacket<0x7930, 91>(s, fixed); + if (rv != RecvResult::Complete) + break; + { struct mmo_account ma; - ma.userid = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); - ma.passwd = stringish<AccountPass>(RFIFO_STRING<24>(s, 26).to_print()); + // TODO make this a 'return false' bit of the network_to_native + ma.userid = stringish<AccountName>(fixed.account_name.to_print()); + ma.passwd = stringish<AccountPass>(fixed.password.to_print()); ma.lastlogin = stringish<timestamp_milliseconds_buffer>("-"_s); - ma.sex = sex_from_char(RFIFOB(s, 50)); - WFIFOW(s, 0) = 0x7931; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - WFIFO_STRING(s, 6, ma.userid, 24); + ma.sex = fixed.sex; + + SPacket_0x7931_Fixed fixed_31; + fixed_31.account_id = AccountId(); + fixed_31.account_name = ma.userid; if (ma.userid.size() < 4 || ma.passwd.size() < 4) { LOGIN_LOG("'ladmin': Attempt to create an invalid account (account or pass is too short, ip: %s)\n"_fmt, - ip); + ip); } else if (ma.sex != SEX::FEMALE && ma.sex != SEX::MALE) { LOGIN_LOG("'ladmin': Attempt to create an invalid account (account: %s, invalid sex, ip: %s)\n"_fmt, - ma.userid, ip); + ma.userid, ip); } else if (!(account_id_count < END_ACCOUNT_NUM)) { LOGIN_LOG("'ladmin': Attempt to create an account, but there is no more available id number (account: %s, sex: %c, ip: %s)\n"_fmt, - ma.userid, ma.sex, ip); + ma.userid, sex_to_char(ma.sex), ip); } else { @@ -1726,47 +1810,54 @@ void parse_admin(Session *s) if (ad.userid == ma.userid) { LOGIN_LOG("'ladmin': Attempt to create an already existing account (account: %s ip: %s)\n"_fmt, - ad.userid, ip); + ad.userid, ip); goto x7930_out; } } { - AccountEmail email = stringish<AccountEmail>(RFIFO_STRING<40>(s, 51)); + AccountEmail email = fixed.email; AccountId new_id = mmo_auth_new(&ma, ma.sex, email); LOGIN_LOG("'ladmin': Account creation (account: %s (id: %d), sex: %c, email: %s, ip: %s)\n"_fmt, - ma.userid, new_id, - ma.sex, auth_data.back().email, ip); - WFIFOL(s, 2) = unwrap<AccountId>(new_id); + ma.userid, new_id, + sex_to_char(ma.sex), auth_data.back().email, ip); + fixed_31.account_id = new_id; } } x7930_out: - WFIFOSET(s, 30); - RFIFOSKIP(s, 91); + send_fpacket<0x7931, 30>(s, fixed_31); } break; + } case 0x7932: // Request for an account deletion - if (RFIFOREST(s) < 26) - return; { - WFIFOW(s, 0) = 0x7933; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + RPacket_0x7932_Fixed fixed; + rv = recv_fpacket<0x7932, 26>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7933_Fixed fixed_33; + fixed_33.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); AuthData *ad = search_account(account_name); if (ad) { // Char-server is notified of deletion (for characters deletion). - uint8_t buf[6]; - WBUFW(buf, 0) = 0x2730; - WBUFL(buf, 2) = unwrap<AccountId>(ad->account_id); - charif_sendallwos(nullptr, buf, 6); + SPacket_0x2730_Fixed fixed_30; + fixed_30.account_id = ad->account_id; + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2730, 6>(ss, fixed_30); + } + // send answer - WFIFO_STRING(s, 6, ad->userid, 24); - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_33.account_name = ad->userid; + fixed_33.account_id = ad->account_id; // save deleted account in log file LOGIN_LOG("'ladmin': Account deletion (account: %s, id: %d, ip: %s) - saved in next line:\n"_fmt, - ad->userid, ad->account_id, - ip); + ad->userid, ad->account_id, + ip); { AString buf2 = mmo_auth_tostr(ad); LOGIN_LOG("%s\n"_fmt, buf2); @@ -1777,52 +1868,57 @@ void parse_admin(Session *s) } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_33.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to delete an unknown account (account: %s, ip: %s)\n"_fmt, - account_name, ip); + account_name, ip); } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 26); + send_fpacket<0x7933, 30>(s, fixed_33); break; + } case 0x7934: // Request to change a password - if (RFIFOREST(s) < 50) - return; { - WFIFOW(s, 0) = 0x7935; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + RPacket_0x7934_Fixed fixed; + rv = recv_fpacket<0x7934, 50>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7935_Fixed fixed_35; + fixed_35.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); - AccountPass plain = stringish<AccountPass>(RFIFO_STRING<24>(s, 26)); + fixed_35.account_name = ad->userid; + AccountPass plain = stringish<AccountPass>(fixed.password); ad->pass = MD5_saltcrypt(plain, make_salt()); - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_35.account_id = ad->account_id; LOGIN_LOG("'ladmin': Modification of a password (account: %s, new password: %s, ip: %s)\n"_fmt, - ad->userid, ad->pass, ip); + ad->userid, ad->pass, ip); } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_35.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to modify the password of an unknown account (account: %s, ip: %s)\n"_fmt, - account_name, ip); + account_name, ip); } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 50); + send_fpacket<0x7935, 30>(s, fixed_35); break; + } case 0x7936: // Request to modify a state - if (RFIFOREST(s) < 50) - return; + { + RPacket_0x7936_Fixed fixed; + rv = recv_fpacket<0x7936, 50>(s, fixed); + if (rv != RecvResult::Complete) + break; + { - WFIFOW(s, 0) = 0x7937; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); - int statut = RFIFOL(s, 26); - timestamp_seconds_buffer error_message = stringish<timestamp_seconds_buffer>(RFIFO_STRING<20>(s, 30).to_print()); + SPacket_0x7937_Fixed fixed_37; + fixed_37.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); + int statut = fixed.status; + timestamp_seconds_buffer error_message = stringish<timestamp_seconds_buffer>(error_message.to_print()); if (statut != 7 || !error_message) { // 7: // 6 = Your are Prohibited to log in until %s @@ -1831,29 +1927,33 @@ void parse_admin(Session *s) AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_37.account_name = ad->userid; + fixed_37.account_id = ad->account_id; if (ad->state == statut && ad->error_message == error_message) LOGIN_LOG("'ladmin': Modification of a state, but the state of the account is already the good state (account: %s, received state: %d, ip: %s)\n"_fmt, - account_name, statut, ip); + account_name, statut, ip); else { if (statut == 7) LOGIN_LOG("'ladmin': Modification of a state (account: %s, new state: %d - prohibited to login until '%s', ip: %s)\n"_fmt, - ad->userid, statut, - error_message, ip); + ad->userid, statut, + error_message, ip); else LOGIN_LOG("'ladmin': Modification of a state (account: %s, new state: %d, ip: %s)\n"_fmt, - ad->userid, statut, ip); + ad->userid, statut, ip); if (ad->state == 0) { - unsigned char buf[16]; - WBUFW(buf, 0) = 0x2731; - WBUFL(buf, 2) = unwrap<AccountId>(ad->account_id); - WBUFB(buf, 6) = 0; // 0: change of statut, 1: ban - WBUFL(buf, 7) = statut; // status or final date of a banishment - charif_sendallwos(nullptr, buf, 11); + SPacket_0x2731_Fixed fixed_31; + fixed_31.account_id = ad->account_id; + fixed_31.ban_not_status = 0; + fixed_31.status_or_ban_until = static_cast<time_t>(statut); + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2731, 11>(ss, fixed_31); + } + for (int j = 0; j < AUTH_FIFO_SIZE; j++) if (auth_fifo[j].account_id == ad->account_id) @@ -1865,84 +1965,95 @@ void parse_admin(Session *s) } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_37.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to modify the state of an unknown account (account: %s, received state: %d, ip: %s)\n"_fmt, - account_name, statut, ip); + account_name, statut, ip); } - WFIFOL(s, 30) = statut; + fixed_37.status = statut; + send_fpacket<0x7937, 34>(s, fixed_37); } - WFIFOSET(s, 34); - RFIFOSKIP(s, 50); break; + } case 0x7938: // Request for servers list and # of online players + { + RPacket_0x7938_Fixed fixed; + rv = recv_fpacket<0x7938, 2>(s, fixed); + if (rv != RecvResult::Complete) + break; + LOGIN_LOG("'ladmin': Sending of servers list (ip: %s)\n"_fmt, ip); - server_num = 0; + std::vector<SPacket_0x7939_Repeat> repeat_39; for (int i = 0; i < MAX_SERVERS; i++) { if (server_session[i]) { - WFIFOIP(s, 4 + server_num * 32) = server[i].ip; - WFIFOW(s, 4 + server_num * 32 + 4) = server[i].port; - WFIFO_STRING(s, 4 + server_num * 32 + 6, server[i].name, 20); - WFIFOW(s, 4 + server_num * 32 + 26) = server[i].users; - WFIFOW(s, 4 + server_num * 32 + 28) = 0; //maintenance; - WFIFOW(s, 4 + server_num * 32 + 30) = 0; //is_new; - server_num++; + SPacket_0x7939_Repeat info; + info.ip = server[i].ip; + info.port = server[i].port; + info.name = server[i].name; + info.users = server[i].users; + info.maintenance = 0; + info.is_new = 0; + repeat_39.push_back(info); } } - WFIFOW(s, 0) = 0x7939; - WFIFOW(s, 2) = 4 + 32 * server_num; - WFIFOSET(s, 4 + 32 * server_num); - RFIFOSKIP(s, 2); + send_packet_repeatonly<0x7939, 4, 32>(s, repeat_39); break; + } case 0x793a: // Request to password check - if (RFIFOREST(s) < 50) - return; { - WFIFOW(s, 0) = 0x793b; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + RPacket_0x793a_Fixed fixed; + rv = recv_fpacket<0x793a, 50>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x793b_Fixed fixed_3b; + fixed_3b.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); const AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); - AccountPass pass = stringish<AccountPass>(RFIFO_STRING<24>(s, 26)); + fixed_3b.account_name = ad->userid; + AccountPass pass = stringish<AccountPass>(fixed.password); if (pass_ok(pass, ad->pass)) { - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_3b.account_id = ad->account_id; LOGIN_LOG("'ladmin': Check of password OK (account: %s, password: %s, ip: %s)\n"_fmt, - ad->userid, ad->pass, - ip); + ad->userid, ad->pass, + ip); } else { LOGIN_LOG("'ladmin': Failure of password check (account: %s, proposed pass: %s, ip: %s)\n"_fmt, - ad->userid, pass.to_print(), ip); + ad->userid, pass.to_print(), ip); } } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_3b.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to check the password of an unknown account (account: %s, ip: %s)\n"_fmt, - account_name, ip); + account_name, ip); } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 50); + send_fpacket<0x793b, 30>(s, fixed_3b); break; + } case 0x793c: // Request to modify sex - if (RFIFOREST(s) < 27) - return; { - WFIFOW(s, 0) = 0x793d; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); - WFIFO_STRING(s, 6, account_name, 24); + RPacket_0x793c_Fixed fixed; + rv = recv_fpacket<0x793c, 27>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x793d_Fixed fixed_3d; + fixed_3d.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); + fixed_3d.account_name = account_name; + { - SEX sex = sex_from_char(RFIFOB(s, 26)); + SEX sex = fixed.sex; if (sex != SEX::FEMALE && sex != SEX::MALE) { LOGIN_LOG("'ladmin': Attempt to give an invalid sex (account: %s, received sex: %c, ip: %s)\n"_fmt, @@ -1953,59 +2064,67 @@ void parse_admin(Session *s) AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); + fixed_3d.account_name = ad->userid; if (ad->sex != sex) { - unsigned char buf[16]; - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_3d.account_id = ad->account_id; for (int j = 0; j < AUTH_FIFO_SIZE; j++) + { if (auth_fifo[j].account_id == ad->account_id) auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification) + } ad->sex = sex; LOGIN_LOG("'ladmin': Modification of a sex (account: %s, new sex: %c, ip: %s)\n"_fmt, - ad->userid, sex_to_char(sex), ip); + ad->userid, sex_to_char(sex), ip); + // send to all char-server the change - WBUFW(buf, 0) = 0x2723; - WBUFL(buf, 2) = unwrap<AccountId>(ad->account_id); - WBUFB(buf, 6) = static_cast<uint8_t>(ad->sex); - charif_sendallwos(nullptr, buf, 7); + SPacket_0x2723_Fixed fixed_23; + fixed_23.account_id = ad->account_id; + fixed_23.sex = ad->sex; + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2723, 7>(ss, fixed_23); + } } else { LOGIN_LOG("'ladmin': Modification of a sex, but the sex is already the good sex (account: %s, sex: %c, ip: %s)\n"_fmt, - ad->userid, sex_to_char(sex), ip); + ad->userid, sex_to_char(sex), ip); } } else { LOGIN_LOG("'ladmin': Attempt to modify the sex of an unknown account (account: %s, received sex: %c, ip: %s)\n"_fmt, - account_name, sex_to_char(sex), ip); + account_name, sex_to_char(sex), ip); } } } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 27); + send_fpacket<0x793d, 30>(s, fixed_3d); break; + } case 0x793e: // Request to modify GM level - if (RFIFOREST(s) < 27) - return; { - WFIFOW(s, 0) = 0x793f; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); - WFIFO_STRING(s, 6, account_name, 24); + RPacket_0x793e_Fixed fixed; + rv = recv_fpacket<0x793e, 27>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x793f_Fixed fixed_3f; + fixed_3f.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); + fixed_3f.account_name = account_name; bool reread = false; { - GmLevel new_gm_level = GmLevel::from(static_cast<uint32_t>(RFIFOB(s, 26))); + GmLevel new_gm_level = fixed.gm_level; { const AuthData *ad = search_account(account_name); if (ad) { AccountId acc = ad->account_id; - WFIFO_STRING(s, 6, ad->userid, 24); + fixed_3f.account_name = ad->userid; if (isGM(acc) != new_gm_level) { // modification of the file @@ -2036,65 +2155,65 @@ void parse_admin(Session *s) else if (!new_gm_level) { FPRINTF(fp2, - "// %s: 'ladmin' GM level removed on account %d '%s' (previous level: %d)\n//%d %d\n"_fmt, - tmpstr, - acc, - ad->userid, - GM_level, acc, - new_gm_level); + "// %s: 'ladmin' GM level removed on account %d '%s' (previous level: %d)\n//%d %d\n"_fmt, + tmpstr, + acc, + ad->userid, + GM_level, acc, + new_gm_level); modify_flag = 1; } else { FPRINTF(fp2, - "// %s: 'ladmin' GM level on account %d '%s' (previous level: %d)\n%d %d\n"_fmt, - tmpstr, - acc, - ad->userid, - GM_level, acc, - new_gm_level); + "// %s: 'ladmin' GM level on account %d '%s' (previous level: %d)\n%d %d\n"_fmt, + tmpstr, + acc, + ad->userid, + GM_level, acc, + new_gm_level); modify_flag = 1; } } } if (modify_flag == 0) FPRINTF(fp2, - "// %s: 'ladmin' GM level on account %d '%s' (previous level: 0)\n%d %d\n"_fmt, - tmpstr, acc, - ad->userid, acc, - new_gm_level); + "// %s: 'ladmin' GM level on account %d '%s' (previous level: 0)\n%d %d\n"_fmt, + tmpstr, acc, + ad->userid, acc, + new_gm_level); } else { LOGIN_LOG("'ladmin': Attempt to modify of a GM level - impossible to read GM accounts file (account: %s (%d), received GM level: %d, ip: %s)\n"_fmt, - ad->userid, acc, - new_gm_level, ip); + ad->userid, acc, + new_gm_level, ip); } - WFIFOL(s, 2) = unwrap<AccountId>(acc); + fixed_3f.account_id = acc; LOGIN_LOG("'ladmin': Modification of a GM level (account: %s (%d), new GM level: %d, ip: %s)\n"_fmt, - ad->userid, acc, - new_gm_level, ip); + ad->userid, acc, + new_gm_level, ip); reread = true; } else { LOGIN_LOG("'ladmin': Attempt to modify of a GM level - impossible to write GM accounts file (account: %s (%d), received GM level: %d, ip: %s)\n"_fmt, - ad->userid, acc, - new_gm_level, ip); + ad->userid, acc, + new_gm_level, ip); } } else { LOGIN_LOG("'ladmin': Attempt to modify of a GM level, but the GM level is already the good GM level (account: %s (%d), GM level: %d, ip: %s)\n"_fmt, - ad->userid, acc, - new_gm_level, ip); + ad->userid, acc, + new_gm_level, ip); } } else { LOGIN_LOG("'ladmin': Attempt to modify the GM level of an unknown account (account: %s, received GM level: %d, ip: %s)\n"_fmt, - account_name, new_gm_level, - ip); + account_name, new_gm_level, + ip); } } } @@ -2104,128 +2223,135 @@ void parse_admin(Session *s) read_gm_account(); send_GM_accounts(); } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 27); + send_fpacket<0x793f, 30>(s, fixed_3f); break; + } case 0x7940: // Request to modify e-mail - if (RFIFOREST(s) < 66) - return; { - WFIFOW(s, 0) = 0x7941; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); - WFIFO_STRING(s, 6, account_name, 24); + RPacket_0x7940_Fixed fixed; + rv = recv_fpacket<0x7940, 66>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7941_Fixed fixed_41; + fixed_41.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); + fixed_41.account_name = account_name; { - AccountEmail email = stringish<AccountEmail>(RFIFO_STRING<40>(s, 26)); + AccountEmail email = stringish<AccountEmail>(fixed.email); if (!e_mail_check(email)) { LOGIN_LOG("'ladmin': Attempt to give an invalid e-mail (account: %s, ip: %s)\n"_fmt, - account_name, ip); + account_name, ip); } else { AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); + fixed_41.account_name = ad->userid; ad->email = email; - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_41.account_id = ad->account_id; LOGIN_LOG("'ladmin': Modification of an email (account: %s, new e-mail: %s, ip: %s)\n"_fmt, - ad->userid, email, ip); + ad->userid, email, ip); } else { LOGIN_LOG("'ladmin': Attempt to modify the e-mail of an unknown account (account: %s, received e-mail: %s, ip: %s)\n"_fmt, - account_name, email, ip); + account_name, email, ip); } } } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 66); + send_fpacket<0x7941, 30>(s, fixed_41); break; + } case 0x7942: // Request to modify memo field - if (RFIFOREST(s) < 28 - || RFIFOREST(s) < (28 + RFIFOW(s, 26))) - return; { - WFIFOW(s, 0) = 0x7943; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + RPacket_0x7942_Head head; + AString repeat; + rv = recv_vpacket<0x7942, 28, 1>(s, head, repeat); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7943_Fixed fixed_43; + fixed_43.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(head.account_name.to_print()); AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); + fixed_43.account_name = ad->userid; ad->memo = ""_s; - if (RFIFOW(s, 26) == 0) + if (!repeat/*.startswith('!')*/) { ad->memo = "!"_s; } else { - size_t len = RFIFOW(s, 26); // may truncate - ad->memo = RFIFO_STRING(s, 28, len); + ad->memo = repeat; } ad->memo = ad->memo.to_print(); - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_43.account_id = ad->account_id; LOGIN_LOG("'ladmin': Modification of a memo field (account: %s, new memo: %s, ip: %s)\n"_fmt, - ad->userid, ad->memo, ip); + ad->userid, ad->memo, ip); } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_43.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to modify the memo field of an unknown account (account: %s, ip: %s)\n"_fmt, - account_name, ip); + account_name, ip); } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 28 + RFIFOW(s, 26)); + send_fpacket<0x7943, 30>(s, fixed_43); break; + } case 0x7944: // Request to found an account id - if (RFIFOREST(s) < 26) - return; { - WFIFOW(s, 0) = 0x7945; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + RPacket_0x7944_Fixed fixed; + rv = recv_fpacket<0x7944, 26>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7945_Fixed fixed_45; + fixed_45.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(account_name.to_print()); const AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_45.account_name = ad->userid; + fixed_45.account_id = ad->account_id; LOGIN_LOG("'ladmin': Request (by the name) of an account id (account: %s, id: %d, ip: %s)\n"_fmt, ad->userid, ad->account_id, ip); } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_45.account_name = account_name; LOGIN_LOG("'ladmin': ID request (by the name) of an unknown account (account: %s, ip: %s)\n"_fmt, account_name, ip); } - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 26); + send_fpacket<0x7945, 30>(s, fixed_45); break; + } case 0x7946: // Request to found an account name - if (RFIFOREST(s) < 6) - return; { - AccountId account_id = wrap<AccountId>(RFIFOL(s, 2)); - WFIFOW(s, 0) = 0x7947; - WFIFOL(s, 2) = unwrap<AccountId>(account_id); - WFIFO_ZERO(s, 6, 24); + RPacket_0x7946_Fixed fixed; + rv = recv_fpacket<0x7946, 6>(s, fixed); + if (rv != RecvResult::Complete) + break; + + AccountId account_id = fixed.account_id; + SPacket_0x7947_Fixed fixed_47; + fixed_47.account_id = account_id; + fixed_47.account_name = {}; for (const AuthData& ad : auth_data) { if (ad.account_id == account_id) { - WFIFO_STRING(s, 6, ad.userid, 24); + fixed_47.account_name = ad.userid; LOGIN_LOG("'ladmin': Request (by id) of an account name (account: %s, id: %d, ip: %s)\n"_fmt, ad.userid, account_id, ip); goto x7946_out; @@ -2233,59 +2359,66 @@ void parse_admin(Session *s) } LOGIN_LOG("'ladmin': Name request (by id) of an unknown account (id: %d, ip: %s)\n"_fmt, account_id, ip); - WFIFO_STRING(s, 6, ""_s, 24); + fixed_47.account_name = stringish<AccountName>(""_s); x7946_out: - WFIFOSET(s, 30); - } - RFIFOSKIP(s, 6); + send_fpacket<0x7947, 30>(s, fixed_47); break; + } case 0x7948: // Request to change the validity limit (timestamp) (absolute value) - if (RFIFOREST(s) < 30) - return; + { + RPacket_0x7948_Fixed fixed; + rv = recv_fpacket<0x7948, 30>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7949_Fixed fixed_49; { - WFIFOW(s, 0) = 0x7949; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); - TimeT timestamp = static_cast<time_t>(RFIFOL(s, 26)); + fixed_49.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); + TimeT timestamp = fixed.valid_until; timestamp_seconds_buffer tmpstr = stringish<timestamp_seconds_buffer>("unlimited"_s); if (timestamp) stamp_time(tmpstr, ×tamp); AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); + fixed_49.account_name = ad->userid; LOGIN_LOG("'ladmin': Change of a validity limit (account: %s, new validity: %lld (%s), ip: %s)\n"_fmt, ad->userid, timestamp, tmpstr, ip); ad->connect_until_time = timestamp; - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_49.account_id = ad->account_id; } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_49.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to change the validity limit of an unknown account (account: %s, received validity: %lld (%s), ip: %s)\n"_fmt, account_name, timestamp, tmpstr, ip); } - WFIFOL(s, 30) = static_cast<time_t>(timestamp); + fixed_49.valid_until = timestamp; } - WFIFOSET(s, 34); - RFIFOSKIP(s, 30); + send_fpacket<0x7949, 34>(s, fixed_49); break; + } case 0x794a: // Request to change the final date of a banishment (timestamp) (absolute value) - if (RFIFOREST(s) < 30) - return; + { + RPacket_0x794a_Fixed fixed; + rv = recv_fpacket<0x794a, 30>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x794b_Fixed fixed_4b; { - WFIFOW(s, 0) = 0x794b; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); - TimeT timestamp = static_cast<time_t>(RFIFOL(s, 26)); + fixed_4b.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); + TimeT timestamp = fixed.ban_until; if (timestamp <= TimeT::now()) timestamp = TimeT(); timestamp_seconds_buffer tmpstr = stringish<timestamp_seconds_buffer>("no banishment"_s); @@ -2294,8 +2427,8 @@ void parse_admin(Session *s) AuthData *ad = search_account(account_name); if (ad) { - WFIFO_STRING(s, 6, ad->userid, 24); - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); + fixed_4b.account_name = ad->userid; + fixed_4b.account_id = ad->account_id; LOGIN_LOG("'ladmin': Change of the final date of a banishment (account: %s, new final date of banishment: %lld (%s), ip: %s)\n"_fmt, ad->userid, timestamp, tmpstr, @@ -2304,46 +2437,56 @@ void parse_admin(Session *s) { if (timestamp) { - unsigned char buf[16]; - WBUFW(buf, 0) = 0x2731; - WBUFL(buf, 2) = unwrap<AccountId>(ad->account_id); - WBUFB(buf, 6) = 1; // 0: change of statut, 1: ban - WBUFL(buf, 7) = static_cast<time_t>(timestamp); // status or final date of a banishment - charif_sendallwos(nullptr, buf, 11); + SPacket_0x2731_Fixed fixed_31; + fixed_31.account_id = ad->account_id; + fixed_31.ban_not_status = 1; + fixed_31.status_or_ban_until = timestamp; + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2731, 11>(ss, fixed_31); + } + for (int j = 0; j < AUTH_FIFO_SIZE; j++) + { if (auth_fifo[j].account_id == ad->account_id) auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification) + } } ad->ban_until_time = timestamp; } } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_4b.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to change the final date of a banishment of an unknown account (account: %s, received final date of banishment: %lld (%s), ip: %s)\n"_fmt, account_name, timestamp, tmpstr, ip); } - WFIFOL(s, 30) = static_cast<time_t>(timestamp); + fixed_4b.ban_until = timestamp; } - WFIFOSET(s, 34); - RFIFOSKIP(s, 30); + send_fpacket<0x794b, 34>(s, fixed_4b); break; + } case 0x794c: // Request to change the final date of a banishment (timestamp) (relative change) - if (RFIFOREST(s) < 38) - return; + { + RPacket_0x794c_Fixed fixed; + rv = recv_fpacket<0x794c, 38>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x794d_Fixed fixed_4d; { - WFIFOW(s, 0) = 0x794d; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + fixed_4d.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); AuthData *ad = search_account(account_name); if (ad) { - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); - WFIFO_STRING(s, 6, ad->userid, 24); + fixed_4d.account_id = ad->account_id; + fixed_4d.account_name = ad->userid; TimeT timestamp; TimeT now = TimeT::now(); if (!ad->ban_until_time @@ -2352,8 +2495,7 @@ void parse_admin(Session *s) else timestamp = ad->ban_until_time; struct tm tmtime = timestamp; - HumanTimeDiff ban_diff; - RFIFO_STRUCT(s, 26, ban_diff); + HumanTimeDiff ban_diff = fixed.ban_add; tmtime.tm_year += ban_diff.year; tmtime.tm_mon += ban_diff.month; tmtime.tm_mday += ban_diff.day; @@ -2380,16 +2522,22 @@ void parse_admin(Session *s) { if (timestamp) { - unsigned char buf[16]; - WBUFW(buf, 0) = 0x2731; - WBUFL(buf, 2) = unwrap<AccountId>(ad->account_id); - WBUFB(buf, 6) = 1; // 0: change of statut, 1: ban - WBUFL(buf, 7) = static_cast<time_t>(timestamp); // status or final date of a banishment - charif_sendallwos(nullptr, buf, 11); + SPacket_0x2731_Fixed fixed_31; + fixed_31.account_id = ad->account_id; + fixed_31.ban_not_status = 1; + fixed_31.status_or_ban_until = timestamp; + + for (Session *ss : iter_char_sessions()) + { + send_fpacket<0x2731, 11>(ss, fixed_31); + } + for (int j = 0; j < AUTH_FIFO_SIZE; j++) + { if (auth_fifo[j].account_id == ad->account_id) auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification) + } } ad->ban_until_time = timestamp; } @@ -2408,30 +2556,34 @@ void parse_admin(Session *s) ban_diff.minute, ban_diff.second, ip); } - WFIFOL(s, 30) = static_cast<time_t>(ad->ban_until_time); + fixed_4d.ban_until = ad->ban_until_time; } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_4d.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to adjust the final date of a banishment of an unknown account (account: %s, ip: %s)\n"_fmt, account_name, ip); - WFIFOL(s, 30) = 0; + fixed_4d.ban_until = TimeT(); } } - WFIFOSET(s, 34); - RFIFOSKIP(s, 38); + send_fpacket<0x794d, 34>(s, fixed_4d); break; + } case 0x794e: // Request to send a broadcast message - if (RFIFOREST(s) < 8 - || RFIFOREST(s) < (8 + RFIFOL(s, 4))) - return; - WFIFOW(s, 0) = 0x794f; - WFIFOW(s, 2) = -1; - if (RFIFOL(s, 4) < 1) + { + RPacket_0x794e_Head head; + AString repeat; + rv = recv_vpacket<0x794e, 8, 1>(s, head, repeat); + if (rv != RecvResult::Complete) + break; + + SPacket_0x794f_Fixed fixed_4f; + fixed_4f.error = -1; + if (!repeat) { LOGIN_LOG("'ladmin': Receiving a message for broadcast, but message is void (ip: %s)\n"_fmt, - ip); + ip); } else { @@ -2445,41 +2597,48 @@ void parse_admin(Session *s) { x794e_have_server: // overwrite the -1 - WFIFOW(s, 2) = 0; + fixed_4f.error = 0; - size_t len = RFIFOL(s, 4); - AString message = RFIFO_STRING(s, 8, len).to_print(); + AString& message = repeat; LOGIN_LOG("'ladmin': Receiving a message for broadcast (message: %s, ip: %s)\n"_fmt, message, ip); + // send same message to all char-servers (no answer) - uint8_t buf[len + 8]; - RFIFO_BUF_CLONE(s, buf, 8 + len); - WBUFW(buf, 0) = 0x2726; - charif_sendallwos(nullptr, buf, 8 + len); + SPacket_0x2726_Head head_26; + head_26.unused = head.unused; + + for (Session *ss : iter_char_sessions()) + { + send_vpacket<0x2726, 8, 1>(ss, head_26, message); + } } } x794e_have_no_server: - WFIFOSET(s, 4); - RFIFOSKIP(s, 8 + RFIFOL(s, 4)); + send_fpacket<0x794f, 4>(s, fixed_4f); break; + } case 0x7950: // Request to change the validity limite (timestamp) (relative change) - if (RFIFOREST(s) < 38) - return; + { + RPacket_0x7950_Fixed fixed; + rv = recv_fpacket<0x7950, 38>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7951_Fixed fixed_51; { - WFIFOW(s, 0) = 0x7951; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + fixed_51.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); AuthData *ad = search_account(account_name); if (ad) { - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); - WFIFO_STRING(s, 6, ad->userid, 24); + fixed_51.account_id = ad->account_id; + fixed_51.account_name = ad->userid; if (add_to_unlimited_account == 0 && !ad->connect_until_time) { LOGIN_LOG("'ladmin': Attempt to adjust the validity limit of an unlimited account (account: %s, ip: %s)\n"_fmt, - ad->userid, ip); - WFIFOL(s, 30) = 0; + ad->userid, ip); + fixed_51.valid_until = TimeT(); } else { @@ -2488,8 +2647,7 @@ void parse_admin(Session *s) if (!timestamp || timestamp < now) timestamp = now; struct tm tmtime = timestamp; - HumanTimeDiff v_diff; - RFIFO_STRUCT(s, 26, v_diff); + HumanTimeDiff v_diff = fixed.valid_add; tmtime.tm_year += v_diff.year; tmtime.tm_mon += v_diff.month; tmtime.tm_mday += v_diff.day; @@ -2519,7 +2677,7 @@ void parse_admin(Session *s) tmpstr2, ip); ad->connect_until_time = timestamp; - WFIFOL(s, 30) = static_cast<time_t>(timestamp); + fixed_51.valid_until = timestamp; } else { @@ -2537,117 +2695,122 @@ void parse_admin(Session *s) v_diff.minute, v_diff.second, ip); - WFIFOL(s, 30) = 0; + fixed_51.valid_until = TimeT(); } } } else { - WFIFO_STRING(s, 6, account_name, 24); + fixed_51.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to adjust the validity limit of an unknown account (account: %s, ip: %s)\n"_fmt, - account_name, ip); - WFIFOL(s, 30) = 0; + account_name, ip); + fixed_51.valid_until = TimeT(); } } - WFIFOSET(s, 34); - RFIFOSKIP(s, 38); + send_fpacket<0x7951, 34>(s, fixed_51); break; + } case 0x7952: // Request about informations of an account (by account name) - if (RFIFOREST(s) < 26) - return; { - WFIFOW(s, 0) = 0x7953; - WFIFOL(s, 2) = unwrap<AccountId>(AccountId()); - AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 2).to_print()); + RPacket_0x7952_Fixed fixed; + rv = recv_fpacket<0x7952, 26>(s, fixed); + if (rv != RecvResult::Complete) + break; + + SPacket_0x7953_Head head_53; + head_53.account_id = AccountId(); + AccountName account_name = stringish<AccountName>(fixed.account_name.to_print()); const AuthData *ad = search_account(account_name); if (ad) { - WFIFOL(s, 2) = unwrap<AccountId>(ad->account_id); - // TODO fix size (there's a lot of other stuff wrong with this packet too) - WFIFOB(s, 6) = static_cast<uint8_t>(isGM(ad->account_id).get_all_bits()); - WFIFO_STRING(s, 7, ad->userid, 24); - WFIFOB(s, 31) = static_cast<uint8_t>(ad->sex); - WFIFOL(s, 32) = ad->logincount; - WFIFOL(s, 36) = ad->state; - WFIFO_STRING(s, 40, ad->error_message, 20); - WFIFO_STRING(s, 60, ad->lastlogin, 24); - WFIFO_STRING(s, 84, convert_for_printf(ad->last_ip), 16); - WFIFO_STRING(s, 100, ad->email, 40); - WFIFOL(s, 140) = static_cast<time_t>(ad->connect_until_time); - WFIFOL(s, 144) = static_cast<time_t>(ad->ban_until_time); - size_t len = ad->memo.size() + 1; - WFIFOW(s, 148) = len; - WFIFO_STRING(s, 150, ad->memo, len); + head_53.account_id = ad->account_id; + head_53.gm_level = isGM(ad->account_id); + head_53.account_name = ad->userid; + head_53.sex = ad->sex; + head_53.login_count = ad->logincount; + head_53.state = ad->state; + head_53.error_message = ad->error_message; + head_53.last_login_string = ad->lastlogin; + head_53.ip_string = convert_for_printf(ad->last_ip); + head_53.email = ad->email; + head_53.connect_until = ad->connect_until_time; + head_53.ban_until = ad->ban_until_time; + + XString repeat_53 = ad->memo; LOGIN_LOG("'ladmin': Sending information of an account (request by the name; account: %s, id: %d, ip: %s)\n"_fmt, - ad->userid, ad->account_id, - ip); - WFIFOSET(s, 150 + len); + ad->userid, ad->account_id, + ip); + + send_vpacket<0x7953, 150, 1>(s, head_53, repeat_53); } else { - WFIFO_STRING(s, 7, account_name, 24); - WFIFOW(s, 148) = 0; + head_53.account_name = account_name; LOGIN_LOG("'ladmin': Attempt to obtain information (by the name) of an unknown account (account: %s, ip: %s)\n"_fmt, - account_name, ip); - WFIFOSET(s, 150); + account_name, ip); + send_vpacket<0x7953, 150, 1>(s, head_53, ""_s); } - } - RFIFOSKIP(s, 26); break; + } case 0x7954: // Request about information of an account (by account id) - if (RFIFOREST(s) < 6) - return; { - AccountId account_id = wrap<AccountId>(RFIFOL(s, 2)); - WFIFOW(s, 0) = 0x7953; - WFIFOL(s, 2) = unwrap<AccountId>(account_id); - WFIFO_ZERO(s, 7, 24); + RPacket_0x7954_Fixed fixed; + rv = recv_fpacket<0x7954, 6>(s, fixed); + if (rv != RecvResult::Complete) + break; + + AccountId account_id = fixed.account_id; + SPacket_0x7953_Head head_53; + head_53.account_id = account_id; + head_53.account_name = AccountName(); for (const AuthData& ad : auth_data) { if (ad.account_id == account_id) { LOGIN_LOG("'ladmin': Sending information of an account (request by the id; account: %s, id: %d, ip: %s)\n"_fmt, - ad.userid, RFIFOL(s, 2), ip); - WFIFOB(s, 6) = static_cast<uint8_t>(isGM(ad.account_id).get_all_bits()); - WFIFO_STRING(s, 7, ad.userid, 24); - WFIFOB(s, 31) = static_cast<uint8_t>(ad.sex); - WFIFOL(s, 32) = ad.logincount; - WFIFOL(s, 36) = ad.state; - WFIFO_STRING(s, 40, ad.error_message, 20); - WFIFO_STRING(s, 60, ad.lastlogin, 24); - WFIFO_STRING(s, 84, convert_for_printf(ad.last_ip), 16); - WFIFO_STRING(s, 100, ad.email, 40); - WFIFOL(s, 140) = static_cast<time_t>(ad.connect_until_time); - WFIFOL(s, 144) = static_cast<time_t>(ad.ban_until_time); - size_t len = ad.memo.size() + 1; - WFIFOW(s, 148) = len; - WFIFO_STRING(s, 150, ad.memo, len); - WFIFOSET(s, 150 + len); + ad.userid, account_id, ip); + head_53.gm_level = isGM(ad.account_id); + head_53.account_name = ad.userid; + head_53.sex = ad.sex; + head_53.login_count = ad.logincount; + head_53.state = ad.state; + head_53.error_message = ad.error_message; + head_53.last_login_string = ad.lastlogin; + head_53.ip_string = convert_for_printf(ad.last_ip); + head_53.email = ad.email; + head_53.connect_until = ad.connect_until_time; + head_53.ban_until = ad.ban_until_time; + XString repeat_53 = ad.memo; + send_vpacket<0x7953, 150, 1>(s, head_53, repeat_53); goto x7954_out; } } { LOGIN_LOG("'ladmin': Attempt to obtain information (by the id) of an unknown account (id: %d, ip: %s)\n"_fmt, - RFIFOL(s, 2), ip); - WFIFO_STRING(s, 7, ""_s, 24); - WFIFOW(s, 148) = 0; - WFIFOSET(s, 150); + account_id, ip); + head_53.account_name = stringish<AccountName>(""_s); + send_vpacket<0x7953, 150, 1>(s, head_53, ""_s); } - } x7954_out: - RFIFOSKIP(s, 6); break; + } case 0x7955: // Request to reload GM file (no answer) + { + RPacket_0x7955_Fixed fixed; + rv = recv_fpacket<0x7955, 2>(s, fixed); + if (rv != RecvResult::Complete) + break; + LOGIN_LOG("'ladmin': Request to re-load GM configuration file (ip: %s).\n"_fmt, - ip); + ip); read_gm_account(); // send GM accounts to all char-servers send_GM_accounts(); - RFIFOSKIP(s, 2); break; + } default: { @@ -2657,55 +2820,24 @@ void parse_admin(Session *s) timestamp_milliseconds_buffer timestr; stamp_time(timestr); FPRINTF(logfp, - "%s: receiving of an unknown packet -> disconnection\n"_fmt, - timestr); + "%s: receiving of an unknown packet -> disconnection\n"_fmt, + timestr); FPRINTF(logfp, - "parse_admin: connection #%d (ip: %s), packet: 0x%x (with being read: %zu).\n"_fmt, - s, ip, RFIFOW(s, 0), RFIFOREST(s)); + "parse_admin: connection #%d (ip: %s), packet: 0x%x (with being read: %zu).\n"_fmt, + s, ip, packet_id, packet_avail(s)); FPRINTF(logfp, "Detail (in hex):\n"_fmt); - FPRINTF(logfp, - "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"_fmt); - char tmpstr[16 + 1] {}; - int i; - for (i = 0; i < RFIFOREST(s); i++) - { - if ((i & 15) == 0) - FPRINTF(logfp, "%04X "_fmt, i); - FPRINTF(logfp, "%02x "_fmt, RFIFOB (s, i)); - if (RFIFOB(s, i) > 0x1f) - tmpstr[i % 16] = RFIFOB(s, i); - else - tmpstr[i % 16] = '.'; - if ((i - 7) % 16 == 0) // -8 + 1 - FPRINTF(logfp, " "_fmt); - else if ((i + 1) % 16 == 0) - { - FPRINTF(logfp, " %s\n"_fmt, tmpstr); - std::fill(tmpstr + 0, tmpstr + 17, '\0'); - } - } - if (i % 16 != 0) - { - for (int j = i; j % 16 != 0; j++) - { - FPRINTF(logfp, " "_fmt); - if ((j - 7) % 16 == 0) // -8 + 1 - FPRINTF(logfp, " "_fmt); - } - FPRINTF(logfp, " %s\n"_fmt, tmpstr); - } - FPRINTF(logfp, "\n"_fmt); + packet_dump(logfp, s); } - } LOGIN_LOG("'ladmin': End of connection, unknown packet (ip: %s)\n"_fmt, - ip); + ip); s->set_eof(); PRINTF("Remote administration has been disconnected (unknown packet).\n"_fmt); return; + } } - //WFIFOW(fd,0) = 0x791f; - //WFIFOSET(fd,2); } + if (rv == RecvResult::Error) + s->set_eof(); return; } @@ -2743,8 +2875,8 @@ void parse_login(Session *s) { AccountName account_name = stringish<AccountName>(RFIFO_STRING<24>(s, 6)); PRINTF("parse_login: connection #%d, packet: 0x%x (with being read: %zu), account: %s.\n"_fmt, - s, RFIFOW(s, 0), RFIFOREST(s), - account_name); + s, RFIFOW(s, 0), RFIFOREST(s), + account_name); } } else if (RFIFOW(s, 0) == 0x2710) @@ -2753,13 +2885,13 @@ void parse_login(Session *s) { ServerName server_name = stringish<ServerName>(RFIFO_STRING<20>(s, 60)); PRINTF("parse_login: connection #%d, packet: 0x%x (with being read: %zu), server: %s.\n"_fmt, - s, RFIFOW(s, 0), RFIFOREST(s), - server_name); + s, RFIFOW(s, 0), RFIFOREST(s), + server_name); } } else PRINTF("parse_login: connection #%d, packet: 0x%x (with being read: %zu).\n"_fmt, - s, RFIFOW(s, 0), RFIFOREST(s)); + s, RFIFOW(s, 0), RFIFOREST(s)); } switch (RFIFOW(s, 0)) @@ -2785,12 +2917,12 @@ void parse_login(Session *s) account.passwdenc = 0; LOGIN_LOG("Request for connection (non encryption mode) of %s (ip: %s).\n"_fmt, - account.userid, ip); + account.userid, ip); if (!check_ip(ip)) { LOGIN_LOG("Connection refused: IP isn't authorised (deny/allow, ip: %s).\n"_fmt, - ip); + ip); WFIFOW(s, 0) = 0x6a; WFIFOB(s, 2) = 0x03; WFIFO_ZERO(s, 3, 20); @@ -2813,8 +2945,8 @@ void parse_login(Session *s) if (!(gm_level.satisfies(min_level_to_connect))) { LOGIN_LOG("Connection refused: the minimum GM level for connection is %d (account: %s, GM level: %d, ip: %s).\n"_fmt, - min_level_to_connect, account.userid, - gm_level, ip); + min_level_to_connect, account.userid, + gm_level, ip); WFIFOW(s, 0) = 0x81; WFIFOB(s, 2) = 1; // 01 = Server closed WFIFOSET(s, 3); @@ -2825,10 +2957,10 @@ void parse_login(Session *s) if (gm_level) PRINTF("Connection of the GM (level:%d) account '%s' accepted.\n"_fmt, - gm_level, account.userid); + gm_level, account.userid); else PRINTF("Connection of the account '%s' accepted.\n"_fmt, - account.userid); + account.userid); /* * Add a 0x0063 packet, which contains the name of the update host. The packet will only @@ -2854,7 +2986,7 @@ void parse_login(Session *s) } // Load list of char servers into outbound packet - server_num = 0; + int server_num = 0; // if (version_2 & VERSION_2_SERVERORDER) for (int i = 0; i < MAX_SERVERS; i++) { @@ -2902,7 +3034,7 @@ void parse_login(Session *s) else { LOGIN_LOG("Connection refused: there is no char-server online (account: %s, ip: %s).\n"_fmt, - account.userid, ip); + account.userid, ip); WFIFOW(s, 0) = 0x81; WFIFOB(s, 2) = 1; // 01 = Server closed WFIFOSET(s, 3); @@ -2977,10 +3109,10 @@ void parse_login(Session *s) { x2710_okay: LOGIN_LOG("Connection of the char-server '%s' accepted (account: %s, pass: %s, ip: %s)\n"_fmt, - server_name, account.userid, - account.passwd, ip); + server_name, account.userid, + account.passwd, ip); PRINTF("Connection of the char-server '%s' accepted.\n"_fmt, - server_name); + server_name); server[unwrap<AccountId>(account.account_id)] = mmo_char_server{}; server[unwrap<AccountId>(account.account_id)].ip = RFIFOIP(s, 54); server[unwrap<AccountId>(account.account_id)].port = RFIFOW(s, 58); @@ -3014,8 +3146,8 @@ void parse_login(Session *s) { x2710_refused: LOGIN_LOG("Connexion of the char-server '%s' REFUSED (account: %s, pass: %s, ip: %s)\n"_fmt, - server_name, account.userid, - account.passwd, ip); + server_name, account.userid, + account.passwd, ip); WFIFOW(s, 0) = 0x2711; WFIFOB(s, 2) = 3; WFIFOSET(s, 3); @@ -3027,7 +3159,7 @@ void parse_login(Session *s) case 0x7530: // Request of the server version LOGIN_LOG("Sending of the server version (ip: %s)\n"_fmt, - ip); + ip); WFIFOW(s, 0) = 0x7531; { Version version = CURRENT_LOGIN_SERVER_VERSION; @@ -3052,7 +3184,7 @@ void parse_login(Session *s) if (!check_ladminip(s->client_ip)) { LOGIN_LOG("'ladmin'-login: Connection in administration mode refused: IP isn't authorised (ladmin_allow, ip: %s).\n"_fmt, - ip); + ip); } else { @@ -3065,24 +3197,24 @@ void parse_login(Session *s) && (password == admin_pass)) { LOGIN_LOG("'ladmin'-login: Connection in administration mode accepted (non encrypted password: %s, ip: %s)\n"_fmt, - password, ip); + password, ip); PRINTF("Connection of a remote administration accepted (non encrypted password).\n"_fmt); WFIFOB(s, 2) = 0; s->set_parsers(SessionParsers{.func_parse= parse_admin, .func_delete= delete_admin}); } else if (admin_state != 1) LOGIN_LOG("'ladmin'-login: Connection in administration mode REFUSED - remote administration is disabled (non encrypted password: %s, ip: %s)\n"_fmt, - password, ip); + password, ip); else LOGIN_LOG("'ladmin'-login: Connection in administration mode REFUSED - invalid password (non encrypted password: %s, ip: %s)\n"_fmt, - password, ip); + password, ip); } else { // encrypted password { LOGIN_LOG("'ladmin'-login: Connection in administration mode REFUSED - encrypted login is disabled (ip: %s)\n"_fmt, - ip); + ip); } } } @@ -3099,15 +3231,15 @@ void parse_login(Session *s) timestamp_milliseconds_buffer timestr; stamp_time(timestr); FPRINTF(logfp, - "%s: receiving of an unknown packet -> disconnection\n"_fmt, - timestr); + "%s: receiving of an unknown packet -> disconnection\n"_fmt, + timestr); FPRINTF(logfp, - "parse_login: connection #%d (ip: %s), packet: 0x%x (with being read: %zu).\n"_fmt, - s, ip, RFIFOW(s, 0), - RFIFOREST(s)); + "parse_login: connection #%d (ip: %s), packet: 0x%x (with being read: %zu).\n"_fmt, + s, ip, RFIFOW(s, 0), + RFIFOREST(s)); FPRINTF(logfp, "Detail (in hex):\n"_fmt); FPRINTF(logfp, - "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"_fmt); + "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"_fmt); char tmpstr[16 + 1] {}; @@ -3273,7 +3405,7 @@ bool login_config(XString w1, ZString w2) } else if (w1 == "level_new_gm"_s) { - level_new_gm = atoi(w2.c_str()); + level_new_gm = GmLevel::from(static_cast<uint32_t>(atoi(w2.c_str()))); } else if (w1 == "new_account"_s) { @@ -3484,13 +3616,6 @@ bool display_conf_warnings(void) PRINTF(" We highly recommend that you change it.\n"_fmt); } - if (level_new_gm < 0 || level_new_gm > 99) - { - PRINTF("***WARNING: Invalid value for level_new_gm parameter -> set to 60 (default).\n"_fmt); - level_new_gm = 60; - rv = false; - } - if (new_account != 0 && new_account != 1) { PRINTF("***WARNING: Invalid value for new_account parameter -> set to 0 (no new account).\n"_fmt); @@ -3655,11 +3780,11 @@ void save_config_in_log(void) else LOGIN_LOG("- with a 'To GM become' password (gm_pass) of %zu character(s).\n"_fmt, gm_pass.size()); - if (level_new_gm == 0) + if (!level_new_gm) LOGIN_LOG("- to refuse any creation of GM with @gm.\n"_fmt); else LOGIN_LOG("- to create GM with level '%d' when @gm is used.\n"_fmt, - level_new_gm); + level_new_gm); if (new_account == 1) LOGIN_LOG("- to ALLOW new users (with _F/_M).\n"_fmt); @@ -3667,19 +3792,19 @@ void save_config_in_log(void) LOGIN_LOG("- to NOT ALLOW new users (with _F/_M).\n"_fmt); LOGIN_LOG("- with port: %d.\n"_fmt, login_port); LOGIN_LOG("- with the accounts file name: '%s'.\n"_fmt, - account_filename); + account_filename); LOGIN_LOG("- with the GM accounts file name: '%s'.\n"_fmt, - gm_account_filename); + gm_account_filename); if (gm_account_filename_check_timer == interval_t::zero()) LOGIN_LOG("- to NOT check GM accounts file modifications.\n"_fmt); else LOGIN_LOG("- to check GM accounts file modifications every %lld seconds.\n"_fmt, - maybe_cast<long long>(gm_account_filename_check_timer.count())); + maybe_cast<long long>(gm_account_filename_check_timer.count())); // not necessary to log the 'login_log_filename', we are inside :) LOGIN_LOG("- with the unknown packets file name: '%s'.\n"_fmt, - login_log_unknown_packets_filename); + login_log_unknown_packets_filename); if (save_unknown_packets) LOGIN_LOG("- to SAVE all unkown packets.\n"_fmt); else @@ -3701,7 +3826,7 @@ void save_config_in_log(void) LOGIN_LOG("- with no minimum level for connection.\n"_fmt); else LOGIN_LOG("- to accept only GM with level %d or more.\n"_fmt, - min_level_to_connect); + min_level_to_connect); if (add_to_unlimited_account) LOGIN_LOG("- to authorize adjustment (with timeadd ladmin) on an unlimited account.\n"_fmt); @@ -3714,7 +3839,7 @@ void save_config_in_log(void) LOGIN_LOG("- to create new accounts with a limited time: time of creation.\n"_fmt); else LOGIN_LOG("- to create new accounts with a limited time: time of creation + %d second(s).\n"_fmt, - start_limited_time); + start_limited_time); if (check_ip_flag) LOGIN_LOG("- with control of players IP between login-server and char-server.\n"_fmt); @@ -3896,10 +4021,10 @@ int do_init(Slice<ZString> argv) j).detach(); LOGIN_LOG("The login-server is ready (Server is listening on the port %d).\n"_fmt, - login_port); + login_port); PRINTF("The login-server is " SGR_BOLD SGR_GREEN "ready" SGR_RESET " (Server is listening on the port %d).\n\n"_fmt, - login_port); + login_port); return 0; } diff --git a/src/map/pc.cpp b/src/map/pc.cpp index f3f56b1..44c401b 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -4312,7 +4312,7 @@ int pc_setaccountreg2(dumb_ptr<map_session_data> sd, VarName reg, int val) return 0; } if (battle_config.error_log) - PRINTF("pc_setaccountreg2 : couldn't set %s (ACCOUNT_REG2_NUM = %d)\n"_fmt, + PRINTF("pc_setaccountreg2 : couldn't set %s (ACCOUNT_REG2_NUM = %zu)\n"_fmt, reg, ACCOUNT_REG2_NUM); return 1; diff --git a/src/mmo/enums.hpp b/src/mmo/enums.hpp index a7dcc89..52e1009 100644 --- a/src/mmo/enums.hpp +++ b/src/mmo/enums.hpp @@ -145,4 +145,17 @@ SEX sex_from_char(char c) } } +inline +bool native_to_network(char *network, SEX native) +{ + *network = sex_to_char(native); + return true; +} +inline +bool network_to_native(SEX *native, char network) +{ + *native = sex_from_char(network); + return true; +} + #endif // TMWA_MMO_ENUMS_HPP diff --git a/src/mmo/mmo.hpp b/src/mmo/mmo.hpp index a0cee57..d96e619 100644 --- a/src/mmo/mmo.hpp +++ b/src/mmo/mmo.hpp @@ -45,7 +45,7 @@ constexpr int TRADE_MAX = 10; constexpr int GLOBAL_REG_NUM = 96; constexpr int ACCOUNT_REG_NUM = 16; -constexpr int ACCOUNT_REG2_NUM = 16; +constexpr size_t ACCOUNT_REG2_NUM = 16; constexpr interval_t DEFAULT_WALK_SPEED = std::chrono::milliseconds(150); constexpr interval_t MIN_WALK_SPEED = interval_t::zero(); constexpr interval_t MAX_WALK_SPEED = std::chrono::seconds(1); diff --git a/src/mmo/version.hpp b/src/mmo/version.hpp index 9e20bf1..5d28b5d 100644 --- a/src/mmo/version.hpp +++ b/src/mmo/version.hpp @@ -35,6 +35,7 @@ # define TMWA_SERVER_INTER 0x04 # define TMWA_SERVER_MAP 0x08 +// TODO now that I generate the protocol, split 'flags' out of the struct struct Version { uint8_t major; diff --git a/src/net/packets.cpp b/src/net/packets.cpp new file mode 100644 index 0000000..5595b1d --- /dev/null +++ b/src/net/packets.cpp @@ -0,0 +1,89 @@ +#include "packets.hpp" +// packets.cpp - palatable socket buffer accessors +// +// Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com> +// +// This file is part of The Mana World (Athena server) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +# include "../io/cxxstdio.hpp" +# include "../io/write.hpp" + +#include "vomit.hpp" + +#include "../poison.hpp" + +size_t packet_avail(Session *s) +{ + return RFIFOREST(s); +} + +bool packet_fetch(Session *s, size_t offset, Byte *data, size_t sz) +{ + if (RFIFOREST(s) < offset + sz) + return false; + const Byte *start = reinterpret_cast<const Byte *>(RFIFOP(s, offset)); + const Byte *end = start + sz; + std::copy(start, end, data); + return true; +} +void packet_discard(Session *s, size_t sz) +{ + RFIFOSKIP(s, sz); +} +bool packet_send(Session *s, const Byte *data, size_t sz) +{ + WFIFOSET(s, sz); + Byte *end = reinterpret_cast<Byte *>(WFIFOP(s, 0)); + Byte *start = end - sz; + std::copy(data, data + sz, start); + return true; +} + +void packet_dump(io::WriteFile& logfp, Session *s) +{ + FPRINTF(logfp, + "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"_fmt); + char tmpstr[16 + 1] {}; + int i; + for (i = 0; i < RFIFOREST(s); i++) + { + if ((i & 15) == 0) + FPRINTF(logfp, "%04X "_fmt, i); + FPRINTF(logfp, "%02x "_fmt, RFIFOB(s, i)); + if (RFIFOB(s, i) > 0x1f) + tmpstr[i % 16] = RFIFOB(s, i); + else + tmpstr[i % 16] = '.'; + if ((i - 7) % 16 == 0) // -8 + 1 + FPRINTF(logfp, " "_fmt); + else if ((i + 1) % 16 == 0) + { + FPRINTF(logfp, " %s\n"_fmt, tmpstr); + std::fill(tmpstr + 0, tmpstr + 17, '\0'); + } + } + if (i % 16 != 0) + { + for (int j = i; j % 16 != 0; j++) + { + FPRINTF(logfp, " "_fmt); + if ((j - 7) % 16 == 0) // -8 + 1 + FPRINTF(logfp, " "_fmt); + } + FPRINTF(logfp, " %s\n"_fmt, tmpstr); + } + FPRINTF(logfp, "\n"_fmt); +} diff --git a/src/net/packets.hpp b/src/net/packets.hpp new file mode 100644 index 0000000..2e3d77c --- /dev/null +++ b/src/net/packets.hpp @@ -0,0 +1,354 @@ +#ifndef TMWA_NET_PACKETS_HPP +#define TMWA_NET_PACKETS_HPP +// packets.hpp - palatable socket buffer accessors +// +// Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com> +// +// This file is part of The Mana World (Athena server) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +# include "fwd.hpp" + +# include "../compat/cast.hpp" + +# include "../ints/little.hpp" + + #include "../io/fwd.hpp" + +# include "socket.hpp" + +enum class RecvResult +{ + Incomplete, + Complete, + Error, +}; + +enum class SendResult +{ + Success, + Fail, +}; + + +size_t packet_avail(Session *s); +void packet_dump(io::WriteFile& out, Session *s); + +bool packet_fetch(Session *s, size_t offset, Byte *data, size_t sz); +void packet_discard(Session *s, size_t sz); +bool packet_send(Session *s, const Byte *data, size_t sz); + +inline +bool packet_peek_id(Session *s, uint16_t *packet_id) +{ + Little16 id; + bool okay = packet_fetch(s, 0, reinterpret_cast<Byte *>(&id), 2); + if (okay) + { + if (!network_to_native(packet_id, id)) + { + s->set_eof(); + return false; + } + } + return okay; +} + +template<class F> +__attribute__((warn_unused_result)) +SendResult net_send_fpacket(Session *s, const F& fixed) +{ + bool ok = packet_send(s, reinterpret_cast<const Byte *>(&fixed), sizeof(F)); + return ok ? SendResult::Success : SendResult::Fail; +} + +template<class H, class R> +__attribute__((warn_unused_result)) +SendResult net_send_vpacket(Session *s, const H& head, const std::vector<R>& repeat) +{ + bool ok = packet_send(s, reinterpret_cast<const Byte *>(&head), sizeof(H)); + ok &= packet_send(s, reinterpret_cast<const Byte *>(repeat.data()), repeat.size() * sizeof(R)); + return ok ? SendResult::Success : SendResult::Fail; +} + +template<class F> +__attribute__((warn_unused_result)) +RecvResult net_recv_fpacket(Session *s, F& fixed) +{ + bool ok = packet_fetch(s, 0, reinterpret_cast<Byte *>(&fixed), sizeof(F)); + if (ok) + { + packet_discard(s, sizeof(F)); + return RecvResult::Complete; + } + return RecvResult::Incomplete; +} + +template<class HNat, class H, class R> +__attribute__((warn_unused_result)) +RecvResult net_recv_vpacket(Session *s, H& head, std::vector<R>& repeat) +{ + bool ok = packet_fetch(s, 0, reinterpret_cast<Byte *>(&head), sizeof(H)); + if (ok) + { + HNat nat; + if (!network_to_native(&nat, head)) + return RecvResult::Error; + if (packet_avail(s) < nat.magic_packet_length) + return RecvResult::Incomplete; + if (nat.magic_packet_length < sizeof(H)) + return RecvResult::Error; + size_t bytes_repeat = nat.magic_packet_length - sizeof(H); + if (bytes_repeat % sizeof(R)) + return RecvResult::Error; + repeat.resize(bytes_repeat / sizeof(R)); + if (packet_fetch(s, sizeof(H), reinterpret_cast<Byte *>(repeat.data()), bytes_repeat)) + { + packet_discard(s, nat.magic_packet_length); + return RecvResult::Complete; + } + return RecvResult::Incomplete; + } + return RecvResult::Incomplete; +} + + +template<uint16_t id, uint16_t size, class F> +void send_fpacket(Session *s, const F& fixed) +{ + static_assert(id == F::PACKET_ID, "F::PACKET_ID"); + static_assert(size == sizeof(typename F::NetType), "F::NetType"); + + typename F::NetType net_fixed; + if (!native_to_network(&net_fixed, fixed)) + { + s->set_eof(); + return; + } + SendResult rv = net_send_fpacket(s, net_fixed); + if (rv != SendResult::Success) + s->set_eof(); +} + +template<uint16_t id, uint16_t headsize, uint16_t repeatsize, class H, class R> +void send_vpacket(Session *s, H& head, const std::vector<R>& repeat) +{ + static_assert(id == H::PACKET_ID, "H::PACKET_ID"); + static_assert(headsize == sizeof(typename H::NetType), "H::NetType"); + static_assert(id == R::PACKET_ID, "R::PACKET_ID"); + static_assert(repeatsize == sizeof(typename R::NetType), "R::NetType"); + + typename H::NetType net_head; + // since these are already allocated, can't overflow address space + size_t total_size = sizeof(typename H::NetType) + repeat.size() * sizeof(typename R::NetType); + // truncates + head.magic_packet_length = total_size; + if (head.magic_packet_length != total_size) + { + s->set_eof(); + return; + } + // TODO potentially avoid the allocation + std::vector<typename R::NetType> net_repeat(repeat.size()); + if (!native_to_network(&net_head, head)) + { + s->set_eof(); + return; + } + for (size_t i = 0; i < repeat.size(); ++i) + { + if (!native_to_network(&net_repeat[i], repeat[i])) + { + s->set_eof(); + return; + } + } + SendResult rv = net_send_vpacket(s, net_head, net_repeat); + if (rv != SendResult::Success) + s->set_eof(); +} + +template<uint16_t id, uint16_t size, class F> +__attribute__((warn_unused_result)) +RecvResult recv_fpacket(Session *s, F& fixed) +{ + static_assert(id == F::PACKET_ID, "F::PACKET_ID"); + static_assert(size == sizeof(typename F::NetType), "F::NetType"); + + typename F::NetType net_fixed; + RecvResult rv = net_recv_fpacket(s, net_fixed); + assert (fixed.magic_packet_id == F::PACKET_ID); + if (rv == RecvResult::Complete) + { + if (!network_to_native(&fixed, net_fixed)) + return RecvResult::Error; + } + return rv; +} + +template<uint16_t id, uint16_t headsize, uint16_t repeatsize, class H, class R> +__attribute__((warn_unused_result)) +RecvResult recv_vpacket(Session *s, H& head, std::vector<R>& repeat) +{ + static_assert(id == H::PACKET_ID, "H::PACKET_ID"); + static_assert(headsize == sizeof(typename H::NetType), "H::NetType"); + static_assert(id == R::PACKET_ID, "R::PACKET_ID"); + static_assert(repeatsize == sizeof(typename R::NetType), "R::NetType"); + + typename H::NetType net_head; + std::vector<typename R::NetType> net_repeat; + RecvResult rv = net_recv_vpacket<H>(s, net_head, net_repeat); + assert (head.magic_packet_id == H::PACKET_ID); + if (rv == RecvResult::Complete) + { + if (!network_to_native(&head, net_head)) + return RecvResult::Error; + repeat.resize(net_repeat.size()); + for (size_t i = 0; i < net_repeat.size(); ++i) + { + if (!network_to_native(&repeat[i], net_repeat[i])) + return RecvResult::Error; + } + } + return rv; +} + +// convenience for trailing strings + +struct VarStringNetType +{ + char c; +}; + +template<uint16_t id, uint16_t headsize, uint16_t repeatsize, class H> +void send_vpacket(Session *s, H& head, const XString& repeat) +{ + static_assert(id == H::PACKET_ID, "H::PACKET_ID"); + static_assert(headsize == sizeof(typename H::NetType), "H::NetType"); + // static_assert(id == R::PACKET_ID, "R::PACKET_ID"); + static_assert(repeatsize == 1, "R::NetType"); + + typename H::NetType net_head; + // since it's already allocated, it can't overflow address space + size_t total_length = sizeof(typename H::NetType) + (repeat.size() + 1) * sizeof(VarStringNetType); + head.magic_packet_length = total_length; + if (head.magic_packet_length != total_length) + { + s->set_eof(); + return; + } + // TODO potentially avoid the allocation + std::vector<VarStringNetType> net_repeat(repeat.size() + 1); + if (!native_to_network(&net_head, head)) + { + s->set_eof(); + return; + } + for (size_t i = 0; i < repeat.size(); ++i) + { + net_repeat[i].c = repeat[i]; + } + net_repeat[repeat.size()].c = '\0'; + SendResult rv = net_send_vpacket(s, net_head, net_repeat); + if (rv != SendResult::Success) + s->set_eof(); +} + +template<uint16_t id, uint16_t headsize, uint16_t repeatsize, class H> +__attribute__((warn_unused_result)) +RecvResult recv_vpacket(Session *s, H& head, AString& repeat) +{ + static_assert(id == H::PACKET_ID, "H::PACKET_ID"); + static_assert(headsize == sizeof(typename H::NetType), "H::NetType"); + //static_assert(id == R::PACKET_ID, "R::PACKET_ID"); + static_assert(repeatsize == 1, "R::NetType"); + + typename H::NetType net_head; + std::vector<VarStringNetType> net_repeat; + RecvResult rv = net_recv_vpacket<H>(s, net_head, net_repeat); + assert (head.magic_packet_id == H::PACKET_ID); + if (rv == RecvResult::Complete) + { + if (!network_to_native(&head, net_head)) + return RecvResult::Error; + // reinterpret_cast is needed to correctly handle an empty vector + const char *begin = sign_cast<const char *>(net_repeat.data()); + const char *end = begin + repeat.size(); + end = std::find(begin, end, '\0'); + repeat = XString(begin, end, nullptr); + } + return rv; +} + + +// if there is nothing in the head but the id and length, use the below + +// TODO make this go away with template specialization + +template<uint16_t PKT_ID> +struct NetCommonPacketHead +{ + Little16 magic_packet_id; + Little16 magic_packet_length; +}; + +template<uint16_t PKT_ID> +struct CommonPacketHead +{ + using NetType = NetCommonPacketHead<PKT_ID>; + static const uint16_t PACKET_ID = PKT_ID; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t magic_packet_length; +}; + +template<uint16_t PKT_ID> +bool native_to_network(NetCommonPacketHead<PKT_ID> *net, CommonPacketHead<PKT_ID> nat) +{ + return native_to_network(&net->magic_packet_id, nat.magic_packet_id) + && native_to_network(&net->magic_packet_length, nat.magic_packet_length); +} + +template<uint16_t PKT_ID> +bool network_to_native(CommonPacketHead<PKT_ID> *nat, NetCommonPacketHead<PKT_ID> net) +{ + return network_to_native(&nat->magic_packet_id, net.magic_packet_id) + && network_to_native(&nat->magic_packet_length, net.magic_packet_length); +} + +template<uint16_t id, uint16_t headsize, uint16_t repeatsize, class R> +void send_packet_repeatonly(Session *s, const std::vector<R>& v) +{ + static_assert(headsize == 4, "repeat headsize"); + static_assert(id == R::PACKET_ID, "R::PACKET_ID"); + static_assert(repeatsize == sizeof(typename R::NetType), "R::NetType"); + + CommonPacketHead<R::PACKET_ID> head; + send_vpacket<id, 4, repeatsize>(s, head, v); +} + +template<uint16_t id, uint16_t headsize, uint16_t repeatsize, class R> +__attribute__((warn_unused_result)) +RecvResult recv_packet_repeatonly(Session *s, std::vector<R>& v) +{ + static_assert(headsize == 4, "repeat headsize"); + static_assert(id == R::PACKET_ID, "R::PACKET_ID"); + static_assert(repeatsize == sizeof(typename R::NetType), "R::NetType"); + + CommonPacketHead<R::PACKET_ID> head; + return recv_vpacket<id, 4, repeatsize>(s, head, v); +} + +#endif // TMWA_NET_PACKETS_HPP diff --git a/src/net/socket.cpp b/src/net/socket.cpp index 6880bfa..e9e819e 100644 --- a/src/net/socket.cpp +++ b/src/net/socket.cpp @@ -1,4 +1,5 @@ #include "socket.hpp" +#include "vomit.hpp" // for remaining FIFO functions // socket.cpp - Network event system. // // Copyright © ????-2004 Athena Dev Teams diff --git a/src/net/socket.hpp b/src/net/socket.hpp index aff8278..2b60ac6 100644 --- a/src/net/socket.hpp +++ b/src/net/socket.hpp @@ -173,17 +173,4 @@ void do_sendrecv(interval_t next); /// Call the parser function for every socket that has read data void do_parsepacket(void); -/// Check how much can be read -inline -size_t RFIFOREST(Session *s) -{ - return s->rdata_size - s->rdata_pos; -} - -/// Done reading -void RFIFOSKIP(Session *s, size_t len); - -/// Finish writing -void WFIFOSET(Session *s, size_t len); - #endif // TMWA_NET_SOCKET_HPP diff --git a/src/net/vomit.hpp b/src/net/vomit.hpp index 3d3a07f..84c54ac 100644 --- a/src/net/vomit.hpp +++ b/src/net/vomit.hpp @@ -25,6 +25,23 @@ # include "socket.hpp" +// these first three are really in socket.cpp +// but here for cleanliness + +/// Check how much can be read +inline +size_t RFIFOREST(Session *s) +{ + return s->rdata_size - s->rdata_pos; +} + +/// Done reading +void RFIFOSKIP(Session *s, size_t len); + +/// Finish writing +void WFIFOSET(Session *s, size_t len); + + template<class T> uint8_t *pod_addressof_m(T& structure) { diff --git a/src/proto2/any-user.hpp b/src/proto2/any-user.hpp index f2847ef..037171c 100644 --- a/src/proto2/any-user.hpp +++ b/src/proto2/any-user.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead @@ -27,85 +27,93 @@ // This is a public protocol, and changes require client cooperation -struct RPacket0x7530_Fixed +struct RPacket_0x7530_Fixed { - uint16_t packet_id; + using NetType = NetRPacket_0x7530_Fixed; + static const uint16_t PACKET_ID = 0x7530; + + uint16_t magic_packet_id = PACKET_ID; +}; +struct SPacket_0x7531_Fixed +{ + using NetType = NetSPacket_0x7531_Fixed; + static const uint16_t PACKET_ID = 0x7531; + + uint16_t magic_packet_id = PACKET_ID; + Version version = {}; +}; +struct RPacket_0x7532_Fixed +{ + using NetType = NetRPacket_0x7532_Fixed; + static const uint16_t PACKET_ID = 0x7532; + + uint16_t magic_packet_id = PACKET_ID; +}; + +struct NetRPacket_0x7530_Fixed +{ + Little16 magic_packet_id; +}; +static_assert(offsetof(NetRPacket_0x7530_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7530_Fixed, magic_packet_id) == 0"); +static_assert(sizeof(NetRPacket_0x7530_Fixed) == 2, "sizeof(NetRPacket_0x7530_Fixed) == 2"); +struct NetSPacket_0x7531_Fixed +{ + Little16 magic_packet_id; + NetVersion version; }; -struct NetRPacket0x7530_Fixed +static_assert(offsetof(NetSPacket_0x7531_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7531_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7531_Fixed, version) == 2, "offsetof(NetSPacket_0x7531_Fixed, version) == 2"); +static_assert(sizeof(NetSPacket_0x7531_Fixed) == 10, "sizeof(NetSPacket_0x7531_Fixed) == 10"); +struct NetRPacket_0x7532_Fixed { - Little16 packet_id; + Little16 magic_packet_id; }; -static_assert(offsetof(NetRPacket0x7530_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7530_Fixed, packet_id) == 0"); -static_assert(sizeof(NetRPacket0x7530_Fixed) == 2, "sizeof(NetRPacket0x7530_Fixed) == 2"); +static_assert(offsetof(NetRPacket_0x7532_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7532_Fixed, magic_packet_id) == 0"); +static_assert(sizeof(NetRPacket_0x7532_Fixed) == 2, "sizeof(NetRPacket_0x7532_Fixed) == 2"); + inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7530_Fixed *network, RPacket0x7530_Fixed native) +bool native_to_network(NetRPacket_0x7530_Fixed *network, RPacket_0x7530_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7530_Fixed *native, NetRPacket0x7530_Fixed network) +bool network_to_native(RPacket_0x7530_Fixed *native, NetRPacket_0x7530_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); return rv; } - -struct SPacket0x7531_Fixed -{ - uint16_t packet_id; - Version version; -}; -struct NetSPacket0x7531_Fixed -{ - Little16 packet_id; - NetVersion version; -}; -static_assert(offsetof(NetSPacket0x7531_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7531_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7531_Fixed, version) == 2, "offsetof(NetSPacket0x7531_Fixed, version) == 2"); -static_assert(sizeof(NetSPacket0x7531_Fixed) == 10, "sizeof(NetSPacket0x7531_Fixed) == 10"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7531_Fixed *network, SPacket0x7531_Fixed native) +bool native_to_network(NetSPacket_0x7531_Fixed *network, SPacket_0x7531_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->version, native.version); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7531_Fixed *native, NetSPacket0x7531_Fixed network) +bool network_to_native(SPacket_0x7531_Fixed *native, NetSPacket_0x7531_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->version, network.version); return rv; } - -struct RPacket0x7532_Fixed -{ - uint16_t packet_id; -}; -struct NetRPacket0x7532_Fixed -{ - Little16 packet_id; -}; -static_assert(offsetof(NetRPacket0x7532_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7532_Fixed, packet_id) == 0"); -static_assert(sizeof(NetRPacket0x7532_Fixed) == 2, "sizeof(NetRPacket0x7532_Fixed) == 2"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7532_Fixed *network, RPacket0x7532_Fixed native) +bool native_to_network(NetRPacket_0x7532_Fixed *network, RPacket_0x7532_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7532_Fixed *native, NetRPacket0x7532_Fixed network) +bool network_to_native(RPacket_0x7532_Fixed *native, NetRPacket_0x7532_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); return rv; } - #endif // TMWA_PROTO2_ANY_USER_HPP diff --git a/src/proto2/any-user_test.cpp b/src/proto2/any-user_test.cpp index 5096d24..5f9747c 100644 --- a/src/proto2/any-user_test.cpp +++ b/src/proto2/any-user_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead diff --git a/src/proto2/char-map.hpp b/src/proto2/char-map.hpp index 3caa2df..83f13a7 100644 --- a/src/proto2/char-map.hpp +++ b/src/proto2/char-map.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead @@ -28,4 +28,6 @@ // This is an internal protocol, and can be changed without notice + + #endif // TMWA_PROTO2_CHAR_MAP_HPP diff --git a/src/proto2/char-map_test.cpp b/src/proto2/char-map_test.cpp index 1b6ccb1..e941f1a 100644 --- a/src/proto2/char-map_test.cpp +++ b/src/proto2/char-map_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead diff --git a/src/proto2/char-user.hpp b/src/proto2/char-user.hpp index d85d768..b31d9f1 100644 --- a/src/proto2/char-user.hpp +++ b/src/proto2/char-user.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead @@ -28,4 +28,6 @@ // This is a public protocol, and changes require client cooperation + + #endif // TMWA_PROTO2_CHAR_USER_HPP diff --git a/src/proto2/char-user_test.cpp b/src/proto2/char-user_test.cpp index 952d196..696b6e4 100644 --- a/src/proto2/char-user_test.cpp +++ b/src/proto2/char-user_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead diff --git a/src/proto2/fwd.hpp b/src/proto2/fwd.hpp index 023ebe5..a18d0ef 100644 --- a/src/proto2/fwd.hpp +++ b/src/proto2/fwd.hpp @@ -7,20 +7,184 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. # include "../sanity.hpp" -// TODO put stuff here +struct RPacket_0x2709_Fixed; +struct NetRPacket_0x2709_Fixed; +struct RPacket_0x2712_Fixed; +struct NetRPacket_0x2712_Fixed; +struct SPacket_0x2713_Fixed; +struct NetSPacket_0x2713_Fixed; +struct RPacket_0x2714_Fixed; +struct NetRPacket_0x2714_Fixed; +struct RPacket_0x2715_Fixed; +struct NetRPacket_0x2715_Fixed; +struct RPacket_0x2716_Fixed; +struct NetRPacket_0x2716_Fixed; +struct SPacket_0x2717_Fixed; +struct NetSPacket_0x2717_Fixed; +struct RPacket_0x2720_Head; +struct NetRPacket_0x2720_Head; +struct RPacket_0x2720_Repeat; +struct NetRPacket_0x2720_Repeat; +struct SPacket_0x2721_Fixed; +struct NetSPacket_0x2721_Fixed; +struct RPacket_0x2722_Fixed; +struct NetRPacket_0x2722_Fixed; +struct SPacket_0x2723_Fixed; +struct NetSPacket_0x2723_Fixed; +struct RPacket_0x2724_Fixed; +struct NetRPacket_0x2724_Fixed; +struct RPacket_0x2725_Fixed; +struct NetRPacket_0x2725_Fixed; +struct RPacket_0x2727_Fixed; +struct NetRPacket_0x2727_Fixed; +struct RPacket_0x2728_Head; +struct NetRPacket_0x2728_Head; +struct RPacket_0x2728_Repeat; +struct NetRPacket_0x2728_Repeat; +struct SPacket_0x2729_Head; +struct NetSPacket_0x2729_Head; +struct SPacket_0x2729_Repeat; +struct NetSPacket_0x2729_Repeat; +struct RPacket_0x272a_Fixed; +struct NetRPacket_0x272a_Fixed; +struct SPacket_0x2730_Fixed; +struct NetSPacket_0x2730_Fixed; +struct SPacket_0x2731_Fixed; +struct NetSPacket_0x2731_Fixed; +struct SPacket_0x2732_Head; +struct NetSPacket_0x2732_Head; +struct SPacket_0x2732_Repeat; +struct NetSPacket_0x2732_Repeat; +struct RPacket_0x2740_Fixed; +struct NetRPacket_0x2740_Fixed; +struct SPacket_0x2741_Fixed; +struct NetSPacket_0x2741_Fixed; + +struct SPacket_0x2726_Head; +struct NetSPacket_0x2726_Head; +struct SPacket_0x2726_Repeat; +struct NetSPacket_0x2726_Repeat; +struct RPacket_0x7920_Fixed; +struct NetRPacket_0x7920_Fixed; +struct SPacket_0x7921_Head; +struct NetSPacket_0x7921_Head; +struct SPacket_0x7921_Repeat; +struct NetSPacket_0x7921_Repeat; +struct RPacket_0x7924_Fixed; +struct NetRPacket_0x7924_Fixed; +struct SPacket_0x7925_Fixed; +struct NetSPacket_0x7925_Fixed; +struct RPacket_0x7930_Fixed; +struct NetRPacket_0x7930_Fixed; +struct SPacket_0x7931_Fixed; +struct NetSPacket_0x7931_Fixed; +struct RPacket_0x7932_Fixed; +struct NetRPacket_0x7932_Fixed; +struct SPacket_0x7933_Fixed; +struct NetSPacket_0x7933_Fixed; +struct RPacket_0x7934_Fixed; +struct NetRPacket_0x7934_Fixed; +struct SPacket_0x7935_Fixed; +struct NetSPacket_0x7935_Fixed; +struct RPacket_0x7936_Fixed; +struct NetRPacket_0x7936_Fixed; +struct SPacket_0x7937_Fixed; +struct NetSPacket_0x7937_Fixed; +struct RPacket_0x7938_Fixed; +struct NetRPacket_0x7938_Fixed; +struct SPacket_0x7939_Head; +struct NetSPacket_0x7939_Head; +struct SPacket_0x7939_Repeat; +struct NetSPacket_0x7939_Repeat; +struct RPacket_0x793a_Fixed; +struct NetRPacket_0x793a_Fixed; +struct SPacket_0x793b_Fixed; +struct NetSPacket_0x793b_Fixed; +struct RPacket_0x793c_Fixed; +struct NetRPacket_0x793c_Fixed; +struct SPacket_0x793d_Fixed; +struct NetSPacket_0x793d_Fixed; +struct RPacket_0x793e_Fixed; +struct NetRPacket_0x793e_Fixed; +struct SPacket_0x793f_Fixed; +struct NetSPacket_0x793f_Fixed; +struct RPacket_0x7940_Fixed; +struct NetRPacket_0x7940_Fixed; +struct SPacket_0x7941_Fixed; +struct NetSPacket_0x7941_Fixed; +struct RPacket_0x7942_Head; +struct NetRPacket_0x7942_Head; +struct RPacket_0x7942_Repeat; +struct NetRPacket_0x7942_Repeat; +struct SPacket_0x7943_Fixed; +struct NetSPacket_0x7943_Fixed; +struct RPacket_0x7944_Fixed; +struct NetRPacket_0x7944_Fixed; +struct SPacket_0x7945_Fixed; +struct NetSPacket_0x7945_Fixed; +struct RPacket_0x7946_Fixed; +struct NetRPacket_0x7946_Fixed; +struct SPacket_0x7947_Fixed; +struct NetSPacket_0x7947_Fixed; +struct RPacket_0x7948_Fixed; +struct NetRPacket_0x7948_Fixed; +struct SPacket_0x7949_Fixed; +struct NetSPacket_0x7949_Fixed; +struct RPacket_0x794a_Fixed; +struct NetRPacket_0x794a_Fixed; +struct SPacket_0x794b_Fixed; +struct NetSPacket_0x794b_Fixed; +struct RPacket_0x794c_Fixed; +struct NetRPacket_0x794c_Fixed; +struct SPacket_0x794d_Fixed; +struct NetSPacket_0x794d_Fixed; +struct RPacket_0x794e_Head; +struct NetRPacket_0x794e_Head; +struct RPacket_0x794e_Repeat; +struct NetRPacket_0x794e_Repeat; +struct SPacket_0x794f_Fixed; +struct NetSPacket_0x794f_Fixed; +struct RPacket_0x7950_Fixed; +struct NetRPacket_0x7950_Fixed; +struct SPacket_0x7951_Fixed; +struct NetSPacket_0x7951_Fixed; +struct RPacket_0x7952_Fixed; +struct NetRPacket_0x7952_Fixed; +struct SPacket_0x7953_Head; +struct NetSPacket_0x7953_Head; +struct SPacket_0x7953_Repeat; +struct NetSPacket_0x7953_Repeat; +struct RPacket_0x7954_Fixed; +struct NetRPacket_0x7954_Fixed; +struct RPacket_0x7955_Fixed; +struct NetRPacket_0x7955_Fixed; + + + + +struct SPacket_0x0212_Fixed; +struct NetSPacket_0x0212_Fixed; + +struct RPacket_0x7530_Fixed; +struct NetRPacket_0x7530_Fixed; +struct SPacket_0x7531_Fixed; +struct NetSPacket_0x7531_Fixed; +struct RPacket_0x7532_Fixed; +struct NetRPacket_0x7532_Fixed; + #endif // TMWA_PROTO2_FWD_HPP diff --git a/src/proto2/include_cstdint_test.cpp b/src/proto2/include_cstdint_test.cpp index a067574..7462057 100644 --- a/src/proto2/include_cstdint_test.cpp +++ b/src/proto2/include_cstdint_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_enums_test.cpp b/src/proto2/include_enums_test.cpp index a335c81..2b9ed36 100644 --- a/src/proto2/include_enums_test.cpp +++ b/src/proto2/include_enums_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_human_time_diff_test.cpp b/src/proto2/include_human_time_diff_test.cpp index 25a111d..3a5cc49 100644 --- a/src/proto2/include_human_time_diff_test.cpp +++ b/src/proto2/include_human_time_diff_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_ids_test.cpp b/src/proto2/include_ids_test.cpp index 63e1753..7dc26dc 100644 --- a/src/proto2/include_ids_test.cpp +++ b/src/proto2/include_ids_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_ip_test.cpp b/src/proto2/include_ip_test.cpp index bae7c3a..a489d9a 100644 --- a/src/proto2/include_ip_test.cpp +++ b/src/proto2/include_ip_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_little_test.cpp b/src/proto2/include_little_test.cpp index 70cb5d2..5e62b33 100644 --- a/src/proto2/include_little_test.cpp +++ b/src/proto2/include_little_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_strs_test.cpp b/src/proto2/include_strs_test.cpp index 1087f3a..5bf516c 100644 --- a/src/proto2/include_strs_test.cpp +++ b/src/proto2/include_strs_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_utils_test.cpp b/src/proto2/include_utils_test.cpp index 840ed5f..106bb59 100644 --- a/src/proto2/include_utils_test.cpp +++ b/src/proto2/include_utils_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_version_test.cpp b/src/proto2/include_version_test.cpp index d635efc..ed31f49 100644 --- a/src/proto2/include_version_test.cpp +++ b/src/proto2/include_version_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/include_vstring_test.cpp b/src/proto2/include_vstring_test.cpp index f415127..24504ed 100644 --- a/src/proto2/include_vstring_test.cpp +++ b/src/proto2/include_vstring_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../poison.hpp" diff --git a/src/proto2/login-admin.hpp b/src/proto2/login-admin.hpp index 635ed44..005ecfc 100644 --- a/src/proto2/login-admin.hpp +++ b/src/proto2/login-admin.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead @@ -27,183 +27,1016 @@ // This is an internal protocol, and can be changed without notice -struct RPacket0x2726_Head +struct SPacket_0x2726_Head { - uint16_t packet_id; - uint16_t unused; - uint32_t string_length; + using NetType = NetSPacket_0x2726_Head; + static const uint16_t PACKET_ID = 0x2726; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t unused = {}; + uint32_t magic_packet_length = {}; }; -struct NetRPacket0x2726_Head +struct SPacket_0x2726_Repeat { - Little16 packet_id; - Little16 unused; - Little32 string_length; + using NetType = NetSPacket_0x2726_Repeat; + static const uint16_t PACKET_ID = 0x2726; + + uint8_t c = {}; }; -static_assert(offsetof(NetRPacket0x2726_Head, packet_id) == 0, "offsetof(NetRPacket0x2726_Head, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2726_Head, unused) == 2, "offsetof(NetRPacket0x2726_Head, unused) == 2"); -static_assert(offsetof(NetRPacket0x2726_Head, string_length) == 4, "offsetof(NetRPacket0x2726_Head, string_length) == 4"); -static_assert(sizeof(NetRPacket0x2726_Head) == 8, "sizeof(NetRPacket0x2726_Head) == 8"); -inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2726_Head *network, RPacket0x2726_Head native) +struct RPacket_0x7920_Fixed { - bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->unused, native.unused); - rv &= native_to_network(&network->string_length, native.string_length); - return rv; -} -inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2726_Head *native, NetRPacket0x2726_Head network) + using NetType = NetRPacket_0x7920_Fixed; + static const uint16_t PACKET_ID = 0x7920; + + uint16_t magic_packet_id = PACKET_ID; + AccountId start_account_id = {}; + AccountId end_account_id = {}; +}; +struct SPacket_0x7921_Head { - bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->unused, network.unused); - rv &= network_to_native(&native->string_length, network.string_length); - return rv; -} + using NetType = NetSPacket_0x7921_Head; + static const uint16_t PACKET_ID = 0x7921; -struct RPacket0x2726_Repeat + uint16_t magic_packet_id = PACKET_ID; + uint16_t magic_packet_length = {}; +}; +struct SPacket_0x7921_Repeat { - uint8_t c; + using NetType = NetSPacket_0x7921_Repeat; + static const uint16_t PACKET_ID = 0x7921; + + AccountId account_id = {}; + GmLevel gm_level = {}; + AccountName account_name = {}; + SEX sex = {}; + uint32_t login_count = {}; + uint32_t status = {}; }; -struct NetRPacket0x2726_Repeat +struct RPacket_0x7924_Fixed { - Byte c; + using NetType = NetRPacket_0x7924_Fixed; + static const uint16_t PACKET_ID = 0x7924; + + uint16_t magic_packet_id = PACKET_ID; + ItemNameId source_item_id = {}; + ItemNameId dest_item_id = {}; }; -static_assert(offsetof(NetRPacket0x2726_Repeat, c) == 0, "offsetof(NetRPacket0x2726_Repeat, c) == 0"); -static_assert(sizeof(NetRPacket0x2726_Repeat) == 1, "sizeof(NetRPacket0x2726_Repeat) == 1"); -inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2726_Repeat *network, RPacket0x2726_Repeat native) +struct SPacket_0x7925_Fixed { - bool rv = true; - rv &= native_to_network(&network->c, native.c); - return rv; -} -inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2726_Repeat *native, NetRPacket0x2726_Repeat network) + using NetType = NetSPacket_0x7925_Fixed; + static const uint16_t PACKET_ID = 0x7925; + + uint16_t magic_packet_id = PACKET_ID; +}; +struct RPacket_0x7930_Fixed { - bool rv = true; - rv &= network_to_native(&native->c, network.c); - return rv; -} + using NetType = NetRPacket_0x7930_Fixed; + static const uint16_t PACKET_ID = 0x7930; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + AccountPass password = {}; + SEX sex = {}; + AccountEmail email = {}; +}; +struct SPacket_0x7931_Fixed +{ + using NetType = NetSPacket_0x7931_Fixed; + static const uint16_t PACKET_ID = 0x7931; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7932_Fixed +{ + using NetType = NetRPacket_0x7932_Fixed; + static const uint16_t PACKET_ID = 0x7932; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; +}; +struct SPacket_0x7933_Fixed +{ + using NetType = NetSPacket_0x7933_Fixed; + static const uint16_t PACKET_ID = 0x7933; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7934_Fixed +{ + using NetType = NetRPacket_0x7934_Fixed; + static const uint16_t PACKET_ID = 0x7934; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + AccountPass password = {}; +}; +struct SPacket_0x7935_Fixed +{ + using NetType = NetSPacket_0x7935_Fixed; + static const uint16_t PACKET_ID = 0x7935; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7936_Fixed +{ + using NetType = NetRPacket_0x7936_Fixed; + static const uint16_t PACKET_ID = 0x7936; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + uint32_t status = {}; + timestamp_seconds_buffer error_message = {}; +}; +struct SPacket_0x7937_Fixed +{ + using NetType = NetSPacket_0x7937_Fixed; + static const uint16_t PACKET_ID = 0x7937; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; + uint32_t status = {}; +}; +struct RPacket_0x7938_Fixed +{ + using NetType = NetRPacket_0x7938_Fixed; + static const uint16_t PACKET_ID = 0x7938; + + uint16_t magic_packet_id = PACKET_ID; +}; +struct SPacket_0x7939_Head +{ + using NetType = NetSPacket_0x7939_Head; + static const uint16_t PACKET_ID = 0x7939; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t magic_packet_length = {}; +}; +struct SPacket_0x7939_Repeat +{ + using NetType = NetSPacket_0x7939_Repeat; + static const uint16_t PACKET_ID = 0x7939; + + IP4Address ip = {}; + uint16_t port = {}; + ServerName name = {}; + uint16_t users = {}; + uint16_t maintenance = {}; + uint16_t is_new = {}; +}; +struct RPacket_0x793a_Fixed +{ + using NetType = NetRPacket_0x793a_Fixed; + static const uint16_t PACKET_ID = 0x793a; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + AccountPass password = {}; +}; +struct SPacket_0x793b_Fixed +{ + using NetType = NetSPacket_0x793b_Fixed; + static const uint16_t PACKET_ID = 0x793b; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x793c_Fixed +{ + using NetType = NetRPacket_0x793c_Fixed; + static const uint16_t PACKET_ID = 0x793c; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + SEX sex = {}; +}; +struct SPacket_0x793d_Fixed +{ + using NetType = NetSPacket_0x793d_Fixed; + static const uint16_t PACKET_ID = 0x793d; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x793e_Fixed +{ + using NetType = NetRPacket_0x793e_Fixed; + static const uint16_t PACKET_ID = 0x793e; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + GmLevel gm_level = {}; +}; +struct SPacket_0x793f_Fixed +{ + using NetType = NetSPacket_0x793f_Fixed; + static const uint16_t PACKET_ID = 0x793f; -struct RPacket0x7920_Head + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7940_Fixed { - uint16_t packet_id; - uint32_t start_account_id; - uint32_t end_account_id; + using NetType = NetRPacket_0x7940_Fixed; + static const uint16_t PACKET_ID = 0x7940; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + AccountEmail email = {}; }; -struct NetRPacket0x7920_Head +struct SPacket_0x7941_Fixed { - Little16 packet_id; + using NetType = NetSPacket_0x7941_Fixed; + static const uint16_t PACKET_ID = 0x7941; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7942_Head +{ + using NetType = NetRPacket_0x7942_Head; + static const uint16_t PACKET_ID = 0x7942; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + uint16_t magic_packet_length = {}; +}; +struct RPacket_0x7942_Repeat +{ + using NetType = NetRPacket_0x7942_Repeat; + static const uint16_t PACKET_ID = 0x7942; + + uint8_t c = {}; +}; +struct SPacket_0x7943_Fixed +{ + using NetType = NetSPacket_0x7943_Fixed; + static const uint16_t PACKET_ID = 0x7943; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7944_Fixed +{ + using NetType = NetRPacket_0x7944_Fixed; + static const uint16_t PACKET_ID = 0x7944; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; +}; +struct SPacket_0x7945_Fixed +{ + using NetType = NetSPacket_0x7945_Fixed; + static const uint16_t PACKET_ID = 0x7945; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7946_Fixed +{ + using NetType = NetRPacket_0x7946_Fixed; + static const uint16_t PACKET_ID = 0x7946; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; +}; +struct SPacket_0x7947_Fixed +{ + using NetType = NetSPacket_0x7947_Fixed; + static const uint16_t PACKET_ID = 0x7947; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; +}; +struct RPacket_0x7948_Fixed +{ + using NetType = NetRPacket_0x7948_Fixed; + static const uint16_t PACKET_ID = 0x7948; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + TimeT valid_until = {}; +}; +struct SPacket_0x7949_Fixed +{ + using NetType = NetSPacket_0x7949_Fixed; + static const uint16_t PACKET_ID = 0x7949; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; + TimeT valid_until = {}; +}; +struct RPacket_0x794a_Fixed +{ + using NetType = NetRPacket_0x794a_Fixed; + static const uint16_t PACKET_ID = 0x794a; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + TimeT ban_until = {}; +}; +struct SPacket_0x794b_Fixed +{ + using NetType = NetSPacket_0x794b_Fixed; + static const uint16_t PACKET_ID = 0x794b; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; + TimeT ban_until = {}; +}; +struct RPacket_0x794c_Fixed +{ + using NetType = NetRPacket_0x794c_Fixed; + static const uint16_t PACKET_ID = 0x794c; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + HumanTimeDiff ban_add = {}; +}; +struct SPacket_0x794d_Fixed +{ + using NetType = NetSPacket_0x794d_Fixed; + static const uint16_t PACKET_ID = 0x794d; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; + TimeT ban_until = {}; +}; +struct RPacket_0x794e_Head +{ + using NetType = NetRPacket_0x794e_Head; + static const uint16_t PACKET_ID = 0x794e; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t unused = {}; + uint32_t magic_packet_length = {}; +}; +struct RPacket_0x794e_Repeat +{ + using NetType = NetRPacket_0x794e_Repeat; + static const uint16_t PACKET_ID = 0x794e; + + uint8_t c = {}; +}; +struct SPacket_0x794f_Fixed +{ + using NetType = NetSPacket_0x794f_Fixed; + static const uint16_t PACKET_ID = 0x794f; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t error = {}; +}; +struct RPacket_0x7950_Fixed +{ + using NetType = NetRPacket_0x7950_Fixed; + static const uint16_t PACKET_ID = 0x7950; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; + HumanTimeDiff valid_add = {}; +}; +struct SPacket_0x7951_Fixed +{ + using NetType = NetSPacket_0x7951_Fixed; + static const uint16_t PACKET_ID = 0x7951; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountName account_name = {}; + TimeT valid_until = {}; +}; +struct RPacket_0x7952_Fixed +{ + using NetType = NetRPacket_0x7952_Fixed; + static const uint16_t PACKET_ID = 0x7952; + + uint16_t magic_packet_id = PACKET_ID; + AccountName account_name = {}; +}; +struct SPacket_0x7953_Head +{ + using NetType = NetSPacket_0x7953_Head; + static const uint16_t PACKET_ID = 0x7953; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + GmLevel gm_level = {}; + AccountName account_name = {}; + SEX sex = {}; + uint32_t login_count = {}; + uint32_t state = {}; + timestamp_seconds_buffer error_message = {}; + timestamp_milliseconds_buffer last_login_string = {}; + VString<15> ip_string = {}; + AccountEmail email = {}; + TimeT connect_until = {}; + TimeT ban_until = {}; + uint16_t magic_packet_length = {}; +}; +struct SPacket_0x7953_Repeat +{ + using NetType = NetSPacket_0x7953_Repeat; + static const uint16_t PACKET_ID = 0x7953; + + uint8_t c = {}; +}; +struct RPacket_0x7954_Fixed +{ + using NetType = NetRPacket_0x7954_Fixed; + static const uint16_t PACKET_ID = 0x7954; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; +}; +struct RPacket_0x7955_Fixed +{ + using NetType = NetRPacket_0x7955_Fixed; + static const uint16_t PACKET_ID = 0x7955; + + uint16_t magic_packet_id = PACKET_ID; +}; + +struct NetSPacket_0x2726_Head +{ + Little16 magic_packet_id; + Little16 unused; + SkewedLength<Little32, 8> magic_packet_length; +}; +static_assert(offsetof(NetSPacket_0x2726_Head, magic_packet_id) == 0, "offsetof(NetSPacket_0x2726_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2726_Head, unused) == 2, "offsetof(NetSPacket_0x2726_Head, unused) == 2"); +static_assert(offsetof(NetSPacket_0x2726_Head, magic_packet_length) == 4, "offsetof(NetSPacket_0x2726_Head, magic_packet_length) == 4"); +static_assert(sizeof(NetSPacket_0x2726_Head) == 8, "sizeof(NetSPacket_0x2726_Head) == 8"); +struct NetSPacket_0x2726_Repeat +{ + Byte c; +}; +static_assert(offsetof(NetSPacket_0x2726_Repeat, c) == 0, "offsetof(NetSPacket_0x2726_Repeat, c) == 0"); +static_assert(sizeof(NetSPacket_0x2726_Repeat) == 1, "sizeof(NetSPacket_0x2726_Repeat) == 1"); +struct NetRPacket_0x7920_Fixed +{ + Little16 magic_packet_id; Little32 start_account_id; Little32 end_account_id; }; -static_assert(offsetof(NetRPacket0x7920_Head, packet_id) == 0, "offsetof(NetRPacket0x7920_Head, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7920_Head, start_account_id) == 2, "offsetof(NetRPacket0x7920_Head, start_account_id) == 2"); -static_assert(offsetof(NetRPacket0x7920_Head, end_account_id) == 6, "offsetof(NetRPacket0x7920_Head, end_account_id) == 6"); -static_assert(sizeof(NetRPacket0x7920_Head) == 10, "sizeof(NetRPacket0x7920_Head) == 10"); +static_assert(offsetof(NetRPacket_0x7920_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7920_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7920_Fixed, start_account_id) == 2, "offsetof(NetRPacket_0x7920_Fixed, start_account_id) == 2"); +static_assert(offsetof(NetRPacket_0x7920_Fixed, end_account_id) == 6, "offsetof(NetRPacket_0x7920_Fixed, end_account_id) == 6"); +static_assert(sizeof(NetRPacket_0x7920_Fixed) == 10, "sizeof(NetRPacket_0x7920_Fixed) == 10"); +struct NetSPacket_0x7921_Head +{ + Little16 magic_packet_id; + Little16 magic_packet_length; +}; +static_assert(offsetof(NetSPacket_0x7921_Head, magic_packet_id) == 0, "offsetof(NetSPacket_0x7921_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7921_Head, magic_packet_length) == 2, "offsetof(NetSPacket_0x7921_Head, magic_packet_length) == 2"); +static_assert(sizeof(NetSPacket_0x7921_Head) == 4, "sizeof(NetSPacket_0x7921_Head) == 4"); +struct NetSPacket_0x7921_Repeat +{ + Little32 account_id; + Byte gm_level; + NetString<sizeof(AccountName)> account_name; + Byte sex; + Little32 login_count; + Little32 status; +}; +static_assert(offsetof(NetSPacket_0x7921_Repeat, account_id) == 0, "offsetof(NetSPacket_0x7921_Repeat, account_id) == 0"); +static_assert(offsetof(NetSPacket_0x7921_Repeat, gm_level) == 4, "offsetof(NetSPacket_0x7921_Repeat, gm_level) == 4"); +static_assert(offsetof(NetSPacket_0x7921_Repeat, account_name) == 5, "offsetof(NetSPacket_0x7921_Repeat, account_name) == 5"); +static_assert(offsetof(NetSPacket_0x7921_Repeat, sex) == 29, "offsetof(NetSPacket_0x7921_Repeat, sex) == 29"); +static_assert(offsetof(NetSPacket_0x7921_Repeat, login_count) == 30, "offsetof(NetSPacket_0x7921_Repeat, login_count) == 30"); +static_assert(offsetof(NetSPacket_0x7921_Repeat, status) == 34, "offsetof(NetSPacket_0x7921_Repeat, status) == 34"); +static_assert(sizeof(NetSPacket_0x7921_Repeat) == 38, "sizeof(NetSPacket_0x7921_Repeat) == 38"); +struct NetRPacket_0x7924_Fixed +{ + Little16 magic_packet_id; + Little32 source_item_id; + Little32 dest_item_id; +}; +static_assert(offsetof(NetRPacket_0x7924_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7924_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7924_Fixed, source_item_id) == 2, "offsetof(NetRPacket_0x7924_Fixed, source_item_id) == 2"); +static_assert(offsetof(NetRPacket_0x7924_Fixed, dest_item_id) == 6, "offsetof(NetRPacket_0x7924_Fixed, dest_item_id) == 6"); +static_assert(sizeof(NetRPacket_0x7924_Fixed) == 10, "sizeof(NetRPacket_0x7924_Fixed) == 10"); +struct NetSPacket_0x7925_Fixed +{ + Little16 magic_packet_id; +}; +static_assert(offsetof(NetSPacket_0x7925_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7925_Fixed, magic_packet_id) == 0"); +static_assert(sizeof(NetSPacket_0x7925_Fixed) == 2, "sizeof(NetSPacket_0x7925_Fixed) == 2"); +struct NetRPacket_0x7930_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + NetString<sizeof(AccountPass)> password; + char sex; + NetString<sizeof(AccountEmail)> email; +}; +static_assert(offsetof(NetRPacket_0x7930_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7930_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7930_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7930_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x7930_Fixed, password) == 26, "offsetof(NetRPacket_0x7930_Fixed, password) == 26"); +static_assert(offsetof(NetRPacket_0x7930_Fixed, sex) == 50, "offsetof(NetRPacket_0x7930_Fixed, sex) == 50"); +static_assert(offsetof(NetRPacket_0x7930_Fixed, email) == 51, "offsetof(NetRPacket_0x7930_Fixed, email) == 51"); +static_assert(sizeof(NetRPacket_0x7930_Fixed) == 91, "sizeof(NetRPacket_0x7930_Fixed) == 91"); +struct NetSPacket_0x7931_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x7931_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7931_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7931_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7931_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7931_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7931_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x7931_Fixed) == 30, "sizeof(NetSPacket_0x7931_Fixed) == 30"); +struct NetRPacket_0x7932_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetRPacket_0x7932_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7932_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7932_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7932_Fixed, account_name) == 2"); +static_assert(sizeof(NetRPacket_0x7932_Fixed) == 26, "sizeof(NetRPacket_0x7932_Fixed) == 26"); +struct NetSPacket_0x7933_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x7933_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7933_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7933_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7933_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7933_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7933_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x7933_Fixed) == 30, "sizeof(NetSPacket_0x7933_Fixed) == 30"); +struct NetRPacket_0x7934_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + NetString<sizeof(AccountPass)> password; +}; +static_assert(offsetof(NetRPacket_0x7934_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7934_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7934_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7934_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x7934_Fixed, password) == 26, "offsetof(NetRPacket_0x7934_Fixed, password) == 26"); +static_assert(sizeof(NetRPacket_0x7934_Fixed) == 50, "sizeof(NetRPacket_0x7934_Fixed) == 50"); +struct NetSPacket_0x7935_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x7935_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7935_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7935_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7935_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7935_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7935_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x7935_Fixed) == 30, "sizeof(NetSPacket_0x7935_Fixed) == 30"); +struct NetRPacket_0x7936_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + Little32 status; + NetString<sizeof(timestamp_seconds_buffer)> error_message; +}; +static_assert(offsetof(NetRPacket_0x7936_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7936_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7936_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7936_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x7936_Fixed, status) == 26, "offsetof(NetRPacket_0x7936_Fixed, status) == 26"); +static_assert(offsetof(NetRPacket_0x7936_Fixed, error_message) == 30, "offsetof(NetRPacket_0x7936_Fixed, error_message) == 30"); +static_assert(sizeof(NetRPacket_0x7936_Fixed) == 50, "sizeof(NetRPacket_0x7936_Fixed) == 50"); +struct NetSPacket_0x7937_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; + Little32 status; +}; +static_assert(offsetof(NetSPacket_0x7937_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7937_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7937_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7937_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7937_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7937_Fixed, account_name) == 6"); +static_assert(offsetof(NetSPacket_0x7937_Fixed, status) == 30, "offsetof(NetSPacket_0x7937_Fixed, status) == 30"); +static_assert(sizeof(NetSPacket_0x7937_Fixed) == 34, "sizeof(NetSPacket_0x7937_Fixed) == 34"); +struct NetRPacket_0x7938_Fixed +{ + Little16 magic_packet_id; +}; +static_assert(offsetof(NetRPacket_0x7938_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7938_Fixed, magic_packet_id) == 0"); +static_assert(sizeof(NetRPacket_0x7938_Fixed) == 2, "sizeof(NetRPacket_0x7938_Fixed) == 2"); +struct NetSPacket_0x7939_Head +{ + Little16 magic_packet_id; + Little16 magic_packet_length; +}; +static_assert(offsetof(NetSPacket_0x7939_Head, magic_packet_id) == 0, "offsetof(NetSPacket_0x7939_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7939_Head, magic_packet_length) == 2, "offsetof(NetSPacket_0x7939_Head, magic_packet_length) == 2"); +static_assert(sizeof(NetSPacket_0x7939_Head) == 4, "sizeof(NetSPacket_0x7939_Head) == 4"); +struct NetSPacket_0x7939_Repeat +{ + IP4Address ip; + Little16 port; + NetString<sizeof(ServerName)> name; + Little16 users; + Little16 maintenance; + Little16 is_new; +}; +static_assert(offsetof(NetSPacket_0x7939_Repeat, ip) == 0, "offsetof(NetSPacket_0x7939_Repeat, ip) == 0"); +static_assert(offsetof(NetSPacket_0x7939_Repeat, port) == 4, "offsetof(NetSPacket_0x7939_Repeat, port) == 4"); +static_assert(offsetof(NetSPacket_0x7939_Repeat, name) == 6, "offsetof(NetSPacket_0x7939_Repeat, name) == 6"); +static_assert(offsetof(NetSPacket_0x7939_Repeat, users) == 26, "offsetof(NetSPacket_0x7939_Repeat, users) == 26"); +static_assert(offsetof(NetSPacket_0x7939_Repeat, maintenance) == 28, "offsetof(NetSPacket_0x7939_Repeat, maintenance) == 28"); +static_assert(offsetof(NetSPacket_0x7939_Repeat, is_new) == 30, "offsetof(NetSPacket_0x7939_Repeat, is_new) == 30"); +static_assert(sizeof(NetSPacket_0x7939_Repeat) == 32, "sizeof(NetSPacket_0x7939_Repeat) == 32"); +struct NetRPacket_0x793a_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + NetString<sizeof(AccountPass)> password; +}; +static_assert(offsetof(NetRPacket_0x793a_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x793a_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x793a_Fixed, account_name) == 2, "offsetof(NetRPacket_0x793a_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x793a_Fixed, password) == 26, "offsetof(NetRPacket_0x793a_Fixed, password) == 26"); +static_assert(sizeof(NetRPacket_0x793a_Fixed) == 50, "sizeof(NetRPacket_0x793a_Fixed) == 50"); +struct NetSPacket_0x793b_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x793b_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x793b_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x793b_Fixed, account_id) == 2, "offsetof(NetSPacket_0x793b_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x793b_Fixed, account_name) == 6, "offsetof(NetSPacket_0x793b_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x793b_Fixed) == 30, "sizeof(NetSPacket_0x793b_Fixed) == 30"); +struct NetRPacket_0x793c_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + char sex; +}; +static_assert(offsetof(NetRPacket_0x793c_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x793c_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x793c_Fixed, account_name) == 2, "offsetof(NetRPacket_0x793c_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x793c_Fixed, sex) == 26, "offsetof(NetRPacket_0x793c_Fixed, sex) == 26"); +static_assert(sizeof(NetRPacket_0x793c_Fixed) == 27, "sizeof(NetRPacket_0x793c_Fixed) == 27"); +struct NetSPacket_0x793d_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x793d_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x793d_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x793d_Fixed, account_id) == 2, "offsetof(NetSPacket_0x793d_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x793d_Fixed, account_name) == 6, "offsetof(NetSPacket_0x793d_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x793d_Fixed) == 30, "sizeof(NetSPacket_0x793d_Fixed) == 30"); +struct NetRPacket_0x793e_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + Byte gm_level; +}; +static_assert(offsetof(NetRPacket_0x793e_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x793e_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x793e_Fixed, account_name) == 2, "offsetof(NetRPacket_0x793e_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x793e_Fixed, gm_level) == 26, "offsetof(NetRPacket_0x793e_Fixed, gm_level) == 26"); +static_assert(sizeof(NetRPacket_0x793e_Fixed) == 27, "sizeof(NetRPacket_0x793e_Fixed) == 27"); +struct NetSPacket_0x793f_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x793f_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x793f_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x793f_Fixed, account_id) == 2, "offsetof(NetSPacket_0x793f_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x793f_Fixed, account_name) == 6, "offsetof(NetSPacket_0x793f_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x793f_Fixed) == 30, "sizeof(NetSPacket_0x793f_Fixed) == 30"); +struct NetRPacket_0x7940_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + NetString<sizeof(AccountEmail)> email; +}; +static_assert(offsetof(NetRPacket_0x7940_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7940_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7940_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7940_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x7940_Fixed, email) == 26, "offsetof(NetRPacket_0x7940_Fixed, email) == 26"); +static_assert(sizeof(NetRPacket_0x7940_Fixed) == 66, "sizeof(NetRPacket_0x7940_Fixed) == 66"); +struct NetSPacket_0x7941_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x7941_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7941_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7941_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7941_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7941_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7941_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x7941_Fixed) == 30, "sizeof(NetSPacket_0x7941_Fixed) == 30"); +struct NetRPacket_0x7942_Head +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + SkewedLength<Little16, 28> magic_packet_length; +}; +static_assert(offsetof(NetRPacket_0x7942_Head, magic_packet_id) == 0, "offsetof(NetRPacket_0x7942_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7942_Head, account_name) == 2, "offsetof(NetRPacket_0x7942_Head, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x7942_Head, magic_packet_length) == 26, "offsetof(NetRPacket_0x7942_Head, magic_packet_length) == 26"); +static_assert(sizeof(NetRPacket_0x7942_Head) == 28, "sizeof(NetRPacket_0x7942_Head) == 28"); +struct NetRPacket_0x7942_Repeat +{ + Byte c; +}; +static_assert(offsetof(NetRPacket_0x7942_Repeat, c) == 0, "offsetof(NetRPacket_0x7942_Repeat, c) == 0"); +static_assert(sizeof(NetRPacket_0x7942_Repeat) == 1, "sizeof(NetRPacket_0x7942_Repeat) == 1"); +struct NetSPacket_0x7943_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x7943_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7943_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7943_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7943_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7943_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7943_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x7943_Fixed) == 30, "sizeof(NetSPacket_0x7943_Fixed) == 30"); +struct NetRPacket_0x7944_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetRPacket_0x7944_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7944_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7944_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7944_Fixed, account_name) == 2"); +static_assert(sizeof(NetRPacket_0x7944_Fixed) == 26, "sizeof(NetRPacket_0x7944_Fixed) == 26"); +struct NetSPacket_0x7945_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x7945_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7945_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7945_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7945_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7945_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7945_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x7945_Fixed) == 30, "sizeof(NetSPacket_0x7945_Fixed) == 30"); +struct NetRPacket_0x7946_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; +}; +static_assert(offsetof(NetRPacket_0x7946_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7946_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7946_Fixed, account_id) == 2, "offsetof(NetRPacket_0x7946_Fixed, account_id) == 2"); +static_assert(sizeof(NetRPacket_0x7946_Fixed) == 6, "sizeof(NetRPacket_0x7946_Fixed) == 6"); +struct NetSPacket_0x7947_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetSPacket_0x7947_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7947_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7947_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7947_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7947_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7947_Fixed, account_name) == 6"); +static_assert(sizeof(NetSPacket_0x7947_Fixed) == 30, "sizeof(NetSPacket_0x7947_Fixed) == 30"); +struct NetRPacket_0x7948_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + Little32 valid_until; +}; +static_assert(offsetof(NetRPacket_0x7948_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7948_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7948_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7948_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x7948_Fixed, valid_until) == 26, "offsetof(NetRPacket_0x7948_Fixed, valid_until) == 26"); +static_assert(sizeof(NetRPacket_0x7948_Fixed) == 30, "sizeof(NetRPacket_0x7948_Fixed) == 30"); +struct NetSPacket_0x7949_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; + Little32 valid_until; +}; +static_assert(offsetof(NetSPacket_0x7949_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7949_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7949_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7949_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7949_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7949_Fixed, account_name) == 6"); +static_assert(offsetof(NetSPacket_0x7949_Fixed, valid_until) == 30, "offsetof(NetSPacket_0x7949_Fixed, valid_until) == 30"); +static_assert(sizeof(NetSPacket_0x7949_Fixed) == 34, "sizeof(NetSPacket_0x7949_Fixed) == 34"); +struct NetRPacket_0x794a_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + Little32 ban_until; +}; +static_assert(offsetof(NetRPacket_0x794a_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x794a_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x794a_Fixed, account_name) == 2, "offsetof(NetRPacket_0x794a_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x794a_Fixed, ban_until) == 26, "offsetof(NetRPacket_0x794a_Fixed, ban_until) == 26"); +static_assert(sizeof(NetRPacket_0x794a_Fixed) == 30, "sizeof(NetRPacket_0x794a_Fixed) == 30"); +struct NetSPacket_0x794b_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; + Little32 ban_until; +}; +static_assert(offsetof(NetSPacket_0x794b_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x794b_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x794b_Fixed, account_id) == 2, "offsetof(NetSPacket_0x794b_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x794b_Fixed, account_name) == 6, "offsetof(NetSPacket_0x794b_Fixed, account_name) == 6"); +static_assert(offsetof(NetSPacket_0x794b_Fixed, ban_until) == 30, "offsetof(NetSPacket_0x794b_Fixed, ban_until) == 30"); +static_assert(sizeof(NetSPacket_0x794b_Fixed) == 34, "sizeof(NetSPacket_0x794b_Fixed) == 34"); +struct NetRPacket_0x794c_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + NetHumanTimeDiff ban_add; +}; +static_assert(offsetof(NetRPacket_0x794c_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x794c_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x794c_Fixed, account_name) == 2, "offsetof(NetRPacket_0x794c_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x794c_Fixed, ban_add) == 26, "offsetof(NetRPacket_0x794c_Fixed, ban_add) == 26"); +static_assert(sizeof(NetRPacket_0x794c_Fixed) == 38, "sizeof(NetRPacket_0x794c_Fixed) == 38"); +struct NetSPacket_0x794d_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; + Little32 ban_until; +}; +static_assert(offsetof(NetSPacket_0x794d_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x794d_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x794d_Fixed, account_id) == 2, "offsetof(NetSPacket_0x794d_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x794d_Fixed, account_name) == 6, "offsetof(NetSPacket_0x794d_Fixed, account_name) == 6"); +static_assert(offsetof(NetSPacket_0x794d_Fixed, ban_until) == 30, "offsetof(NetSPacket_0x794d_Fixed, ban_until) == 30"); +static_assert(sizeof(NetSPacket_0x794d_Fixed) == 34, "sizeof(NetSPacket_0x794d_Fixed) == 34"); +struct NetRPacket_0x794e_Head +{ + Little16 magic_packet_id; + Little16 unused; + SkewedLength<Little32, 8> magic_packet_length; +}; +static_assert(offsetof(NetRPacket_0x794e_Head, magic_packet_id) == 0, "offsetof(NetRPacket_0x794e_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x794e_Head, unused) == 2, "offsetof(NetRPacket_0x794e_Head, unused) == 2"); +static_assert(offsetof(NetRPacket_0x794e_Head, magic_packet_length) == 4, "offsetof(NetRPacket_0x794e_Head, magic_packet_length) == 4"); +static_assert(sizeof(NetRPacket_0x794e_Head) == 8, "sizeof(NetRPacket_0x794e_Head) == 8"); +struct NetRPacket_0x794e_Repeat +{ + Byte c; +}; +static_assert(offsetof(NetRPacket_0x794e_Repeat, c) == 0, "offsetof(NetRPacket_0x794e_Repeat, c) == 0"); +static_assert(sizeof(NetRPacket_0x794e_Repeat) == 1, "sizeof(NetRPacket_0x794e_Repeat) == 1"); +struct NetSPacket_0x794f_Fixed +{ + Little16 magic_packet_id; + Little16 error; +}; +static_assert(offsetof(NetSPacket_0x794f_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x794f_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x794f_Fixed, error) == 2, "offsetof(NetSPacket_0x794f_Fixed, error) == 2"); +static_assert(sizeof(NetSPacket_0x794f_Fixed) == 4, "sizeof(NetSPacket_0x794f_Fixed) == 4"); +struct NetRPacket_0x7950_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; + NetHumanTimeDiff valid_add; +}; +static_assert(offsetof(NetRPacket_0x7950_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7950_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7950_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7950_Fixed, account_name) == 2"); +static_assert(offsetof(NetRPacket_0x7950_Fixed, valid_add) == 26, "offsetof(NetRPacket_0x7950_Fixed, valid_add) == 26"); +static_assert(sizeof(NetRPacket_0x7950_Fixed) == 38, "sizeof(NetRPacket_0x7950_Fixed) == 38"); +struct NetSPacket_0x7951_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountName)> account_name; + Little32 valid_until; +}; +static_assert(offsetof(NetSPacket_0x7951_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x7951_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7951_Fixed, account_id) == 2, "offsetof(NetSPacket_0x7951_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7951_Fixed, account_name) == 6, "offsetof(NetSPacket_0x7951_Fixed, account_name) == 6"); +static_assert(offsetof(NetSPacket_0x7951_Fixed, valid_until) == 30, "offsetof(NetSPacket_0x7951_Fixed, valid_until) == 30"); +static_assert(sizeof(NetSPacket_0x7951_Fixed) == 34, "sizeof(NetSPacket_0x7951_Fixed) == 34"); +struct NetRPacket_0x7952_Fixed +{ + Little16 magic_packet_id; + NetString<sizeof(AccountName)> account_name; +}; +static_assert(offsetof(NetRPacket_0x7952_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7952_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7952_Fixed, account_name) == 2, "offsetof(NetRPacket_0x7952_Fixed, account_name) == 2"); +static_assert(sizeof(NetRPacket_0x7952_Fixed) == 26, "sizeof(NetRPacket_0x7952_Fixed) == 26"); +struct NetSPacket_0x7953_Head +{ + Little16 magic_packet_id; + Little32 account_id; + Byte gm_level; + NetString<sizeof(AccountName)> account_name; + Byte sex; + Little32 login_count; + Little32 state; + NetString<sizeof(timestamp_seconds_buffer)> error_message; + NetString<sizeof(timestamp_milliseconds_buffer)> last_login_string; + NetString<sizeof(VString<15>)> ip_string; + NetString<sizeof(AccountEmail)> email; + Little32 connect_until; + Little32 ban_until; + SkewedLength<Little16, 150> magic_packet_length; +}; +static_assert(offsetof(NetSPacket_0x7953_Head, magic_packet_id) == 0, "offsetof(NetSPacket_0x7953_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x7953_Head, account_id) == 2, "offsetof(NetSPacket_0x7953_Head, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x7953_Head, gm_level) == 6, "offsetof(NetSPacket_0x7953_Head, gm_level) == 6"); +static_assert(offsetof(NetSPacket_0x7953_Head, account_name) == 7, "offsetof(NetSPacket_0x7953_Head, account_name) == 7"); +static_assert(offsetof(NetSPacket_0x7953_Head, sex) == 31, "offsetof(NetSPacket_0x7953_Head, sex) == 31"); +static_assert(offsetof(NetSPacket_0x7953_Head, login_count) == 32, "offsetof(NetSPacket_0x7953_Head, login_count) == 32"); +static_assert(offsetof(NetSPacket_0x7953_Head, state) == 36, "offsetof(NetSPacket_0x7953_Head, state) == 36"); +static_assert(offsetof(NetSPacket_0x7953_Head, error_message) == 40, "offsetof(NetSPacket_0x7953_Head, error_message) == 40"); +static_assert(offsetof(NetSPacket_0x7953_Head, last_login_string) == 60, "offsetof(NetSPacket_0x7953_Head, last_login_string) == 60"); +static_assert(offsetof(NetSPacket_0x7953_Head, ip_string) == 84, "offsetof(NetSPacket_0x7953_Head, ip_string) == 84"); +static_assert(offsetof(NetSPacket_0x7953_Head, email) == 100, "offsetof(NetSPacket_0x7953_Head, email) == 100"); +static_assert(offsetof(NetSPacket_0x7953_Head, connect_until) == 140, "offsetof(NetSPacket_0x7953_Head, connect_until) == 140"); +static_assert(offsetof(NetSPacket_0x7953_Head, ban_until) == 144, "offsetof(NetSPacket_0x7953_Head, ban_until) == 144"); +static_assert(offsetof(NetSPacket_0x7953_Head, magic_packet_length) == 148, "offsetof(NetSPacket_0x7953_Head, magic_packet_length) == 148"); +static_assert(sizeof(NetSPacket_0x7953_Head) == 150, "sizeof(NetSPacket_0x7953_Head) == 150"); +struct NetSPacket_0x7953_Repeat +{ + Byte c; +}; +static_assert(offsetof(NetSPacket_0x7953_Repeat, c) == 0, "offsetof(NetSPacket_0x7953_Repeat, c) == 0"); +static_assert(sizeof(NetSPacket_0x7953_Repeat) == 1, "sizeof(NetSPacket_0x7953_Repeat) == 1"); +struct NetRPacket_0x7954_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; +}; +static_assert(offsetof(NetRPacket_0x7954_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7954_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x7954_Fixed, account_id) == 2, "offsetof(NetRPacket_0x7954_Fixed, account_id) == 2"); +static_assert(sizeof(NetRPacket_0x7954_Fixed) == 6, "sizeof(NetRPacket_0x7954_Fixed) == 6"); +struct NetRPacket_0x7955_Fixed +{ + Little16 magic_packet_id; +}; +static_assert(offsetof(NetRPacket_0x7955_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x7955_Fixed, magic_packet_id) == 0"); +static_assert(sizeof(NetRPacket_0x7955_Fixed) == 2, "sizeof(NetRPacket_0x7955_Fixed) == 2"); + inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7920_Head *network, RPacket0x7920_Head native) +bool native_to_network(NetSPacket_0x2726_Head *network, SPacket_0x2726_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->start_account_id, native.start_account_id); - rv &= native_to_network(&network->end_account_id, native.end_account_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->unused, native.unused); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7920_Head *native, NetRPacket0x7920_Head network) +bool network_to_native(SPacket_0x2726_Head *native, NetSPacket_0x2726_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->start_account_id, network.start_account_id); - rv &= network_to_native(&native->end_account_id, network.end_account_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->unused, network.unused); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); return rv; } - -struct RPacket0x7920_Repeat -{ - uint8_t c; -}; -struct NetRPacket0x7920_Repeat -{ - Byte c; -}; -static_assert(offsetof(NetRPacket0x7920_Repeat, c) == 0, "offsetof(NetRPacket0x7920_Repeat, c) == 0"); -static_assert(sizeof(NetRPacket0x7920_Repeat) == 1, "sizeof(NetRPacket0x7920_Repeat) == 1"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7920_Repeat *network, RPacket0x7920_Repeat native) +bool native_to_network(NetSPacket_0x2726_Repeat *network, SPacket_0x2726_Repeat native) { bool rv = true; rv &= native_to_network(&network->c, native.c); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7920_Repeat *native, NetRPacket0x7920_Repeat network) +bool network_to_native(SPacket_0x2726_Repeat *native, NetSPacket_0x2726_Repeat network) { bool rv = true; rv &= network_to_native(&native->c, network.c); return rv; } - -struct SPacket0x7921_Head -{ - uint16_t packet_id; - uint16_t packet_length; -}; -struct NetSPacket0x7921_Head -{ - Little16 packet_id; - Little16 packet_length; -}; -static_assert(offsetof(NetSPacket0x7921_Head, packet_id) == 0, "offsetof(NetSPacket0x7921_Head, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7921_Head, packet_length) == 2, "offsetof(NetSPacket0x7921_Head, packet_length) == 2"); -static_assert(sizeof(NetSPacket0x7921_Head) == 4, "sizeof(NetSPacket0x7921_Head) == 4"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7921_Head *network, SPacket0x7921_Head native) +bool native_to_network(NetRPacket_0x7920_Fixed *network, RPacket_0x7920_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->packet_length, native.packet_length); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->start_account_id, native.start_account_id); + rv &= native_to_network(&network->end_account_id, native.end_account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7921_Head *native, NetSPacket0x7921_Head network) +bool network_to_native(RPacket_0x7920_Fixed *native, NetRPacket_0x7920_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->packet_length, network.packet_length); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->start_account_id, network.start_account_id); + rv &= network_to_native(&native->end_account_id, network.end_account_id); return rv; } - -struct SPacket0x7921_Repeat +inline __attribute__((warn_unused_result)) +bool native_to_network(NetSPacket_0x7921_Head *network, SPacket_0x7921_Head native) { - uint32_t account_id; - GmLevel gm_level; - AccountName account_name; - SEX sex; - uint32_t login_count; - uint32_t status; -}; -struct NetSPacket0x7921_Repeat + bool rv = true; + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); + return rv; +} +inline __attribute__((warn_unused_result)) +bool network_to_native(SPacket_0x7921_Head *native, NetSPacket_0x7921_Head network) { - Little32 account_id; - Byte gm_level; - NetString<sizeof(AccountName)> account_name; - Byte sex; - Little32 login_count; - Little32 status; -}; -static_assert(offsetof(NetSPacket0x7921_Repeat, account_id) == 0, "offsetof(NetSPacket0x7921_Repeat, account_id) == 0"); -static_assert(offsetof(NetSPacket0x7921_Repeat, gm_level) == 4, "offsetof(NetSPacket0x7921_Repeat, gm_level) == 4"); -static_assert(offsetof(NetSPacket0x7921_Repeat, account_name) == 5, "offsetof(NetSPacket0x7921_Repeat, account_name) == 5"); -static_assert(offsetof(NetSPacket0x7921_Repeat, sex) == 29, "offsetof(NetSPacket0x7921_Repeat, sex) == 29"); -static_assert(offsetof(NetSPacket0x7921_Repeat, login_count) == 30, "offsetof(NetSPacket0x7921_Repeat, login_count) == 30"); -static_assert(offsetof(NetSPacket0x7921_Repeat, status) == 34, "offsetof(NetSPacket0x7921_Repeat, status) == 34"); -static_assert(sizeof(NetSPacket0x7921_Repeat) == 38, "sizeof(NetSPacket0x7921_Repeat) == 38"); + bool rv = true; + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); + return rv; +} inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7921_Repeat *network, SPacket0x7921_Repeat native) +bool native_to_network(NetSPacket_0x7921_Repeat *network, SPacket_0x7921_Repeat native) { bool rv = true; rv &= native_to_network(&network->account_id, native.account_id); @@ -215,7 +1048,7 @@ bool native_to_network(NetSPacket0x7921_Repeat *network, SPacket0x7921_Repeat na return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7921_Repeat *native, NetSPacket0x7921_Repeat network) +bool network_to_native(SPacket_0x7921_Repeat *native, NetSPacket_0x7921_Repeat network) { bool rv = true; rv &= network_to_native(&native->account_id, network.account_id); @@ -226,94 +1059,43 @@ bool network_to_native(SPacket0x7921_Repeat *native, NetSPacket0x7921_Repeat net rv &= network_to_native(&native->status, network.status); return rv; } - -struct RPacket0x7924_Fixed -{ - uint16_t packet_id; - uint32_t source_item_id; - uint32_t dest_item_id; -}; -struct NetRPacket0x7924_Fixed -{ - Little16 packet_id; - Little32 source_item_id; - Little32 dest_item_id; -}; -static_assert(offsetof(NetRPacket0x7924_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7924_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7924_Fixed, source_item_id) == 2, "offsetof(NetRPacket0x7924_Fixed, source_item_id) == 2"); -static_assert(offsetof(NetRPacket0x7924_Fixed, dest_item_id) == 6, "offsetof(NetRPacket0x7924_Fixed, dest_item_id) == 6"); -static_assert(sizeof(NetRPacket0x7924_Fixed) == 10, "sizeof(NetRPacket0x7924_Fixed) == 10"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7924_Fixed *network, RPacket0x7924_Fixed native) +bool native_to_network(NetRPacket_0x7924_Fixed *network, RPacket_0x7924_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->source_item_id, native.source_item_id); rv &= native_to_network(&network->dest_item_id, native.dest_item_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7924_Fixed *native, NetRPacket0x7924_Fixed network) +bool network_to_native(RPacket_0x7924_Fixed *native, NetRPacket_0x7924_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->source_item_id, network.source_item_id); rv &= network_to_native(&native->dest_item_id, network.dest_item_id); return rv; } - -struct SPacket0x7925_Fixed -{ - uint16_t packet_id; -}; -struct NetSPacket0x7925_Fixed -{ - Little16 packet_id; -}; -static_assert(offsetof(NetSPacket0x7925_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7925_Fixed, packet_id) == 0"); -static_assert(sizeof(NetSPacket0x7925_Fixed) == 2, "sizeof(NetSPacket0x7925_Fixed) == 2"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7925_Fixed *network, SPacket0x7925_Fixed native) +bool native_to_network(NetSPacket_0x7925_Fixed *network, SPacket_0x7925_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7925_Fixed *native, NetSPacket0x7925_Fixed network) +bool network_to_native(SPacket_0x7925_Fixed *native, NetSPacket_0x7925_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); return rv; } - -struct RPacket0x7930_Fixed -{ - uint16_t packet_id; - AccountName account_name; - AccountPass password; - SEX sex; - AccountEmail email; -}; -struct NetRPacket0x7930_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - NetString<sizeof(AccountPass)> password; - Byte sex; - NetString<sizeof(AccountEmail)> email; -}; -static_assert(offsetof(NetRPacket0x7930_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7930_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7930_Fixed, account_name) == 2, "offsetof(NetRPacket0x7930_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x7930_Fixed, password) == 26, "offsetof(NetRPacket0x7930_Fixed, password) == 26"); -static_assert(offsetof(NetRPacket0x7930_Fixed, sex) == 50, "offsetof(NetRPacket0x7930_Fixed, sex) == 50"); -static_assert(offsetof(NetRPacket0x7930_Fixed, email) == 51, "offsetof(NetRPacket0x7930_Fixed, email) == 51"); -static_assert(sizeof(NetRPacket0x7930_Fixed) == 91, "sizeof(NetRPacket0x7930_Fixed) == 91"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7930_Fixed *network, RPacket0x7930_Fixed native) +bool native_to_network(NetRPacket_0x7930_Fixed *network, RPacket_0x7930_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->password, native.password); rv &= native_to_network(&network->sex, native.sex); @@ -321,344 +1103,176 @@ bool native_to_network(NetRPacket0x7930_Fixed *network, RPacket0x7930_Fixed nati return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7930_Fixed *native, NetRPacket0x7930_Fixed network) +bool network_to_native(RPacket_0x7930_Fixed *native, NetRPacket_0x7930_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->password, network.password); rv &= network_to_native(&native->sex, network.sex); rv &= network_to_native(&native->email, network.email); return rv; } - -struct SPacket0x7931_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7931_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7931_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7931_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7931_Fixed, account_id) == 2, "offsetof(NetSPacket0x7931_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7931_Fixed, account_name) == 6, "offsetof(NetSPacket0x7931_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7931_Fixed) == 30, "sizeof(NetSPacket0x7931_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7931_Fixed *network, SPacket0x7931_Fixed native) +bool native_to_network(NetSPacket_0x7931_Fixed *network, SPacket_0x7931_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7931_Fixed *native, NetSPacket0x7931_Fixed network) +bool network_to_native(SPacket_0x7931_Fixed *native, NetSPacket_0x7931_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7932_Fixed -{ - uint16_t packet_id; - AccountName account_name; -}; -struct NetRPacket0x7932_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetRPacket0x7932_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7932_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7932_Fixed, account_name) == 2, "offsetof(NetRPacket0x7932_Fixed, account_name) == 2"); -static_assert(sizeof(NetRPacket0x7932_Fixed) == 26, "sizeof(NetRPacket0x7932_Fixed) == 26"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7932_Fixed *network, RPacket0x7932_Fixed native) +bool native_to_network(NetRPacket_0x7932_Fixed *network, RPacket_0x7932_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7932_Fixed *native, NetRPacket0x7932_Fixed network) +bool network_to_native(RPacket_0x7932_Fixed *native, NetRPacket_0x7932_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct SPacket0x7933_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7933_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7933_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7933_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7933_Fixed, account_id) == 2, "offsetof(NetSPacket0x7933_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7933_Fixed, account_name) == 6, "offsetof(NetSPacket0x7933_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7933_Fixed) == 30, "sizeof(NetSPacket0x7933_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7933_Fixed *network, SPacket0x7933_Fixed native) +bool native_to_network(NetSPacket_0x7933_Fixed *network, SPacket_0x7933_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7933_Fixed *native, NetSPacket0x7933_Fixed network) +bool network_to_native(SPacket_0x7933_Fixed *native, NetSPacket_0x7933_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7934_Fixed -{ - uint16_t packet_id; - AccountName account_name; - AccountPass password; -}; -struct NetRPacket0x7934_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - NetString<sizeof(AccountPass)> password; -}; -static_assert(offsetof(NetRPacket0x7934_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7934_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7934_Fixed, account_name) == 2, "offsetof(NetRPacket0x7934_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x7934_Fixed, password) == 26, "offsetof(NetRPacket0x7934_Fixed, password) == 26"); -static_assert(sizeof(NetRPacket0x7934_Fixed) == 50, "sizeof(NetRPacket0x7934_Fixed) == 50"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7934_Fixed *network, RPacket0x7934_Fixed native) +bool native_to_network(NetRPacket_0x7934_Fixed *network, RPacket_0x7934_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->password, native.password); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7934_Fixed *native, NetRPacket0x7934_Fixed network) +bool network_to_native(RPacket_0x7934_Fixed *native, NetRPacket_0x7934_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->password, network.password); return rv; } - -struct SPacket0x7935_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7935_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7935_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7935_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7935_Fixed, account_id) == 2, "offsetof(NetSPacket0x7935_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7935_Fixed, account_name) == 6, "offsetof(NetSPacket0x7935_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7935_Fixed) == 30, "sizeof(NetSPacket0x7935_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7935_Fixed *network, SPacket0x7935_Fixed native) +bool native_to_network(NetSPacket_0x7935_Fixed *network, SPacket_0x7935_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7935_Fixed *native, NetSPacket0x7935_Fixed network) +bool network_to_native(SPacket_0x7935_Fixed *native, NetSPacket_0x7935_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7936_Fixed -{ - uint16_t packet_id; - AccountName account_name; - uint32_t status; - timestamp_seconds_buffer error_message; -}; -struct NetRPacket0x7936_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - Little32 status; - NetString<sizeof(timestamp_seconds_buffer)> error_message; -}; -static_assert(offsetof(NetRPacket0x7936_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7936_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7936_Fixed, account_name) == 2, "offsetof(NetRPacket0x7936_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x7936_Fixed, status) == 26, "offsetof(NetRPacket0x7936_Fixed, status) == 26"); -static_assert(offsetof(NetRPacket0x7936_Fixed, error_message) == 30, "offsetof(NetRPacket0x7936_Fixed, error_message) == 30"); -static_assert(sizeof(NetRPacket0x7936_Fixed) == 50, "sizeof(NetRPacket0x7936_Fixed) == 50"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7936_Fixed *network, RPacket0x7936_Fixed native) +bool native_to_network(NetRPacket_0x7936_Fixed *network, RPacket_0x7936_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->status, native.status); rv &= native_to_network(&network->error_message, native.error_message); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7936_Fixed *native, NetRPacket0x7936_Fixed network) +bool network_to_native(RPacket_0x7936_Fixed *native, NetRPacket_0x7936_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->status, network.status); rv &= network_to_native(&native->error_message, network.error_message); return rv; } - -struct SPacket0x7937_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7937_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7937_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7937_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7937_Fixed, account_id) == 2, "offsetof(NetSPacket0x7937_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7937_Fixed, account_name) == 6, "offsetof(NetSPacket0x7937_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7937_Fixed) == 30, "sizeof(NetSPacket0x7937_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7937_Fixed *network, SPacket0x7937_Fixed native) +bool native_to_network(NetSPacket_0x7937_Fixed *network, SPacket_0x7937_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); + rv &= native_to_network(&network->status, native.status); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7937_Fixed *native, NetSPacket0x7937_Fixed network) +bool network_to_native(SPacket_0x7937_Fixed *native, NetSPacket_0x7937_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); + rv &= network_to_native(&native->status, network.status); return rv; } - -struct RPacket0x7938_Fixed -{ - uint16_t packet_id; -}; -struct NetRPacket0x7938_Fixed -{ - Little16 packet_id; -}; -static_assert(offsetof(NetRPacket0x7938_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7938_Fixed, packet_id) == 0"); -static_assert(sizeof(NetRPacket0x7938_Fixed) == 2, "sizeof(NetRPacket0x7938_Fixed) == 2"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7938_Fixed *network, RPacket0x7938_Fixed native) +bool native_to_network(NetRPacket_0x7938_Fixed *network, RPacket_0x7938_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7938_Fixed *native, NetRPacket0x7938_Fixed network) +bool network_to_native(RPacket_0x7938_Fixed *native, NetRPacket_0x7938_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); return rv; } - -struct SPacket0x7939_Head -{ - uint16_t packet_id; - uint16_t packet_length; -}; -struct NetSPacket0x7939_Head -{ - Little16 packet_id; - Little16 packet_length; -}; -static_assert(offsetof(NetSPacket0x7939_Head, packet_id) == 0, "offsetof(NetSPacket0x7939_Head, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7939_Head, packet_length) == 2, "offsetof(NetSPacket0x7939_Head, packet_length) == 2"); -static_assert(sizeof(NetSPacket0x7939_Head) == 4, "sizeof(NetSPacket0x7939_Head) == 4"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7939_Head *network, SPacket0x7939_Head native) +bool native_to_network(NetSPacket_0x7939_Head *network, SPacket_0x7939_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->packet_length, native.packet_length); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7939_Head *native, NetSPacket0x7939_Head network) +bool network_to_native(SPacket_0x7939_Head *native, NetSPacket_0x7939_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->packet_length, network.packet_length); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); return rv; } - -struct SPacket0x7939_Repeat -{ - IP4Address ip; - uint16_t port; - ServerName name; - uint16_t users; - uint16_t maintenance; - uint16_t is_new; -}; -struct NetSPacket0x7939_Repeat -{ - IP4Address ip; - Little16 port; - NetString<sizeof(ServerName)> name; - Little16 users; - Little16 maintenance; - Little16 is_new; -}; -static_assert(offsetof(NetSPacket0x7939_Repeat, ip) == 0, "offsetof(NetSPacket0x7939_Repeat, ip) == 0"); -static_assert(offsetof(NetSPacket0x7939_Repeat, port) == 4, "offsetof(NetSPacket0x7939_Repeat, port) == 4"); -static_assert(offsetof(NetSPacket0x7939_Repeat, name) == 6, "offsetof(NetSPacket0x7939_Repeat, name) == 6"); -static_assert(offsetof(NetSPacket0x7939_Repeat, users) == 26, "offsetof(NetSPacket0x7939_Repeat, users) == 26"); -static_assert(offsetof(NetSPacket0x7939_Repeat, maintenance) == 28, "offsetof(NetSPacket0x7939_Repeat, maintenance) == 28"); -static_assert(offsetof(NetSPacket0x7939_Repeat, is_new) == 30, "offsetof(NetSPacket0x7939_Repeat, is_new) == 30"); -static_assert(sizeof(NetSPacket0x7939_Repeat) == 32, "sizeof(NetSPacket0x7939_Repeat) == 32"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7939_Repeat *network, SPacket0x7939_Repeat native) +bool native_to_network(NetSPacket_0x7939_Repeat *network, SPacket_0x7939_Repeat native) { bool rv = true; rv &= native_to_network(&network->ip, native.ip); @@ -670,7 +1284,7 @@ bool native_to_network(NetSPacket0x7939_Repeat *network, SPacket0x7939_Repeat na return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7939_Repeat *native, NetSPacket0x7939_Repeat network) +bool network_to_native(SPacket_0x7939_Repeat *native, NetSPacket_0x7939_Repeat network) { bool rv = true; rv &= network_to_native(&native->ip, network.ip); @@ -681,990 +1295,493 @@ bool network_to_native(SPacket0x7939_Repeat *native, NetSPacket0x7939_Repeat net rv &= network_to_native(&native->is_new, network.is_new); return rv; } - -struct RPacket0x793a_Fixed -{ - uint16_t packet_id; - AccountName account_name; - AccountPass password; -}; -struct NetRPacket0x793a_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - NetString<sizeof(AccountPass)> password; -}; -static_assert(offsetof(NetRPacket0x793a_Fixed, packet_id) == 0, "offsetof(NetRPacket0x793a_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x793a_Fixed, account_name) == 2, "offsetof(NetRPacket0x793a_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x793a_Fixed, password) == 26, "offsetof(NetRPacket0x793a_Fixed, password) == 26"); -static_assert(sizeof(NetRPacket0x793a_Fixed) == 50, "sizeof(NetRPacket0x793a_Fixed) == 50"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x793a_Fixed *network, RPacket0x793a_Fixed native) +bool native_to_network(NetRPacket_0x793a_Fixed *network, RPacket_0x793a_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->password, native.password); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x793a_Fixed *native, NetRPacket0x793a_Fixed network) +bool network_to_native(RPacket_0x793a_Fixed *native, NetRPacket_0x793a_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->password, network.password); return rv; } - -struct SPacket0x793b_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x793b_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x793b_Fixed, packet_id) == 0, "offsetof(NetSPacket0x793b_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x793b_Fixed, account_id) == 2, "offsetof(NetSPacket0x793b_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x793b_Fixed, account_name) == 6, "offsetof(NetSPacket0x793b_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x793b_Fixed) == 30, "sizeof(NetSPacket0x793b_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x793b_Fixed *network, SPacket0x793b_Fixed native) +bool native_to_network(NetSPacket_0x793b_Fixed *network, SPacket_0x793b_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x793b_Fixed *native, NetSPacket0x793b_Fixed network) +bool network_to_native(SPacket_0x793b_Fixed *native, NetSPacket_0x793b_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x793c_Fixed -{ - uint16_t packet_id; - AccountName account_name; - SEX sex; -}; -struct NetRPacket0x793c_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - Byte sex; -}; -static_assert(offsetof(NetRPacket0x793c_Fixed, packet_id) == 0, "offsetof(NetRPacket0x793c_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x793c_Fixed, account_name) == 2, "offsetof(NetRPacket0x793c_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x793c_Fixed, sex) == 26, "offsetof(NetRPacket0x793c_Fixed, sex) == 26"); -static_assert(sizeof(NetRPacket0x793c_Fixed) == 27, "sizeof(NetRPacket0x793c_Fixed) == 27"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x793c_Fixed *network, RPacket0x793c_Fixed native) +bool native_to_network(NetRPacket_0x793c_Fixed *network, RPacket_0x793c_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->sex, native.sex); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x793c_Fixed *native, NetRPacket0x793c_Fixed network) +bool network_to_native(RPacket_0x793c_Fixed *native, NetRPacket_0x793c_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->sex, network.sex); return rv; } - -struct SPacket0x793d_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x793d_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x793d_Fixed, packet_id) == 0, "offsetof(NetSPacket0x793d_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x793d_Fixed, account_id) == 2, "offsetof(NetSPacket0x793d_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x793d_Fixed, account_name) == 6, "offsetof(NetSPacket0x793d_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x793d_Fixed) == 30, "sizeof(NetSPacket0x793d_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x793d_Fixed *network, SPacket0x793d_Fixed native) +bool native_to_network(NetSPacket_0x793d_Fixed *network, SPacket_0x793d_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x793d_Fixed *native, NetSPacket0x793d_Fixed network) +bool network_to_native(SPacket_0x793d_Fixed *native, NetSPacket_0x793d_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x793e_Fixed -{ - uint16_t packet_id; - AccountName account_name; - GmLevel gm_level; -}; -struct NetRPacket0x793e_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - Byte gm_level; -}; -static_assert(offsetof(NetRPacket0x793e_Fixed, packet_id) == 0, "offsetof(NetRPacket0x793e_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x793e_Fixed, account_name) == 2, "offsetof(NetRPacket0x793e_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x793e_Fixed, gm_level) == 26, "offsetof(NetRPacket0x793e_Fixed, gm_level) == 26"); -static_assert(sizeof(NetRPacket0x793e_Fixed) == 27, "sizeof(NetRPacket0x793e_Fixed) == 27"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x793e_Fixed *network, RPacket0x793e_Fixed native) +bool native_to_network(NetRPacket_0x793e_Fixed *network, RPacket_0x793e_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->gm_level, native.gm_level); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x793e_Fixed *native, NetRPacket0x793e_Fixed network) +bool network_to_native(RPacket_0x793e_Fixed *native, NetRPacket_0x793e_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->gm_level, network.gm_level); return rv; } - -struct SPacket0x793f_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x793f_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x793f_Fixed, packet_id) == 0, "offsetof(NetSPacket0x793f_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x793f_Fixed, account_id) == 2, "offsetof(NetSPacket0x793f_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x793f_Fixed, account_name) == 6, "offsetof(NetSPacket0x793f_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x793f_Fixed) == 30, "sizeof(NetSPacket0x793f_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x793f_Fixed *network, SPacket0x793f_Fixed native) +bool native_to_network(NetSPacket_0x793f_Fixed *network, SPacket_0x793f_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x793f_Fixed *native, NetSPacket0x793f_Fixed network) +bool network_to_native(SPacket_0x793f_Fixed *native, NetSPacket_0x793f_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7940_Fixed -{ - uint16_t packet_id; - AccountName account_name; - AccountEmail email; -}; -struct NetRPacket0x7940_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - NetString<sizeof(AccountEmail)> email; -}; -static_assert(offsetof(NetRPacket0x7940_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7940_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7940_Fixed, account_name) == 2, "offsetof(NetRPacket0x7940_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x7940_Fixed, email) == 26, "offsetof(NetRPacket0x7940_Fixed, email) == 26"); -static_assert(sizeof(NetRPacket0x7940_Fixed) == 66, "sizeof(NetRPacket0x7940_Fixed) == 66"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7940_Fixed *network, RPacket0x7940_Fixed native) +bool native_to_network(NetRPacket_0x7940_Fixed *network, RPacket_0x7940_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->email, native.email); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7940_Fixed *native, NetRPacket0x7940_Fixed network) +bool network_to_native(RPacket_0x7940_Fixed *native, NetRPacket_0x7940_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->email, network.email); return rv; } - -struct SPacket0x7941_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7941_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7941_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7941_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7941_Fixed, account_id) == 2, "offsetof(NetSPacket0x7941_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7941_Fixed, account_name) == 6, "offsetof(NetSPacket0x7941_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7941_Fixed) == 30, "sizeof(NetSPacket0x7941_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7941_Fixed *network, SPacket0x7941_Fixed native) +bool native_to_network(NetSPacket_0x7941_Fixed *network, SPacket_0x7941_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7941_Fixed *native, NetSPacket0x7941_Fixed network) +bool network_to_native(SPacket_0x7941_Fixed *native, NetSPacket_0x7941_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7942_Head -{ - uint16_t packet_id; - AccountName account_name; - uint16_t string_length; -}; -struct NetRPacket0x7942_Head -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - Little16 string_length; -}; -static_assert(offsetof(NetRPacket0x7942_Head, packet_id) == 0, "offsetof(NetRPacket0x7942_Head, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7942_Head, account_name) == 2, "offsetof(NetRPacket0x7942_Head, account_name) == 2"); -static_assert(offsetof(NetRPacket0x7942_Head, string_length) == 26, "offsetof(NetRPacket0x7942_Head, string_length) == 26"); -static_assert(sizeof(NetRPacket0x7942_Head) == 28, "sizeof(NetRPacket0x7942_Head) == 28"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7942_Head *network, RPacket0x7942_Head native) +bool native_to_network(NetRPacket_0x7942_Head *network, RPacket_0x7942_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); - rv &= native_to_network(&network->string_length, native.string_length); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7942_Head *native, NetRPacket0x7942_Head network) +bool network_to_native(RPacket_0x7942_Head *native, NetRPacket_0x7942_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); - rv &= network_to_native(&native->string_length, network.string_length); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); return rv; } - -struct RPacket0x7942_Repeat -{ - uint8_t c; -}; -struct NetRPacket0x7942_Repeat -{ - Byte c; -}; -static_assert(offsetof(NetRPacket0x7942_Repeat, c) == 0, "offsetof(NetRPacket0x7942_Repeat, c) == 0"); -static_assert(sizeof(NetRPacket0x7942_Repeat) == 1, "sizeof(NetRPacket0x7942_Repeat) == 1"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7942_Repeat *network, RPacket0x7942_Repeat native) +bool native_to_network(NetRPacket_0x7942_Repeat *network, RPacket_0x7942_Repeat native) { bool rv = true; rv &= native_to_network(&network->c, native.c); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7942_Repeat *native, NetRPacket0x7942_Repeat network) +bool network_to_native(RPacket_0x7942_Repeat *native, NetRPacket_0x7942_Repeat network) { bool rv = true; rv &= network_to_native(&native->c, network.c); return rv; } - -struct SPacket0x7943_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7943_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7943_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7943_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7943_Fixed, account_id) == 2, "offsetof(NetSPacket0x7943_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7943_Fixed, account_name) == 6, "offsetof(NetSPacket0x7943_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7943_Fixed) == 30, "sizeof(NetSPacket0x7943_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7943_Fixed *network, SPacket0x7943_Fixed native) +bool native_to_network(NetSPacket_0x7943_Fixed *network, SPacket_0x7943_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7943_Fixed *native, NetSPacket0x7943_Fixed network) +bool network_to_native(SPacket_0x7943_Fixed *native, NetSPacket_0x7943_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7944_Fixed -{ - uint16_t packet_id; - AccountName account_name; -}; -struct NetRPacket0x7944_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetRPacket0x7944_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7944_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7944_Fixed, account_name) == 2, "offsetof(NetRPacket0x7944_Fixed, account_name) == 2"); -static_assert(sizeof(NetRPacket0x7944_Fixed) == 26, "sizeof(NetRPacket0x7944_Fixed) == 26"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7944_Fixed *network, RPacket0x7944_Fixed native) +bool native_to_network(NetRPacket_0x7944_Fixed *network, RPacket_0x7944_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7944_Fixed *native, NetRPacket0x7944_Fixed network) +bool network_to_native(RPacket_0x7944_Fixed *native, NetRPacket_0x7944_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct SPacket0x7945_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7945_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7945_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7945_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7945_Fixed, account_id) == 2, "offsetof(NetSPacket0x7945_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7945_Fixed, account_name) == 6, "offsetof(NetSPacket0x7945_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7945_Fixed) == 30, "sizeof(NetSPacket0x7945_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7945_Fixed *network, SPacket0x7945_Fixed native) +bool native_to_network(NetSPacket_0x7945_Fixed *network, SPacket_0x7945_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7945_Fixed *native, NetSPacket0x7945_Fixed network) +bool network_to_native(SPacket_0x7945_Fixed *native, NetSPacket_0x7945_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7946_Fixed -{ - uint16_t packet_id; - uint32_t account_id; -}; -struct NetRPacket0x7946_Fixed -{ - Little16 packet_id; - Little32 account_id; -}; -static_assert(offsetof(NetRPacket0x7946_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7946_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7946_Fixed, account_id) == 2, "offsetof(NetRPacket0x7946_Fixed, account_id) == 2"); -static_assert(sizeof(NetRPacket0x7946_Fixed) == 6, "sizeof(NetRPacket0x7946_Fixed) == 6"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7946_Fixed *network, RPacket0x7946_Fixed native) +bool native_to_network(NetRPacket_0x7946_Fixed *network, RPacket_0x7946_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7946_Fixed *native, NetRPacket0x7946_Fixed network) +bool network_to_native(RPacket_0x7946_Fixed *native, NetRPacket_0x7946_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct SPacket0x7947_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; -}; -struct NetSPacket0x7947_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetSPacket0x7947_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7947_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7947_Fixed, account_id) == 2, "offsetof(NetSPacket0x7947_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7947_Fixed, account_name) == 6, "offsetof(NetSPacket0x7947_Fixed, account_name) == 6"); -static_assert(sizeof(NetSPacket0x7947_Fixed) == 30, "sizeof(NetSPacket0x7947_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7947_Fixed *network, SPacket0x7947_Fixed native) +bool native_to_network(NetSPacket_0x7947_Fixed *network, SPacket_0x7947_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7947_Fixed *native, NetSPacket0x7947_Fixed network) +bool network_to_native(SPacket_0x7947_Fixed *native, NetSPacket_0x7947_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct RPacket0x7948_Fixed -{ - uint16_t packet_id; - AccountName account_name; - TimeT valid_until; -}; -struct NetRPacket0x7948_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - Little32 valid_until; -}; -static_assert(offsetof(NetRPacket0x7948_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7948_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7948_Fixed, account_name) == 2, "offsetof(NetRPacket0x7948_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x7948_Fixed, valid_until) == 26, "offsetof(NetRPacket0x7948_Fixed, valid_until) == 26"); -static_assert(sizeof(NetRPacket0x7948_Fixed) == 30, "sizeof(NetRPacket0x7948_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7948_Fixed *network, RPacket0x7948_Fixed native) +bool native_to_network(NetRPacket_0x7948_Fixed *network, RPacket_0x7948_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->valid_until, native.valid_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7948_Fixed *native, NetRPacket0x7948_Fixed network) +bool network_to_native(RPacket_0x7948_Fixed *native, NetRPacket_0x7948_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->valid_until, network.valid_until); return rv; } - -struct SPacket0x7949_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; - TimeT valid_until; -}; -struct NetSPacket0x7949_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; - Little32 valid_until; -}; -static_assert(offsetof(NetSPacket0x7949_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7949_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7949_Fixed, account_id) == 2, "offsetof(NetSPacket0x7949_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7949_Fixed, account_name) == 6, "offsetof(NetSPacket0x7949_Fixed, account_name) == 6"); -static_assert(offsetof(NetSPacket0x7949_Fixed, valid_until) == 30, "offsetof(NetSPacket0x7949_Fixed, valid_until) == 30"); -static_assert(sizeof(NetSPacket0x7949_Fixed) == 34, "sizeof(NetSPacket0x7949_Fixed) == 34"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7949_Fixed *network, SPacket0x7949_Fixed native) +bool native_to_network(NetSPacket_0x7949_Fixed *network, SPacket_0x7949_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->valid_until, native.valid_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7949_Fixed *native, NetSPacket0x7949_Fixed network) +bool network_to_native(SPacket_0x7949_Fixed *native, NetSPacket_0x7949_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->valid_until, network.valid_until); return rv; } - -struct RPacket0x794a_Fixed -{ - uint16_t packet_id; - AccountName account_name; - TimeT ban_until; -}; -struct NetRPacket0x794a_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - Little32 ban_until; -}; -static_assert(offsetof(NetRPacket0x794a_Fixed, packet_id) == 0, "offsetof(NetRPacket0x794a_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x794a_Fixed, account_name) == 2, "offsetof(NetRPacket0x794a_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x794a_Fixed, ban_until) == 26, "offsetof(NetRPacket0x794a_Fixed, ban_until) == 26"); -static_assert(sizeof(NetRPacket0x794a_Fixed) == 30, "sizeof(NetRPacket0x794a_Fixed) == 30"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x794a_Fixed *network, RPacket0x794a_Fixed native) +bool native_to_network(NetRPacket_0x794a_Fixed *network, RPacket_0x794a_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->ban_until, native.ban_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x794a_Fixed *native, NetRPacket0x794a_Fixed network) +bool network_to_native(RPacket_0x794a_Fixed *native, NetRPacket_0x794a_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->ban_until, network.ban_until); return rv; } - -struct SPacket0x794b_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; - TimeT ban_until; -}; -struct NetSPacket0x794b_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; - Little32 ban_until; -}; -static_assert(offsetof(NetSPacket0x794b_Fixed, packet_id) == 0, "offsetof(NetSPacket0x794b_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x794b_Fixed, account_id) == 2, "offsetof(NetSPacket0x794b_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x794b_Fixed, account_name) == 6, "offsetof(NetSPacket0x794b_Fixed, account_name) == 6"); -static_assert(offsetof(NetSPacket0x794b_Fixed, ban_until) == 30, "offsetof(NetSPacket0x794b_Fixed, ban_until) == 30"); -static_assert(sizeof(NetSPacket0x794b_Fixed) == 34, "sizeof(NetSPacket0x794b_Fixed) == 34"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x794b_Fixed *network, SPacket0x794b_Fixed native) +bool native_to_network(NetSPacket_0x794b_Fixed *network, SPacket_0x794b_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->ban_until, native.ban_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x794b_Fixed *native, NetSPacket0x794b_Fixed network) +bool network_to_native(SPacket_0x794b_Fixed *native, NetSPacket_0x794b_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->ban_until, network.ban_until); return rv; } - -struct RPacket0x794c_Fixed -{ - uint16_t packet_id; - AccountName account_name; - HumanTimeDiff ban_add; -}; -struct NetRPacket0x794c_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - NetHumanTimeDiff ban_add; -}; -static_assert(offsetof(NetRPacket0x794c_Fixed, packet_id) == 0, "offsetof(NetRPacket0x794c_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x794c_Fixed, account_name) == 2, "offsetof(NetRPacket0x794c_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x794c_Fixed, ban_add) == 26, "offsetof(NetRPacket0x794c_Fixed, ban_add) == 26"); -static_assert(sizeof(NetRPacket0x794c_Fixed) == 38, "sizeof(NetRPacket0x794c_Fixed) == 38"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x794c_Fixed *network, RPacket0x794c_Fixed native) +bool native_to_network(NetRPacket_0x794c_Fixed *network, RPacket_0x794c_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->ban_add, native.ban_add); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x794c_Fixed *native, NetRPacket0x794c_Fixed network) +bool network_to_native(RPacket_0x794c_Fixed *native, NetRPacket_0x794c_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->ban_add, network.ban_add); return rv; } - -struct SPacket0x794d_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; - TimeT ban_until; -}; -struct NetSPacket0x794d_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; - Little32 ban_until; -}; -static_assert(offsetof(NetSPacket0x794d_Fixed, packet_id) == 0, "offsetof(NetSPacket0x794d_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x794d_Fixed, account_id) == 2, "offsetof(NetSPacket0x794d_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x794d_Fixed, account_name) == 6, "offsetof(NetSPacket0x794d_Fixed, account_name) == 6"); -static_assert(offsetof(NetSPacket0x794d_Fixed, ban_until) == 30, "offsetof(NetSPacket0x794d_Fixed, ban_until) == 30"); -static_assert(sizeof(NetSPacket0x794d_Fixed) == 34, "sizeof(NetSPacket0x794d_Fixed) == 34"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x794d_Fixed *network, SPacket0x794d_Fixed native) +bool native_to_network(NetSPacket_0x794d_Fixed *network, SPacket_0x794d_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->ban_until, native.ban_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x794d_Fixed *native, NetSPacket0x794d_Fixed network) +bool network_to_native(SPacket_0x794d_Fixed *native, NetSPacket_0x794d_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->ban_until, network.ban_until); return rv; } - -struct RPacket0x794e_Head -{ - uint16_t packet_id; - uint16_t unused; - uint32_t string_length; -}; -struct NetRPacket0x794e_Head -{ - Little16 packet_id; - Little16 unused; - Little32 string_length; -}; -static_assert(offsetof(NetRPacket0x794e_Head, packet_id) == 0, "offsetof(NetRPacket0x794e_Head, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x794e_Head, unused) == 2, "offsetof(NetRPacket0x794e_Head, unused) == 2"); -static_assert(offsetof(NetRPacket0x794e_Head, string_length) == 4, "offsetof(NetRPacket0x794e_Head, string_length) == 4"); -static_assert(sizeof(NetRPacket0x794e_Head) == 8, "sizeof(NetRPacket0x794e_Head) == 8"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x794e_Head *network, RPacket0x794e_Head native) +bool native_to_network(NetRPacket_0x794e_Head *network, RPacket_0x794e_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->unused, native.unused); - rv &= native_to_network(&network->string_length, native.string_length); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x794e_Head *native, NetRPacket0x794e_Head network) +bool network_to_native(RPacket_0x794e_Head *native, NetRPacket_0x794e_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->unused, network.unused); - rv &= network_to_native(&native->string_length, network.string_length); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); return rv; } - -struct RPacket0x794e_Repeat -{ - uint8_t c; -}; -struct NetRPacket0x794e_Repeat -{ - Byte c; -}; -static_assert(offsetof(NetRPacket0x794e_Repeat, c) == 0, "offsetof(NetRPacket0x794e_Repeat, c) == 0"); -static_assert(sizeof(NetRPacket0x794e_Repeat) == 1, "sizeof(NetRPacket0x794e_Repeat) == 1"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x794e_Repeat *network, RPacket0x794e_Repeat native) +bool native_to_network(NetRPacket_0x794e_Repeat *network, RPacket_0x794e_Repeat native) { bool rv = true; rv &= native_to_network(&network->c, native.c); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x794e_Repeat *native, NetRPacket0x794e_Repeat network) +bool network_to_native(RPacket_0x794e_Repeat *native, NetRPacket_0x794e_Repeat network) { bool rv = true; rv &= network_to_native(&native->c, network.c); return rv; } - -struct SPacket0x794f_Fixed -{ - uint16_t packet_id; - uint16_t error; -}; -struct NetSPacket0x794f_Fixed -{ - Little16 packet_id; - Little16 error; -}; -static_assert(offsetof(NetSPacket0x794f_Fixed, packet_id) == 0, "offsetof(NetSPacket0x794f_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x794f_Fixed, error) == 2, "offsetof(NetSPacket0x794f_Fixed, error) == 2"); -static_assert(sizeof(NetSPacket0x794f_Fixed) == 4, "sizeof(NetSPacket0x794f_Fixed) == 4"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x794f_Fixed *network, SPacket0x794f_Fixed native) +bool native_to_network(NetSPacket_0x794f_Fixed *network, SPacket_0x794f_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->error, native.error); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x794f_Fixed *native, NetSPacket0x794f_Fixed network) +bool network_to_native(SPacket_0x794f_Fixed *native, NetSPacket_0x794f_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->error, network.error); return rv; } - -struct RPacket0x7950_Fixed -{ - uint16_t packet_id; - AccountName account_name; - HumanTimeDiff valid_add; -}; -struct NetRPacket0x7950_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; - NetHumanTimeDiff valid_add; -}; -static_assert(offsetof(NetRPacket0x7950_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7950_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7950_Fixed, account_name) == 2, "offsetof(NetRPacket0x7950_Fixed, account_name) == 2"); -static_assert(offsetof(NetRPacket0x7950_Fixed, valid_add) == 26, "offsetof(NetRPacket0x7950_Fixed, valid_add) == 26"); -static_assert(sizeof(NetRPacket0x7950_Fixed) == 38, "sizeof(NetRPacket0x7950_Fixed) == 38"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7950_Fixed *network, RPacket0x7950_Fixed native) +bool native_to_network(NetRPacket_0x7950_Fixed *network, RPacket_0x7950_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->valid_add, native.valid_add); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7950_Fixed *native, NetRPacket0x7950_Fixed network) +bool network_to_native(RPacket_0x7950_Fixed *native, NetRPacket_0x7950_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->valid_add, network.valid_add); return rv; } - -struct SPacket0x7951_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountName account_name; - TimeT valid_until; -}; -struct NetSPacket0x7951_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountName)> account_name; - Little32 valid_until; -}; -static_assert(offsetof(NetSPacket0x7951_Fixed, packet_id) == 0, "offsetof(NetSPacket0x7951_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7951_Fixed, account_id) == 2, "offsetof(NetSPacket0x7951_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7951_Fixed, account_name) == 6, "offsetof(NetSPacket0x7951_Fixed, account_name) == 6"); -static_assert(offsetof(NetSPacket0x7951_Fixed, valid_until) == 30, "offsetof(NetSPacket0x7951_Fixed, valid_until) == 30"); -static_assert(sizeof(NetSPacket0x7951_Fixed) == 34, "sizeof(NetSPacket0x7951_Fixed) == 34"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7951_Fixed *network, SPacket0x7951_Fixed native) +bool native_to_network(NetSPacket_0x7951_Fixed *network, SPacket_0x7951_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->account_name, native.account_name); rv &= native_to_network(&network->valid_until, native.valid_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7951_Fixed *native, NetSPacket0x7951_Fixed network) +bool network_to_native(SPacket_0x7951_Fixed *native, NetSPacket_0x7951_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->account_name, network.account_name); rv &= network_to_native(&native->valid_until, network.valid_until); return rv; } - -struct RPacket0x7952_Fixed -{ - uint16_t packet_id; - AccountName account_name; -}; -struct NetRPacket0x7952_Fixed -{ - Little16 packet_id; - NetString<sizeof(AccountName)> account_name; -}; -static_assert(offsetof(NetRPacket0x7952_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7952_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7952_Fixed, account_name) == 2, "offsetof(NetRPacket0x7952_Fixed, account_name) == 2"); -static_assert(sizeof(NetRPacket0x7952_Fixed) == 26, "sizeof(NetRPacket0x7952_Fixed) == 26"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7952_Fixed *network, RPacket0x7952_Fixed native) +bool native_to_network(NetRPacket_0x7952_Fixed *network, RPacket_0x7952_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_name, native.account_name); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7952_Fixed *native, NetRPacket0x7952_Fixed network) +bool network_to_native(RPacket_0x7952_Fixed *native, NetRPacket_0x7952_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_name, network.account_name); return rv; } - -struct SPacket0x7953_Head -{ - uint16_t packet_id; - uint32_t account_id; - GmLevel gm_level; - AccountName account_name; - SEX id; - uint32_t login_count; - uint32_t state; - timestamp_seconds_buffer error_message; - timestamp_milliseconds_buffer last_login_string; - VString<15> ip_string; - AccountEmail email; - TimeT connect_until; - TimeT ban_until; - uint16_t string_length; -}; -struct NetSPacket0x7953_Head -{ - Little16 packet_id; - Little32 account_id; - Byte gm_level; - NetString<sizeof(AccountName)> account_name; - Byte id; - Little32 login_count; - Little32 state; - NetString<sizeof(timestamp_seconds_buffer)> error_message; - NetString<sizeof(timestamp_milliseconds_buffer)> last_login_string; - NetString<sizeof(VString<15>)> ip_string; - NetString<sizeof(AccountEmail)> email; - Little32 connect_until; - Little32 ban_until; - Little16 string_length; -}; -static_assert(offsetof(NetSPacket0x7953_Head, packet_id) == 0, "offsetof(NetSPacket0x7953_Head, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x7953_Head, account_id) == 2, "offsetof(NetSPacket0x7953_Head, account_id) == 2"); -static_assert(offsetof(NetSPacket0x7953_Head, gm_level) == 6, "offsetof(NetSPacket0x7953_Head, gm_level) == 6"); -static_assert(offsetof(NetSPacket0x7953_Head, account_name) == 7, "offsetof(NetSPacket0x7953_Head, account_name) == 7"); -static_assert(offsetof(NetSPacket0x7953_Head, id) == 31, "offsetof(NetSPacket0x7953_Head, id) == 31"); -static_assert(offsetof(NetSPacket0x7953_Head, login_count) == 32, "offsetof(NetSPacket0x7953_Head, login_count) == 32"); -static_assert(offsetof(NetSPacket0x7953_Head, state) == 36, "offsetof(NetSPacket0x7953_Head, state) == 36"); -static_assert(offsetof(NetSPacket0x7953_Head, error_message) == 40, "offsetof(NetSPacket0x7953_Head, error_message) == 40"); -static_assert(offsetof(NetSPacket0x7953_Head, last_login_string) == 60, "offsetof(NetSPacket0x7953_Head, last_login_string) == 60"); -static_assert(offsetof(NetSPacket0x7953_Head, ip_string) == 84, "offsetof(NetSPacket0x7953_Head, ip_string) == 84"); -static_assert(offsetof(NetSPacket0x7953_Head, email) == 100, "offsetof(NetSPacket0x7953_Head, email) == 100"); -static_assert(offsetof(NetSPacket0x7953_Head, connect_until) == 140, "offsetof(NetSPacket0x7953_Head, connect_until) == 140"); -static_assert(offsetof(NetSPacket0x7953_Head, ban_until) == 144, "offsetof(NetSPacket0x7953_Head, ban_until) == 144"); -static_assert(offsetof(NetSPacket0x7953_Head, string_length) == 148, "offsetof(NetSPacket0x7953_Head, string_length) == 148"); -static_assert(sizeof(NetSPacket0x7953_Head) == 150, "sizeof(NetSPacket0x7953_Head) == 150"); -inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7953_Head *network, SPacket0x7953_Head native) -{ - bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); +inline __attribute__((warn_unused_result)) +bool native_to_network(NetSPacket_0x7953_Head *network, SPacket_0x7953_Head native) +{ + bool rv = true; + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->gm_level, native.gm_level); rv &= native_to_network(&network->account_name, native.account_name); - rv &= native_to_network(&network->id, native.id); + rv &= native_to_network(&network->sex, native.sex); rv &= native_to_network(&network->login_count, native.login_count); rv &= native_to_network(&network->state, native.state); rv &= native_to_network(&network->error_message, native.error_message); @@ -1673,18 +1790,18 @@ bool native_to_network(NetSPacket0x7953_Head *network, SPacket0x7953_Head native rv &= native_to_network(&network->email, native.email); rv &= native_to_network(&network->connect_until, native.connect_until); rv &= native_to_network(&network->ban_until, native.ban_until); - rv &= native_to_network(&network->string_length, native.string_length); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7953_Head *native, NetSPacket0x7953_Head network) +bool network_to_native(SPacket_0x7953_Head *native, NetSPacket_0x7953_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->gm_level, network.gm_level); rv &= network_to_native(&native->account_name, network.account_name); - rv &= network_to_native(&native->id, network.id); + rv &= network_to_native(&native->sex, network.sex); rv &= network_to_native(&native->login_count, network.login_count); rv &= network_to_native(&native->state, network.state); rv &= network_to_native(&native->error_message, network.error_message); @@ -1693,89 +1810,52 @@ bool network_to_native(SPacket0x7953_Head *native, NetSPacket0x7953_Head network rv &= network_to_native(&native->email, network.email); rv &= network_to_native(&native->connect_until, network.connect_until); rv &= network_to_native(&native->ban_until, network.ban_until); - rv &= network_to_native(&native->string_length, network.string_length); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); return rv; } - -struct SPacket0x7953_Repeat -{ - uint8_t c; -}; -struct NetSPacket0x7953_Repeat -{ - Byte c; -}; -static_assert(offsetof(NetSPacket0x7953_Repeat, c) == 0, "offsetof(NetSPacket0x7953_Repeat, c) == 0"); -static_assert(sizeof(NetSPacket0x7953_Repeat) == 1, "sizeof(NetSPacket0x7953_Repeat) == 1"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x7953_Repeat *network, SPacket0x7953_Repeat native) +bool native_to_network(NetSPacket_0x7953_Repeat *network, SPacket_0x7953_Repeat native) { bool rv = true; rv &= native_to_network(&network->c, native.c); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x7953_Repeat *native, NetSPacket0x7953_Repeat network) +bool network_to_native(SPacket_0x7953_Repeat *native, NetSPacket_0x7953_Repeat network) { bool rv = true; rv &= network_to_native(&native->c, network.c); return rv; } - -struct RPacket0x7954_Fixed -{ - uint16_t packet_id; - uint32_t account_id; -}; -struct NetRPacket0x7954_Fixed -{ - Little16 packet_id; - Little32 account_id; -}; -static_assert(offsetof(NetRPacket0x7954_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7954_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x7954_Fixed, account_id) == 2, "offsetof(NetRPacket0x7954_Fixed, account_id) == 2"); -static_assert(sizeof(NetRPacket0x7954_Fixed) == 6, "sizeof(NetRPacket0x7954_Fixed) == 6"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7954_Fixed *network, RPacket0x7954_Fixed native) +bool native_to_network(NetRPacket_0x7954_Fixed *network, RPacket_0x7954_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7954_Fixed *native, NetRPacket0x7954_Fixed network) +bool network_to_native(RPacket_0x7954_Fixed *native, NetRPacket_0x7954_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct RPacket0x7955_Fixed -{ - uint16_t packet_id; -}; -struct NetRPacket0x7955_Fixed -{ - Little16 packet_id; -}; -static_assert(offsetof(NetRPacket0x7955_Fixed, packet_id) == 0, "offsetof(NetRPacket0x7955_Fixed, packet_id) == 0"); -static_assert(sizeof(NetRPacket0x7955_Fixed) == 2, "sizeof(NetRPacket0x7955_Fixed) == 2"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x7955_Fixed *network, RPacket0x7955_Fixed native) +bool native_to_network(NetRPacket_0x7955_Fixed *network, RPacket_0x7955_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x7955_Fixed *native, NetRPacket0x7955_Fixed network) +bool network_to_native(RPacket_0x7955_Fixed *native, NetRPacket_0x7955_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); return rv; } - #endif // TMWA_PROTO2_LOGIN_ADMIN_HPP diff --git a/src/proto2/login-admin_test.cpp b/src/proto2/login-admin_test.cpp index 5bd9566..2cccef2 100644 --- a/src/proto2/login-admin_test.cpp +++ b/src/proto2/login-admin_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead diff --git a/src/proto2/login-char.hpp b/src/proto2/login-char.hpp index a594207..9c0ba74 100644 --- a/src/proto2/login-char.hpp +++ b/src/proto2/login-char.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead @@ -27,61 +27,509 @@ // This is an internal protocol, and can be changed without notice -struct RPacket0x2709_Fixed +struct RPacket_0x2709_Fixed { - uint16_t packet_id; + using NetType = NetRPacket_0x2709_Fixed; + static const uint16_t PACKET_ID = 0x2709; + + uint16_t magic_packet_id = PACKET_ID; }; -struct NetRPacket0x2709_Fixed +struct RPacket_0x2712_Fixed { - Little16 packet_id; + using NetType = NetRPacket_0x2712_Fixed; + static const uint16_t PACKET_ID = 0x2712; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + uint32_t login_id1 = {}; + uint32_t login_id2 = {}; + SEX sex = {}; + IP4Address ip = {}; }; -static_assert(offsetof(NetRPacket0x2709_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2709_Fixed, packet_id) == 0"); -static_assert(sizeof(NetRPacket0x2709_Fixed) == 2, "sizeof(NetRPacket0x2709_Fixed) == 2"); -inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2709_Fixed *network, RPacket0x2709_Fixed native) +struct SPacket_0x2713_Fixed { - bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - return rv; -} -inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2709_Fixed *native, NetRPacket0x2709_Fixed network) + using NetType = NetSPacket_0x2713_Fixed; + static const uint16_t PACKET_ID = 0x2713; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + uint8_t invalid = {}; + AccountEmail email = {}; + TimeT connect_until = {}; +}; +struct RPacket_0x2714_Fixed { - bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - return rv; -} + using NetType = NetRPacket_0x2714_Fixed; + static const uint16_t PACKET_ID = 0x2714; -struct RPacket0x2712_Fixed + uint16_t magic_packet_id = PACKET_ID; + uint32_t users = {}; +}; +struct RPacket_0x2715_Fixed { - uint16_t packet_id; - uint32_t account_id; - uint32_t login_id1; - uint32_t login_id2; - SEX sex; - IP4Address ip; + using NetType = NetRPacket_0x2715_Fixed; + static const uint16_t PACKET_ID = 0x2715; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountEmail email = {}; +}; +struct RPacket_0x2716_Fixed +{ + using NetType = NetRPacket_0x2716_Fixed; + static const uint16_t PACKET_ID = 0x2716; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; +}; +struct SPacket_0x2717_Fixed +{ + using NetType = NetSPacket_0x2717_Fixed; + static const uint16_t PACKET_ID = 0x2717; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountEmail email = {}; + TimeT connect_until = {}; +}; +struct RPacket_0x2720_Head +{ + using NetType = NetRPacket_0x2720_Head; + static const uint16_t PACKET_ID = 0x2720; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t magic_packet_length = {}; + AccountId account_id = {}; +}; +struct RPacket_0x2720_Repeat +{ + using NetType = NetRPacket_0x2720_Repeat; + static const uint16_t PACKET_ID = 0x2720; + + uint8_t c = {}; +}; +struct SPacket_0x2721_Fixed +{ + using NetType = NetSPacket_0x2721_Fixed; + static const uint16_t PACKET_ID = 0x2721; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + GmLevel gm_level = {}; +}; +struct RPacket_0x2722_Fixed +{ + using NetType = NetRPacket_0x2722_Fixed; + static const uint16_t PACKET_ID = 0x2722; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountEmail old_email = {}; + AccountEmail new_email = {}; +}; +struct SPacket_0x2723_Fixed +{ + using NetType = NetSPacket_0x2723_Fixed; + static const uint16_t PACKET_ID = 0x2723; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + SEX sex = {}; +}; +struct RPacket_0x2724_Fixed +{ + using NetType = NetRPacket_0x2724_Fixed; + static const uint16_t PACKET_ID = 0x2724; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + uint32_t status = {}; +}; +struct RPacket_0x2725_Fixed +{ + using NetType = NetRPacket_0x2725_Fixed; + static const uint16_t PACKET_ID = 0x2725; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + HumanTimeDiff deltas = {}; +}; +struct RPacket_0x2727_Fixed +{ + using NetType = NetRPacket_0x2727_Fixed; + static const uint16_t PACKET_ID = 0x2727; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; +}; +struct RPacket_0x2728_Head +{ + using NetType = NetRPacket_0x2728_Head; + static const uint16_t PACKET_ID = 0x2728; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t magic_packet_length = {}; + AccountId account_id = {}; +}; +struct RPacket_0x2728_Repeat +{ + using NetType = NetRPacket_0x2728_Repeat; + static const uint16_t PACKET_ID = 0x2728; + + VarName name = {}; + uint32_t value = {}; +}; +struct SPacket_0x2729_Head +{ + using NetType = NetSPacket_0x2729_Head; + static const uint16_t PACKET_ID = 0x2729; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t magic_packet_length = {}; + AccountId account_id = {}; +}; +struct SPacket_0x2729_Repeat +{ + using NetType = NetSPacket_0x2729_Repeat; + static const uint16_t PACKET_ID = 0x2729; + + VarName name = {}; + uint32_t value = {}; +}; +struct RPacket_0x272a_Fixed +{ + using NetType = NetRPacket_0x272a_Fixed; + static const uint16_t PACKET_ID = 0x272a; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; +}; +struct SPacket_0x2730_Fixed +{ + using NetType = NetSPacket_0x2730_Fixed; + static const uint16_t PACKET_ID = 0x2730; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; +}; +struct SPacket_0x2731_Fixed +{ + using NetType = NetSPacket_0x2731_Fixed; + static const uint16_t PACKET_ID = 0x2731; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + uint8_t ban_not_status = {}; + TimeT status_or_ban_until = {}; +}; +struct SPacket_0x2732_Head +{ + using NetType = NetSPacket_0x2732_Head; + static const uint16_t PACKET_ID = 0x2732; + + uint16_t magic_packet_id = PACKET_ID; + uint16_t magic_packet_length = {}; }; -struct NetRPacket0x2712_Fixed +struct SPacket_0x2732_Repeat { - Little16 packet_id; + using NetType = NetSPacket_0x2732_Repeat; + static const uint16_t PACKET_ID = 0x2732; + + AccountId account_id = {}; + GmLevel gm_level = {}; +}; +struct RPacket_0x2740_Fixed +{ + using NetType = NetRPacket_0x2740_Fixed; + static const uint16_t PACKET_ID = 0x2740; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + AccountPass old_pass = {}; + AccountPass new_pass = {}; +}; +struct SPacket_0x2741_Fixed +{ + using NetType = NetSPacket_0x2741_Fixed; + static const uint16_t PACKET_ID = 0x2741; + + uint16_t magic_packet_id = PACKET_ID; + AccountId account_id = {}; + uint8_t status = {}; +}; + +struct NetRPacket_0x2709_Fixed +{ + Little16 magic_packet_id; +}; +static_assert(offsetof(NetRPacket_0x2709_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2709_Fixed, magic_packet_id) == 0"); +static_assert(sizeof(NetRPacket_0x2709_Fixed) == 2, "sizeof(NetRPacket_0x2709_Fixed) == 2"); +struct NetRPacket_0x2712_Fixed +{ + Little16 magic_packet_id; Little32 account_id; Little32 login_id1; Little32 login_id2; Byte sex; IP4Address ip; }; -static_assert(offsetof(NetRPacket0x2712_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2712_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2712_Fixed, account_id) == 2, "offsetof(NetRPacket0x2712_Fixed, account_id) == 2"); -static_assert(offsetof(NetRPacket0x2712_Fixed, login_id1) == 6, "offsetof(NetRPacket0x2712_Fixed, login_id1) == 6"); -static_assert(offsetof(NetRPacket0x2712_Fixed, login_id2) == 10, "offsetof(NetRPacket0x2712_Fixed, login_id2) == 10"); -static_assert(offsetof(NetRPacket0x2712_Fixed, sex) == 14, "offsetof(NetRPacket0x2712_Fixed, sex) == 14"); -static_assert(offsetof(NetRPacket0x2712_Fixed, ip) == 15, "offsetof(NetRPacket0x2712_Fixed, ip) == 15"); -static_assert(sizeof(NetRPacket0x2712_Fixed) == 19, "sizeof(NetRPacket0x2712_Fixed) == 19"); +static_assert(offsetof(NetRPacket_0x2712_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2712_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2712_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2712_Fixed, account_id) == 2"); +static_assert(offsetof(NetRPacket_0x2712_Fixed, login_id1) == 6, "offsetof(NetRPacket_0x2712_Fixed, login_id1) == 6"); +static_assert(offsetof(NetRPacket_0x2712_Fixed, login_id2) == 10, "offsetof(NetRPacket_0x2712_Fixed, login_id2) == 10"); +static_assert(offsetof(NetRPacket_0x2712_Fixed, sex) == 14, "offsetof(NetRPacket_0x2712_Fixed, sex) == 14"); +static_assert(offsetof(NetRPacket_0x2712_Fixed, ip) == 15, "offsetof(NetRPacket_0x2712_Fixed, ip) == 15"); +static_assert(sizeof(NetRPacket_0x2712_Fixed) == 19, "sizeof(NetRPacket_0x2712_Fixed) == 19"); +struct NetSPacket_0x2713_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + Byte invalid; + NetString<sizeof(AccountEmail)> email; + Little32 connect_until; +}; +static_assert(offsetof(NetSPacket_0x2713_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x2713_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2713_Fixed, account_id) == 2, "offsetof(NetSPacket_0x2713_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x2713_Fixed, invalid) == 6, "offsetof(NetSPacket_0x2713_Fixed, invalid) == 6"); +static_assert(offsetof(NetSPacket_0x2713_Fixed, email) == 7, "offsetof(NetSPacket_0x2713_Fixed, email) == 7"); +static_assert(offsetof(NetSPacket_0x2713_Fixed, connect_until) == 47, "offsetof(NetSPacket_0x2713_Fixed, connect_until) == 47"); +static_assert(sizeof(NetSPacket_0x2713_Fixed) == 51, "sizeof(NetSPacket_0x2713_Fixed) == 51"); +struct NetRPacket_0x2714_Fixed +{ + Little16 magic_packet_id; + Little32 users; +}; +static_assert(offsetof(NetRPacket_0x2714_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2714_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2714_Fixed, users) == 2, "offsetof(NetRPacket_0x2714_Fixed, users) == 2"); +static_assert(sizeof(NetRPacket_0x2714_Fixed) == 6, "sizeof(NetRPacket_0x2714_Fixed) == 6"); +struct NetRPacket_0x2715_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountEmail)> email; +}; +static_assert(offsetof(NetRPacket_0x2715_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2715_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2715_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2715_Fixed, account_id) == 2"); +static_assert(offsetof(NetRPacket_0x2715_Fixed, email) == 6, "offsetof(NetRPacket_0x2715_Fixed, email) == 6"); +static_assert(sizeof(NetRPacket_0x2715_Fixed) == 46, "sizeof(NetRPacket_0x2715_Fixed) == 46"); +struct NetRPacket_0x2716_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; +}; +static_assert(offsetof(NetRPacket_0x2716_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2716_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2716_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2716_Fixed, account_id) == 2"); +static_assert(sizeof(NetRPacket_0x2716_Fixed) == 6, "sizeof(NetRPacket_0x2716_Fixed) == 6"); +struct NetSPacket_0x2717_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountEmail)> email; + Little32 connect_until; +}; +static_assert(offsetof(NetSPacket_0x2717_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x2717_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2717_Fixed, account_id) == 2, "offsetof(NetSPacket_0x2717_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x2717_Fixed, email) == 6, "offsetof(NetSPacket_0x2717_Fixed, email) == 6"); +static_assert(offsetof(NetSPacket_0x2717_Fixed, connect_until) == 46, "offsetof(NetSPacket_0x2717_Fixed, connect_until) == 46"); +static_assert(sizeof(NetSPacket_0x2717_Fixed) == 50, "sizeof(NetSPacket_0x2717_Fixed) == 50"); +struct NetRPacket_0x2720_Head +{ + Little16 magic_packet_id; + Little16 magic_packet_length; + Little32 account_id; +}; +static_assert(offsetof(NetRPacket_0x2720_Head, magic_packet_id) == 0, "offsetof(NetRPacket_0x2720_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2720_Head, magic_packet_length) == 2, "offsetof(NetRPacket_0x2720_Head, magic_packet_length) == 2"); +static_assert(offsetof(NetRPacket_0x2720_Head, account_id) == 4, "offsetof(NetRPacket_0x2720_Head, account_id) == 4"); +static_assert(sizeof(NetRPacket_0x2720_Head) == 8, "sizeof(NetRPacket_0x2720_Head) == 8"); +struct NetRPacket_0x2720_Repeat +{ + Byte c; +}; +static_assert(offsetof(NetRPacket_0x2720_Repeat, c) == 0, "offsetof(NetRPacket_0x2720_Repeat, c) == 0"); +static_assert(sizeof(NetRPacket_0x2720_Repeat) == 1, "sizeof(NetRPacket_0x2720_Repeat) == 1"); +struct NetSPacket_0x2721_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + Little32 gm_level; +}; +static_assert(offsetof(NetSPacket_0x2721_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x2721_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2721_Fixed, account_id) == 2, "offsetof(NetSPacket_0x2721_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x2721_Fixed, gm_level) == 6, "offsetof(NetSPacket_0x2721_Fixed, gm_level) == 6"); +static_assert(sizeof(NetSPacket_0x2721_Fixed) == 10, "sizeof(NetSPacket_0x2721_Fixed) == 10"); +struct NetRPacket_0x2722_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountEmail)> old_email; + NetString<sizeof(AccountEmail)> new_email; +}; +static_assert(offsetof(NetRPacket_0x2722_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2722_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2722_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2722_Fixed, account_id) == 2"); +static_assert(offsetof(NetRPacket_0x2722_Fixed, old_email) == 6, "offsetof(NetRPacket_0x2722_Fixed, old_email) == 6"); +static_assert(offsetof(NetRPacket_0x2722_Fixed, new_email) == 46, "offsetof(NetRPacket_0x2722_Fixed, new_email) == 46"); +static_assert(sizeof(NetRPacket_0x2722_Fixed) == 86, "sizeof(NetRPacket_0x2722_Fixed) == 86"); +struct NetSPacket_0x2723_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + Byte sex; +}; +static_assert(offsetof(NetSPacket_0x2723_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x2723_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2723_Fixed, account_id) == 2, "offsetof(NetSPacket_0x2723_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x2723_Fixed, sex) == 6, "offsetof(NetSPacket_0x2723_Fixed, sex) == 6"); +static_assert(sizeof(NetSPacket_0x2723_Fixed) == 7, "sizeof(NetSPacket_0x2723_Fixed) == 7"); +struct NetRPacket_0x2724_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + Little32 status; +}; +static_assert(offsetof(NetRPacket_0x2724_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2724_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2724_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2724_Fixed, account_id) == 2"); +static_assert(offsetof(NetRPacket_0x2724_Fixed, status) == 6, "offsetof(NetRPacket_0x2724_Fixed, status) == 6"); +static_assert(sizeof(NetRPacket_0x2724_Fixed) == 10, "sizeof(NetRPacket_0x2724_Fixed) == 10"); +struct NetRPacket_0x2725_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetHumanTimeDiff deltas; +}; +static_assert(offsetof(NetRPacket_0x2725_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2725_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2725_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2725_Fixed, account_id) == 2"); +static_assert(offsetof(NetRPacket_0x2725_Fixed, deltas) == 6, "offsetof(NetRPacket_0x2725_Fixed, deltas) == 6"); +static_assert(sizeof(NetRPacket_0x2725_Fixed) == 18, "sizeof(NetRPacket_0x2725_Fixed) == 18"); +struct NetRPacket_0x2727_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; +}; +static_assert(offsetof(NetRPacket_0x2727_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2727_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2727_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2727_Fixed, account_id) == 2"); +static_assert(sizeof(NetRPacket_0x2727_Fixed) == 6, "sizeof(NetRPacket_0x2727_Fixed) == 6"); +struct NetRPacket_0x2728_Head +{ + Little16 magic_packet_id; + Little16 magic_packet_length; + Little32 account_id; +}; +static_assert(offsetof(NetRPacket_0x2728_Head, magic_packet_id) == 0, "offsetof(NetRPacket_0x2728_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2728_Head, magic_packet_length) == 2, "offsetof(NetRPacket_0x2728_Head, magic_packet_length) == 2"); +static_assert(offsetof(NetRPacket_0x2728_Head, account_id) == 4, "offsetof(NetRPacket_0x2728_Head, account_id) == 4"); +static_assert(sizeof(NetRPacket_0x2728_Head) == 8, "sizeof(NetRPacket_0x2728_Head) == 8"); +struct NetRPacket_0x2728_Repeat +{ + NetString<sizeof(VarName)> name; + Little32 value; +}; +static_assert(offsetof(NetRPacket_0x2728_Repeat, name) == 0, "offsetof(NetRPacket_0x2728_Repeat, name) == 0"); +static_assert(offsetof(NetRPacket_0x2728_Repeat, value) == 32, "offsetof(NetRPacket_0x2728_Repeat, value) == 32"); +static_assert(sizeof(NetRPacket_0x2728_Repeat) == 36, "sizeof(NetRPacket_0x2728_Repeat) == 36"); +struct NetSPacket_0x2729_Head +{ + Little16 magic_packet_id; + Little16 magic_packet_length; + Little32 account_id; +}; +static_assert(offsetof(NetSPacket_0x2729_Head, magic_packet_id) == 0, "offsetof(NetSPacket_0x2729_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2729_Head, magic_packet_length) == 2, "offsetof(NetSPacket_0x2729_Head, magic_packet_length) == 2"); +static_assert(offsetof(NetSPacket_0x2729_Head, account_id) == 4, "offsetof(NetSPacket_0x2729_Head, account_id) == 4"); +static_assert(sizeof(NetSPacket_0x2729_Head) == 8, "sizeof(NetSPacket_0x2729_Head) == 8"); +struct NetSPacket_0x2729_Repeat +{ + NetString<sizeof(VarName)> name; + Little32 value; +}; +static_assert(offsetof(NetSPacket_0x2729_Repeat, name) == 0, "offsetof(NetSPacket_0x2729_Repeat, name) == 0"); +static_assert(offsetof(NetSPacket_0x2729_Repeat, value) == 32, "offsetof(NetSPacket_0x2729_Repeat, value) == 32"); +static_assert(sizeof(NetSPacket_0x2729_Repeat) == 36, "sizeof(NetSPacket_0x2729_Repeat) == 36"); +struct NetRPacket_0x272a_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; +}; +static_assert(offsetof(NetRPacket_0x272a_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x272a_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x272a_Fixed, account_id) == 2, "offsetof(NetRPacket_0x272a_Fixed, account_id) == 2"); +static_assert(sizeof(NetRPacket_0x272a_Fixed) == 6, "sizeof(NetRPacket_0x272a_Fixed) == 6"); +struct NetSPacket_0x2730_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; +}; +static_assert(offsetof(NetSPacket_0x2730_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x2730_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2730_Fixed, account_id) == 2, "offsetof(NetSPacket_0x2730_Fixed, account_id) == 2"); +static_assert(sizeof(NetSPacket_0x2730_Fixed) == 6, "sizeof(NetSPacket_0x2730_Fixed) == 6"); +struct NetSPacket_0x2731_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + Byte ban_not_status; + Little32 status_or_ban_until; +}; +static_assert(offsetof(NetSPacket_0x2731_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x2731_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2731_Fixed, account_id) == 2, "offsetof(NetSPacket_0x2731_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x2731_Fixed, ban_not_status) == 6, "offsetof(NetSPacket_0x2731_Fixed, ban_not_status) == 6"); +static_assert(offsetof(NetSPacket_0x2731_Fixed, status_or_ban_until) == 7, "offsetof(NetSPacket_0x2731_Fixed, status_or_ban_until) == 7"); +static_assert(sizeof(NetSPacket_0x2731_Fixed) == 11, "sizeof(NetSPacket_0x2731_Fixed) == 11"); +struct NetSPacket_0x2732_Head +{ + Little16 magic_packet_id; + Little16 magic_packet_length; +}; +static_assert(offsetof(NetSPacket_0x2732_Head, magic_packet_id) == 0, "offsetof(NetSPacket_0x2732_Head, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2732_Head, magic_packet_length) == 2, "offsetof(NetSPacket_0x2732_Head, magic_packet_length) == 2"); +static_assert(sizeof(NetSPacket_0x2732_Head) == 4, "sizeof(NetSPacket_0x2732_Head) == 4"); +struct NetSPacket_0x2732_Repeat +{ + Little32 account_id; + Byte gm_level; +}; +static_assert(offsetof(NetSPacket_0x2732_Repeat, account_id) == 0, "offsetof(NetSPacket_0x2732_Repeat, account_id) == 0"); +static_assert(offsetof(NetSPacket_0x2732_Repeat, gm_level) == 4, "offsetof(NetSPacket_0x2732_Repeat, gm_level) == 4"); +static_assert(sizeof(NetSPacket_0x2732_Repeat) == 5, "sizeof(NetSPacket_0x2732_Repeat) == 5"); +struct NetRPacket_0x2740_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + NetString<sizeof(AccountPass)> old_pass; + NetString<sizeof(AccountPass)> new_pass; +}; +static_assert(offsetof(NetRPacket_0x2740_Fixed, magic_packet_id) == 0, "offsetof(NetRPacket_0x2740_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetRPacket_0x2740_Fixed, account_id) == 2, "offsetof(NetRPacket_0x2740_Fixed, account_id) == 2"); +static_assert(offsetof(NetRPacket_0x2740_Fixed, old_pass) == 6, "offsetof(NetRPacket_0x2740_Fixed, old_pass) == 6"); +static_assert(offsetof(NetRPacket_0x2740_Fixed, new_pass) == 30, "offsetof(NetRPacket_0x2740_Fixed, new_pass) == 30"); +static_assert(sizeof(NetRPacket_0x2740_Fixed) == 54, "sizeof(NetRPacket_0x2740_Fixed) == 54"); +struct NetSPacket_0x2741_Fixed +{ + Little16 magic_packet_id; + Little32 account_id; + Byte status; +}; +static_assert(offsetof(NetSPacket_0x2741_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x2741_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x2741_Fixed, account_id) == 2, "offsetof(NetSPacket_0x2741_Fixed, account_id) == 2"); +static_assert(offsetof(NetSPacket_0x2741_Fixed, status) == 6, "offsetof(NetSPacket_0x2741_Fixed, status) == 6"); +static_assert(sizeof(NetSPacket_0x2741_Fixed) == 7, "sizeof(NetSPacket_0x2741_Fixed) == 7"); + +inline __attribute__((warn_unused_result)) +bool native_to_network(NetRPacket_0x2709_Fixed *network, RPacket_0x2709_Fixed native) +{ + bool rv = true; + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + return rv; +} +inline __attribute__((warn_unused_result)) +bool network_to_native(RPacket_0x2709_Fixed *native, NetRPacket_0x2709_Fixed network) +{ + bool rv = true; + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + return rv; +} inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2712_Fixed *network, RPacket0x2712_Fixed native) +bool native_to_network(NetRPacket_0x2712_Fixed *network, RPacket_0x2712_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->login_id1, native.login_id1); rv &= native_to_network(&network->login_id2, native.login_id2); @@ -90,10 +538,10 @@ bool native_to_network(NetRPacket0x2712_Fixed *network, RPacket0x2712_Fixed nati return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2712_Fixed *native, NetRPacket0x2712_Fixed network) +bool network_to_native(RPacket_0x2712_Fixed *native, NetRPacket_0x2712_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->login_id1, network.login_id1); rv &= network_to_native(&native->login_id2, network.login_id2); @@ -101,34 +549,11 @@ bool network_to_native(RPacket0x2712_Fixed *native, NetRPacket0x2712_Fixed netwo rv &= network_to_native(&native->ip, network.ip); return rv; } - -struct SPacket0x2713_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - uint8_t invalid; - AccountEmail email; - TimeT connect_until; -}; -struct NetSPacket0x2713_Fixed -{ - Little16 packet_id; - Little32 account_id; - Byte invalid; - NetString<sizeof(AccountEmail)> email; - Little32 connect_until; -}; -static_assert(offsetof(NetSPacket0x2713_Fixed, packet_id) == 0, "offsetof(NetSPacket0x2713_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2713_Fixed, account_id) == 2, "offsetof(NetSPacket0x2713_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x2713_Fixed, invalid) == 6, "offsetof(NetSPacket0x2713_Fixed, invalid) == 6"); -static_assert(offsetof(NetSPacket0x2713_Fixed, email) == 7, "offsetof(NetSPacket0x2713_Fixed, email) == 7"); -static_assert(offsetof(NetSPacket0x2713_Fixed, connect_until) == 47, "offsetof(NetSPacket0x2713_Fixed, connect_until) == 47"); -static_assert(sizeof(NetSPacket0x2713_Fixed) == 51, "sizeof(NetSPacket0x2713_Fixed) == 51"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2713_Fixed *network, SPacket0x2713_Fixed native) +bool native_to_network(NetSPacket_0x2713_Fixed *network, SPacket_0x2713_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->invalid, native.invalid); rv &= native_to_network(&network->email, native.email); @@ -136,497 +561,246 @@ bool native_to_network(NetSPacket0x2713_Fixed *network, SPacket0x2713_Fixed nati return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2713_Fixed *native, NetSPacket0x2713_Fixed network) +bool network_to_native(SPacket_0x2713_Fixed *native, NetSPacket_0x2713_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->invalid, network.invalid); rv &= network_to_native(&native->email, network.email); rv &= network_to_native(&native->connect_until, network.connect_until); return rv; } - -struct RPacket0x2714_Fixed -{ - uint16_t packet_id; - uint32_t users; -}; -struct NetRPacket0x2714_Fixed -{ - Little16 packet_id; - Little32 users; -}; -static_assert(offsetof(NetRPacket0x2714_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2714_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2714_Fixed, users) == 2, "offsetof(NetRPacket0x2714_Fixed, users) == 2"); -static_assert(sizeof(NetRPacket0x2714_Fixed) == 6, "sizeof(NetRPacket0x2714_Fixed) == 6"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2714_Fixed *network, RPacket0x2714_Fixed native) +bool native_to_network(NetRPacket_0x2714_Fixed *network, RPacket_0x2714_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->users, native.users); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2714_Fixed *native, NetRPacket0x2714_Fixed network) +bool network_to_native(RPacket_0x2714_Fixed *native, NetRPacket_0x2714_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->users, network.users); return rv; } - -struct RPacket0x2715_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountEmail email; -}; -struct NetRPacket0x2715_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountEmail)> email; -}; -static_assert(offsetof(NetRPacket0x2715_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2715_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2715_Fixed, account_id) == 2, "offsetof(NetRPacket0x2715_Fixed, account_id) == 2"); -static_assert(offsetof(NetRPacket0x2715_Fixed, email) == 6, "offsetof(NetRPacket0x2715_Fixed, email) == 6"); -static_assert(sizeof(NetRPacket0x2715_Fixed) == 46, "sizeof(NetRPacket0x2715_Fixed) == 46"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2715_Fixed *network, RPacket0x2715_Fixed native) +bool native_to_network(NetRPacket_0x2715_Fixed *network, RPacket_0x2715_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->email, native.email); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2715_Fixed *native, NetRPacket0x2715_Fixed network) +bool network_to_native(RPacket_0x2715_Fixed *native, NetRPacket_0x2715_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->email, network.email); return rv; } - -struct RPacket0x2716_Fixed -{ - uint16_t packet_id; - uint32_t account_id; -}; -struct NetRPacket0x2716_Fixed -{ - Little16 packet_id; - Little32 account_id; -}; -static_assert(offsetof(NetRPacket0x2716_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2716_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2716_Fixed, account_id) == 2, "offsetof(NetRPacket0x2716_Fixed, account_id) == 2"); -static_assert(sizeof(NetRPacket0x2716_Fixed) == 6, "sizeof(NetRPacket0x2716_Fixed) == 6"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2716_Fixed *network, RPacket0x2716_Fixed native) +bool native_to_network(NetRPacket_0x2716_Fixed *network, RPacket_0x2716_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2716_Fixed *native, NetRPacket0x2716_Fixed network) +bool network_to_native(RPacket_0x2716_Fixed *native, NetRPacket_0x2716_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct SPacket0x2717_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountEmail email; - TimeT connect_until; -}; -struct NetSPacket0x2717_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountEmail)> email; - Little32 connect_until; -}; -static_assert(offsetof(NetSPacket0x2717_Fixed, packet_id) == 0, "offsetof(NetSPacket0x2717_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2717_Fixed, account_id) == 2, "offsetof(NetSPacket0x2717_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x2717_Fixed, email) == 6, "offsetof(NetSPacket0x2717_Fixed, email) == 6"); -static_assert(offsetof(NetSPacket0x2717_Fixed, connect_until) == 46, "offsetof(NetSPacket0x2717_Fixed, connect_until) == 46"); -static_assert(sizeof(NetSPacket0x2717_Fixed) == 50, "sizeof(NetSPacket0x2717_Fixed) == 50"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2717_Fixed *network, SPacket0x2717_Fixed native) +bool native_to_network(NetSPacket_0x2717_Fixed *network, SPacket_0x2717_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->email, native.email); rv &= native_to_network(&network->connect_until, native.connect_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2717_Fixed *native, NetSPacket0x2717_Fixed network) +bool network_to_native(SPacket_0x2717_Fixed *native, NetSPacket_0x2717_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->email, network.email); rv &= network_to_native(&native->connect_until, network.connect_until); return rv; } - -struct RPacket0x2720_Head -{ - uint16_t packet_id; - uint16_t packet_length; - uint32_t account_id; -}; -struct NetRPacket0x2720_Head -{ - Little16 packet_id; - Little16 packet_length; - Little32 account_id; -}; -static_assert(offsetof(NetRPacket0x2720_Head, packet_id) == 0, "offsetof(NetRPacket0x2720_Head, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2720_Head, packet_length) == 2, "offsetof(NetRPacket0x2720_Head, packet_length) == 2"); -static_assert(offsetof(NetRPacket0x2720_Head, account_id) == 4, "offsetof(NetRPacket0x2720_Head, account_id) == 4"); -static_assert(sizeof(NetRPacket0x2720_Head) == 8, "sizeof(NetRPacket0x2720_Head) == 8"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2720_Head *network, RPacket0x2720_Head native) +bool native_to_network(NetRPacket_0x2720_Head *network, RPacket_0x2720_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->packet_length, native.packet_length); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2720_Head *native, NetRPacket0x2720_Head network) +bool network_to_native(RPacket_0x2720_Head *native, NetRPacket_0x2720_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->packet_length, network.packet_length); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct RPacket0x2720_Repeat -{ - uint8_t c; -}; -struct NetRPacket0x2720_Repeat -{ - Byte c; -}; -static_assert(offsetof(NetRPacket0x2720_Repeat, c) == 0, "offsetof(NetRPacket0x2720_Repeat, c) == 0"); -static_assert(sizeof(NetRPacket0x2720_Repeat) == 1, "sizeof(NetRPacket0x2720_Repeat) == 1"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2720_Repeat *network, RPacket0x2720_Repeat native) +bool native_to_network(NetRPacket_0x2720_Repeat *network, RPacket_0x2720_Repeat native) { bool rv = true; rv &= native_to_network(&network->c, native.c); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2720_Repeat *native, NetRPacket0x2720_Repeat network) +bool network_to_native(RPacket_0x2720_Repeat *native, NetRPacket_0x2720_Repeat network) { bool rv = true; rv &= network_to_native(&native->c, network.c); return rv; } - -struct SPacket0x2721_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - GmLevel gm_level; -}; -struct NetSPacket0x2721_Fixed -{ - Little16 packet_id; - Little32 account_id; - Little32 gm_level; -}; -static_assert(offsetof(NetSPacket0x2721_Fixed, packet_id) == 0, "offsetof(NetSPacket0x2721_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2721_Fixed, account_id) == 2, "offsetof(NetSPacket0x2721_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x2721_Fixed, gm_level) == 6, "offsetof(NetSPacket0x2721_Fixed, gm_level) == 6"); -static_assert(sizeof(NetSPacket0x2721_Fixed) == 10, "sizeof(NetSPacket0x2721_Fixed) == 10"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2721_Fixed *network, SPacket0x2721_Fixed native) +bool native_to_network(NetSPacket_0x2721_Fixed *network, SPacket_0x2721_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->gm_level, native.gm_level); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2721_Fixed *native, NetSPacket0x2721_Fixed network) +bool network_to_native(SPacket_0x2721_Fixed *native, NetSPacket_0x2721_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->gm_level, network.gm_level); return rv; } - -struct RPacket0x2722_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountEmail old_email; - AccountEmail new_email; -}; -struct NetRPacket0x2722_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountEmail)> old_email; - NetString<sizeof(AccountEmail)> new_email; -}; -static_assert(offsetof(NetRPacket0x2722_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2722_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2722_Fixed, account_id) == 2, "offsetof(NetRPacket0x2722_Fixed, account_id) == 2"); -static_assert(offsetof(NetRPacket0x2722_Fixed, old_email) == 6, "offsetof(NetRPacket0x2722_Fixed, old_email) == 6"); -static_assert(offsetof(NetRPacket0x2722_Fixed, new_email) == 46, "offsetof(NetRPacket0x2722_Fixed, new_email) == 46"); -static_assert(sizeof(NetRPacket0x2722_Fixed) == 86, "sizeof(NetRPacket0x2722_Fixed) == 86"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2722_Fixed *network, RPacket0x2722_Fixed native) +bool native_to_network(NetRPacket_0x2722_Fixed *network, RPacket_0x2722_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->old_email, native.old_email); rv &= native_to_network(&network->new_email, native.new_email); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2722_Fixed *native, NetRPacket0x2722_Fixed network) +bool network_to_native(RPacket_0x2722_Fixed *native, NetRPacket_0x2722_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->old_email, network.old_email); rv &= network_to_native(&native->new_email, network.new_email); return rv; } - -struct SPacket0x2723_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - SEX sex; -}; -struct NetSPacket0x2723_Fixed -{ - Little16 packet_id; - Little32 account_id; - Byte sex; -}; -static_assert(offsetof(NetSPacket0x2723_Fixed, packet_id) == 0, "offsetof(NetSPacket0x2723_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2723_Fixed, account_id) == 2, "offsetof(NetSPacket0x2723_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x2723_Fixed, sex) == 6, "offsetof(NetSPacket0x2723_Fixed, sex) == 6"); -static_assert(sizeof(NetSPacket0x2723_Fixed) == 7, "sizeof(NetSPacket0x2723_Fixed) == 7"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2723_Fixed *network, SPacket0x2723_Fixed native) +bool native_to_network(NetSPacket_0x2723_Fixed *network, SPacket_0x2723_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->sex, native.sex); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2723_Fixed *native, NetSPacket0x2723_Fixed network) +bool network_to_native(SPacket_0x2723_Fixed *native, NetSPacket_0x2723_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->sex, network.sex); return rv; } - -struct RPacket0x2724_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - uint32_t status; -}; -struct NetRPacket0x2724_Fixed -{ - Little16 packet_id; - Little32 account_id; - Little32 status; -}; -static_assert(offsetof(NetRPacket0x2724_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2724_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2724_Fixed, account_id) == 2, "offsetof(NetRPacket0x2724_Fixed, account_id) == 2"); -static_assert(offsetof(NetRPacket0x2724_Fixed, status) == 6, "offsetof(NetRPacket0x2724_Fixed, status) == 6"); -static_assert(sizeof(NetRPacket0x2724_Fixed) == 10, "sizeof(NetRPacket0x2724_Fixed) == 10"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2724_Fixed *network, RPacket0x2724_Fixed native) +bool native_to_network(NetRPacket_0x2724_Fixed *network, RPacket_0x2724_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->status, native.status); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2724_Fixed *native, NetRPacket0x2724_Fixed network) +bool network_to_native(RPacket_0x2724_Fixed *native, NetRPacket_0x2724_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->status, network.status); return rv; } - -struct RPacket0x2725_Head -{ - uint16_t packet_id; - uint32_t account_id; - HumanTimeDiff deltas; -}; -struct NetRPacket0x2725_Head -{ - Little16 packet_id; - Little32 account_id; - NetHumanTimeDiff deltas; -}; -static_assert(offsetof(NetRPacket0x2725_Head, packet_id) == 0, "offsetof(NetRPacket0x2725_Head, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2725_Head, account_id) == 2, "offsetof(NetRPacket0x2725_Head, account_id) == 2"); -static_assert(offsetof(NetRPacket0x2725_Head, deltas) == 6, "offsetof(NetRPacket0x2725_Head, deltas) == 6"); -static_assert(sizeof(NetRPacket0x2725_Head) == 18, "sizeof(NetRPacket0x2725_Head) == 18"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2725_Head *network, RPacket0x2725_Head native) +bool native_to_network(NetRPacket_0x2725_Fixed *network, RPacket_0x2725_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->deltas, native.deltas); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2725_Head *native, NetRPacket0x2725_Head network) +bool network_to_native(RPacket_0x2725_Fixed *native, NetRPacket_0x2725_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->deltas, network.deltas); return rv; } - -struct RPacket0x2725_Repeat -{ - uint8_t c; -}; -struct NetRPacket0x2725_Repeat -{ - Byte c; -}; -static_assert(offsetof(NetRPacket0x2725_Repeat, c) == 0, "offsetof(NetRPacket0x2725_Repeat, c) == 0"); -static_assert(sizeof(NetRPacket0x2725_Repeat) == 1, "sizeof(NetRPacket0x2725_Repeat) == 1"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2725_Repeat *network, RPacket0x2725_Repeat native) +bool native_to_network(NetRPacket_0x2727_Fixed *network, RPacket_0x2727_Fixed native) { bool rv = true; - rv &= native_to_network(&network->c, native.c); - return rv; -} -inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2725_Repeat *native, NetRPacket0x2725_Repeat network) -{ - bool rv = true; - rv &= network_to_native(&native->c, network.c); - return rv; -} - -struct RPacket0x2727_Fixed -{ - uint16_t packet_id; - uint32_t account_id; -}; -struct NetRPacket0x2727_Fixed -{ - Little16 packet_id; - Little32 account_id; -}; -static_assert(offsetof(NetRPacket0x2727_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2727_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2727_Fixed, account_id) == 2, "offsetof(NetRPacket0x2727_Fixed, account_id) == 2"); -static_assert(sizeof(NetRPacket0x2727_Fixed) == 6, "sizeof(NetRPacket0x2727_Fixed) == 6"); -inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2727_Fixed *network, RPacket0x2727_Fixed native) -{ - bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2727_Fixed *native, NetRPacket0x2727_Fixed network) +bool network_to_native(RPacket_0x2727_Fixed *native, NetRPacket_0x2727_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct RPacket0x2728_Head -{ - uint16_t packet_id; - uint16_t packet_length; - uint32_t account_id; -}; -struct NetRPacket0x2728_Head -{ - Little16 packet_id; - Little16 packet_length; - Little32 account_id; -}; -static_assert(offsetof(NetRPacket0x2728_Head, packet_id) == 0, "offsetof(NetRPacket0x2728_Head, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2728_Head, packet_length) == 2, "offsetof(NetRPacket0x2728_Head, packet_length) == 2"); -static_assert(offsetof(NetRPacket0x2728_Head, account_id) == 4, "offsetof(NetRPacket0x2728_Head, account_id) == 4"); -static_assert(sizeof(NetRPacket0x2728_Head) == 8, "sizeof(NetRPacket0x2728_Head) == 8"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2728_Head *network, RPacket0x2728_Head native) +bool native_to_network(NetRPacket_0x2728_Head *network, RPacket_0x2728_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->packet_length, native.packet_length); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2728_Head *native, NetRPacket0x2728_Head network) +bool network_to_native(RPacket_0x2728_Head *native, NetRPacket_0x2728_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->packet_length, network.packet_length); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct RPacket0x2728_Repeat -{ - VarName name; - uint32_t value; -}; -struct NetRPacket0x2728_Repeat -{ - NetString<sizeof(VarName)> name; - Little32 value; -}; -static_assert(offsetof(NetRPacket0x2728_Repeat, name) == 0, "offsetof(NetRPacket0x2728_Repeat, name) == 0"); -static_assert(offsetof(NetRPacket0x2728_Repeat, value) == 32, "offsetof(NetRPacket0x2728_Repeat, value) == 32"); -static_assert(sizeof(NetRPacket0x2728_Repeat) == 36, "sizeof(NetRPacket0x2728_Repeat) == 36"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2728_Repeat *network, RPacket0x2728_Repeat native) +bool native_to_network(NetRPacket_0x2728_Repeat *network, RPacket_0x2728_Repeat native) { bool rv = true; rv &= native_to_network(&network->name, native.name); @@ -634,64 +808,33 @@ bool native_to_network(NetRPacket0x2728_Repeat *network, RPacket0x2728_Repeat na return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2728_Repeat *native, NetRPacket0x2728_Repeat network) +bool network_to_native(RPacket_0x2728_Repeat *native, NetRPacket_0x2728_Repeat network) { bool rv = true; rv &= network_to_native(&native->name, network.name); rv &= network_to_native(&native->value, network.value); return rv; } - -struct SPacket0x2729_Head -{ - uint16_t packet_id; - uint16_t packet_length; - uint32_t account_id; -}; -struct NetSPacket0x2729_Head -{ - Little16 packet_id; - Little16 packet_length; - Little32 account_id; -}; -static_assert(offsetof(NetSPacket0x2729_Head, packet_id) == 0, "offsetof(NetSPacket0x2729_Head, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2729_Head, packet_length) == 2, "offsetof(NetSPacket0x2729_Head, packet_length) == 2"); -static_assert(offsetof(NetSPacket0x2729_Head, account_id) == 4, "offsetof(NetSPacket0x2729_Head, account_id) == 4"); -static_assert(sizeof(NetSPacket0x2729_Head) == 8, "sizeof(NetSPacket0x2729_Head) == 8"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2729_Head *network, SPacket0x2729_Head native) +bool native_to_network(NetSPacket_0x2729_Head *network, SPacket_0x2729_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->packet_length, native.packet_length); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2729_Head *native, NetSPacket0x2729_Head network) +bool network_to_native(SPacket_0x2729_Head *native, NetSPacket_0x2729_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->packet_length, network.packet_length); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct SPacket0x2729_Repeat -{ - VarName name; - uint32_t value; -}; -struct NetSPacket0x2729_Repeat -{ - NetString<sizeof(VarName)> name; - Little32 value; -}; -static_assert(offsetof(NetSPacket0x2729_Repeat, name) == 0, "offsetof(NetSPacket0x2729_Repeat, name) == 0"); -static_assert(offsetof(NetSPacket0x2729_Repeat, value) == 32, "offsetof(NetSPacket0x2729_Repeat, value) == 32"); -static_assert(sizeof(NetSPacket0x2729_Repeat) == 36, "sizeof(NetSPacket0x2729_Repeat) == 36"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2729_Repeat *network, SPacket0x2729_Repeat native) +bool native_to_network(NetSPacket_0x2729_Repeat *network, SPacket_0x2729_Repeat native) { bool rv = true; rv &= native_to_network(&network->name, native.name); @@ -699,154 +842,83 @@ bool native_to_network(NetSPacket0x2729_Repeat *network, SPacket0x2729_Repeat na return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2729_Repeat *native, NetSPacket0x2729_Repeat network) +bool network_to_native(SPacket_0x2729_Repeat *native, NetSPacket_0x2729_Repeat network) { bool rv = true; rv &= network_to_native(&native->name, network.name); rv &= network_to_native(&native->value, network.value); return rv; } - -struct RPacket0x272a_Fixed -{ - uint16_t packet_id; - uint32_t account_id; -}; -struct NetRPacket0x272a_Fixed -{ - Little16 packet_id; - Little32 account_id; -}; -static_assert(offsetof(NetRPacket0x272a_Fixed, packet_id) == 0, "offsetof(NetRPacket0x272a_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x272a_Fixed, account_id) == 2, "offsetof(NetRPacket0x272a_Fixed, account_id) == 2"); -static_assert(sizeof(NetRPacket0x272a_Fixed) == 6, "sizeof(NetRPacket0x272a_Fixed) == 6"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x272a_Fixed *network, RPacket0x272a_Fixed native) +bool native_to_network(NetRPacket_0x272a_Fixed *network, RPacket_0x272a_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x272a_Fixed *native, NetRPacket0x272a_Fixed network) +bool network_to_native(RPacket_0x272a_Fixed *native, NetRPacket_0x272a_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct SPacket0x2730_Fixed -{ - uint16_t packet_id; -}; -struct NetSPacket0x2730_Fixed -{ - Little16 packet_id; -}; -static_assert(offsetof(NetSPacket0x2730_Fixed, packet_id) == 0, "offsetof(NetSPacket0x2730_Fixed, packet_id) == 0"); -static_assert(sizeof(NetSPacket0x2730_Fixed) == 2, "sizeof(NetSPacket0x2730_Fixed) == 2"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2730_Fixed *network, SPacket0x2730_Fixed native) +bool native_to_network(NetSPacket_0x2730_Fixed *network, SPacket_0x2730_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->account_id, native.account_id); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2730_Fixed *native, NetSPacket0x2730_Fixed network) +bool network_to_native(SPacket_0x2730_Fixed *native, NetSPacket_0x2730_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->account_id, network.account_id); return rv; } - -struct SPacket0x2731_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - uint8_t ban_not_status; - TimeT status_or_ban_until; -}; -struct NetSPacket0x2731_Fixed -{ - Little16 packet_id; - Little32 account_id; - Byte ban_not_status; - Little32 status_or_ban_until; -}; -static_assert(offsetof(NetSPacket0x2731_Fixed, packet_id) == 0, "offsetof(NetSPacket0x2731_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2731_Fixed, account_id) == 2, "offsetof(NetSPacket0x2731_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x2731_Fixed, ban_not_status) == 6, "offsetof(NetSPacket0x2731_Fixed, ban_not_status) == 6"); -static_assert(offsetof(NetSPacket0x2731_Fixed, status_or_ban_until) == 7, "offsetof(NetSPacket0x2731_Fixed, status_or_ban_until) == 7"); -static_assert(sizeof(NetSPacket0x2731_Fixed) == 11, "sizeof(NetSPacket0x2731_Fixed) == 11"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2731_Fixed *network, SPacket0x2731_Fixed native) +bool native_to_network(NetSPacket_0x2731_Fixed *network, SPacket_0x2731_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->ban_not_status, native.ban_not_status); rv &= native_to_network(&network->status_or_ban_until, native.status_or_ban_until); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2731_Fixed *native, NetSPacket0x2731_Fixed network) +bool network_to_native(SPacket_0x2731_Fixed *native, NetSPacket_0x2731_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->ban_not_status, network.ban_not_status); rv &= network_to_native(&native->status_or_ban_until, network.status_or_ban_until); return rv; } - -struct SPacket0x2732_Head -{ - uint16_t packet_id; - uint16_t packet_length; -}; -struct NetSPacket0x2732_Head -{ - Little16 packet_id; - Little16 packet_length; -}; -static_assert(offsetof(NetSPacket0x2732_Head, packet_id) == 0, "offsetof(NetSPacket0x2732_Head, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2732_Head, packet_length) == 2, "offsetof(NetSPacket0x2732_Head, packet_length) == 2"); -static_assert(sizeof(NetSPacket0x2732_Head) == 4, "sizeof(NetSPacket0x2732_Head) == 4"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2732_Head *network, SPacket0x2732_Head native) +bool native_to_network(NetSPacket_0x2732_Head *network, SPacket_0x2732_Head native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); - rv &= native_to_network(&network->packet_length, native.packet_length); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); + rv &= native_to_network(&network->magic_packet_length, native.magic_packet_length); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2732_Head *native, NetSPacket0x2732_Head network) +bool network_to_native(SPacket_0x2732_Head *native, NetSPacket_0x2732_Head network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); - rv &= network_to_native(&native->packet_length, network.packet_length); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); + rv &= network_to_native(&native->magic_packet_length, network.magic_packet_length); return rv; } - -struct SPacket0x2732_Repeat -{ - uint32_t account_id; - GmLevel gm_level; -}; -struct NetSPacket0x2732_Repeat -{ - Little32 account_id; - Byte gm_level; -}; -static_assert(offsetof(NetSPacket0x2732_Repeat, account_id) == 0, "offsetof(NetSPacket0x2732_Repeat, account_id) == 0"); -static_assert(offsetof(NetSPacket0x2732_Repeat, gm_level) == 4, "offsetof(NetSPacket0x2732_Repeat, gm_level) == 4"); -static_assert(sizeof(NetSPacket0x2732_Repeat) == 5, "sizeof(NetSPacket0x2732_Repeat) == 5"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2732_Repeat *network, SPacket0x2732_Repeat native) +bool native_to_network(NetSPacket_0x2732_Repeat *network, SPacket_0x2732_Repeat native) { bool rv = true; rv &= native_to_network(&network->account_id, native.account_id); @@ -854,88 +926,50 @@ bool native_to_network(NetSPacket0x2732_Repeat *network, SPacket0x2732_Repeat na return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2732_Repeat *native, NetSPacket0x2732_Repeat network) +bool network_to_native(SPacket_0x2732_Repeat *native, NetSPacket_0x2732_Repeat network) { bool rv = true; rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->gm_level, network.gm_level); return rv; } - -struct RPacket0x2740_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - AccountPass old_pass; - AccountPass new_pass; -}; -struct NetRPacket0x2740_Fixed -{ - Little16 packet_id; - Little32 account_id; - NetString<sizeof(AccountPass)> old_pass; - NetString<sizeof(AccountPass)> new_pass; -}; -static_assert(offsetof(NetRPacket0x2740_Fixed, packet_id) == 0, "offsetof(NetRPacket0x2740_Fixed, packet_id) == 0"); -static_assert(offsetof(NetRPacket0x2740_Fixed, account_id) == 2, "offsetof(NetRPacket0x2740_Fixed, account_id) == 2"); -static_assert(offsetof(NetRPacket0x2740_Fixed, old_pass) == 6, "offsetof(NetRPacket0x2740_Fixed, old_pass) == 6"); -static_assert(offsetof(NetRPacket0x2740_Fixed, new_pass) == 30, "offsetof(NetRPacket0x2740_Fixed, new_pass) == 30"); -static_assert(sizeof(NetRPacket0x2740_Fixed) == 54, "sizeof(NetRPacket0x2740_Fixed) == 54"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetRPacket0x2740_Fixed *network, RPacket0x2740_Fixed native) +bool native_to_network(NetRPacket_0x2740_Fixed *network, RPacket_0x2740_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->old_pass, native.old_pass); rv &= native_to_network(&network->new_pass, native.new_pass); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(RPacket0x2740_Fixed *native, NetRPacket0x2740_Fixed network) +bool network_to_native(RPacket_0x2740_Fixed *native, NetRPacket_0x2740_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->old_pass, network.old_pass); rv &= network_to_native(&native->new_pass, network.new_pass); return rv; } - -struct SPacket0x2741_Fixed -{ - uint16_t packet_id; - uint32_t account_id; - uint8_t status; -}; -struct NetSPacket0x2741_Fixed -{ - Little16 packet_id; - Little32 account_id; - Byte status; -}; -static_assert(offsetof(NetSPacket0x2741_Fixed, packet_id) == 0, "offsetof(NetSPacket0x2741_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x2741_Fixed, account_id) == 2, "offsetof(NetSPacket0x2741_Fixed, account_id) == 2"); -static_assert(offsetof(NetSPacket0x2741_Fixed, status) == 6, "offsetof(NetSPacket0x2741_Fixed, status) == 6"); -static_assert(sizeof(NetSPacket0x2741_Fixed) == 7, "sizeof(NetSPacket0x2741_Fixed) == 7"); inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x2741_Fixed *network, SPacket0x2741_Fixed native) +bool native_to_network(NetSPacket_0x2741_Fixed *network, SPacket_0x2741_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->account_id, native.account_id); rv &= native_to_network(&network->status, native.status); return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x2741_Fixed *native, NetSPacket0x2741_Fixed network) +bool network_to_native(SPacket_0x2741_Fixed *native, NetSPacket_0x2741_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->account_id, network.account_id); rv &= network_to_native(&native->status, network.status); return rv; } - #endif // TMWA_PROTO2_LOGIN_CHAR_HPP diff --git a/src/proto2/login-char_test.cpp b/src/proto2/login-char_test.cpp index 9ae0f5a..ec25fb5 100644 --- a/src/proto2/login-char_test.cpp +++ b/src/proto2/login-char_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead diff --git a/src/proto2/login-user.hpp b/src/proto2/login-user.hpp index 4c71e8a..ee00e9a 100644 --- a/src/proto2/login-user.hpp +++ b/src/proto2/login-user.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead @@ -28,4 +28,6 @@ // This is a public protocol, and changes require client cooperation + + #endif // TMWA_PROTO2_LOGIN_USER_HPP diff --git a/src/proto2/login-user_test.cpp b/src/proto2/login-user_test.cpp index 3b623b6..293a458 100644 --- a/src/proto2/login-user_test.cpp +++ b/src/proto2/login-user_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead diff --git a/src/proto2/map-user.hpp b/src/proto2/map-user.hpp index da59c40..90102f7 100644 --- a/src/proto2/map-user.hpp +++ b/src/proto2/map-user.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead @@ -27,36 +27,41 @@ // This is a public protocol, and changes require client cooperation -struct SPacket0x0212_Fixed +struct SPacket_0x0212_Fixed { - uint16_t packet_id; - BlockId npc_id; - uint16_t command; - BlockId id; - uint16_t x; - uint16_t y; + using NetType = NetSPacket_0x0212_Fixed; + static const uint16_t PACKET_ID = 0x0212; + + uint16_t magic_packet_id = PACKET_ID; + BlockId npc_id = {}; + uint16_t command = {}; + BlockId id = {}; + uint16_t x = {}; + uint16_t y = {}; }; -struct NetSPacket0x0212_Fixed + +struct NetSPacket_0x0212_Fixed { - Little16 packet_id; + Little16 magic_packet_id; Little32 npc_id; Little16 command; Little32 id; Little16 x; Little16 y; }; -static_assert(offsetof(NetSPacket0x0212_Fixed, packet_id) == 0, "offsetof(NetSPacket0x0212_Fixed, packet_id) == 0"); -static_assert(offsetof(NetSPacket0x0212_Fixed, npc_id) == 2, "offsetof(NetSPacket0x0212_Fixed, npc_id) == 2"); -static_assert(offsetof(NetSPacket0x0212_Fixed, command) == 6, "offsetof(NetSPacket0x0212_Fixed, command) == 6"); -static_assert(offsetof(NetSPacket0x0212_Fixed, id) == 8, "offsetof(NetSPacket0x0212_Fixed, id) == 8"); -static_assert(offsetof(NetSPacket0x0212_Fixed, x) == 12, "offsetof(NetSPacket0x0212_Fixed, x) == 12"); -static_assert(offsetof(NetSPacket0x0212_Fixed, y) == 14, "offsetof(NetSPacket0x0212_Fixed, y) == 14"); -static_assert(sizeof(NetSPacket0x0212_Fixed) == 16, "sizeof(NetSPacket0x0212_Fixed) == 16"); +static_assert(offsetof(NetSPacket_0x0212_Fixed, magic_packet_id) == 0, "offsetof(NetSPacket_0x0212_Fixed, magic_packet_id) == 0"); +static_assert(offsetof(NetSPacket_0x0212_Fixed, npc_id) == 2, "offsetof(NetSPacket_0x0212_Fixed, npc_id) == 2"); +static_assert(offsetof(NetSPacket_0x0212_Fixed, command) == 6, "offsetof(NetSPacket_0x0212_Fixed, command) == 6"); +static_assert(offsetof(NetSPacket_0x0212_Fixed, id) == 8, "offsetof(NetSPacket_0x0212_Fixed, id) == 8"); +static_assert(offsetof(NetSPacket_0x0212_Fixed, x) == 12, "offsetof(NetSPacket_0x0212_Fixed, x) == 12"); +static_assert(offsetof(NetSPacket_0x0212_Fixed, y) == 14, "offsetof(NetSPacket_0x0212_Fixed, y) == 14"); +static_assert(sizeof(NetSPacket_0x0212_Fixed) == 16, "sizeof(NetSPacket_0x0212_Fixed) == 16"); + inline __attribute__((warn_unused_result)) -bool native_to_network(NetSPacket0x0212_Fixed *network, SPacket0x0212_Fixed native) +bool native_to_network(NetSPacket_0x0212_Fixed *network, SPacket_0x0212_Fixed native) { bool rv = true; - rv &= native_to_network(&network->packet_id, native.packet_id); + rv &= native_to_network(&network->magic_packet_id, native.magic_packet_id); rv &= native_to_network(&network->npc_id, native.npc_id); rv &= native_to_network(&network->command, native.command); rv &= native_to_network(&network->id, native.id); @@ -65,10 +70,10 @@ bool native_to_network(NetSPacket0x0212_Fixed *network, SPacket0x0212_Fixed nati return rv; } inline __attribute__((warn_unused_result)) -bool network_to_native(SPacket0x0212_Fixed *native, NetSPacket0x0212_Fixed network) +bool network_to_native(SPacket_0x0212_Fixed *native, NetSPacket_0x0212_Fixed network) { bool rv = true; - rv &= network_to_native(&native->packet_id, network.packet_id); + rv &= network_to_native(&native->magic_packet_id, network.magic_packet_id); rv &= network_to_native(&native->npc_id, network.npc_id); rv &= network_to_native(&native->command, network.command); rv &= network_to_native(&native->id, network.id); @@ -77,5 +82,4 @@ bool network_to_native(SPacket0x0212_Fixed *native, NetSPacket0x0212_Fixed netwo return rv; } - #endif // TMWA_PROTO2_MAP_USER_HPP diff --git a/src/proto2/map-user_test.cpp b/src/proto2/map-user_test.cpp index adbdf6f..7d404fe 100644 --- a/src/proto2/map-user_test.cpp +++ b/src/proto2/map-user_test.cpp @@ -6,16 +6,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // This is a generated file, edit tools/protocol.py instead diff --git a/src/proto2/types.hpp b/src/proto2/types.hpp index f69d943..b047865 100644 --- a/src/proto2/types.hpp +++ b/src/proto2/types.hpp @@ -7,16 +7,16 @@ // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. # include "fwd.hpp" @@ -32,24 +32,24 @@ # include "../mmo/strs.hpp" # include "../mmo/utils.hpp" # include "../mmo/version.hpp" -template <class T> +template<class T> bool native_to_network(T *network, T native) { *network = native; return true; } -template <class T> +template<class T> bool network_to_native(T *native, T network) { *native = network; return true; } -template <size_t N> +template<size_t N> struct NetString { char data[N]; }; -template <size_t N> +template<size_t N> bool native_to_network(NetString<N> *network, VString<N-1> native) { // basically WBUF_STRING @@ -59,7 +59,7 @@ bool native_to_network(NetString<N> *network, VString<N-1> native) std::fill(mid, end, '\0'); return true; } -template <size_t N> +template<size_t N> bool network_to_native(VString<N-1> *native, NetString<N> network) { // basically RBUF_STRING @@ -70,6 +70,25 @@ bool network_to_native(VString<N-1> *native, NetString<N> network) return true; } +template<class T, size_t N> +struct SkewedLength +{ + T data; +}; +template<class T, size_t N, class U> +bool native_to_network(SkewedLength<T, N> *network, U native) +{ + native -= N; + return native_to_network(&network->data, native); +} +template<class T, size_t N, class U> +bool network_to_native(U *native, SkewedLength<T, N> network) +{ + bool rv = network_to_native(native, network.data); + *native += N; + return rv; +} + inline __attribute__((warn_unused_result)) bool native_to_network(Byte *network, SEX native) { @@ -174,6 +193,23 @@ bool network_to_native(ItemNameId *native, Little16 network) return rv; } inline __attribute__((warn_unused_result)) +bool native_to_network(Little32 *network, ItemNameId native) +{ + bool rv = true; + uint32_t tmp = unwrap<ItemNameId>(native); + rv &= native_to_network(network, tmp); + return rv; +} +inline __attribute__((warn_unused_result)) +bool network_to_native(ItemNameId *native, Little32 network) +{ + bool rv = true; + uint32_t tmp; + rv &= network_to_native(&tmp, network); + *native = wrap<ItemNameId>(tmp); + return rv; +} +inline __attribute__((warn_unused_result)) bool native_to_network(Little32 *network, BlockId native) { bool rv = true; diff --git a/tools/protocol.py b/tools/protocol.py index d51f242..e3d6529 100755 --- a/tools/protocol.py +++ b/tools/protocol.py @@ -8,16 +8,16 @@ # This file is part of The Mana World (Athena server) # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by +# it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# GNU Affero General Public License for more details. # -# You should have received a copy of the GNU General Public License +# You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. import glob @@ -36,16 +36,16 @@ copyright = '''// {filename} - {description} // This file is part of The Mana World (Athena server) // // This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Affero General Public License for more details. // -// You should have received a copy of the GNU General Public License +// You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. ''' @@ -187,25 +187,50 @@ class WrappedType(Type): f.write(' return rv;\n') f.write('}\n') +class SkewLengthType(Type): + __slots__ = ('type', 'skew') + + def __init__(self, ty, skew): + self.type = ty + self.skew = skew + + def native_tag(self): + return self.type.native_tag() + + def network_tag(self): + return 'SkewedLength<%s, %d>' % (self.type.network_tag(), self.skew) + + def dumpx(self): + # not registered properly, so the method name is wrong + # TODO remind myself to kill this code with fire before release + # not implemented properly, uses a template in the meta instead + # insert another comment here so that it lines up properly + pass + class StructType(Type): - __slots__ = ('name', 'fields', 'size') + __slots__ = ('id', 'name', 'fields', 'size') - def __init__(self, name, fields, size): + def __init__(self, id, name, fields, size): + self.id = id self.name = name self.fields = fields self.size = size - def dump(self, f): - self.dump_native(f) - self.dump_network(f) - self.dump_convert(f) - f.write('\n') + def dump_fwd(self, fwd): + fwd.write('struct %s;\n' % self.name) + fwd.write('struct Net%s;\n' % self.name) def dump_native(self, f): name = self.name f.write('struct %s\n{\n' % name) + if self.id is not None: + f.write(' using NetType = Net%s;\n' % name) + f.write(' static const uint16_t PACKET_ID = 0x%04x;\n\n' % self.id) for (o, l, n) in self.fields: - f.write(' %s %s;\n' % (l.native_tag(), n)) + if n == 'magic_packet_id': + f.write(' %s %s = PACKET_ID;\n' % (l.native_tag(), n)) + else: + f.write(' %s %s = {};\n' % (l.native_tag(), n)) f.write('};\n') def dump_network(self, f): @@ -328,8 +353,17 @@ class FixedPacket(object): def __init__(self, fixed_struct): self.fixed_struct = fixed_struct - def dump(self, f): - self.fixed_struct.dump(f) + def dump_fwd(self, fwd): + self.fixed_struct.dump_fwd(fwd) + + def dump_native(self, f): + self.fixed_struct.dump_native(f) + + def dump_network(self, f): + self.fixed_struct.dump_network(f) + + def dump_convert(self, f): + self.fixed_struct.dump_convert(f) class VarPacket(object): __slots__ = ('head_struct', 'repeat_struct') @@ -338,11 +372,23 @@ class VarPacket(object): self.head_struct = head_struct self.repeat_struct = repeat_struct - def dump(self, f): - self.head_struct.dump(f) - self.repeat_struct.dump(f) + def dump_fwd(self, fwd): + self.head_struct.dump_fwd(fwd) + self.repeat_struct.dump_fwd(fwd) -def packet(name, + def dump_native(self, f): + self.head_struct.dump_native(f) + self.repeat_struct.dump_native(f) + + def dump_network(self, f): + self.head_struct.dump_network(f) + self.repeat_struct.dump_network(f) + + def dump_convert(self, f): + self.head_struct.dump_convert(f) + self.repeat_struct.dump_convert(f) + +def packet(id, name, fixed=None, fixed_size=None, head=None, head_size=None, repeat=None, repeat_size=None, @@ -354,12 +400,12 @@ def packet(name, if fixed is not None: assert not head and not repeat return FixedPacket( - StructType('%s_Fixed' % name, fixed, fixed_size)) + StructType(id, '%s_Fixed' % name, fixed, fixed_size)) else: assert head and repeat return VarPacket( - StructType('%s_Head' % name, head, head_size), - StructType('%s_Repeat' % name, repeat, repeat_size)) + StructType(id, '%s_Head' % name, head, head_size), + StructType(id, '%s_Repeat' % name, repeat, repeat_size)) class Channel(object): @@ -371,14 +417,14 @@ class Channel(object): self.packets = [] def s(self, id, **kwargs): - name = 'SPacket0x%04x' % id - self.packets.append(packet(name, **kwargs)) + name = 'SPacket_0x%04x' % id + self.packets.append(packet(id, name, **kwargs)) def r(self, id, **kwargs): - name = 'RPacket0x%04x' % id - self.packets.append(packet(name, **kwargs)) + name = 'RPacket_0x%04x' % id + self.packets.append(packet(id, name, **kwargs)) - def dump(self, outdir): + def dump(self, outdir, fwd): server = self.server client = self.client header = '%s-%s.hpp' % (server, client) @@ -402,7 +448,16 @@ class Channel(object): f.write('// This is an internal protocol, and can be changed without notice\n') f.write('\n') for p in self.packets: - p.dump(f) + p.dump_fwd(fwd) + fwd.write('\n') + for p in self.packets: + p.dump_native(f) + f.write('\n') + for p in self.packets: + p.dump_network(f) + f.write('\n') + for p in self.packets: + p.dump_convert(f) f.write('\n') f.write('#endif // %s\n' % define) @@ -419,6 +474,10 @@ class Channel(object): ident_translation = ''.join(chr(c) if chr(c).isalnum() else '_' for c in range(256)) def ident(s): + if s == 'packet id': + return 'magic_packet_id' + if s == 'packet length': + return 'magic_packet_length' return s.translate(ident_translation) @@ -466,9 +525,13 @@ class Context(object): f.write(copyright.format(filename=header, description=desc)) f.write('\n') f.write('# include "%s"\n\n' % sanity) - f.write('// TODO put stuff here\n') + + for ch in self._channels: + ch.dump(outdir, f) + f.write('\n') f.write('#endif // %s\n' % define) + with open(os.path.join(outdir, 'types.hpp'), 'w') as f: header = '%s/types.hpp' % proto2 desc = 'Forward declarations of packet component types' @@ -484,22 +547,22 @@ class Context(object): # this is writing another file inc.testcase(outdir) - f.write('template <class T>\n') + f.write('template<class T>\n') f.write('bool native_to_network(T *network, T native)\n{\n') f.write(' *network = native;\n') f.write(' return true;\n') f.write('}\n') - f.write('template <class T>\n') + f.write('template<class T>\n') f.write('bool network_to_native(T *native, T network)\n{\n') f.write(' *native = network;\n') f.write(' return true;\n') f.write('}\n') - f.write('template <size_t N>\n') + f.write('template<size_t N>\n') f.write('struct NetString\n{\n') f.write(' char data[N];\n') f.write('};\n') - f.write('template <size_t N>\n') + f.write('template<size_t N>\n') f.write('bool native_to_network(NetString<N> *network, VString<N-1> native)\n{\n') f.write(' // basically WBUF_STRING\n') f.write(' char *const begin = network->data;\n') @@ -508,7 +571,7 @@ class Context(object): f.write(' std::fill(mid, end, \'\\0\');\n') f.write(' return true;\n') f.write('}\n') - f.write('template <size_t N>\n') + f.write('template<size_t N>\n') f.write('bool network_to_native(VString<N-1> *native, NetString<N> network)\n{\n') f.write(' // basically RBUF_STRING\n') f.write(' const char *const begin = network.data;\n') @@ -518,11 +581,27 @@ class Context(object): f.write(' return true;\n') f.write('}\n') f.write('\n') + + f.write('template<class T, size_t N>\n') + f.write('struct SkewedLength\n{\n') + f.write(' T data;\n') + f.write('};\n') + f.write('template<class T, size_t N, class U>\n') + f.write('bool native_to_network(SkewedLength<T, N> *network, U native)\n{\n') + f.write(' native -= N;\n') + f.write(' return native_to_network(&network->data, native);\n') + f.write('}\n') + f.write('template<class T, size_t N, class U>\n') + f.write('bool network_to_native(U *native, SkewedLength<T, N> network)\n{\n') + f.write(' bool rv = network_to_native(native, network.data);\n') + f.write(' *native += N;\n') + f.write(' return rv;\n') + f.write('}\n') + f.write('\n') + for ty in self._types: ty.dump(f) f.write('#endif // %s\n' % define) - for ch in self._channels: - ch.dump(outdir) # types @@ -547,6 +626,7 @@ class Context(object): return rv def struct(self, name, body): + # TODO fix this rv = StructType(name, body) self._types.append(rv) return rv @@ -643,12 +723,15 @@ def main(): u32 = ctx.provided(uint32_t, Little32) u64 = ctx.provided(uint64_t, Little64) + sex_char = ctx.provided(SEX, NeutralType('char')) + sex = ctx.enum(SEX, u8) species = ctx.wrap(Species, u16) account_id = ctx.wrap(AccountId, u32) char_id = ctx.wrap(CharId, u32) party_id = ctx.wrap(PartyId, u32) item_name_id = ctx.wrap(ItemNameId, u16) + item_name_id4 = ctx.wrap(ItemNameId, u32) block_id = ctx.wrap(BlockId, u32) time32 = ctx.provided(TimeT, Little32) @@ -746,7 +829,7 @@ def main(): login_char.r(0x2712, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, u32, 'login id1'), at(10, u32, 'login id2'), at(14, sex, 'sex'), @@ -757,7 +840,7 @@ def main(): login_char.s(0x2713, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, u8, 'invalid'), at(7, account_email, 'email'), at(47, time32, 'connect until'), @@ -774,7 +857,7 @@ def main(): login_char.r(0x2715, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_email, 'email'), ], fixed_size=46, @@ -782,14 +865,14 @@ def main(): login_char.r(0x2716, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), ], fixed_size=6, ) login_char.s(0x2717, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_email, 'email'), at(46, time32, 'connect until'), ], @@ -799,7 +882,7 @@ def main(): head=[ at(0, u16, 'packet id'), at(2, u16, 'packet length'), - at(4, u32, 'account id'), + at(4, account_id, 'account id'), ], head_size=8, repeat=[at(0, u8, 'c')], @@ -808,7 +891,7 @@ def main(): login_char.s(0x2721, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, gm, 'gm level'), ], fixed_size=10, @@ -816,7 +899,7 @@ def main(): login_char.r(0x2722, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_email, 'old email'), at(46, account_email, 'new email'), ], @@ -825,7 +908,7 @@ def main(): login_char.s(0x2723, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, sex, 'sex'), ], fixed_size=7, @@ -833,27 +916,25 @@ def main(): login_char.r(0x2724, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, u32, 'status'), ], fixed_size=10, ) login_char.r(0x2725, - head=[ + fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, human_time_diff, 'deltas'), ], - head_size=18, - repeat=[at(0, u8, 'c')], - repeat_size=1, + fixed_size=18, ) # evil packet, see also 0x794e - login_admin.r(0x2726, + login_admin.s(0x2726, head=[ at(0, u16, 'packet id'), at(2, u16, 'unused'), - at(4, u32, 'string length'), + at(4, SkewLengthType(u32, 8), 'magic packet length'), ], head_size=8, repeat=[ @@ -864,7 +945,7 @@ def main(): login_char.r(0x2727, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), ], fixed_size=6, ) @@ -876,7 +957,7 @@ def main(): head=[ at(0, u16, 'packet id'), at(2, u16, 'packet length'), - at(4, u32, 'account id'), + at(4, account_id, 'account id'), ], head_size=8, repeat=[ @@ -888,20 +969,21 @@ def main(): login_char.r(0x272a, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), ], fixed_size=6, ) login_char.s(0x2730, fixed=[ at(0, u16, 'packet id'), + at(2, account_id, 'account id'), ], - fixed_size=2, + fixed_size=6, ) login_char.s(0x2731, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, u8, 'ban not status'), at(7, time32, 'status or ban until'), ], @@ -914,7 +996,7 @@ def main(): ], head_size=4, repeat=[ - at(0, u32, 'account id'), + at(0, account_id, 'account id'), at(4, gm1, 'gm level'), ], repeat_size=5, @@ -922,7 +1004,7 @@ def main(): login_char.r(0x2740, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_pass, 'old pass'), at(30, account_pass, 'new pass'), ], @@ -931,7 +1013,7 @@ def main(): login_char.s(0x2741, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, u8, 'status'), ], fixed_size=7, @@ -960,14 +1042,12 @@ def main(): # login admin login_admin.r(0x7920, - head=[ + fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'start account id'), - at(6, u32, 'end account id'), + at(2, account_id, 'start account id'), + at(6, account_id, 'end account id'), ], - head_size=10, - repeat=[at(0, u8, 'c')], - repeat_size=1, + fixed_size=10, ) login_admin.s(0x7921, head=[ @@ -976,7 +1056,7 @@ def main(): ], head_size=4, repeat=[ - at(0, u32, 'account id'), + at(0, account_id, 'account id'), at(4, gm1, 'gm level'), at(5, account_name, 'account name'), at(29, sex, 'sex'), @@ -988,8 +1068,8 @@ def main(): login_admin.r(0x7924, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'source item id'), - at(6, u32, 'dest item id'), + at(2, item_name_id4, 'source item id'), + at(6, item_name_id4, 'dest item id'), ], fixed_size=10, ) @@ -1004,7 +1084,7 @@ def main(): at(0, u16, 'packet id'), at(2, account_name, 'account name'), at(26, account_pass, 'password'), - at(50, sex, 'sex'), + at(50, sex_char, 'sex'), at(51, account_email, 'email'), ], fixed_size=91, @@ -1012,7 +1092,7 @@ def main(): login_admin.s(0x7931, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1027,7 +1107,7 @@ def main(): login_admin.s(0x7933, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1043,7 +1123,7 @@ def main(): login_admin.s(0x7935, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1060,10 +1140,11 @@ def main(): login_admin.s(0x7937, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), + at(30, u32, 'status'), ], - fixed_size=30, + fixed_size=34, ) login_admin.r(0x7938, fixed=[ @@ -1098,7 +1179,7 @@ def main(): login_admin.s(0x793b, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1107,14 +1188,14 @@ def main(): fixed=[ at(0, u16, 'packet id'), at(2, account_name, 'account name'), - at(26, sex, 'sex'), + at(26, sex_char, 'sex'), ], fixed_size=27, ) login_admin.s(0x793d, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1130,7 +1211,7 @@ def main(): login_admin.s(0x793f, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1146,7 +1227,7 @@ def main(): login_admin.s(0x7941, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1156,7 +1237,7 @@ def main(): head=[ at(0, u16, 'packet id'), at(2, account_name, 'account name'), - at(26, u16, 'string length'), + at(26, SkewLengthType(u16, 28), 'magic packet length'), ], head_size=28, repeat=[ @@ -1167,7 +1248,7 @@ def main(): login_admin.s(0x7943, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1182,7 +1263,7 @@ def main(): login_admin.s(0x7945, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1190,14 +1271,14 @@ def main(): login_admin.r(0x7946, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), ], fixed_size=6, ) login_admin.s(0x7947, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), ], fixed_size=30, @@ -1213,7 +1294,7 @@ def main(): login_admin.s(0x7949, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), at(30, time32, 'valid until'), ], @@ -1230,7 +1311,7 @@ def main(): login_admin.s(0x794b, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), at(30, time32, 'ban until'), ], @@ -1247,7 +1328,7 @@ def main(): login_admin.s(0x794d, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), at(30, time32, 'ban until'), ], @@ -1258,7 +1339,7 @@ def main(): head=[ at(0, u16, 'packet id'), at(2, u16, 'unused'), - at(4, u32, 'string length'), + at(4, SkewLengthType(u32, 8), 'magic packet length'), ], head_size=8, repeat=[ @@ -1284,7 +1365,7 @@ def main(): login_admin.s(0x7951, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, account_name, 'account name'), at(30, time32, 'valid until'), ], @@ -1301,10 +1382,10 @@ def main(): login_admin.s(0x7953, head=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), at(6, gm1, 'gm level'), at(7, account_name, 'account name'), - at(31, sex, 'id'), + at(31, sex, 'sex'), at(32, u32, 'login count'), at(36, u32, 'state'), at(40, seconds, 'error message'), @@ -1313,7 +1394,7 @@ def main(): at(100, account_email, 'email'), at(140, time32, 'connect until'), at(144, time32, 'ban until'), - at(148, u16, 'string length'), + at(148, SkewLengthType(u16, 150), 'magic packet length'), ], head_size=150, repeat=[ @@ -1324,7 +1405,7 @@ def main(): login_admin.r(0x7954, fixed=[ at(0, u16, 'packet id'), - at(2, u32, 'account id'), + at(2, account_id, 'account id'), ], fixed_size=6, ) |