summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt9
-rw-r--r--doc/item_bonus.txt24
-rw-r--r--src/map/pc.c15
-rw-r--r--src/map/script.c2
4 files changed, 35 insertions, 15 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 0fc5c4ab2..5db38c5e4 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,15 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2007/04/22
+ * Updated the autospell bonus scripts so you don't have to specify all the
+ attack type criteria. If neither of BF_LONG/BF_SHORT is specified, the
+ spell will trigger on both. If neither of BF_WEAPON/BF_MAGIC/BF_MISC is
+ specified, the spell will trigger on BF_WEAPON, if neither of
+ BF_NORMAL/BF_SKILL is specified, BF_SKILL is used if the trigger is
+ BF_MAGIC/BF_MISC and BF_NORMAL is used if the attack is BF_WEAPON. This way
+ the default when nothing is specified is
+ BF_NORMAL|BF_WEAPON|BF_SHORT|BF_LONG. [Skotlex]
2007/04/21
* Removed the +25% mdef, -50% def effect from Freeze status
* Changed autocast skills, they now only work with normal attacks!
diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt
index 528ae0fb4..e644870e6 100644
--- a/doc/item_bonus.txt
+++ b/doc/item_bonus.txt
@@ -204,12 +204,20 @@ bonus5 bAutoSpell,x,y,n,t,i; n/10% chance to cast skill x of level y when
t: Trigger criteria:
BF_SHORT: Trigger on melee attack
BF_LONG: Trigger on ranged attack
+ (When neither is specified,
+ then BF_SHORT+BF_LONG is used.
BF_WEAPON: Trigger on weapon skills
BF_MAGIC: Trigger on magic skills
- BF_MISC: Trigger on misc skills
- (the default for the other
- bAutoSpell modes is
- BF_WEAPON|BF_LONG|BF_SHORT)
+ BF_MISC: Trigger on misc skills
+ (If none is specified, BF_WEAPON is
+ used)
+ BF_NORMAL: Trigger on normal
+ attacks.
+ BF_SKILL: Trigger on skills
+ (When neither is specified,
+ BF_SKILL is used if the type is
+ BF_MISC or BF_MAGIC. BF_NORMAL is
+ used if the type is BF_WEAPON)
bonus5 bAutoSpellWhenHit,x,y,n,t,i; n/10% chance to cast skill x of level y when
being hit by a direct attack. Target
@@ -218,12 +226,8 @@ bonus5 bAutoSpellWhenHit,x,y,n,t,i; n/10% chance to cast skill x of level y when
i: 1=cast on enemy, not on self
2=use random skill lv in [1..y]
3=1+2 (random lv on enemy)
- t: Trigger criteria:
- BF_SHORT: Trigger on melee attack
- BF_LONG: Trigger on ranged attack
- BF_WEAPON: Trigger on weapon skills
- BF_MAGIC: Trigger on magic skills
- BF_MISC: Trigger on misc skills
+ t: Trigger criteria (see bonus5
+ bAutoSpell)
//---- 2/22 new card effects ----
diff --git a/src/map/pc.c b/src/map/pc.c
index 06161cffe..16134845a 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -1260,6 +1260,13 @@ static int pc_bonus_autospell(struct s_autospell *spell, int max, short id, shor
spell[i].id = id;
spell[i].lv = lv;
spell[i].rate = rate;
+ //Auto-update flag value.
+ if (!(flag&BF_RANGEMASK)) flag|=BF_SHORT|BF_LONG; //No range defined? Use both.
+ if (!(flag&BF_WEAPONMASK)) flag|=BF_WEAPON; //No attack type defined? Use weapon.
+ if (!(flag&BF_SKILLMASK)) {
+ if (flag&(BF_MAGIC|BF_MISC)) flag|=BF_SKILL; //These two would never trigger without BF_SKILL
+ if (flag&BF_WEAPON) flag|=BF_NORMAL; //By default autospells should only trigger on normal weapon attacks.
+ }
spell[i].flag|= flag;
spell[i].card_id = card_id;
return 1;
@@ -2329,11 +2336,11 @@ 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, MAX_PC_BONUS, type2, type3, val, BF_WEAPON|BF_SHORT|BF_LONG|BF_NORMAL, current_equip_card_id);
+ pc_bonus_autospell(sd->autospell, MAX_PC_BONUS, type2, type3, val, 0, current_equip_card_id);
break;
case SP_AUTOSPELL_WHENHIT:
if(sd->state.lr_flag != 2)
- pc_bonus_autospell(sd->autospell2, MAX_PC_BONUS, type2, type3, val, BF_WEAPON|BF_SHORT|BF_LONG|BF_NORMAL, current_equip_card_id);
+ pc_bonus_autospell(sd->autospell2, MAX_PC_BONUS, type2, type3, val, 0, current_equip_card_id);
break;
case SP_HP_LOSS_RATE:
if(sd->state.lr_flag != 2) {
@@ -2422,12 +2429,12 @@ int pc_bonus4(struct map_session_data *sd,int type,int type2,int type3,int type4
switch(type){
case SP_AUTOSPELL:
if(sd->state.lr_flag != 2)
- pc_bonus_autospell(sd->autospell, MAX_PC_BONUS, (val&1?type2:-type2), (val&2?-type3:type3), type4, BF_WEAPON|BF_SHORT|BF_LONG|BF_NORMAL, current_equip_card_id);
+ pc_bonus_autospell(sd->autospell, MAX_PC_BONUS, (val&1?type2:-type2), (val&2?-type3:type3), type4, 0, current_equip_card_id);
break;
case SP_AUTOSPELL_WHENHIT:
if(sd->state.lr_flag != 2)
- pc_bonus_autospell(sd->autospell2, MAX_PC_BONUS, (val&1?type2:-type2), (val&2?-type3:type3), type4, BF_WEAPON|BF_SHORT|BF_LONG|BF_NORMAL, current_equip_card_id);
+ pc_bonus_autospell(sd->autospell2, MAX_PC_BONUS, (val&1?type2:-type2), (val&2?-type3:type3), type4, 0, current_equip_card_id);
break;
default:
if(battle_config.error_log)
diff --git a/src/map/script.c b/src/map/script.c
index 691334802..47203beb5 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -6560,7 +6560,7 @@ BUILDIN_FUNC(statusup2)
/// bonus2 <bonus type>,<val1>,<val2>
/// bonus3 <bonus type>,<val1>,<val2>,<val3>
/// bonus4 <bonus type>,<val1>,<val2>,<val3>,<val4>
-/// bonus4 <bonus type>,<val1>,<val2>,<val3>,<val4>,<val5>
+/// bonus5 <bonus type>,<val1>,<val2>,<val3>,<val4>,<val5>
BUILDIN_FUNC(bonus)
{
int type;