summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-02-24 14:09:53 +0300
committerAndrei Karas <akaras@inbox.ru>2015-02-24 14:09:53 +0300
commitbb1a3ca33a9e72c6a4cf2c97abf5a721a6ed87a9 (patch)
tree797e74838daa1d4d268f28b9c37f533b9be8595a
parentca0677235f97d64bf6acc20d40e942c5add21698 (diff)
downloadplugin-bb1a3ca33a9e72c6a4cf2c97abf5a721a6ed87a9.tar.gz
plugin-bb1a3ca33a9e72c6a4cf2c97abf5a721a6ed87a9.tar.bz2
plugin-bb1a3ca33a9e72c6a4cf2c97abf5a721a6ed87a9.tar.xz
plugin-bb1a3ca33a9e72c6a4cf2c97abf5a721a6ed87a9.zip
On each success skill invoke call event OnSkillInvoke.
Alos set variables @skillId and @skillLv to skill id and skill level.
-rw-r--r--src/Makefile.am2
-rw-r--r--src/map/init.c2
-rw-r--r--src/map/skill.c44
-rw-r--r--src/map/skill.h12
4 files changed, 60 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 4fcbfc1..991f39d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -52,6 +52,8 @@ MAP_SRC = map/clif.c \
map/scriptdefines.h \
map/send.c \
map/send.h \
+ map/skill.c \
+ map/skill.h \
map/status.c \
map/status.h \
map/unit.c \
diff --git a/src/map/init.c b/src/map/init.c
index 09b315a..2b58fc5 100644
--- a/src/map/init.c
+++ b/src/map/init.c
@@ -48,6 +48,7 @@
#include "map/pc.h"
#include "map/quest.h"
#include "map/script.h"
+#include "map/skill.h"
#include "map/status.h"
#include "../../../common/HPMDataCheck.h" /* should always be the last file included! (if you don't make it last, it'll intentionally break compile time) */
@@ -145,6 +146,7 @@ HPExport void plugin_init (void)
addHookPost("clif->set_unit_walking", eclif_set_unit_walking);
addHookPost("clif->move", eclif_move);
addHookPost("map->addflooritem", emap_addflooritem_post);
+ addHookPost("skill->check_condition_castend", eskill_check_condition_castend_post);
langScriptId = script->add_str("Lang");
}
diff --git a/src/map/skill.c b/src/map/skill.c
new file mode 100644
index 0000000..67dd563
--- /dev/null
+++ b/src/map/skill.c
@@ -0,0 +1,44 @@
+// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// Copyright (c) 2014 Evol developers
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "../../../common/db.h"
+#include "../../../common/HPMi.h"
+#include "../../../common/malloc.h"
+#include "../../../common/mmo.h"
+#include "../../../common/socket.h"
+#include "../../../common/strlib.h"
+#include "../../../common/timer.h"
+#include "../../../map/pc.h"
+#include "../../../map/npc.h"
+#include "../../../map/script.h"
+
+int eskill_check_condition_castend_post(int retVal,
+ struct map_session_data* sd,
+ uint16 *skill_id,
+ uint16 *skill_lv)
+{
+ if (retVal && sd)
+ {
+ struct linkdb_node **label_linkdb = strdb_get(npc->ev_label_db, "OnSkillInvoke");
+ if (label_linkdb == NULL)
+ return retVal;
+
+ struct linkdb_node *node = *label_linkdb;
+ while (node)
+ {
+ struct event_data* ev = node->data;
+ if (ev)
+ {
+ pc->setreg(sd, script->add_str("@skillId"), *skill_id);
+ pc->setreg(sd, script->add_str("@skillLv"), *skill_lv);
+ script->run(ev->nd->u.scr.script, ev->pos, sd->bl.id, ev->nd->bl.id);
+ }
+ node = node->next;
+ }
+ }
+ return retVal;
+}
diff --git a/src/map/skill.h b/src/map/skill.h
new file mode 100644
index 0000000..d6927b9
--- /dev/null
+++ b/src/map/skill.h
@@ -0,0 +1,12 @@
+// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// Copyright (c) 2014 Evol developers
+
+#ifndef EVOL_MAP_SKILL
+#define EVOL_MAP_SKILL
+
+int eskill_check_condition_castend_post(int retVal,
+ struct map_session_data* sd,
+ uint16 *skill_id,
+ uint16 *skill_lv);
+
+#endif // EVOL_MAP_SKILL