summaryrefslogtreecommitdiff
path: root/src/map/script.c
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2020-06-01 04:18:52 +0200
committerGitHub <noreply@github.com>2020-06-01 04:18:52 +0200
commit530af7e587899f66854447e2b8251cbf12c481c3 (patch)
tree74453a3f8e6fdeaa3349132b820e29ec8fee8d7b /src/map/script.c
parent8a4667a265227587dcc288f75dfe948f5df46034 (diff)
parent9a64eca5235da46655ca64ba5916c6fd4d90208a (diff)
downloadhercules-530af7e587899f66854447e2b8251cbf12c481c3.tar.gz
hercules-530af7e587899f66854447e2b8251cbf12c481c3.tar.bz2
hercules-530af7e587899f66854447e2b8251cbf12c481c3.tar.xz
hercules-530af7e587899f66854447e2b8251cbf12c481c3.zip
Merge pull request #2718 from Kenpachi2k13/prere_use_items_skills_in_npc
Add/extend battle flags to enable item/skill usage while interacting with NPC
Diffstat (limited to 'src/map/script.c')
-rw-r--r--src/map/script.c77
1 files changed, 68 insertions, 9 deletions
diff --git a/src/map/script.c b/src/map/script.c
index 0d04ea31b..763a6c51c 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -9135,22 +9135,71 @@ static BUILDIN(delitemidx)
return true;
}
-/*==========================================
- * Enables/Disables use of items while in an NPC [Skotlex]
- *------------------------------------------*/
+/**
+ * Enable item actions while interacting with NPC.
+ *
+ * @code{.herc}
+ * enableitemuse({<flag>});
+ * enable_items({<flag>});
+ * @endcode
+ *
+ **/
static BUILDIN(enableitemuse)
{
+ int flag = battle_config.item_enabled_npc;
+
+ if (script_hasdata(st, 2)) {
+ if (!script_isinttype(st, 2))
+ return true;
+
+ flag = script_getnum(st, 2);
+ }
+
+ if (flag < 0)
+ return true;
+
struct map_session_data *sd = script->rid2sd(st);
- if (sd != NULL)
- st->npc_item_flag = sd->npc_item_flag = 1;
+
+ if (sd == NULL)
+ return true;
+
+ st->npc_item_flag |= flag;
+ sd->npc_item_flag |= flag;
+
return true;
}
+/**
+ * Disable item actions while interacting with NPC.
+ *
+ * @code{.herc}
+ * disableitemuse({<flag>});
+ * disable_items({<flag>});
+ * @endcode
+ *
+ **/
static BUILDIN(disableitemuse)
{
+ int flag = battle_config.item_enabled_npc;
+
+ if (script_hasdata(st, 2)) {
+ if (!script_isinttype(st, 2))
+ return true;
+
+ flag = script_getnum(st, 2);
+ }
+
+ if (flag < 0)
+ return true;
+
struct map_session_data *sd = script->rid2sd(st);
- if (sd != NULL)
- st->npc_item_flag = sd->npc_item_flag = 0;
+
+ if (sd == NULL)
+ return true;
+
+ st->npc_item_flag &= ~flag;
+ sd->npc_item_flag &= ~flag;
+
return true;
}
@@ -27197,8 +27246,8 @@ static void script_parse_builtin(void)
BUILDIN_DEF(delitem,"vi?"),
BUILDIN_DEF(delitem2,"viiiiiiii?"),
BUILDIN_DEF(delitemidx, "i??"),
- BUILDIN_DEF2(enableitemuse,"enable_items",""),
- BUILDIN_DEF2(disableitemuse,"disable_items",""),
+ BUILDIN_DEF2(enableitemuse, "enable_items", "?"),
+ BUILDIN_DEF2(disableitemuse, "disable_items", "?"),
BUILDIN_DEF(cutin,"si"),
BUILDIN_DEF(viewpoint,"iiiii"),
BUILDIN_DEF(heal,"ii"),
@@ -28247,6 +28296,16 @@ static void script_hardcoded_constants(void)
script->set_constant("PCBLOCK_COMMANDS", PCBLOCK_COMMANDS, false, false);
script->set_constant("PCBLOCK_NPC", PCBLOCK_NPC, false, false);
+ script->constdb_comment("NPC item action constants");
+ script->set_constant("ITEMENABLEDNPC_NONE", ITEMENABLEDNPC_NONE, false, false);
+ script->set_constant("ITEMENABLEDNPC_EQUIP", ITEMENABLEDNPC_EQUIP, false, false);
+ script->set_constant("ITEMENABLEDNPC_CONSUME", ITEMENABLEDNPC_CONSUME, false, false);
+
+ script->constdb_comment("NPC allowed skill use constants");
+ script->set_constant("SKILLENABLEDNPC_NONE", SKILLENABLEDNPC_NONE, false, false);
+ script->set_constant("SKILLENABLEDNPC_SELF", SKILLENABLEDNPC_SELF, false, false);
+ script->set_constant("SKILLENABLEDNPC_ALL", SKILLENABLEDNPC_ALL, false, false);
+
script->constdb_comment("private airship responds");
script->set_constant("P_AIRSHIP_NONE", P_AIRSHIP_NONE, false, false);
script->set_constant("P_AIRSHIP_RETRY", P_AIRSHIP_RETRY, false, false);