diff options
-rw-r--r-- | src/map/script-call-internal.hpp | 2 | ||||
-rw-r--r-- | src/map/script-call.cpp | 4 | ||||
-rw-r--r-- | src/map/script-fun.cpp | 20 |
3 files changed, 23 insertions, 3 deletions
diff --git a/src/map/script-call-internal.hpp b/src/map/script-call-internal.hpp index 983b361..b9b3a9f 100644 --- a/src/map/script-call-internal.hpp +++ b/src/map/script-call-internal.hpp @@ -53,7 +53,7 @@ public: ScriptEndState state; BlockId rid, oid; ScriptPointer scriptp, new_scriptp; - int defsp, new_defsp; + int defsp, new_defsp, freeloop; }; void run_func(ScriptState *st); diff --git a/src/map/script-call.cpp b/src/map/script-call.cpp index b66af74..f412328 100644 --- a/src/map/script-call.cpp +++ b/src/map/script-call.cpp @@ -757,7 +757,7 @@ void run_script_main(ScriptState *st, Borrowed<const ScriptBuffer> rootscript) { rerun_pos = st->scriptp.pos; st->state = ScriptEndState::ZERO; - if (gotocount > 0 && (--gotocount) <= 0) + if (!st->freeloop && gotocount > 0 && (--gotocount) <= 0) { PRINTF("run_script: infinity loop !\n"_fmt); st->state = ScriptEndState::END; @@ -806,7 +806,7 @@ void run_script_main(ScriptState *st, Borrowed<const ScriptBuffer> rootscript) st->state = ScriptEndState::END; break; } - if (cmdcount > 0 && (--cmdcount) <= 0) + if (!st->freeloop && cmdcount > 0 && (--cmdcount) <= 0) { PRINTF("run_script: infinity loop !\n"_fmt); st->state = ScriptEndState::END; diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp index b9b581f..8c25266 100644 --- a/src/map/script-fun.cpp +++ b/src/map/script-fun.cpp @@ -1123,6 +1123,25 @@ void builtin_getequipid(ScriptState *st) } /*========================================== + * freeloop + *------------------------------------------ + */ +static +void builtin_freeloop(ScriptState *st) +{ + int num; + num = conv_num(st, &AARG(0)); + if(num == 1) + { + st->freeloop = 1; + } + else + { + st->freeloop = 0; + } +} + +/*========================================== * 装備名文字列(精錬メニュー用) *------------------------------------------ */ @@ -3095,6 +3114,7 @@ BuiltinFunction builtin_functions[] = BUILTIN(gety, ""_s, 'i'), BUILTIN(getmap, ""_s, 's'), BUILTIN(mapexit, ""_s, '\0'), + BUILTIN(freeloop, "i"_s, '\0'), {nullptr, ""_s, ""_s, '\0'}, }; } // namespace map |