From 7c787e8adde6a56bc32ab65e5d2cd5eb1e3deeaf Mon Sep 17 00:00:00 2001 From: Haru Date: Fri, 11 Sep 2015 17:29:07 +0200 Subject: Corrected an issue causing queue iterators not to return their last value - Follow-up to 918b1123963ac2f91a4d074b092ceef1db71b4e8, a9042bf0bee2d2453058b22973bea8f335c5a201 - Thanks to Dastgir Signed-off-by: Haru --- src/map/script.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'src/map/script.c') diff --git a/src/map/script.c b/src/map/script.c index 54d8d338d..61ee7e49f 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -19090,28 +19090,40 @@ BUILDIN(queueiterator) { /* returns next/first member in the iterator, 0 if none */ BUILDIN(qiget) { int idx = script_getnum(st, 2); + struct hQueueIterator *it = NULL; - if( idx < 0 || idx >= script->hqis ) { + if (idx < 0 || idx >= script->hqis) { ShowWarning("buildin_qiget: unknown queue iterator id %d\n",idx); script_pushint(st, 0); - } else if (script->hqi[idx].pos >= script->hqi[idx].items) { - script_pushint(st, 0); - } else { - struct hQueueIterator *it = &script->hqi[idx]; - script_pushint(st, it->item[it->pos++]); + return true; } + it = &script->hqi[idx]; + + if (it->pos >= it->items) { + if (it->pos == it->items) + ++it->pos; // Move beyond the last position to invalidate qicheck + script_pushint(st, 0); + return true; + } + script_pushint(st, it->item[it->pos++]); return true; } /* Queue Iterator Check */ -/* returns 1:0 if there is a next member in the iterator */ +/* returns 1:0 if there is the current member in the iterator exists */ BUILDIN(qicheck) { int idx = script_getnum(st, 2); + struct hQueueIterator *it = NULL; - if( idx < 0 || idx >= script->hqis ) { + if (idx < 0 || idx >= script->hqis) { ShowWarning("buildin_qicheck: unknown queue iterator id %d\n",idx); script_pushint(st, 0); - } else if (script->hqi[idx].pos >= script->hqi[idx].items) { + return true; + } + + it = &script->hqi[idx]; + + if (it->pos <= 0 || it->pos > it->items) { script_pushint(st, 0); } else { script_pushint(st, 1); -- cgit v1.2.3-70-g09d2