From af4acff261d579428e8eef042cc5359fa392f725 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Tue, 27 May 2014 13:33:54 -0700 Subject: Generate the char server protocol --- src/map/atcommand.cpp | 28 ++++++------ src/map/chrif.cpp | 3 +- src/map/clif.cpp | 30 ++++++------- src/map/clif.hpp | 20 ++++----- src/map/intif.cpp | 25 ++++++----- src/map/intif.hpp | 2 +- src/map/mob.cpp | 8 ++-- src/map/party.cpp | 122 ++++++++++++++++++++++++++++---------------------- src/map/party.hpp | 10 ++--- src/map/pc.cpp | 24 +++++----- src/map/script.cpp | 2 +- src/map/storage.cpp | 26 +++++------ src/map/storage.hpp | 4 +- 13 files changed, 163 insertions(+), 141 deletions(-) (limited to 'src/map') diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index bc026be..a6c89e5 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -808,7 +808,7 @@ ATCE atcommand_whogroup(Session *s, dumb_ptr sd, ZString message) { int count; - struct party *p; + PartyPair p; VString<23> match_text = message; match_text = match_text.to_lower(); @@ -925,7 +925,7 @@ ATCE atcommand_whomapgroup(Session *s, dumb_ptr sd, ZString message) { int count; - struct party *p; + PartyPair p; map_local *map_id; { @@ -990,7 +990,7 @@ ATCE atcommand_whogm(Session *s, dumb_ptr sd, ZString message) { int count; - struct party *p; + PartyPair p; VString<23> match_text = message; match_text = match_text.to_lower(); @@ -1144,7 +1144,7 @@ static ATCE atcommand_storage(Session *s, dumb_ptr sd, ZString) { - struct storage *stor; + Storage *stor; if (sd->state.storage_open) { @@ -3393,7 +3393,7 @@ ATCE atcommand_partyrecall(Session *s, dumb_ptr sd, ZString message) { PartyName party_name; - struct party *p; + PartyPair p; int count; if (!extract(message, &party_name) || !party_name) @@ -3407,9 +3407,9 @@ ATCE atcommand_partyrecall(Session *s, dumb_ptr sd, return ATCE::PERM; } - if ((p = party_searchname(party_name)) != NULL || + if ((p = party_searchname(party_name)) || // name first to avoid error when name begin with a number - (p = party_search(wrap(static_cast(atoi(message.c_str()))))) != NULL) + (p = party_search(wrap(static_cast(atoi(message.c_str())))))) { count = 0; for (io::FD i : iter_fds()) @@ -3420,7 +3420,7 @@ ATCE atcommand_partyrecall(Session *s, dumb_ptr sd, dumb_ptr pl_sd = dumb_ptr(static_cast(s2->session_data.get())); if (pl_sd && pl_sd->state.auth && sd->status_key.account_id != pl_sd->status_key.account_id - && pl_sd->status.party_id == p->party_id) + && pl_sd->status.party_id == p.party_id) { if (pl_sd->bl_m && pl_sd->bl_m->flag.get(MapFlag::NOWARP) && !(pc_isGM(sd).satisfies(GmLevel::from(static_cast(battle_config.any_warp_GM_min_level))))) @@ -3589,12 +3589,12 @@ ATCE atcommand_partyspy(Session *s, dumb_ptr sd, if (!extract(message, &party_name)) return ATCE::USAGE; - struct party *p; - if ((p = party_searchname(party_name)) != NULL || + PartyPair p; + if ((p = party_searchname(party_name)) || // name first to avoid error when name begin with a number - (p = party_search(wrap(static_cast(atoi(message.c_str()))))) != NULL) + (p = party_search(wrap(static_cast(atoi(message.c_str())))))) { - if (sd->partyspy == p->party_id) + if (sd->partyspy == p.party_id) { sd->partyspy = PartyId(); AString output = STRPRINTF("No longer spying on the %s party."_fmt, p->name); @@ -3602,7 +3602,7 @@ ATCE atcommand_partyspy(Session *s, dumb_ptr sd, } else { - sd->partyspy = p->party_id; + sd->partyspy = p.party_id; AString output = STRPRINTF("Spying on the %s party."_fmt, p->name); clif_displaymessage(s, output); } @@ -3963,7 +3963,7 @@ static ATCE atcommand_character_storage_list(Session *s, dumb_ptr sd, ZString message) { - struct storage *stor; + Storage *stor; struct item_data *item_data = NULL; int i, count, counter; CharName character; diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp index 9e69521..a6c11b9 100644 --- a/src/map/chrif.cpp +++ b/src/map/chrif.cpp @@ -268,6 +268,7 @@ int chrif_changemapserverack(Session *s) if (sd == NULL || sd->status_key.char_id != wrap(RFIFOL(s, 14))) return -1; + // I am fairly certain that this is not possible if (RFIFOL(s, 6) == 1) { if (battle_config.error_log) @@ -956,7 +957,7 @@ void ladmin_itemfrob_c2(dumb_ptr bl, ItemNameId source_id, ItemNameI case BL::PC: { dumb_ptr pc = bl->is_player(); - struct storage *stor = account2storage2(pc->status_key.account_id); + Storage *stor = account2storage2(pc->status_key.account_id); int j; for (j = 0; j < MAX_INVENTORY; j++) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 10aeb0c..218c00b 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -322,7 +322,7 @@ void clif_send_sub(dumb_ptr bl, const unsigned char *buf, int len, static int clif_send(const uint8_t *buf, int len, dumb_ptr bl, SendWho type) { - struct party *p = NULL; + PartyPair p; int x0 = 0, x1 = 0, y0 = 0, y1 = 0; if (type != SendWho::ALL_CLIENT) @@ -463,7 +463,7 @@ int clif_send(const uint8_t *buf, int len, dumb_ptr bl, SendWho type dumb_ptr sd = dumb_ptr(static_cast(s->session_data.get())); if (sd && sd->state.auth) { - if (sd->partyspy == p->party_id) + if (sd->partyspy == p.party_id) { if (clif_parse_func_table[RBUFW(buf, 0)].len) { @@ -1526,7 +1526,7 @@ void clif_equiplist(dumb_ptr sd) * カプラさんに預けてある消耗品&収集品リスト *------------------------------------------ */ -int clif_storageitemlist(dumb_ptr sd, struct storage *stor) +int clif_storageitemlist(dumb_ptr sd, Storage *stor) { nullpo_ret(sd); nullpo_ret(stor); @@ -1569,7 +1569,7 @@ int clif_storageitemlist(dumb_ptr sd, struct storage *stor) * カプラさんに預けてある装備リスト *------------------------------------------ */ -int clif_storageequiplist(dumb_ptr sd, struct storage *stor) +int clif_storageequiplist(dumb_ptr sd, Storage *stor) { nullpo_ret(sd); nullpo_ret(stor); @@ -2235,7 +2235,7 @@ int clif_tradecompleted(dumb_ptr sd, int fail) *------------------------------------------ */ int clif_updatestorageamount(dumb_ptr sd, - struct storage *stor) + Storage *stor) { nullpo_ret(sd); nullpo_ret(stor); @@ -2253,7 +2253,7 @@ int clif_updatestorageamount(dumb_ptr sd, * カプラ倉庫にアイテムを追加する *------------------------------------------ */ -int clif_storageitemadded(dumb_ptr sd, struct storage *stor, +int clif_storageitemadded(dumb_ptr sd, Storage *stor, int index, int amount) { nullpo_ret(sd); @@ -2969,7 +2969,7 @@ int clif_party_created(dumb_ptr sd, int flag) * パーティ情報送信 *------------------------------------------ */ -int clif_party_info(struct party *p, Session *s) +int clif_party_info(PartyPair p, Session *s) { unsigned char buf[1024]; int i, c; @@ -3019,7 +3019,7 @@ int clif_party_info(struct party *p, Session *s) void clif_party_invite(dumb_ptr sd, dumb_ptr tsd) { - struct party *p; + PartyPair p; nullpo_retv(sd); nullpo_retv(tsd); @@ -3067,7 +3067,7 @@ void clif_party_inviteack(dumb_ptr sd, CharName nick, int flag * 0x100=一人にのみ送信 *------------------------------------------ */ -void clif_party_option(struct party *p, dumb_ptr sd, int flag) +void clif_party_option(PartyPair p, dumb_ptr sd, int flag) { unsigned char buf[16]; @@ -3098,7 +3098,7 @@ void clif_party_option(struct party *p, dumb_ptr sd, int flag) * パーティ脱退(脱退前に呼ぶこと) *------------------------------------------ */ -void clif_party_leaved(struct party *p, dumb_ptr sd, +void clif_party_leaved(PartyPair p, dumb_ptr sd, AccountId account_id, CharName name, int flag) { unsigned char buf[64]; @@ -3134,7 +3134,7 @@ void clif_party_leaved(struct party *p, dumb_ptr sd, * パーティメッセージ送信 *------------------------------------------ */ -void clif_party_message(struct party *p, AccountId account_id, XString mes) +void clif_party_message(PartyPair p, AccountId account_id, XString mes) { // always set, but clang is not smart enough dumb_ptr sd = nullptr; @@ -3164,7 +3164,7 @@ void clif_party_message(struct party *p, AccountId account_id, XString mes) * パーティ座標通知 *------------------------------------------ */ -int clif_party_xy(struct party *, dumb_ptr sd) +int clif_party_xy(PartyPair , dumb_ptr sd) { unsigned char buf[16]; @@ -3182,7 +3182,7 @@ int clif_party_xy(struct party *, dumb_ptr sd) * パーティHP通知 *------------------------------------------ */ -int clif_party_hp(struct party *, dumb_ptr sd) +int clif_party_hp(PartyPair , dumb_ptr sd) { unsigned char buf[16]; @@ -3625,13 +3625,13 @@ void clif_parse_GetCharNameRequest(Session *s, dumb_ptr sd) WFIFO_STRING(s, 6, ssd->status_key.name.to__actual(), 24); WFIFOSET(s, clif_parse_func_table[0x95].len); - struct party *p = NULL; + PartyPair p; PartyName party_name; int send = 0; - if (ssd->status.party_id && (p = party_search(ssd->status.party_id)) != NULL) + if (ssd->status.party_id && (p = party_search(ssd->status.party_id))) { party_name = p->name; send = 1; diff --git a/src/map/clif.hpp b/src/map/clif.hpp index b2a5747..3bed955 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -117,12 +117,12 @@ int clif_tradecancelled(dumb_ptr sd); int clif_tradecompleted(dumb_ptr sd, int fail); // storage -int clif_storageitemlist(dumb_ptr sd, struct storage *stor); +int clif_storageitemlist(dumb_ptr sd, Storage *stor); int clif_storageequiplist(dumb_ptr sd, - struct storage *stor); + Storage *stor); int clif_updatestorageamount(dumb_ptr sd, - struct storage *stor); -int clif_storageitemadded(dumb_ptr sd, struct storage *stor, + Storage *stor); +int clif_storageitemadded(dumb_ptr sd, Storage *stor, int index, int amount); int clif_storageitemremoved(dumb_ptr sd, int index, int amount); @@ -161,17 +161,17 @@ int clif_movetoattack(dumb_ptr sd, dumb_ptr bl); // party int clif_party_created(dumb_ptr sd, int flag); -int clif_party_info(struct party *p, Session *s); +int clif_party_info(PartyPair p, Session *s); void clif_party_invite(dumb_ptr sd, dumb_ptr tsd); void clif_party_inviteack(dumb_ptr sd, CharName nick, int flag); -void clif_party_option(struct party *p, dumb_ptr sd, +void clif_party_option(PartyPair p, dumb_ptr sd, int flag); -void clif_party_leaved(struct party *p, dumb_ptr sd, +void clif_party_leaved(PartyPair p, dumb_ptr sd, AccountId account_id, CharName name, int flag); -void clif_party_message(struct party *p, AccountId account_id, XString mes); -int clif_party_xy(struct party *p, dumb_ptr sd); -int clif_party_hp(struct party *p, dumb_ptr sd); +void clif_party_message(PartyPair p, AccountId account_id, XString mes); +int clif_party_xy(PartyPair p, dumb_ptr sd); +int clif_party_hp(PartyPair p, dumb_ptr sd); // atcommand void clif_displaymessage(Session *s, XString mes); diff --git a/src/map/intif.cpp b/src/map/intif.cpp index 5d8bfd6..bb4b893 100644 --- a/src/map/intif.cpp +++ b/src/map/intif.cpp @@ -157,11 +157,11 @@ void intif_request_storage(AccountId account_id) } // 倉庫データ送信 -void intif_send_storage(struct storage *stor) +void intif_send_storage(Storage *stor) { nullpo_retv(stor); WFIFOW(char_session, 0) = 0x3011; - WFIFOW(char_session, 2) = sizeof(struct storage) + 8; + WFIFOW(char_session, 2) = sizeof(Storage) + 8; WFIFOL(char_session, 4) = unwrap(stor->account_id); WFIFO_STRUCT(char_session, 8, *stor); WFIFOSET(char_session, WFIFOW(char_session, 2)); @@ -373,7 +373,7 @@ int intif_parse_AccountReg(Session *s) static int intif_parse_LoadStorage(Session *s) { - struct storage *stor; + Storage *stor; dumb_ptr sd; sd = map_id2sd(account_to_block(wrap(RFIFOL(s, 4)))); @@ -400,11 +400,11 @@ int intif_parse_LoadStorage(Session *s) return 1; } - if (RFIFOW(s, 2) - 8 != sizeof(struct storage)) + if (RFIFOW(s, 2) - 8 != sizeof(Storage)) { if (battle_config.error_log) PRINTF("intif_parse_LoadStorage: data size error %d %zu\n"_fmt, - RFIFOW(s, 2) - 8, sizeof(struct storage)); + RFIFOW(s, 2) - 8, sizeof(Storage)); return 1; } if (battle_config.save_log) @@ -455,16 +455,21 @@ void intif_parse_PartyInfo(Session *s) return; } - if (RFIFOW(s, 2) != sizeof(struct party) + 4) + if (RFIFOW(s, 2) != sizeof(PartyMost) + 8) { if (battle_config.error_log) PRINTF("intif: party info : data size error %d %d %zu\n"_fmt, RFIFOL(s, 4), RFIFOW(s, 2), - sizeof(struct party) + 4); + sizeof(PartyMost) + 8); } - party p {}; - RFIFO_STRUCT(s, 4, p); - party_recv_info(&p); + PartyId pi; + PartyMost pm; + RFIFO_STRUCT(s, 4, pi); + RFIFO_STRUCT(s, 8, pm); + PartyPair pp; + pp.party_id = pi; + pp.party_most = ± + party_recv_info(pp); } // パーティ追加通知 diff --git a/src/map/intif.hpp b/src/map/intif.hpp index c60e3c1..2e3d3fe 100644 --- a/src/map/intif.hpp +++ b/src/map/intif.hpp @@ -42,7 +42,7 @@ void intif_saveaccountreg(dumb_ptr sd); void intif_request_accountreg(dumb_ptr sd); void intif_request_storage(AccountId account_id); -void intif_send_storage(struct storage *stor); +void intif_send_storage(Storage *stor); void intif_create_party(dumb_ptr sd, PartyName name); void intif_request_partyinfo(PartyId party_id); diff --git a/src/map/mob.cpp b/src/map/mob.cpp index 2dd7ea4..74e00be 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -2491,7 +2491,7 @@ int mob_damage(dumb_ptr src, dumb_ptr md, int damage, { struct DmgLogParty { - struct party *p; + PartyPair p; int base_exp, job_exp; }; std::vector ptv; @@ -2532,7 +2532,7 @@ int mob_damage(dumb_ptr src, dumb_ptr md, int damage, int base_exp, job_exp, flag = 1; double per; - struct party *p; + PartyPair p; // [Fate] The above is the old formula. We do a more involved computation below. // [o11c] Look in git history for old code, you idiot! @@ -2578,13 +2578,13 @@ int mob_damage(dumb_ptr src, dumb_ptr md, int damage, std::vector::iterator it = std::find_if(ptv.begin(), ptv.end(), [pid](const DmgLogParty& dlp) { - return dlp.p->party_id == pid; + return dlp.p.party_id == pid; } ); if (it == ptv.end()) { p = party_search(pid); - if (p != NULL && p->exp != 0) + if (p && p->exp != 0) { DmgLogParty pn {}; pn.p = p; diff --git a/src/map/party.cpp b/src/map/party.cpp index f40b991..5f69de5 100644 --- a/src/map/party.cpp +++ b/src/map/party.cpp @@ -46,7 +46,7 @@ constexpr interval_t PARTY_SEND_XYHP_INVERVAL = std::chrono::seconds(1); static -Map party_db; +Map party_db; static void party_check_conflict(dumb_ptr sd); @@ -63,24 +63,33 @@ void do_init_party(void) } // 検索 -struct party *party_search(PartyId party_id) +PartyPair party_search(PartyId party_id) { - return party_db.search(party_id); + PartyPair p; + p.party_most = party_db.search(party_id); + if (p) + p.party_id = party_id; + return p; } static -void party_searchname_sub(struct party *p, PartyName str, struct party **dst) +void party_searchname_sub(PartyPair p, PartyName str, PartyPair *dst) { if (p->name == str) *dst = p; } // パーティ名検索 -struct party *party_searchname(PartyName str) +PartyPair party_searchname(PartyName str) { - struct party *p = NULL; + PartyPair p; for (auto& pair : party_db) - party_searchname_sub(&pair.second, str, &p); + { + PartyPair tmp; + tmp.party_id = pair.first; + tmp.party_most = &pair.second; + party_searchname_sub(tmp, str, &p); + } return p; } @@ -117,15 +126,15 @@ void party_created(AccountId account_id, int fail, PartyId party_id, PartyName n { sd->status.party_id = party_id; - struct party *p = party_db.search(party_id); - if (p != NULL) + PartyPair p = party_search(party_id); + if (p) { PRINTF("party_created(): ID already exists!\n"_fmt); exit(1); } - p = party_db.init(party_id); - p->party_id = party_id; + p.party_most = party_db.init(party_id); + p.party_id = party_id; p->name = name; /* The party was created successfully. */ @@ -144,7 +153,7 @@ void party_request_info(PartyId party_id) // 所属キャラの確認 static -int party_check_member(struct party *p) +int party_check_member(PartyPair p) { nullpo_ret(p); @@ -156,7 +165,7 @@ int party_check_member(struct party *p) map_session_data *sd = static_cast(s->session_data.get()); if (sd && sd->state.auth) { - if (sd->status.party_id == p->party_id) + if (sd->status.party_id == p.party_id) { int j, f = 1; for (j = 0; j < MAX_PARTY; j++) @@ -204,29 +213,29 @@ int party_recv_noinfo(PartyId party_id) } // 情報所得 -int party_recv_info(const struct party *sp) +int party_recv_info(const PartyPair sp) { int i; nullpo_ret(sp); - struct party *p = party_db.search(sp->party_id); - if (p == NULL) + PartyPair p = party_search(sp.party_id); + if (!p) { - p = party_db.init(sp->party_id); + p.party_most = party_db.init(sp.party_id); // 最初のロードなのでユーザーのチェックを行う - *p = *sp; + *p.party_most = *sp.party_most; party_check_member(p); } else - *p = *sp; + *p.party_most = *sp.party_most; for (i = 0; i < MAX_PARTY; i++) { // sdの設定 dumb_ptr sd = map_id2sd(account_to_block(p->member[i].account_id)); p->member[i].sd = (sd != NULL - && sd->status.party_id == p->party_id) ? sd.operator->() : NULL; + && sd->status.party_id == p.party_id) ? sd.operator->() : NULL; } clif_party_info(p, nullptr); @@ -249,7 +258,7 @@ int party_recv_info(const struct party *sp) int party_invite(dumb_ptr sd, AccountId account_id) { dumb_ptr tsd = map_id2sd(account_to_block(account_id)); - struct party *p = party_search(sd->status.party_id); + PartyPair p = party_search(sd->status.party_id); int i; int full = 1; /* Indicates whether or not there's room for one more. */ @@ -347,7 +356,7 @@ int party_reply_invite(dumb_ptr sd, AccountId account_id, int int party_member_added(PartyId party_id, AccountId account_id, int flag) { dumb_ptr sd = map_id2sd(account_to_block(account_id)), sd2; - struct party *p = party_search(party_id); + PartyPair p = party_search(party_id); if (sd == NULL) { @@ -364,7 +373,7 @@ int party_member_added(PartyId party_id, AccountId account_id, int flag) sd->party_invite = PartyId(); sd->party_invite_account = AccountId(); - if (p == NULL) + if (!p) { PRINTF("party_member_added: party %d not found.\n"_fmt, party_id); intif_party_leave(party_id, account_id); @@ -396,26 +405,28 @@ int party_member_added(PartyId party_id, AccountId account_id, int flag) // パーティ除名要求 int party_removemember(dumb_ptr sd, AccountId account_id) { - struct party *p; + PartyPair p; int i; nullpo_ret(sd); - if ((p = party_search(sd->status.party_id)) == NULL) + if (!(p = party_search(sd->status.party_id))) return 0; for (i = 0; i < MAX_PARTY; i++) { // リーダーかどうかチェック if (p->member[i].account_id == sd->status_key.account_id) + { if (p->member[i].leader == 0) return 0; + } } for (i = 0; i < MAX_PARTY; i++) { // 所属しているか調べる if (p->member[i].account_id == account_id) { - intif_party_leave(p->party_id, account_id); + intif_party_leave(p.party_id, account_id); return 0; } } @@ -425,19 +436,19 @@ int party_removemember(dumb_ptr sd, AccountId account_id) // パーティ脱退要求 int party_leave(dumb_ptr sd) { - struct party *p; + PartyPair p; int i; nullpo_ret(sd); - if ((p = party_search(sd->status.party_id)) == NULL) + if (!(p = party_search(sd->status.party_id))) return 0; for (i = 0; i < MAX_PARTY; i++) { // 所属しているか if (p->member[i].account_id == sd->status_key.account_id) { - intif_party_leave(p->party_id, sd->status_key.account_id); + intif_party_leave(p.party_id, sd->status_key.account_id); return 0; } } @@ -448,8 +459,8 @@ int party_leave(dumb_ptr sd) int party_member_leaved(PartyId party_id, AccountId account_id, CharName name) { dumb_ptr sd = map_id2sd(account_to_block(account_id)); - struct party *p = party_search(party_id); - if (p != NULL) + PartyPair p = party_search(party_id); + if (p) { int i; for (i = 0; i < MAX_PARTY; i++) @@ -471,9 +482,9 @@ int party_member_leaved(PartyId party_id, AccountId account_id, CharName name) // パーティ解散通知 int party_broken(PartyId party_id) { - struct party *p; + PartyPair p; int i; - if ((p = party_search(party_id)) == NULL) + if (!(p = party_search(party_id))) return 0; for (i = 0; i < MAX_PARTY; i++) @@ -494,12 +505,12 @@ int party_broken(PartyId party_id) // パーティの設定変更要求 int party_changeoption(dumb_ptr sd, int exp, int item) { - struct party *p; + PartyPair p; nullpo_ret(sd); if (!sd->status.party_id - || (p = party_search(sd->status.party_id)) == NULL) + || !(p = party_search(sd->status.party_id))) return 0; intif_party_changeoption(sd->status.party_id, sd->status_key.account_id, exp, item); @@ -510,9 +521,9 @@ int party_changeoption(dumb_ptr sd, int exp, int item) int party_optionchanged(PartyId party_id, AccountId account_id, int exp, int item, int flag) { - struct party *p; + PartyPair p; dumb_ptr sd = map_id2sd(account_to_block(account_id)); - if ((p = party_search(party_id)) == NULL) + if (!(p = party_search(party_id))) return 0; if (!(flag & 0x01)) @@ -527,9 +538,9 @@ int party_optionchanged(PartyId party_id, AccountId account_id, int exp, int ite void party_recv_movemap(PartyId party_id, AccountId account_id, MapName mapname, int online, int lv) { - struct party *p; + PartyPair p; int i; - if ((p = party_search(party_id)) == NULL) + if (!(p = party_search(party_id))) return; for (i = 0; i < MAX_PARTY; i++) { @@ -559,7 +570,7 @@ void party_recv_movemap(PartyId party_id, AccountId account_id, MapName mapname, { // sd再設定 dumb_ptr sd = map_id2sd(account_to_block(p->member[i].account_id)); p->member[i].sd = (sd != NULL - && sd->status.party_id == p->party_id) ? sd.operator->() : NULL; + && sd->status.party_id == p.party_id) ? sd.operator->() : NULL; } party_send_xy_clear(p); // 座標再通知要請 @@ -570,7 +581,7 @@ void party_recv_movemap(PartyId party_id, AccountId account_id, MapName mapname, // パーティメンバの移動 int party_send_movemap(dumb_ptr sd) { - struct party *p; + PartyPair p; nullpo_ret(sd); @@ -585,10 +596,10 @@ int party_send_movemap(dumb_ptr sd) party_check_conflict(sd); // あるならパーティ情報送信 - if ((p = party_search(sd->status.party_id)) != NULL) + if ((p = party_search(sd->status.party_id))) { party_check_member(p); // 所属を確認する - if (sd->status.party_id == p->party_id) + if (sd->status.party_id == p.party_id) { clif_party_info(p, sd->sess); clif_party_option(p, sd, 0x100); @@ -602,7 +613,7 @@ int party_send_movemap(dumb_ptr sd) // パーティメンバのログアウト int party_send_logout(dumb_ptr sd) { - struct party *p; + PartyPair p; nullpo_ret(sd); @@ -610,7 +621,7 @@ int party_send_logout(dumb_ptr sd) intif_party_changemap(sd, 0); // sdが無効になるのでパーティ情報から削除 - if ((p = party_search(sd->status.party_id)) != NULL) + if ((p = party_search(sd->status.party_id))) { int i; for (i = 0; i < MAX_PARTY; i++) @@ -632,8 +643,8 @@ void party_send_message(dumb_ptr sd, XString mes) // パーティメッセージ受信 void party_recv_message(PartyId party_id, AccountId account_id, XString mes) { - struct party *p; - if ((p = party_search(party_id)) == NULL) + PartyPair p; + if (!(p = party_search(party_id))) return; clif_party_message(p, account_id, mes); } @@ -649,7 +660,7 @@ void party_check_conflict(dumb_ptr sd) // 位置やHP通知用 static -void party_send_xyhp_timer_sub(struct party *p) +void party_send_xyhp_timer_sub(PartyPair p) { int i; @@ -682,11 +693,16 @@ void party_send_xyhp_timer_sub(struct party *p) void party_send_xyhp_timer(TimerData *, tick_t) { for (auto& pair : party_db) - party_send_xyhp_timer_sub(&pair.second); + { + PartyPair tmp; + tmp.party_id = pair.first; + tmp.party_most = &pair.second; + party_send_xyhp_timer_sub(tmp); + } } // 位置通知クリア -void party_send_xy_clear(struct party *p) +void party_send_xy_clear(PartyPair p) { int i; @@ -720,7 +736,7 @@ void party_send_hp_check(dumb_ptr bl, PartyId party_id, int *flag) } // 経験値公平分配 -int party_exp_share(struct party *p, map_local *mapid, int base_exp, int job_exp) +int party_exp_share(PartyPair p, map_local *mapid, int base_exp, int job_exp) { dumb_ptr sd; int i, c; @@ -751,7 +767,7 @@ int party_exp_share(struct party *p, map_local *mapid, int base_exp, int job_exp void party_foreachsamemap(std::function)> func, dumb_ptr sd, int type) { - struct party *p; + PartyPair p; int i; int x0, y0, x1, y1; dumb_ptr list[MAX_PARTY]; @@ -759,7 +775,7 @@ void party_foreachsamemap(std::function)> func, nullpo_retv(sd); - if ((p = party_search(sd->status.party_id)) == NULL) + if (!(p = party_search(sd->status.party_id))) return; x0 = sd->bl_x - AREA_SIZE; diff --git a/src/map/party.hpp b/src/map/party.hpp index 4670aee..d4000f7 100644 --- a/src/map/party.hpp +++ b/src/map/party.hpp @@ -32,8 +32,8 @@ # include "../mmo/fwd.hpp" void do_init_party(void); -struct party *party_search(PartyId party_id); -struct party *party_searchname(PartyName str); +PartyPair party_search(PartyId party_id); +PartyPair party_searchname(PartyName str); int party_create(dumb_ptr sd, PartyName name); void party_created(AccountId account_id, int fail, PartyId party_id, PartyName name); @@ -46,7 +46,7 @@ int party_member_leaved(PartyId party_id, AccountId account_id, CharName name); int party_reply_invite(dumb_ptr sd, AccountId account_id, int flag); int party_recv_noinfo(PartyId party_id); -int party_recv_info(const struct party *sp); +int party_recv_info(const PartyPair sp); void party_recv_movemap(PartyId party_id, AccountId account_id, MapName map, int online, int lv); int party_broken(PartyId party_id); @@ -60,10 +60,10 @@ int party_send_logout(dumb_ptr sd); void party_send_message(dumb_ptr sd, XString mes); void party_recv_message(PartyId party_id, AccountId account_id, XString mes); -void party_send_xy_clear(struct party *p); +void party_send_xy_clear(PartyPair p); void party_send_hp_check(dumb_ptr bl, PartyId party_id, int *flag); -int party_exp_share(struct party *p, map_local *map, int base_exp, int job_exp); +int party_exp_share(PartyPair p, map_local *map, int base_exp, int job_exp); void party_foreachsamemap(std::function)> func, dumb_ptr sd, int type); diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 8aeebdf..ac8af28 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -648,7 +648,7 @@ int pc_authok(AccountId id, int login_id2, TimeT connect_until_time, { dumb_ptr sd = NULL; - struct party *p; + PartyPair p; tick_t tick = gettick(); sd = map_id2sd(account_to_block(id)); @@ -754,7 +754,7 @@ int pc_authok(AccountId id, int login_id2, TimeT connect_until_time, // パーティ、ギルドデータの要求 if (sd->status.party_id - && (p = party_search(sd->status.party_id)) == NULL) + && !(p = party_search(sd->status.party_id))) party_request_info(sd->status.party_id); // pvpの設定 @@ -2096,7 +2096,7 @@ int pc_dropitem(dumb_ptr sd, int n, int amount) static int can_pick_item_up_from(dumb_ptr self, BlockId other_id) { - struct party *p = party_search(self->status.party_id); + PartyPair p = party_search(self->status.party_id); /* From ourselves or from no-one? */ if (!self || self->bl_id == other_id || !other_id) @@ -2503,8 +2503,8 @@ void pc_walk(TimerData *, tick_t tick, BlockId id, unsigned char data) if (sd->status.party_id) { // パーティのHP情報通知検査 - struct party *p = party_search(sd->status.party_id); - if (p != NULL) + PartyPair p = party_search(sd->status.party_id); + if (p) { int p_flag = 0; map_foreachinmovearea(std::bind(party_send_hp_check, ph::_1, sd->status.party_id, &p_flag), @@ -2677,8 +2677,8 @@ int pc_movepos(dumb_ptr sd, int dst_x, int dst_y) if (sd->status.party_id) { // パーティのHP情報通知検査 - struct party *p = party_search(sd->status.party_id); - if (p != NULL) + PartyPair p = party_search(sd->status.party_id); + if (p) { int flag = 0; map_foreachinmovearea(std::bind(party_send_hp_check, ph::_1, sd->status.party_id, &flag), @@ -3432,8 +3432,8 @@ int pc_damage(dumb_ptr src, dumb_ptr sd, if (sd->status.party_id) { // on-the-fly party hp updates [Valaris] - struct party *p = party_search(sd->status.party_id); - if (p != NULL) + PartyPair p = party_search(sd->status.party_id); + if (p) clif_party_hp(p, sd); } // end addition [Valaris] @@ -3799,8 +3799,8 @@ int pc_heal(dumb_ptr sd, int hp, int sp) if (sd->status.party_id) { // on-the-fly party hp updates [Valaris] - struct party *p = party_search(sd->status.party_id); - if (p != NULL) + PartyPair p = party_search(sd->status.party_id); + if (p) clif_party_hp(p, sd); } // end addition [Valaris] @@ -4244,7 +4244,7 @@ int pc_setaccountreg(dumb_ptr sd, VarName reg, int val) return 0; } if (battle_config.error_log) - PRINTF("pc_setaccountreg : couldn't set %s (ACCOUNT_REG_NUM = %d)\n"_fmt, + PRINTF("pc_setaccountreg : couldn't set %s (ACCOUNT_REG_NUM = %zu)\n"_fmt, reg, ACCOUNT_REG_NUM); return 1; diff --git a/src/map/script.cpp b/src/map/script.cpp index 499e155..6cac082 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -2224,7 +2224,7 @@ void builtin_getcharid(ScriptState *st) static dumb_string builtin_getpartyname_sub(PartyId party_id) { - struct party *p = party_search(party_id); + PartyPair p = party_search(party_id); if (p) return dumb_string::copys(p->name); diff --git a/src/map/storage.cpp b/src/map/storage.cpp index b88c1ea..f8dbd0f 100644 --- a/src/map/storage.cpp +++ b/src/map/storage.cpp @@ -37,16 +37,16 @@ #include "../poison.hpp" static -Map storage_db; +Map storage_db; void do_final_storage(void) { storage_db.clear(); } -struct storage *account2storage(AccountId account_id) +Storage *account2storage(AccountId account_id) { - struct storage *stor = storage_db.search(account_id); + Storage *stor = storage_db.search(account_id); if (stor == NULL) { stor = storage_db.init(account_id); @@ -56,7 +56,7 @@ struct storage *account2storage(AccountId account_id) } // Just to ask storage, without creation -struct storage *account2storage2(AccountId account_id) +Storage *account2storage2(AccountId account_id) { return storage_db.search(account_id); } @@ -78,7 +78,7 @@ int storage_storageopen(dumb_ptr sd) if (sd->state.storage_open) return 1; //Already open? - struct storage *stor = storage_db.search(sd->status_key.account_id); + Storage *stor = storage_db.search(sd->status_key.account_id); if (stor == NULL) { //Request storage. intif_request_storage(sd->status_key.account_id); @@ -101,7 +101,7 @@ int storage_storageopen(dumb_ptr sd) *------------------------------------------ */ static -int storage_additem(dumb_ptr sd, struct storage *stor, +int storage_additem(dumb_ptr sd, Storage *stor, struct item *item_data, int amount) { struct item_data *data; @@ -147,7 +147,7 @@ int storage_additem(dumb_ptr sd, struct storage *stor, *------------------------------------------ */ static -int storage_delitem(dumb_ptr sd, struct storage *stor, +int storage_delitem(dumb_ptr sd, Storage *stor, int n, int amount) { @@ -173,7 +173,7 @@ int storage_delitem(dumb_ptr sd, struct storage *stor, */ int storage_storageadd(dumb_ptr sd, int index, int amount) { - struct storage *stor; + Storage *stor; nullpo_ret(sd); stor = account2storage2(sd->status_key.account_id); @@ -208,7 +208,7 @@ int storage_storageadd(dumb_ptr sd, int index, int amount) */ int storage_storageget(dumb_ptr sd, int index, int amount) { - struct storage *stor; + Storage *stor; PickupFail flag; nullpo_ret(sd); @@ -238,7 +238,7 @@ int storage_storageget(dumb_ptr sd, int index, int amount) */ int storage_storageclose(dumb_ptr sd) { - struct storage *stor; + Storage *stor; nullpo_ret(sd); stor = account2storage2(sd->status_key.account_id); @@ -270,7 +270,7 @@ int storage_storageclose(dumb_ptr sd) */ int storage_storage_quit(dumb_ptr sd) { - struct storage *stor; + Storage *stor; nullpo_ret(sd); @@ -287,7 +287,7 @@ int storage_storage_quit(dumb_ptr sd) int storage_storage_save(AccountId account_id, int final) { - struct storage *stor; + Storage *stor; stor = account2storage2(account_id); if (!stor) @@ -315,7 +315,7 @@ int storage_storage_save(AccountId account_id, int final) //Ack from Char-server indicating the storage was saved. [Skotlex] int storage_storage_saved(AccountId account_id) { - struct storage *stor = account2storage2(account_id); + Storage *stor = account2storage2(account_id); if (stor) { diff --git a/src/map/storage.hpp b/src/map/storage.hpp index 4de931f..3eab087 100644 --- a/src/map/storage.hpp +++ b/src/map/storage.hpp @@ -32,8 +32,8 @@ int storage_storageadd(dumb_ptr sd, int index, int amount); int storage_storageget(dumb_ptr sd, int index, int amount); int storage_storageclose(dumb_ptr sd); void do_final_storage(void); -struct storage *account2storage(AccountId account_id); -struct storage *account2storage2(AccountId account_id); +Storage *account2storage(AccountId account_id); +Storage *account2storage2(AccountId account_id); int storage_storage_quit(dumb_ptr sd); int storage_storage_save(AccountId account_id, int final); int storage_storage_saved(AccountId account_id); -- cgit v1.2.3-60-g2f50