diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-11-29 19:49:35 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-11-29 19:49:35 +0300 |
commit | 73b8dc48525960683da90286112e6740b3758101 (patch) | |
tree | e202c369f0aaece4d541f7221222e8585a353e47 /src/map/script.c | |
parent | 8c1ade72e6e44aa73b3609dbcb6eb07bae59c2b9 (diff) | |
download | plugin-73b8dc48525960683da90286112e6740b3758101.tar.gz plugin-73b8dc48525960683da90286112e6740b3758101.tar.bz2 plugin-73b8dc48525960683da90286112e6740b3758101.tar.xz plugin-73b8dc48525960683da90286112e6740b3758101.zip |
Add script command for request multiply items from client to npc.
New script command: requestItems .@var$ [,count]
Diffstat (limited to 'src/map/script.c')
-rw-r--r-- | src/map/script.c | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/src/map/script.c b/src/map/script.c index 55b6cc4..9cb26c5 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -276,7 +276,7 @@ BUILDIN(requestItem) sd->state.menu_or_input = 1; st->state = RERUNLINE; - // send lang request + // send item request send_npccommand(script->rid2sd(st), st->oid, 10); } else @@ -298,6 +298,59 @@ BUILDIN(requestItem) return true; } +BUILDIN(requestItems) +{ + getSD(); + struct script_data* data; + int64 uid; + const char* name; + + data = script_getdata(st, 2); + if (!data_isreference(data)) + { + ShowError("script:requestitem: not a variable\n"); + script->reportdata(data); + st->state = END; + return false; + } + uid = reference_getuid(data); + name = reference_getname(data); + + if (!is_string_variable(name)) + return false; + + int count = 1; + + if (script_hasdata(st, 3)) + { + count = script_getnum(st, 3); + if (count < 0) + count = 1; + } + + if (!sd->state.menu_or_input) + { + // first invocation, display npc input box + sd->state.menu_or_input = 1; + st->state = RERUNLINE; + + // send item request with limit count + send_npccommand2(script->rid2sd (st), st->oid, 10, count, 0, 0); + } + else + { + // take received text/value and store it in the designated variable + sd->state.menu_or_input = 0; + + if (!sd->npc_str) + return false; + + script->set_reg(st, sd, uid, name, (void*)sd->npc_str, script_getref(st, 2)); + st->state = RUN; + } + return true; +} + BUILDIN(setq) { int i; |