summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-11-29 19:29:51 +0300
committerAndrei Karas <akaras@inbox.ru>2014-11-29 19:29:51 +0300
commit8c1ade72e6e44aa73b3609dbcb6eb07bae59c2b9 (patch)
tree0f9046863f75dc622e71a42a35f4974007af1dea /src/map
parent7d9fb1c5c1101fc1fc0afaa2508c842cedbf1a5a (diff)
downloadevol-hercules-8c1ade72e6e44aa73b3609dbcb6eb07bae59c2b9.tar.gz
evol-hercules-8c1ade72e6e44aa73b3609dbcb6eb07bae59c2b9.tar.bz2
evol-hercules-8c1ade72e6e44aa73b3609dbcb6eb07bae59c2b9.tar.xz
evol-hercules-8c1ade72e6e44aa73b3609dbcb6eb07bae59c2b9.zip
Add script function for request item from player to npc.
New script command: requestitem .@var
Diffstat (limited to 'src/map')
-rw-r--r--src/map/init.c1
-rw-r--r--src/map/script.c49
-rw-r--r--src/map/script.h1
3 files changed, 51 insertions, 0 deletions
diff --git a/src/map/init.c b/src/map/init.c
index f9378f8..2187a36 100644
--- a/src/map/init.c
+++ b/src/map/init.c
@@ -70,6 +70,7 @@ HPExport void plugin_init (void)
addScriptCommand("l", "s*", l);
addScriptCommand("lg", "s*", lg);
addScriptCommand("requestlang", "v", requestLang);
+ addScriptCommand("requestitem", "v", requestItem);
addScriptCommand("getq", "i", getq);
addScriptCommand("setq", "ii", setq);
addScriptCommand("getnpcdir", "*", getNpcDir);
diff --git a/src/map/script.c b/src/map/script.c
index 1f629bd..55b6cc4 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -249,6 +249,55 @@ BUILDIN(requestLang)
return true;
}
+BUILDIN(requestItem)
+{
+ 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;
+
+ if (!sd->state.menu_or_input)
+ {
+ // first invocation, display npc input box
+ sd->state.menu_or_input = 1;
+ st->state = RERUNLINE;
+
+ // send lang request
+ send_npccommand(script->rid2sd(st), st->oid, 10);
+ }
+ else
+ {
+ // take received text/value and store it in the designated variable
+ sd->state.menu_or_input = 0;
+
+ int item = 0;
+
+ if (!sd->npc_str)
+ return false;
+
+ if (sscanf (sd->npc_str, "%5d", &item) < 1)
+ return false;
+
+ script->set_reg(st, sd, uid, name, (void*)h64BPTRSIZE(item), script_getref(st,2));
+ st->state = RUN;
+ }
+ return true;
+}
+
BUILDIN(setq)
{
int i;
diff --git a/src/map/script.h b/src/map/script.h
index eb917d7..ce010ff 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -15,6 +15,7 @@ BUILDIN(closeDialog);
BUILDIN(shop);
BUILDIN(getItemLink);
BUILDIN(requestLang);
+BUILDIN(requestItem);
BUILDIN(getq);
BUILDIN(setq);
BUILDIN(getNpcDir);