From 3b98f3439e33b15bba2036c402f9925340fdb2b9 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Sat, 29 Jun 2013 23:23:43 -0700 Subject: Poison std::string and use the various string classes --- src/map/map.hpp | 100 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 40 deletions(-) (limited to 'src/map/map.hpp') diff --git a/src/map/map.hpp b/src/map/map.hpp index f0d0310..87bf1f9 100644 --- a/src/map/map.hpp +++ b/src/map/map.hpp @@ -8,9 +8,11 @@ #include #include +#include "../common/cxxstdio.hpp" #include "../common/db.hpp" #include "../common/matrix.hpp" #include "../common/socket.hpp" +#include "../common/strings.hpp" #include "../common/timer.t.hpp" #include "battle.t.hpp" @@ -33,6 +35,38 @@ constexpr int MAX_DROP_PER_MAP = 48; constexpr interval_t DEFAULT_AUTOSAVE_INTERVAL = std::chrono::minutes(1); +// formerly VString<49>, as name::label +struct NpcEvent +{ + NpcName npc; + ScriptLabel label; + + explicit operator bool() + { + return npc || label; + } + bool operator !() + { + return !bool(*this); + } + + friend bool operator == (const NpcEvent& l, const NpcEvent& r) + { + return l.npc == r.npc && l.label == r.label; + } + + friend bool operator < (const NpcEvent& l, const NpcEvent& r) + { + return l.npc < r.npc || (l.npc == r.npc && l.label < r.label); + } + + friend VString<49> convert_for_printf(NpcEvent ev) + { + return STRNPRINTF(50, "%s::%s", ev.npc, ev.label); + } +}; +bool extract(XString str, NpcEvent *ev); + struct map_session_data; struct npc_data; struct mob_data; @@ -71,16 +105,6 @@ struct walkpath_data unsigned char path_len, path_pos, path_half; DIR path[MAX_WALKPATH]; }; -struct script_reg -{ - int index; - int data; -}; -struct script_regstr -{ - int index; - char data[256]; -}; struct status_change { Timer timer; @@ -92,7 +116,6 @@ struct invocation; struct npc_data; struct item_data; -struct square; struct quick_regeneration { // [Fate] @@ -141,7 +164,7 @@ struct map_session_data : block_list, SessionData earray equip_index; int weight, max_weight; int cart_weight, cart_max_weight, cart_num, cart_max_num; - char mapname_[16]; + MapName mapname_; int fd, new_fd; short to_x, to_y; interval_t speed; @@ -161,7 +184,7 @@ struct map_session_data : block_list, SessionData // but one should probably be replaced with a ScriptPointer ??? const ScriptBuffer *npc_script, *npc_scriptroot; std::vector npc_stackbuf; - std::string npc_str; + FString npc_str; struct { unsigned storage:1; @@ -236,7 +259,7 @@ struct map_session_data : block_list, SessionData DMap regm; // can't be DMap because we want predictable .c_str()s // This could change once FString ensures CoW. - Map regstrm; + Map regstrm; earray sc_data; short sc_count; @@ -252,15 +275,13 @@ struct map_session_data : block_list, SessionData int partyspy; // [Syrus22] - char message[80]; - int catch_target_class; int pvp_point, pvp_rank; Timer pvp_timer; int pvp_lastusers; - std::list eventqueuel; + std::list eventqueuel; Timer eventtimer[MAX_EVENTTIMER]; struct @@ -272,7 +293,7 @@ struct map_session_data : block_list, SessionData TimeT chat_repeat_reset_due; int chat_lines_in; int chat_total_repeats; - char chat_lastmsg[513]; + FString chat_lastmsg; tick_t flood_rates[0x220]; TimeT packet_flood_reset_due; @@ -288,7 +309,7 @@ struct npc_timerevent_list }; struct npc_label_list { - char name[24]; + ScriptLabel name; int pos; }; struct npc_item_list @@ -307,15 +328,14 @@ struct npc_data : block_list short npc_class; DIR dir; interval_t speed; - char name[24]; - char exname[24]; + NpcName name; Opt1 opt1; Opt2 opt2; Opt3 opt3; Option option; short flag; - std::list eventqueuel; + std::list eventqueuel; Timer eventtimer[MAX_EVENTTIMER]; short arenaflag; @@ -370,14 +390,14 @@ public: { short xs, ys; short x, y; - char name[16]; + MapName name; } warp; }; class npc_data_message : public npc_data { public: - std::string message; + FString message; }; constexpr int MOB_XP_BONUS_BASE = 1024; @@ -395,7 +415,7 @@ struct mob_data : block_list short x0, y0, xs, ys; interval_t delay1, delay2; } spawn; - char name[24]; + MobName name; struct { MS state; @@ -448,7 +468,7 @@ struct mob_data : block_list LevelElement def_ele; int master_id, master_dist; int exclusion_src, exclusion_party; - char npc_event[50]; + NpcEvent npc_event; // [Fate] mob-specific stats earray stats; short size; @@ -461,14 +481,14 @@ struct BlockLists struct map_abstract { - char name_[16]; + MapName name_; // gat is NULL for map_remote and non-NULL or map_local std::unique_ptr gat; virtual ~map_abstract() {} }; extern -UPMap maps_db; +UPMap maps_db; struct map_local : map_abstract { @@ -537,10 +557,10 @@ struct flooritem_data : block_list extern interval_t autosave_interval; extern int save_settings; -extern char motd_txt[]; -extern char help_txt[]; +extern FString motd_txt; +extern FString help_txt; -extern char wisp_server_name[]; +extern CharName wisp_server_name; // 鯖全体情報 void map_setusers(int); @@ -587,13 +607,13 @@ void map_quit(dumb_ptr); // npc int map_addnpc(map_local *, dumb_ptr); -void map_log(const_string line); +void map_log(XString line); #define MAP_LOG(format, ...) \ - map_log(static_cast(STRPRINTF(format, ## __VA_ARGS__))) + map_log(STRPRINTF(format, ## __VA_ARGS__)) #define MAP_LOG_PC(sd, fmt, ...) \ MAP_LOG("PC%d %s:%d,%d " fmt, \ - sd->status.char_id, (sd->bl_m ? sd->bl_m->name_ : "undefined.gat"), sd->bl_x, sd->bl_y, ## __VA_ARGS__) + sd->status.char_id, (sd->bl_m ? sd->bl_m->name_ : stringish("undefined.gat")), sd->bl_x, sd->bl_y, ## __VA_ARGS__) // 床アイテム関連 void map_clearflooritem_timer(TimerData *, tick_t, int); @@ -614,8 +634,8 @@ int map_addflooritem(struct item *, int, // キャラid=>キャラ名 変換関連 extern DMap> id_db; -void map_addchariddb(int charid, const char *name); -char *map_charid2nick(int); +void map_addchariddb(int charid, CharName name); +CharName map_charid2nick(int); dumb_ptr map_id2sd(int); dumb_ptr map_id2bl(int); @@ -683,14 +703,14 @@ dumb_ptr map_id_is_spell(int id) } -map_local *map_mapname2mapid(const char *); -int map_mapname2ipport(const char *, struct in_addr *, int *); -int map_setipport(const char *name, struct in_addr ip, int port); +map_local *map_mapname2mapid(MapName); +int map_mapname2ipport(MapName, struct in_addr *, int *); +int map_setipport(MapName name, struct in_addr ip, int port); void map_addiddb(dumb_ptr); void map_deliddb(dumb_ptr bl); void map_addnickdb(dumb_ptr); int map_scriptcont(dumb_ptr sd, int id); /* Continues a script either on a spell or on an NPC */ -dumb_ptr map_nick2sd(const char *); +dumb_ptr map_nick2sd(CharName); int compare_item(struct item *a, struct item *b); dumb_ptr map_get_first_session(void); -- cgit v1.2.3-70-g09d2