summaryrefslogtreecommitdiff
path: root/src/map/script.c
diff options
context:
space:
mode:
authorMadCamel <madcamel@gmail.com>2009-09-30 13:53:33 -0400
committerMadCamel <madcamel@gmail.com>2009-09-30 13:53:33 -0400
commit3fc3d83aa0be31e6d51afac54ff76b447f99f711 (patch)
tree2deac15b3e34382f11a27090e3f1a8ef3049618b /src/map/script.c
parent5967577d8bf92a9912cd153b20597f0d13a19456 (diff)
parent48d96bc41a4791b6cb0bc2cf514a6cc1f06c4dd8 (diff)
downloadtmwa-3fc3d83aa0be31e6d51afac54ff76b447f99f711.tar.gz
tmwa-3fc3d83aa0be31e6d51afac54ff76b447f99f711.tar.bz2
tmwa-3fc3d83aa0be31e6d51afac54ff76b447f99f711.tar.xz
tmwa-3fc3d83aa0be31e6d51afac54ff76b447f99f711.zip
Merge branch 'master' of git://gitorious.org/tmw-eathena/mainline
Diffstat (limited to 'src/map/script.c')
-rw-r--r--src/map/script.c110
1 files changed, 108 insertions, 2 deletions
diff --git a/src/map/script.c b/src/map/script.c
index 8d9abe8..9310b6d 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -255,6 +255,13 @@ int buildin_getanchorinvocation(struct script_state *st); // [Fate]
int buildin_getexp(struct script_state *st);
int buildin_getinventorylist(struct script_state *st);
int buildin_getskilllist(struct script_state *st);
+int buildin_get_pool_skills(struct script_state *st); // [fate]
+int buildin_get_activated_pool_skills(struct script_state *st); // [fate]
+int buildin_activate_pool_skill(struct script_state *st); // [fate]
+int buildin_deactivate_pool_skill(struct script_state *st); // [fate]
+int buildin_check_pool_skill(struct script_state *st); // [fate]
+int buildin_getskilllist(struct script_state *st);
+int buildin_getskilllist(struct script_state *st);
int buildin_clearitem(struct script_state *st);
int buildin_classchange(struct script_state *st);
int buildin_misceffect(struct script_state *st);
@@ -464,6 +471,11 @@ struct {
{buildin_getexp,"getexp","ii"},
{buildin_getinventorylist,"getinventorylist",""},
{buildin_getskilllist,"getskilllist",""},
+ {buildin_get_activated_pool_skills,"getpoolskilllist",""},
+ {buildin_get_pool_skills,"getactivatedpoolskilllist",""},
+ {buildin_activate_pool_skill,"poolskill","i"},
+ {buildin_deactivate_pool_skill,"unpoolskill","i"},
+ {buildin_check_pool_skill,"checkpoolskill","i"},
{buildin_clearitem,"clearitem",""},
{buildin_classchange,"classchange","ii"},
{buildin_misceffect,"misceffect","i*"},
@@ -3193,7 +3205,6 @@ int buildin_setskill(struct script_state *st)
sd->status.skill[id].id = level? id : 0;
sd->status.skill[id].lv = level;
- sd->status.skill[id].flag = 0;
clif_skillinfoblock(sd);
return 0;
}
@@ -5512,7 +5523,7 @@ int buildin_getskilllist(struct script_state *st)
if(sd->status.skill[i].id > 0 && sd->status.skill[i].lv > 0){
pc_setreg(sd,add_str("@skilllist_id")+(j<<24),sd->status.skill[i].id);
pc_setreg(sd,add_str("@skilllist_lv")+(j<<24),sd->status.skill[i].lv);
- pc_setreg(sd,add_str("@skilllist_flag")+(j<<24),sd->status.skill[i].flag);
+ pc_setreg(sd,add_str("@skilllist_flag")+(j<<24),sd->status.skill[i].flags);
j++;
}
}
@@ -5520,6 +5531,101 @@ int buildin_getskilllist(struct script_state *st)
return 0;
}
+
+
+int
+buildin_get_activated_pool_skills(struct script_state *st)
+{
+ struct map_session_data *sd=script_rid2sd(st);
+ int pool_skills[MAX_SKILL_POOL];
+ int skill_pool_size = skill_pool(sd, pool_skills);
+ int i, count = 0;
+
+ if (!sd)
+ return 0;
+
+ for (i = 0; i < skill_pool_size; i++) {
+ int skill_id = pool_skills[i];
+
+ if (sd->status.skill[skill_id].id == skill_id) {
+ pc_setreg(sd,add_str("@skilllist_id")+(count<<24),sd->status.skill[skill_id].id);
+ pc_setreg(sd,add_str("@skilllist_lv")+(count<<24),sd->status.skill[skill_id].lv);
+ pc_setreg(sd,add_str("@skilllist_flag")+(count<<24),sd->status.skill[skill_id].flags);
+ pc_setregstr(sd, add_str("@skilllist_name$")+(count<<24), skill_name(skill_id));
+ ++count;
+ }
+ }
+ pc_setreg(sd,add_str("@skilllist_count"),count);
+
+ return 0;
+}
+
+extern int skill_pool_skills[];
+extern int skill_pool_skills_size;
+
+int
+buildin_get_pool_skills(struct script_state *st)
+{
+ struct map_session_data *sd=script_rid2sd(st);
+ int i, count = 0;
+
+ if (!sd)
+ return 0;
+
+ for (i = 0; i < skill_pool_skills_size; i++) {
+ int skill_id = skill_pool_skills[i];
+
+ if (sd->status.skill[skill_id].id == skill_id) {
+ pc_setreg(sd,add_str("@skilllist_id")+(count<<24),sd->status.skill[skill_id].id);
+ pc_setreg(sd,add_str("@skilllist_lv")+(count<<24),sd->status.skill[skill_id].lv);
+ pc_setreg(sd,add_str("@skilllist_flag")+(count<<24),sd->status.skill[skill_id].flags);
+ pc_setregstr(sd, add_str("@skilllist_name$")+(count<<24), skill_name(skill_id));
+ ++count;
+ }
+ }
+ pc_setreg(sd,add_str("@skilllist_count"),count);
+
+ return 0;
+}
+
+int
+buildin_activate_pool_skill(struct script_state *st)
+{
+ struct map_session_data *sd=script_rid2sd(st);
+ int skill_id = conv_num(st,& (st->stack->stack_data[st->start+2]));
+
+ skill_pool_activate(sd, skill_id);
+ clif_skillinfoblock(sd);
+
+ return 0;
+}
+
+
+int
+buildin_deactivate_pool_skill(struct script_state *st)
+{
+ struct map_session_data *sd=script_rid2sd(st);
+ int skill_id = conv_num(st,& (st->stack->stack_data[st->start+2]));
+
+ skill_pool_deactivate(sd, skill_id);
+ clif_skillinfoblock(sd);
+
+ return 0;
+}
+
+
+int
+buildin_check_pool_skill(struct script_state *st)
+{
+ struct map_session_data *sd=script_rid2sd(st);
+ int skill_id = conv_num(st,& (st->stack->stack_data[st->start+2]));
+
+ push_val(st->stack, C_INT, skill_pool_is_activated(sd, skill_id));
+
+ return 0;
+}
+
+
int buildin_clearitem(struct script_state *st)
{
struct map_session_data *sd=script_rid2sd(st);