summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-09-04 17:55:26 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-09-04 17:55:26 +0000
commit163426a80f31a7d3fb4fa5878a7afbafff032345 (patch)
treed0edfca727c0d0b8e4f4a542a8b3ede02fe06728 /src/map
parentb95dffc4e9c9530fd301273888db270e8e365fe6 (diff)
downloadhercules-163426a80f31a7d3fb4fa5878a7afbafff032345.tar.gz
hercules-163426a80f31a7d3fb4fa5878a7afbafff032345.tar.bz2
hercules-163426a80f31a7d3fb4fa5878a7afbafff032345.tar.xz
hercules-163426a80f31a7d3fb4fa5878a7afbafff032345.zip
- 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
Diffstat (limited to 'src/map')
-rw-r--r--src/map/map.h2
-rw-r--r--src/map/pc.c8
-rw-r--r--src/map/skill.c13
-rw-r--r--src/map/status.c7
4 files changed, 18 insertions, 12 deletions
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))