From bb1a3ca33a9e72c6a4cf2c97abf5a721a6ed87a9 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 24 Feb 2015 14:09:53 +0300 Subject: On each success skill invoke call event OnSkillInvoke. Alos set variables @skillId and @skillLv to skill id and skill level. --- src/Makefile.am | 2 ++ src/map/init.c | 2 ++ src/map/skill.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/map/skill.h | 12 ++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 src/map/skill.c create mode 100644 src/map/skill.h 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 +#include +#include + +#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 -- cgit v1.2.3-60-g2f50