From 780a0d771edbe21dcfa3405163ffbdf7f7fa4604 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Mon, 13 Oct 2014 13:16:34 -0700 Subject: Convert container lookups to use Option> --- src/map/script-fun.cpp | 138 +++++++++++++++++++------------------------------ 1 file changed, 54 insertions(+), 84 deletions(-) (limited to 'src/map/script-fun.cpp') diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp index 5caf060..4c6d7b5 100644 --- a/src/map/script-fun.cpp +++ b/src/map/script-fun.cpp @@ -117,9 +117,9 @@ static void builtin_callfunc(ScriptState *st) { RString str = conv_str(st, &AARG(0)); - const ScriptBuffer *scr = userfunc_db.get(str); + Option> scr_ = userfunc_db.get(str); - if (scr) + if OPTION_IS_SOME(scr, scr_) { int j = 0; assert (st->start + 3 == st->end); @@ -131,7 +131,7 @@ void builtin_callfunc(ScriptState *st) push_int(st->stack, j); // 引数の数をプッシュ push_int(st->stack, st->defsp); // 現在の基準スタックポインタをプッシュ push_int(st->stack, st->scriptp.pos); // 現在のスクリプト位置をプッシュ - push_script(st->stack, st->scriptp.code); // 現在のスクリプトをプッシュ + push_script(st->stack, TRY_UNWRAP(st->scriptp.code, abort())); // 現在のスクリプトをプッシュ st->scriptp = ScriptPointer(scr, 0); st->defsp = st->start + 4 + j; @@ -162,7 +162,7 @@ void builtin_callsub(ScriptState *st) push_int(st->stack, j); // 引数の数をプッシュ push_int(st->stack, st->defsp); // 現在の基準スタックポインタをプッシュ push_int(st->stack, st->scriptp.pos); // 現在のスクリプト位置をプッシュ - push_script(st->stack, st->scriptp.code); // 現在のスクリプトをプッシュ + push_script(st->stack, TRY_UNWRAP(st->scriptp.code, abort())); // 現在のスクリプトをプッシュ st->scriptp.pos = pos_; st->defsp = st->start + 4 + j; @@ -373,9 +373,7 @@ void builtin_areawarp(ScriptState *st) x = conv_num(st, &AARG(6)); y = conv_num(st, &AARG(7)); - map_local *m = map_mapname2mapid(mapname); - if (m == nullptr) - return; + P m = TRY_UNWRAP(map_mapname2mapid(mapname), return); map_foreachinarea(std::bind(builtin_areawarp_sub, ph::_1, str, x, y), m, @@ -718,8 +716,8 @@ void builtin_countitem(ScriptState *st) if (data->is()) { ZString name = ZString(conv_str(st, data)); - struct item_data *item_data = itemdb_searchname(name); - if (item_data != nullptr) + Option> item_data_ = itemdb_searchname(name); + if OPTION_IS_SOME(item_data, item_data_) nameid = item_data->nameid; } else @@ -761,8 +759,8 @@ void builtin_checkweight(ScriptState *st) if (data->is()) { ZString name = ZString(conv_str(st, data)); - struct item_data *item_data = itemdb_searchname(name); - if (item_data) + Option> item_data_ = itemdb_searchname(name); + if OPTION_IS_SOME(item_data, item_data_) nameid = item_data->nameid; } else @@ -806,8 +804,8 @@ void builtin_getitem(ScriptState *st) if (data->is()) { ZString name = ZString(conv_str(st, data)); - struct item_data *item_data = itemdb_searchname(name); - if (item_data != nullptr) + Option> item_data_ = itemdb_searchname(name); + if OPTION_IS_SOME(item_data, item_data_) nameid = item_data->nameid; } else @@ -859,8 +857,8 @@ void builtin_makeitem(ScriptState *st) if (data->is()) { ZString name = ZString(conv_str(st, data)); - struct item_data *item_data = itemdb_searchname(name); - if (item_data) + Option> item_data_ = itemdb_searchname(name); + if OPTION_IS_SOME(item_data, item_data_) nameid = item_data->nameid; } else @@ -871,11 +869,9 @@ void builtin_makeitem(ScriptState *st) x = conv_num(st, &AARG(3)); y = conv_num(st, &AARG(4)); - map_local *m; - if (sd && mapname == MOB_THIS_MAP) - m = sd->bl_m; - else - m = map_mapname2mapid(mapname); + P m = ((sd && mapname == MOB_THIS_MAP) + ? sd->bl_m + : TRY_UNWRAP(map_mapname2mapid(mapname), return)); if (nameid) { @@ -905,8 +901,8 @@ void builtin_delitem(ScriptState *st) if (data->is()) { ZString name = ZString(conv_str(st, data)); - struct item_data *item_data = itemdb_searchname(name); - if (item_data) + Option> item_data_ = itemdb_searchname(name); + if OPTION_IS_SOME(item_data, item_data_) nameid = item_data->nameid; } else @@ -1004,12 +1000,9 @@ void builtin_getcharid(ScriptState *st) static RString builtin_getpartyname_sub(PartyId party_id) { - PartyPair p = party_search(party_id); + Option p = party_search(party_id); - if (p) - return p->name; - - return RString(); + return p.pmd_pget(&PartyMost::name).copy_or(PartyName()); } /*========================================== @@ -1072,7 +1065,6 @@ void builtin_getequipid(ScriptState *st) { int num; dumb_ptr sd; - struct item_data *item; sd = script_rid2sd(st); if (sd == nullptr) @@ -1084,8 +1076,8 @@ void builtin_getequipid(ScriptState *st) IOff0 i = pc_checkequip(sd, equip[num - 1]); if (i.ok()) { - item = sd->inventory_data[i]; - if (item) + Option> item_ = sd->inventory_data[i]; + if OPTION_IS_SOME(item, item_) push_int(st->stack, unwrap(item->nameid)); else push_int(st->stack, 0); @@ -1105,7 +1097,6 @@ void builtin_getequipname(ScriptState *st) { int num; dumb_ptr sd; - struct item_data *item; AString buf; @@ -1114,8 +1105,8 @@ void builtin_getequipname(ScriptState *st) IOff0 i = pc_checkequip(sd, equip[num - 1]); if (i.ok()) { - item = sd->inventory_data[i]; - if (item) + Option> item_ = sd->inventory_data[i]; + if OPTION_IS_SOME(item, item_) buf = STRPRINTF("%s-[%s]"_fmt, pos_str[num - 1], item->jname); else buf = STRPRINTF("%s-[%s]"_fmt, pos_str[num - 1], pos_str[10]); @@ -1494,9 +1485,7 @@ void builtin_killmonster(ScriptState *st) if (event_ != "All"_s) extract(event_, &event); - map_local *m = map_mapname2mapid(mapname); - if (m == nullptr) - return; + P m = TRY_UNWRAP(map_mapname2mapid(mapname), return); map_foreachinarea(std::bind(builtin_killmonster_sub, ph::_1, event), m, 0, 0, @@ -1515,9 +1504,7 @@ void builtin_killmonsterall(ScriptState *st) { MapName mapname = stringish(ZString(conv_str(st, &AARG(0)))); - map_local *m = map_mapname2mapid(mapname); - if (m == nullptr) - return; + P m = TRY_UNWRAP(map_mapname2mapid(mapname), return); map_foreachinarea(builtin_killmonsterall_sub, m, 0, 0, @@ -1701,9 +1688,7 @@ void builtin_mapannounce(ScriptState *st) ZString str = ZString(conv_str(st, &AARG(1))); flag = conv_num(st, &AARG(2)); - map_local *m = map_mapname2mapid(mapname); - if (m == nullptr) - return; + P m = TRY_UNWRAP(map_mapname2mapid(mapname), return); map_foreachinarea(std::bind(builtin_mapannounce_sub, ph::_1, str, flag & 0x10), m, 0, 0, @@ -1741,12 +1726,11 @@ static void builtin_getmapusers(ScriptState *st) { MapName str = stringish(ZString(conv_str(st, &AARG(0)))); - map_local *m = map_mapname2mapid(str); - if (m == nullptr) + P m = TRY_UNWRAP(map_mapname2mapid(str), { push_int(st->stack, -1); return; - } + }); push_int(st->stack, m->users); } @@ -1786,12 +1770,11 @@ void builtin_getareausers(ScriptState *st) { living = conv_num(st, &AARG(5)); } - map_local *m = map_mapname2mapid(str); - if (m == nullptr) + P m = TRY_UNWRAP(map_mapname2mapid(str), { push_int(st->stack, -1); return; - } + }); map_foreachinarea(std::bind(living ? builtin_getareausers_living_sub: builtin_getareausers_sub, ph::_1, &users), m, x0, y0, @@ -1845,8 +1828,8 @@ void builtin_getareadropitem(ScriptState *st) if (data->is()) { ZString name = ZString(conv_str(st, data)); - struct item_data *item_data = itemdb_searchname(name); - if (item_data) + Option> item_data_ = itemdb_searchname(name); + if OPTION_IS_SOME(item_data, item_data_) item = item_data->nameid; } else @@ -1855,12 +1838,11 @@ void builtin_getareadropitem(ScriptState *st) if (HARG(6)) delitems = conv_num(st, &AARG(6)); - map_local *m = map_mapname2mapid(str); - if (m == nullptr) + P m = TRY_UNWRAP(map_mapname2mapid(str), { push_int(st->stack, -1); return; - } + }); if (delitems) map_foreachinarea(std::bind(builtin_getareadropitem_sub_anddelete, ph::_1, item, &amount), m, @@ -2027,8 +2009,8 @@ void builtin_setmapflag(ScriptState *st) MapName str = stringish(ZString(conv_str(st, &AARG(0)))); int i = conv_num(st, &AARG(1)); MapFlag mf = map_flag_from_int(i); - map_local *m = map_mapname2mapid(str); - if (m != nullptr) + Option> m_ = map_mapname2mapid(str); + if OPTION_IS_SOME(m, m_) { m->flag.set(mf, 1); } @@ -2040,8 +2022,8 @@ void builtin_removemapflag(ScriptState *st) MapName str = stringish(ZString(conv_str(st, &AARG(0)))); int i = conv_num(st, &AARG(1)); MapFlag mf = map_flag_from_int(i); - map_local *m = map_mapname2mapid(str); - if (m != nullptr) + Option> m_ = map_mapname2mapid(str); + if OPTION_IS_SOME(m, m_) { m->flag.set(mf, 0); } @@ -2055,8 +2037,8 @@ void builtin_getmapflag(ScriptState *st) MapName str = stringish(ZString(conv_str(st, &AARG(0)))); int i = conv_num(st, &AARG(1)); MapFlag mf = map_flag_from_int(i); - map_local *m = map_mapname2mapid(str); - if (m != nullptr) + Option> m_ = map_mapname2mapid(str); + if OPTION_IS_SOME(m, m_) { r = m->flag.get(mf); } @@ -2068,8 +2050,8 @@ static void builtin_pvpon(ScriptState *st) { MapName str = stringish(ZString(conv_str(st, &AARG(0)))); - map_local *m = map_mapname2mapid(str); - if (m != nullptr && !m->flag.get(MapFlag::PVP) && !m->flag.get(MapFlag::NOPVP)) + P m = TRY_UNWRAP(map_mapname2mapid(str), return); + if (!m->flag.get(MapFlag::PVP) && !m->flag.get(MapFlag::NOPVP)) { m->flag.set(MapFlag::PVP, 1); @@ -2095,15 +2077,14 @@ void builtin_pvpon(ScriptState *st) } } } - } static void builtin_pvpoff(ScriptState *st) { MapName str = stringish(ZString(conv_str(st, &AARG(0)))); - map_local *m = map_mapname2mapid(str); - if (m != nullptr && m->flag.get(MapFlag::PVP) && m->flag.get(MapFlag::NOPVP)) + P m = TRY_UNWRAP(map_mapname2mapid(str), return); + if (m->flag.get(MapFlag::PVP) && m->flag.get(MapFlag::NOPVP)) { m->flag.set(MapFlag::PVP, 0); @@ -2125,7 +2106,6 @@ void builtin_pvpoff(ScriptState *st) } } } - } /*========================================== @@ -2152,16 +2132,13 @@ void builtin_mapwarp(ScriptState *st) // Added by RoVeRT MapName mapname = stringish(ZString(conv_str(st, &AARG(0)))); x0 = 0; y0 = 0; - map_local *m = map_mapname2mapid(mapname); + P m = TRY_UNWRAP(map_mapname2mapid(mapname), return); x1 = m->xs; y1 = m->ys; MapName str = stringish(ZString(conv_str(st, &AARG(1)))); x = conv_num(st, &AARG(2)); y = conv_num(st, &AARG(3)); - if (m == nullptr) - return; - map_foreachinarea(std::bind(builtin_areawarp_sub, ph::_1, str, x, y), m, x0, y0, @@ -2194,12 +2171,11 @@ void builtin_mobcount(ScriptState *st) // Added by RoVeRT NpcEvent event; extract(event_, &event); - map_local *m = map_mapname2mapid(mapname); - if (m == nullptr) + P m = TRY_UNWRAP(map_mapname2mapid(mapname), { push_int(st->stack, -1); return; - } + }); map_foreachinarea(std::bind(builtin_mobcount_sub, ph::_1, event, &c), m, 0, 0, @@ -2250,7 +2226,7 @@ void builtin_divorce(ScriptState *st) static void builtin_getitemname(ScriptState *st) { - struct item_data *i_data; + Option> i_data = None; struct script_data *data; data = &AARG(0); @@ -2263,14 +2239,10 @@ void builtin_getitemname(ScriptState *st) else { ItemNameId item_id = wrap(conv_num(st, data)); - i_data = itemdb_search(item_id); + i_data = Some(itemdb_search(item_id)); } - RString item_name; - if (i_data) - item_name = i_data->jname; - else - item_name = "Unknown Item"_s; + RString item_name = i_data.pmd_pget(&item_data::jname).copy_or(stringish("Unknown Item"_s)); push_str(st->stack, item_name); } @@ -2585,10 +2557,10 @@ void builtin_npcwarp(ScriptState *st) return; } - map_local *m = nd->bl_m; + P m = nd->bl_m; /* Crude sanity checks. */ - if (m == nullptr || !nd->bl_prev + if (!nd->bl_prev || x < 0 || x > m->xs -1 || y < 0 || y > m->ys - 1) return; @@ -2740,9 +2712,7 @@ void builtin_areatimer(ScriptState *st) NpcEvent event; extract(event_, &event); - map_local *m = map_mapname2mapid(mapname); - if (m == nullptr) - return; + P m = TRY_UNWRAP(map_mapname2mapid(mapname), return); map_foreachinarea(std::bind(builtin_areatimer_sub, ph::_1, tick, event), m, -- cgit v1.2.3-60-g2f50