From 697ab2d5ee8c840dba925425ddbf6eba9eb6ee44 Mon Sep 17 00:00:00 2001 From: mekolat Date: Sat, 28 Feb 2015 10:34:55 -0500 Subject: add freeloop builtin --- src/map/script-call-internal.hpp | 2 +- src/map/script-call.cpp | 4 ++-- src/map/script-fun.cpp | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) (limited to 'src/map') 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 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 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 @@ -1122,6 +1122,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 -- cgit v1.2.3-60-g2f50