diff options
-rw-r--r-- | CHANGELOG | 17 | ||||
-rw-r--r-- | src/ast/npc.cpp | 55 | ||||
-rw-r--r-- | src/ast/npc.hpp | 11 | ||||
-rw-r--r-- | src/ast/npc_test.cpp | 68 | ||||
-rw-r--r-- | src/map/chrif.cpp | 84 | ||||
-rw-r--r-- | src/map/clif.cpp | 4 | ||||
-rw-r--r-- | src/map/npc-parse.cpp | 122 | ||||
-rw-r--r-- | src/map/npc.cpp | 2 | ||||
-rw-r--r-- | src/map/script-fun.cpp | 36 |
9 files changed, 93 insertions, 306 deletions
@@ -1,3 +1,20 @@ +v15.5.04 + - remove check for pk_mode for mapflag NOPVP + - remove atcommand gm + - add atcommand npc + - remove builtin readparam + - remove builtin statusup2 + - remove builtin changesex + - remove builtin gmcommand + - add builtin wgm + - add builtin gmlog + - do not force disconnection after sex change + - add new parameter to builtin emotion + - remove braces and jname from getitemlink + - add quest log + - add sanity check to freeloop + - add OnPCLoginEvent handler + - some typo fixes and rewording v15.4.20 - make spam warnings appear in General chat tab - add builtin getnpcx diff --git a/src/ast/npc.cpp b/src/ast/npc.cpp index e9c3464..8d4a43e 100644 --- a/src/ast/npc.cpp +++ b/src/ast/npc.cpp @@ -306,7 +306,7 @@ namespace npc static Result<ScriptNone> parse_script_none_head(io::LineSpan span, std::vector<Spanned<std::vector<Spanned<RString>>>>& bits) { - // ScriptNone: -|script|script name|-1{code} + // ScriptNone: -|script|script name|32767{code} if (bits.size() != 4) { return Err(span.error_str("expect 4 |component|s"_s)); @@ -319,10 +319,10 @@ namespace npc { return Err(bits[2].span.error_str("in |component 3| expect 1 ,component,s"_s)); } - assert(bits[3].data[0].data == "-1"_s); + assert(bits[3].data[0].data == "32767"_s); if (bits[3].data.size() != 1) { - return Err(bits[3].span.error_str("in |component 4| should be just -1"_s)); + return Err(bits[3].span.error_str("in |component 4| should be just 32767"_s)); } ScriptNone script_none; @@ -333,39 +333,6 @@ namespace npc return Ok(std::move(script_none)); } static - Result<ScriptMapNone> parse_script_map_none_head(io::LineSpan span, std::vector<Spanned<std::vector<Spanned<RString>>>>& bits) - { - // ScriptMapNone: m,x,y,d|script|script name|-1{code} - if (bits.size() != 4) - { - return Err(span.error_str("expect 4 |component|s"_s)); - } - if (bits[0].data.size() != 4) - { - return Err(bits[0].span.error_str("in |component 1| expect 3 ,component,s"_s)); - } - assert(bits[1].data.size() == 1); - assert(bits[1].data[0].data == "script"_s); - if (bits[2].data.size() != 1) - { - return Err(bits[2].span.error_str("in |component 3| expect 1 ,component,s"_s)); - } - if (bits[3].data.size() != 1 || bits[3].data[0].data != "-1"_s) - { - return Err(bits[3].span.error_str("in |component 4| should be just -1"_s)); - } - - ScriptMapNone script_map_none; - TRY_EXTRACT(bits[0].data[0], script_map_none.m); - TRY_EXTRACT(bits[0].data[1], script_map_none.x); - TRY_EXTRACT(bits[0].data[2], script_map_none.y); - TRY_EXTRACT(bits[0].data[3], script_map_none.d); - TRY_EXTRACT(bits[2].data[0], script_map_none.name); - script_map_none.key4_span = bits[3].data[0].span; - // also expect '{' and parse real script (in caller) - return Ok(std::move(script_map_none)); - } - static Result<ScriptMap> parse_script_map_head(io::LineSpan span, std::vector<Spanned<std::vector<Spanned<RString>>>>& bits) { // ScriptMap: m,x,y,d|script|script name|class,xs,ys{code} @@ -417,10 +384,9 @@ namespace npc static Result<Script> parse_script_any(io::LineSpan span, std::vector<Spanned<std::vector<Spanned<RString>>>>& bits, io::LineCharReader& lr) { - // 4 cases: + // 3 cases: // ScriptFunction: function|script|Fun Name{code} - // ScriptNone: -|script|script name|-1{code} - // ScriptMapNone: m,x,y,d|script|script name|-1{code} + // ScriptNone: -|script|script name|32767{code} // ScriptMap: m,x,y,d|script|script name|class,xs,ys{code} if (bits[0].data[0].data == "function"_s) { @@ -445,17 +411,6 @@ namespace npc rv.body = TRY(ast::script::parse_script_body(lr, opt)); return Ok(std::move(rv)); } - else if (bits.size() >= 4 && bits[3].data[0].data == "-1"_s) - { - Script rv = TRY(parse_script_map_none_head(span, bits)); - rv.key_span = bits[1].data[0].span; - - ast::script::ScriptOptions opt; - opt.implicit_start = true; - opt.no_start = true; - rv.body = TRY(ast::script::parse_script_body(lr, opt)); - return Ok(std::move(rv)); - } else { ScriptMap script_map = TRY(parse_script_map_head(span, bits)); diff --git a/src/ast/npc.hpp b/src/ast/npc.hpp index a51acd3..ca6479e 100644 --- a/src/ast/npc.hpp +++ b/src/ast/npc.hpp @@ -103,14 +103,6 @@ namespace npc Spanned<NpcName> name; io::LineSpan key4_span; }; - struct ScriptMapNone - { - Spanned<MapName> m; - Spanned<unsigned> x, y; - Spanned<DIR> d; - Spanned<NpcName> name; - io::LineSpan key4_span; - }; struct ScriptMap { Spanned<MapName> m; @@ -120,13 +112,12 @@ namespace npc Spanned<Species> npc_class; Spanned<unsigned> xs, ys; }; - using ScriptBase = Variant<ScriptFunction, ScriptNone, ScriptMapNone, ScriptMap>; + using ScriptBase = Variant<ScriptFunction, ScriptNone, ScriptMap>; struct Script : ScriptBase { Script() = default; Script(ScriptFunction s) : ScriptBase(std::move(s)) {} Script(ScriptNone s) : ScriptBase(std::move(s)) {} - Script(ScriptMapNone s) : ScriptBase(std::move(s)) {} Script(ScriptMap s) : ScriptBase(std::move(s)) {} io::LineSpan key_span; diff --git a/src/ast/npc_test.cpp b/src/ast/npc_test.cpp index a753623..dadeba7 100644 --- a/src/ast/npc_test.cpp +++ b/src/ast/npc_test.cpp @@ -423,11 +423,11 @@ namespace npc { // 1 2 3 //23456789012345678901234567890123456789 - "-|script|#config|-1{end;}"_s, + "-|script|#config|32767{end;}"_s, // 123456 - "-|script|#config|-1\n{end;}\n"_s, + "-|script|#config|32767\n{end;}\n"_s, // 1234567 - "-|script|#config|-1\n \n {end;} "_s, + "-|script|#config|32767\n \n {end;} "_s, }; for (auto input : inputs) { @@ -435,7 +435,7 @@ namespace npc auto res = TRY_UNWRAP(parse_top(lr), FAIL()); EXPECT_TRUE(res.get_success().is_some()); auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - EXPECT_SPAN(top.span, 1,1, 1,19); + EXPECT_SPAN(top.span, 1,1, 1,22); auto script = top.get_if<Script>(); EXPECT_TRUE(script); auto p = script->get_if<ScriptNone>(); @@ -446,66 +446,10 @@ namespace npc EXPECT_SPAN(script->key_span, 1,3, 1,8); EXPECT_SPAN(p->name.span, 1,10, 1,16); EXPECT_EQ(p->name.data, stringish<NpcName>("#config"_s)); - EXPECT_SPAN(p->key4_span, 1,18, 1,19); + EXPECT_SPAN(p->key4_span, 1,18, 1,22); if (input.endswith('}')) { - EXPECT_SPAN(script->body.span, 1,20, 1,25); - } - else if (input.endswith('\n')) - { - EXPECT_SPAN(script->body.span, 2,1, 2,6); - } - else if (input.endswith(' ')) - { - EXPECT_SPAN(script->body.span, 3,2, 3,7); - } - else - { - FAIL(); - } - EXPECT_EQ(script->body.braced_body, "{end;}"_s); - } - } - } - TEST(npcast, scriptmapnone) - { - QuietFd q; - LString inputs[] = - { - // 1 2 3 - //23456789012345678901234567890123456789 - "map.gat,1,2,3|script|Init|-1{end;}"_s, - "map.gat,1,2,3|script|Init|-1\n{end;}\n"_s, - "map.gat,1,2,3|script|Init|-1\n \n {end;} "_s, - }; - for (auto input : inputs) - { - io::LineCharReader lr(io::from_string, "<string>"_s, input); - auto res = TRY_UNWRAP(parse_top(lr), FAIL()); - EXPECT_TRUE(res.get_success().is_some()); - auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - EXPECT_SPAN(top.span, 1,1, 1,28); - auto script = top.get_if<Script>(); - EXPECT_TRUE(script); - auto p = script->get_if<ScriptMapNone>(); - EXPECT_TRUE(p); - if (p) - { - EXPECT_SPAN(p->m.span, 1,1, 1,7); - EXPECT_EQ(p->m.data, stringish<MapName>("map"_s)); - EXPECT_SPAN(p->x.span, 1,9, 1,9); - EXPECT_EQ(p->x.data, 1); - EXPECT_SPAN(p->y.span, 1,11, 1,11); - EXPECT_EQ(p->y.data, 2); - EXPECT_SPAN(p->d.span, 1,13, 1,13); - EXPECT_EQ(p->d.data, DIR::NW); - EXPECT_SPAN(script->key_span, 1,15, 1,20); - EXPECT_SPAN(p->name.span, 1,22, 1,25); - EXPECT_EQ(p->name.data, stringish<NpcName>("Init"_s)); - EXPECT_SPAN(p->key4_span, 1,27, 1,28); - if (input.endswith('}')) - { - EXPECT_SPAN(script->body.span, 1,29, 1,34); + EXPECT_SPAN(script->body.span, 1,23, 1,28); } else if (input.endswith('\n')) { diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp index 3ffeaf2..37efc4e 100644 --- a/src/map/chrif.cpp +++ b/src/map/chrif.cpp @@ -218,7 +218,7 @@ int chrif_changemapserverack(Session *, const Packet_Fixed<0x2b06>& fixed) if (fixed.error == 1) { if (battle_config.error_log) - PRINTF("map server change failed.\n"_fmt); + PRINTF("Changing the map server failed.\n"_fmt); pc_authfail(sd->status_key.account_id); return 0; } @@ -241,7 +241,7 @@ int chrif_connectack(Session *s, const Packet_Fixed<0x2af9>& fixed) { if (fixed.code) { - PRINTF("Connected to char-server failed %d.\n"_fmt, fixed.code); + PRINTF("Connecting to char-server failed %d.\n"_fmt, fixed.code); exit(1); } PRINTF("Connected to char-server (connection #%d).\n"_fmt, s); @@ -266,7 +266,7 @@ int chrif_sendmapack(Session *, Packet_Fixed<0x2afb> fixed) { if (fixed.unknown) //impossible { - PRINTF("chrif : send map list to char server failed %d\n"_fmt, + PRINTF("chrif: sending the map list to char-server failed %d\n"_fmt, fixed.unknown); exit(1); } @@ -388,7 +388,7 @@ void chrif_char_ask_name(AccountId id, CharName character_name, short operation_ fixed_0e.operation = operation_type; // type of operation if (operation_type == 2) fixed_0e.ban_add = modif; - PRINTF("chrif : sended 0x2b0e\n"_fmt); + PRINTF("chrif: sent 0x2b0e\n"_fmt); send_fpacket<0x2b0e, 44>(char_session, fixed_0e); } @@ -402,7 +402,7 @@ void chrif_char_ask_name(AccountId id, CharName character_name, short operation_ * 4: unban * 5: changesex * type of answer: - * 0: login-server resquest done + * 0: login-server request done * 1: player not found * 2: gm level too low * 3: login-server offline @@ -419,7 +419,7 @@ int chrif_char_ask_name_answer(Session *, const Packet_Fixed<0x2b0f>& fixed) { AString output; if (fixed.error == 1) // player not found - output = STRPRINTF("The player '%s' doesn't exist."_fmt, + output = STRPRINTF("The player, '%s,' doesn't exist."_fmt, player_name); else { @@ -428,20 +428,20 @@ int chrif_char_ask_name_answer(Session *, const Packet_Fixed<0x2b0f>& fixed) case 1: // block switch (fixed.error) { - case 0: // login-server resquest done + case 0: // login-server request done output = STRPRINTF( - "Login-server has been asked to block the player '%s'."_fmt, + "Login-server has been asked to block '%s'."_fmt, player_name); break; //case 1: // player not found case 2: // gm level too low output = STRPRINTF( - "Your GM level don't authorise you to block the player '%s'."_fmt, + "Your GM level doesn't authorize you to block the player '%s'."_fmt, player_name); break; case 3: // login-server offline output = STRPRINTF( - "Login-server is offline. Impossible to block the the player '%s'."_fmt, + "Login-server is offline, so it's impossible to block '%s'."_fmt, player_name); break; } @@ -449,20 +449,20 @@ int chrif_char_ask_name_answer(Session *, const Packet_Fixed<0x2b0f>& fixed) case 2: // ban switch (fixed.error) { - case 0: // login-server resquest done + case 0: // login-server request done output = STRPRINTF( - "Login-server has been asked to ban the player '%s'."_fmt, + "Login-server has been asked to ban '%s'."_fmt, player_name); break; //case 1: // player not found case 2: // gm level too low output = STRPRINTF( - "Your GM level don't authorise you to ban the player '%s'."_fmt, + "Your GM level doesn't authorize you to ban '%s'."_fmt, player_name); break; case 3: // login-server offline output = STRPRINTF( - "Login-server is offline. Impossible to ban the the player '%s'."_fmt, + "Login-server is offline, so it's impossible to ban '%s'."_fmt, player_name); break; } @@ -470,20 +470,20 @@ int chrif_char_ask_name_answer(Session *, const Packet_Fixed<0x2b0f>& fixed) case 3: // unblock switch (fixed.error) { - case 0: // login-server resquest done + case 0: // login-server request done output = STRPRINTF( - "Login-server has been asked to unblock the player '%s'."_fmt, + "Login-server has been asked to unblock '%s'."_fmt, player_name); break; //case 1: // player not found case 2: // gm level too low output = STRPRINTF( - "Your GM level don't authorise you to unblock the player '%s'."_fmt, + "Your GM level doesn't authorize you to unblock '%s'."_fmt, player_name); break; case 3: // login-server offline output = STRPRINTF( - "Login-server is offline. Impossible to unblock the the player '%s'."_fmt, + "Login-server is offline, so it's impossible to unblock '%s'."_fmt, player_name); break; } @@ -491,20 +491,20 @@ int chrif_char_ask_name_answer(Session *, const Packet_Fixed<0x2b0f>& fixed) case 4: // unban switch (fixed.error) { - case 0: // login-server resquest done + case 0: // login-server request done output = STRPRINTF( - "Login-server has been asked to unban the player '%s'."_fmt, + "Login-server has been asked to unban '%s'."_fmt, player_name); break; //case 1: // player not found case 2: // gm level too low output = STRPRINTF( - "Your GM level don't authorise you to unban the player '%s'."_fmt, + "Your GM level doesn't authorize you to unban '%s'."_fmt, player_name); break; case 3: // login-server offline output = STRPRINTF( - "Login-server is offline. Impossible to unban the the player '%s'."_fmt, + "Login-server is offline, so it's impossible to unban '%s'."_fmt, player_name); break; } @@ -512,20 +512,20 @@ int chrif_char_ask_name_answer(Session *, const Packet_Fixed<0x2b0f>& fixed) case 5: // changesex switch (fixed.error) { - case 0: // login-server resquest done + case 0: // login-server request done output = STRPRINTF( - "Login-server has been asked to change the sex of the player '%s'."_fmt, + "Login-server has been asked to change the sex of '%s'."_fmt, player_name); break; //case 1: // player not found case 2: // gm level too low output = STRPRINTF( - "Your GM level don't authorise you to change the sex of the player '%s'."_fmt, + "Your GM level doesn't authorize you to change the sex of '%s'."_fmt, player_name); break; case 3: // login-server offline output = STRPRINTF( - "Login-server is offline. Impossible to change the sex of the the player '%s'."_fmt, + "Login-server is offline, so it's impossible to change the sex of '%s'."_fmt, player_name); break; } @@ -536,7 +536,7 @@ int chrif_char_ask_name_answer(Session *, const Packet_Fixed<0x2b0f>& fixed) clif_displaymessage(sd->sess, output); } else - PRINTF("chrif_char_ask_name_answer failed - player not online.\n"_fmt); + PRINTF("chrif_char_ask_name_answer failed because the player is not online.\n"_fmt); return 0; } @@ -704,14 +704,14 @@ int chrif_accountdeletion(Session *, const Packet_Fixed<0x2b13>& fixed) { sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters clif_displaymessage(sd->sess, - "Your account has been deleted (disconnection)..."_s); + "Your account has been deleted. You will now be disconnected..."_s); clif_setwaitclose(sd->sess); // forced to disconnect for the change } } else { if (sd != nullptr) - PRINTF("chrif_accountdeletion failed - player not online.\n"_fmt); + PRINTF("chrif_accountdeletion failed because the player is not online.\n"_fmt); } return 0; @@ -741,11 +741,11 @@ int chrif_accountban(Session *, const Packet_Fixed<0x2b14>& fixed) { // status or final date of a banishment case 1: // 0 = Unregistered ID clif_displaymessage(sd->sess, - "Your account has 'Unregistered'."_s); + "Your account has an unregistered ID."_s); break; case 2: // 1 = Incorrect Password clif_displaymessage(sd->sess, - "Your account has an 'Incorrect Password'..."_s); + "Your password is incorrect."_s); break; case 3: // 2 = This ID is expired clif_displaymessage(sd->sess, @@ -753,7 +753,7 @@ int chrif_accountban(Session *, const Packet_Fixed<0x2b14>& fixed) break; case 4: // 3 = Rejected from Server clif_displaymessage(sd->sess, - "Your account has been rejected from server."_s); + "Your account has been rejected by the server."_s); break; case 5: // 4 = You have been blocked by the GM Team clif_displaymessage(sd->sess, @@ -761,19 +761,19 @@ int chrif_accountban(Session *, const Packet_Fixed<0x2b14>& fixed) break; case 6: // 5 = Your Game's EXE file is not the latest version clif_displaymessage(sd->sess, - "Your Game's EXE file is not the latest version."_s); + "You need to update your client."_s); break; case 7: // 6 = Your are Prohibited to log in until %s clif_displaymessage(sd->sess, - "Your account has been prohibited to log in."_s); + "Your account has been prohibited from logging in."_s); break; case 8: // 7 = Server is jammed due to over populated clif_displaymessage(sd->sess, - "Server is jammed due to over populated."_s); + "The server is overpopulated."_s); break; case 9: // 8 = No MSG (actually, all states after 9 except 99 are No MSG, use only this) clif_displaymessage(sd->sess, - "Your account has not more authorised."_s); + "Your account must be authorized."_s); break; case 100: // 99 = This ID has been totally erased clif_displaymessage(sd->sess, @@ -781,7 +781,7 @@ int chrif_accountban(Session *, const Packet_Fixed<0x2b14>& fixed) break; default: clif_displaymessage(sd->sess, - "Your account has not more authorised."_s); + "Your account must be authorized."_s); break; } } @@ -800,7 +800,7 @@ int chrif_accountban(Session *, const Packet_Fixed<0x2b14>& fixed) else { if (sd != nullptr) - PRINTF("chrif_accountban failed - player not online.\n"_fmt); + PRINTF("chrif_accountban failed because the player is not online.\n"_fmt); } return 0; @@ -813,7 +813,7 @@ int chrif_accountban(Session *, const Packet_Fixed<0x2b14>& fixed) static int chrif_recvgmaccounts(Session *s, const std::vector<Packet_Repeat<0x2b15>>& repeat) { - PRINTF("From login-server: receiving of %d GM accounts information.\n"_fmt, + PRINTF("Receiving information on %d GM accounts from login-server.\n"_fmt, pc_read_gm_account(s, repeat)); return 0; @@ -823,7 +823,7 @@ static void chrif_delete(Session *s) { assert (s == char_session); - PRINTF("Map-server can't connect to char-server (connection #%d).\n"_fmt, + PRINTF("map-server can't connect to char-server (connection #%d).\n"_fmt, s); char_session = nullptr; } @@ -1012,7 +1012,7 @@ void chrif_parse(Session *s) return; if (battle_config.error_log) - PRINTF("chrif_parse : unknown packet %d %d\n"_fmt, s, + PRINTF("chrif_parse: unknown packet %d %d\n"_fmt, s, packet_id); s->set_eof(); return; @@ -1066,7 +1066,7 @@ void check_connect_char_server(TimerData *, tick_t) { if (!char_session) { - PRINTF("Attempt to connect to char-server...\n"_fmt); + PRINTF("Attempting to connect to char-server...\n"_fmt); chrif_state = 0; char_session = make_connection(map_conf.char_ip, map_conf.char_port, SessionParsers{.func_parse= chrif_parse, .func_delete= chrif_delete}); diff --git a/src/map/clif.cpp b/src/map/clif.cpp index e3cd55f..2c65d44 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -901,7 +901,7 @@ int clif_spawnnpc(dumb_ptr<npc_data> nd) { nullpo_retz(nd); - if (nd->npc_class == NEGATIVE_SPECIES || nd->flag & 1 || nd->npc_class == INVISIBLE_CLASS) + if (nd->flag & 1 || nd->npc_class == INVISIBLE_CLASS) return 0; Packet_Fixed<0x007c> fixed_7c; @@ -2320,7 +2320,7 @@ void clif_getareachar_npc(dumb_ptr<map_session_data> sd, dumb_ptr<npc_data> nd) nullpo_retv(sd); nullpo_retv(nd); - if (nd->npc_class == NEGATIVE_SPECIES || nd->flag & 1 || nd->npc_class == INVISIBLE_CLASS) + if (nd->flag & 1 || nd->npc_class == INVISIBLE_CLASS) return; Buffer buf; diff --git a/src/map/npc-parse.cpp b/src/map/npc-parse.cpp index 9c9a22c..4d9fcbd 100644 --- a/src/map/npc-parse.cpp +++ b/src/map/npc-parse.cpp @@ -446,7 +446,7 @@ bool npc_load_script_none(ast::script::ScriptBody& body, ast::npc::ScriptNone& s nd->bl_id = npc_get_new_npc_id(); nd->dir = DIR::S; nd->flag = 0; - nd->npc_class = NEGATIVE_SPECIES; + nd->npc_class = INVISIBLE_CLASS; nd->speed = 200_ms; nd->scr.script = std::move(script); nd->option = Opt0::ZERO; @@ -514,115 +514,6 @@ bool npc_load_script_none(ast::script::ScriptBody& body, ast::npc::ScriptNone& s } static -bool npc_load_script_map_none(ast::script::ScriptBody& body, ast::npc::ScriptMapNone& script_map_none) -{ - MapName mapname = script_map_none.m.data; - int x = script_map_none.x.data, y = script_map_none.y.data; - DIR dir = script_map_none.d.data; - P<map_local> m = TRY_UNWRAP(map_mapname2mapid(mapname), - { - script_map_none.m.span.error("No such map"_s); - return false; - }); - - std::unique_ptr<const ScriptBuffer> script = compile_script(STRPRINTF("script npc \"%s\""_fmt, script_map_none.name.data), body, false); - if (script == nullptr) - return false; - - dumb_ptr<npc_data_script> nd; - nd.new_(); - nd->scr.event_needs_map = false; - - nd->name = script_map_none.name.data; - - nd->bl_prev = nd->bl_next = nullptr; - nd->bl_m = m; - nd->bl_x = x; - nd->bl_y = y; - nd->bl_id = npc_get_new_npc_id(); - nd->dir = dir; - nd->flag = 0; - nd->npc_class = NEGATIVE_SPECIES; - nd->speed = 200_ms; - nd->scr.script = std::move(script); - nd->option = Opt0::ZERO; - nd->opt1 = Opt1::ZERO; - nd->opt2 = Opt2::ZERO; - nd->opt3 = Opt3::ZERO; - - npc_script++; - nd->bl_type = BL::NPC; - nd->npc_subtype = NpcSubtype::SCRIPT; - - nd->n = map_addnpc(m, nd); - map_addblock(nd); - - { - struct event_data ev {}; - ev.nd = nd; - ev.pos = 0; - NpcEvent npcev; - npcev.npc = nd->name; - npcev.label = ScriptLabel(); - ev_db.insert(npcev, ev); - } - - register_npc_name(nd); - - for (auto& pair : scriptlabel_db) - npc_convertlabel_db(pair.first, pair.second, nd); - - for (npc_label_list& el : nd->scr.label_listv) - { - ScriptLabel lname = el.name; - int pos = el.pos; - - if (lname.startswith("On"_s)) - { - struct event_data ev {}; - ev.nd = nd; - ev.pos = pos; - NpcEvent buf; - buf.npc = nd->name; - buf.label = lname; - ev_db.insert(buf, ev); - } - } - - for (npc_label_list& el : nd->scr.label_listv) - { - int t_ = 0; - ScriptLabel lname = el.name; - int pos = el.pos; - if (lname.startswith("OnTimer"_s) && extract(lname.xslice_t(7), &t_) && t_ > 0) - { - interval_t t = static_cast<interval_t>(t_); - - npc_timerevent_list tel {}; - tel.timer = t; - tel.pos = pos; - - auto it = std::lower_bound(nd->scr.timer_eventv.begin(), nd->scr.timer_eventv.end(), tel, - [](const npc_timerevent_list& l, const npc_timerevent_list& r) - { - return l.timer < r.timer; - } - ); - assert (it == nd->scr.timer_eventv.end() || it->timer != tel.timer); - - nd->scr.timer_eventv.insert(it, std::move(tel)); - } - } - // The counter starts stopped with 0 ticks, which is the first event, - // unless there is none, in which case begin == end. - nd->scr.timer = interval_t::zero(); - nd->scr.next_event = nd->scr.timer_eventv.begin(); - // nd->scr.timerid = nullptr; - - return true; -} - -static bool npc_load_script_map(ast::script::ScriptBody& body, ast::npc::ScriptMap& script_map) { MapName mapname = script_map.m.data; @@ -761,17 +652,6 @@ bool npc_load_script_any(ast::npc::Script *script) { return npc_load_script_none(script->body, script_none); } - MATCH_CASE (ast::npc::ScriptMapNone&, script_map_none) - { - auto& mapname = script_map_none.m; - Option<P<map_local>> m = map_mapname2mapid(mapname.data); - if (m.is_none()) - { - mapname.span.error(STRPRINTF("Map not found: %s"_fmt, mapname.data)); - return false; - } - return npc_load_script_map_none(script->body, script_map_none); - } MATCH_CASE (ast::npc::ScriptMap&, script_map) { auto& mapname = script_map.m; diff --git a/src/map/npc.cpp b/src/map/npc.cpp index 56c33cc..4296432 100644 --- a/src/map/npc.cpp +++ b/src/map/npc.cpp @@ -583,7 +583,7 @@ int npc_checknear(dumb_ptr<map_session_data> sd, BlockId id) if (nd->bl_type != BL::NPC) return 1; - if (nd->npc_class == NEGATIVE_SPECIES) + if (nd->npc_class == INVISIBLE_CLASS) return 0; // エリア判定 diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp index 010b095..142debf 100644 --- a/src/map/script-fun.cpp +++ b/src/map/script-fun.cpp @@ -108,7 +108,7 @@ void builtin_goto(ScriptState *st) { if (!AARG(0).is<ScriptDataPos>()) { - PRINTF("script: goto: not label !\n"_fmt); + PRINTF("script: goto: that's not a label!\n"_fmt); st->state = ScriptEndState::END; return; } @@ -149,7 +149,7 @@ void builtin_callfunc(ScriptState *st) } OMATCH_CASE_NONE () { - PRINTF("script:callfunc: function not found! [%s]\n"_fmt, str); + PRINTF("script: callfunc: function not found! [%s]\n"_fmt, str); st->state = ScriptEndState::END; } } @@ -553,7 +553,7 @@ void builtin_setarray(ScriptState *st) if (prefix != '$' && prefix != '@') { - PRINTF("builtin_setarray: illegal scope !\n"_fmt); + PRINTF("builtin_setarray: illegal scope!\n"_fmt); return; } if (prefix != '$') @@ -584,7 +584,7 @@ void builtin_cleararray(ScriptState *st) if (prefix != '$' && prefix != '@') { - PRINTF("builtin_cleararray: illegal scope !\n"_fmt); + PRINTF("builtin_cleararray: illegal scope!\n"_fmt); return; } if (prefix != '$') @@ -641,7 +641,7 @@ void builtin_getarraysize(ScriptState *st) if (prefix != '$' && prefix != '@') { - PRINTF("builtin_copyarray: illegal scope !\n"_fmt); + PRINTF("builtin_copyarray: illegal scope!\n"_fmt); return; } @@ -660,7 +660,7 @@ void builtin_getelementofarray(ScriptState *st) int i = conv_num(st, &AARG(1)); if (i > 255 || i < 0) { - PRINTF("script: getelementofarray (operator[]): param2 illegal number %d\n"_fmt, + PRINTF("script: getelementofarray (operator[]): param2 illegal number: %d\n"_fmt, i); push_int<ScriptDataInt>(st->stack, 0); } @@ -672,7 +672,7 @@ void builtin_getelementofarray(ScriptState *st) } else { - PRINTF("script: getelementofarray (operator[]): param1 not name !\n"_fmt); + PRINTF("script: getelementofarray (operator[]): param1 not named!\n"_fmt); push_int<ScriptDataInt>(st->stack, 0); } } @@ -750,7 +750,7 @@ void builtin_countitem(ScriptState *st) else { if (battle_config.error_log) - PRINTF("wrong item ID : countitem (%i)\n"_fmt, nameid); + PRINTF("wrong item ID: countitem (%i)\n"_fmt, nameid); } push_int<ScriptDataInt>(st->stack, count); @@ -788,7 +788,7 @@ void builtin_checkweight(ScriptState *st) amount = conv_num(st, &AARG(1)); if (amount <= 0 || !nameid) { - //if get wrong item ID or amount<=0, don't count weight of non existing items + //If it gets the wrong item ID or the amount<=0, don't count its weight (assume it's a non-existent item) push_int<ScriptDataInt>(st->stack, 0); return; } @@ -940,7 +940,7 @@ void builtin_delitem(ScriptState *st) if (!nameid || amount <= 0) { - //by Lupus. Don't run FOR if u got wrong item ID or amount<=0 + //By Lupus. Don't run FOR if you've got the wrong item ID or amount<=0 return; } @@ -1949,7 +1949,7 @@ static void builtin_debugmes(ScriptState *st) { RString mes = conv_str(st, &AARG(0)); - PRINTF("script debug : %d %d : %s\n"_fmt, + PRINTF("script debug: %d %d: '%s'\n"_fmt, st->rid, st->oid, mes); } @@ -2585,7 +2585,7 @@ void builtin_npcwarp(ScriptState *st) if (!nd) { - PRINTF("builtin_npcwarp: no such npc: %s\n"_fmt, npc); + PRINTF("builtin_npcwarp: no such npc: '%s'\n"_fmt, npc); return; } @@ -2628,7 +2628,7 @@ void builtin_npcareawarp(ScriptState *st) if (!nd) { - PRINTF("builtin_npcareawarp: no such npc: %s\n"_fmt, npc); + PRINTF("builtin_npcareawarp: no such npc: '%s'\n"_fmt, npc); return; } @@ -2873,7 +2873,7 @@ void builtin_shop(ScriptState *st) nd = npc_name2id(name); if (!nd) { - PRINTF("builtin_shop: no such npc: %s\n"_fmt, name); + PRINTF("builtin_shop: no such npc: '%s'\n"_fmt, name); return; } @@ -2906,7 +2906,7 @@ void builtin_fakenpcname(ScriptState *st) dumb_ptr<npc_data> nd = npc_name2id(name); if (!nd) { - PRINTF("builtin_fakenpcname: no such npc: %s\n"_fmt, name); + PRINTF("builtin_fakenpcname: no such npc: '%s'\n"_fmt, name); return; } nd->name = newname; @@ -2968,7 +2968,7 @@ void builtin_strnpcinfo(ScriptState *st) nd = npc_name2id(npc); if (!nd) { - PRINTF("builtin_strnpcinfo: no such npc: %s\n"_fmt, npc); + PRINTF("builtin_strnpcinfo: no such npc: '%s'\n"_fmt, npc); return; } } else { @@ -3008,7 +3008,7 @@ void builtin_getnpcx(ScriptState *st) nd = npc_name2id(name); if (!nd) { - PRINTF("builtin_getnpcx: no such npc: %s\n"_fmt, name); + PRINTF("builtin_getnpcx: no such npc: '%s'\n"_fmt, name); return; } } else { @@ -3032,7 +3032,7 @@ void builtin_getnpcy(ScriptState *st) nd = npc_name2id(name); if (!nd) { - PRINTF("builtin_getnpcy: no such npc: %s\n"_fmt, name); + PRINTF("builtin_getnpcy: no such npc: '%s'\n"_fmt, name); return; } } else { |