From 163426a80f31a7d3fb4fa5878a7afbafff032345 Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 4 Sep 2007 17:55:26 +0000 Subject: - bonus3 autospell (and autospell when hit) will now select for spell target self when the skill is tagged a support skill. - Increased the amount of autospells that can be held at a time from 10 to 15 - Updated several item scripts to use bonus3 autospells rather than bonus4 ones. - Changed the "autocasted strip skills don't have a duration" to apply only to Full Strip. - Cleaned up some the Signum Crucis code. - Added initialization of hp_loss/sp_loss/hp_regen/sp_regen which somehow was not commited before. - Magic Mirror's duration now is reduced /15 when used on players. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11124 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/map.h | 2 +- src/map/pc.c | 8 ++++++-- src/map/skill.c | 13 +++++-------- src/map/status.c | 7 ++++++- 4 files changed, 18 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/map/map.h b/src/map/map.h index 05a157dc0..8f28c8f9c 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -666,7 +666,7 @@ struct map_session_data { // zeroed structures start here struct s_autospell{ short id, lv, rate, card_id, flag; - } autospell[MAX_PC_BONUS], autospell2[MAX_PC_BONUS]; + } autospell[15], autospell2[15]; struct s_addeffect{ short id, rate, arrow_rate; unsigned char flag; diff --git a/src/map/pc.c b/src/map/pc.c index 3eabde647..c41c70425 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2386,11 +2386,15 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) break; case SP_AUTOSPELL: if(sd->state.lr_flag != 2) - pc_bonus_autospell(sd->autospell, ARRAYLENGTH(sd->autospell), skill_get_inf(type2)&INF_SELF_SKILL?-type2:type2, type3, val, 0, current_equip_card_id); + pc_bonus_autospell(sd->autospell, ARRAYLENGTH(sd->autospell), + skill_get_inf(type2)&(INF_SELF_SKILL|INF_SUPPORT_SKILL)?-type2:type2, + type3, val, 0, current_equip_card_id); break; case SP_AUTOSPELL_WHENHIT: if(sd->state.lr_flag != 2) - pc_bonus_autospell(sd->autospell2, ARRAYLENGTH(sd->autospell2), skill_get_inf(type2)&INF_SELF_SKILL?-type2:type2, type3, val, 0, current_equip_card_id); + pc_bonus_autospell(sd->autospell2, ARRAYLENGTH(sd->autospell2), + skill_get_inf(type2)&(INF_SELF_SKILL|INF_SUPPORT_SKILL)?-type2:type2, + type3, val, 0, current_equip_card_id); break; case SP_SP_DRAIN_RATE: if(!sd->state.lr_flag) { diff --git a/src/map/skill.c b/src/map/skill.c index 679753f2f..9c0ac2f46 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3562,12 +3562,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in break; case AL_CRUCIS: - if (flag & 1) { - if (battle_check_target (src, bl, BCT_ENEMY)) - sc_start(bl,type, - 23+skilllv*4 +status_get_lv(src) -status_get_lv(bl), - skilllv,60000); - } else { + if (flag&1) + sc_start(bl,type, 23+skilllv*4 +status_get_lv(src) -status_get_lv(bl), skilllv,60000); + else { map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR, src, skillid, skilllv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id); clif_skill_nodamage(src, bl, skillid, skilllv, 1); @@ -4604,10 +4601,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in type = EQP_WEAPON|EQP_SHIELD|EQP_ARMOR|EQP_HELM; break; } - //Note that autospells don't use a duration + //Note that Full Strip autospell doesn't use a duration if (!clif_skill_nodamage(src,bl,skillid,skilllv, skill_strip_equip(bl, type, i, skilllv, - sd&&!pc_checkskill(sd, skillid)?0:skill_get_time(skillid,skilllv))) + sd&&skillid==ST_FULLSTRIP&&!pc_checkskill(sd, skillid)?0:skill_get_time(skillid,skilllv))) && sd) clif_skill_fail(sd,skillid,0,0); //Nothing stripped. break; diff --git a/src/map/status.c b/src/map/status.c index d97a887e3..3255e0d64 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1697,6 +1697,10 @@ int status_calc_pc(struct map_session_data* sd,int first) + sizeof(sd->addeff2) + sizeof(sd->skillatk) + sizeof(sd->skillheal) + + sizeof(sd->hp_loss) + + sizeof(sd->sp_loss) + + sizeof(sd->hp_regen) + + sizeof(sd->sp_regen) + sizeof(sd->skillblown) + sizeof(sd->skillcast) + sizeof(sd->add_def) @@ -4453,10 +4457,11 @@ int status_get_sc_def(struct block_list *bl, int type, int rate, int tick, int f tick /= 5; sc_def = status->agi; break; + case SC_MAGICMIRROR: case SC_ARMORCHANGE: if (sd) //Duration greatly reduced for players. tick /= 15; - //No defense against it. + //No defense against it (buff). default: //Effect that cannot be reduced? Likely a buff. if (!(rand()%10000 < rate)) -- cgit v1.2.3-60-g2f50