* Updated autobonus [Inkfish]
- added documentation for autobonus. - invoke status_calc_pc to complete autobonus execution and this will refresh client display as well. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13922 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
f9b0729dfa
commit
eb77057e6e
@ -3,6 +3,10 @@ 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.
|
||||
|
||||
09/07/02
|
||||
* Updated autobonus [Inkfish]
|
||||
- added documentation for autobonus.
|
||||
- invoke status_calc_pc after execution so that client display gets refreshed if neccessary.
|
||||
09/06/30
|
||||
* Fixed when dynamic_mobs is active, reloading script right after the last player having left a map leads to permanet mobs not spawning on that map. [Inkfish]
|
||||
09/06/29
|
||||
|
@ -128,6 +128,8 @@
|
||||
//= Changed the error behaviour of delitem/delitem2/Zeny. [FlavioJS]
|
||||
//= 3.25.20081220
|
||||
//= Extended the behaviour of duplicates (warps/shops/cashshops). [FlavioJS]
|
||||
//= 3.26.20090702
|
||||
//= Replaced 'bonusautoscript' by 'autobonus'. [Inkfish]
|
||||
//=========================================================
|
||||
|
||||
This document is a reference manual for all the scripting commands and functions
|
||||
@ -4502,42 +4504,55 @@ kind in 'doc/item_bonus.txt'.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*bonusautoscript <script>,<rate>{,<flag>}
|
||||
*bonusautoscript2 <script>,<rate>{,<flag>}
|
||||
*autobonus <bonus script>,<rate>,<duration>{,<flag>,{<other script>}};
|
||||
*autobonus2 <bonus script>,<rate>,<duration>{,<flag>,{<other script>}};
|
||||
*autobonus3 <bonus script>,<rate>,<duration>,<skill id>,{<other script>};
|
||||
*autobonus3 <bonus script>,<rate>,<duration>,"<skill name>",{<other script>};
|
||||
|
||||
These commands are meant to be used in item scripts. They will probably work
|
||||
outside item scripts, but the bonus will not persist for long. They, as
|
||||
expected, refer only to an invoking character.
|
||||
|
||||
What these commands do is 'attach' a script to the player which will get
|
||||
executed on attack (or when attacked in the case of bonusautoscript2). Rate is
|
||||
the trigger rate of the script (1000 = 100%). The optional argument flag is
|
||||
used to classify the type of attack where the script can trigger (it shares
|
||||
the same flags as the bAutoSpell bonus script):
|
||||
executed on attack (or when attacked in the case of autobonus2).
|
||||
|
||||
Rate is the trigger rate of the script (1000 = 100%).
|
||||
|
||||
Duration is the time that the bonus will last for since the script has triggered.
|
||||
|
||||
The optional argument 'flag' is used to classify the type of attack where the script
|
||||
can trigger (it shares the same flags as the bAutoSpell bonus script):
|
||||
|
||||
Range criteria:
|
||||
BF_SHORT: Trigger on melee attack
|
||||
BF_LONG: Trigger on ranged attack
|
||||
Default: BF_SHORT+BF_LONG
|
||||
BF_SHORT: Trigger on melee attack
|
||||
BF_LONG: Trigger on ranged attack
|
||||
Default: BF_SHORT+BF_LONG
|
||||
Attack type criteria:
|
||||
BF_WEAPON: Trigger on weapon skills
|
||||
BF_MAGIC: Trigger on magic skills
|
||||
BF_MISC: Trigger on misc skills
|
||||
Default: BF_WEAPON
|
||||
BF_MAGIC: Trigger on magic skills
|
||||
BF_MISC: Trigger on misc skills
|
||||
Default: BF_WEAPON
|
||||
Skill criteria:
|
||||
BF_NORMAL: Trigger on normal attacks
|
||||
BF_SKILL: Trigger on skills
|
||||
default: If the attack type is BF_WEAPON (only) BF_NORMAL is used, otherwise
|
||||
BF_SKILL+BF_NORMAL is used.
|
||||
BF_SKILL: Trigger on skills
|
||||
default: If the attack type is BF_WEAPON (only) BF_NORMAL is used,
|
||||
otherwise BF_SKILL+BF_NORMAL is used.
|
||||
|
||||
In both cases, when the script triggers, the attached player will be the one
|
||||
who holds the bonus. There is currently no way of knowing within this script
|
||||
who was the other character (the attacker in autoscript2, or the target in
|
||||
autoscript).
|
||||
The difference between the optional argument 'other script' and the 'bonus script' is that,
|
||||
the former one triggers only when attacking(or attacked) and the latter one runs on
|
||||
status calculation as well, which makes sure, within the duration, the "bonus" that get
|
||||
lost on status calculation is restored. So, 'bonus script' is technically supposed to accept
|
||||
"bonus" command only. And we usually use 'other script' to show visual effects.
|
||||
|
||||
In all cases, when the script triggers, the attached player will be the one
|
||||
who holds the bonus. There is currently no way of knowing within this script
|
||||
who was the other character (the attacker in autobonus2, or the target in
|
||||
autobonus and autobonus3).
|
||||
|
||||
//Grants a 1% chance of starting the state "all stats +10" for 10 seconds when
|
||||
//using weapon or misc attacks (both melee and ranged skills).
|
||||
bonusautoscript "{ sc_start SC_INCALLSTATUS,10000,10; }",10,BF_WEAPON|BF_MISC;
|
||||
//using weapon or misc attacks (both melee and ranged skills) and shows a special
|
||||
//effect when the bonus is active.
|
||||
autobonus "{ bonus bAllStats,10; }",10,10000,BF_WEAPON|BF_MISC,"{ specialeffect2 EF_FIRESPLASHHIT; }";
|
||||
|
||||
---------------------------------------
|
||||
|
||||
|
@ -1655,13 +1655,16 @@ int pc_exeautobonus(struct map_session_data *sd,struct s_autobonus *autobonus)
|
||||
nullpo_retr(0, sd);
|
||||
nullpo_retr(0, autobonus);
|
||||
|
||||
if( autobonus->bonus_script )
|
||||
run_script(autobonus->bonus_script,0,sd->bl.id,0);
|
||||
if( autobonus->other_script )
|
||||
{
|
||||
sd->state.autocast = 1;
|
||||
run_script(autobonus->other_script,0,sd->bl.id,0);
|
||||
sd->state.autocast = 0;
|
||||
}
|
||||
|
||||
autobonus->active = add_timer(gettick()+autobonus->duration, pc_endautobonus, sd->bl.id, (intptr)autobonus);
|
||||
sd->state.autobonus |= autobonus->pos;
|
||||
status_calc_pc(sd,0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1056,9 +1056,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
|
||||
sd->autobonus[i].atk_type&attack_type&BF_RANGEMASK &&
|
||||
sd->autobonus[i].atk_type&attack_type&BF_SKILLMASK))
|
||||
continue; // one or more trigger conditions were not fulfilled
|
||||
sd->state.autocast = 1;
|
||||
pc_exeautobonus(sd,&sd->autobonus[i]);
|
||||
sd->state.autocast = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1140,9 +1138,7 @@ int skill_onskillusage(struct map_session_data *sd, struct block_list *bl, int s
|
||||
continue;
|
||||
if( sd->autobonus3[i].atk_type != skillid )
|
||||
continue;
|
||||
sd->state.autocast = 1;
|
||||
pc_exeautobonus(sd,&sd->autobonus3[i]);
|
||||
sd->state.autocast = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1333,9 +1329,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
|
||||
dstsd->autobonus2[i].atk_type&attack_type&BF_RANGEMASK &&
|
||||
dstsd->autobonus2[i].atk_type&attack_type&BF_SKILLMASK))
|
||||
continue; // one or more trigger conditions were not fulfilled
|
||||
dstsd->state.autocast = 1;
|
||||
pc_exeautobonus(dstsd,&dstsd->autobonus2[i]);
|
||||
dstsd->state.autocast = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user