- Added the Monk combos to skill_castnodex so their delay is not decreased by skills.

- Added the actual skill delay of 1000ms to Triple Attack and Chain combo in skill_cast_db. Added Combo Finish and TigerFist as well with a delay of 700ms.
- Phantasmic arrow now knockbacks even if it misses.
- Adjusted the way Monk combo times work. The combo time is now always 300ms (adjusted by combo_delay_rate) which takes effect inmediately AFTER your current skill's canact-delay (which is why the particular skill delays were moved to skillcast_db)
- Modified skill_delayfix so it performs the can-act reduction from agi/dex for combos there.
- Modified pc_steal_item so that it behaves more closely to the way it does on Aegis.
- Commented out the monster_noteleport mapflag from the guild castles as this is the Aegis behaviour


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9012 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
skotlex 2006-10-19 16:21:09 +00:00
parent 6e7319212f
commit b8d25efdf3
9 changed files with 128 additions and 107 deletions

View File

@ -3,6 +3,16 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. 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. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/10/19
* Phantasmic arrow now knockbacks even if it misses. [Skotlex]
* Adjusted the way Monk combo times work. The combo time is now always
300ms (adjusted by combo_delay_rate) which takes effect inmediately AFTER
your current skill's canact-delay (which is why the particular skill delays
were moved to skillcast_db) [Skotlex]
* Modified skill_delayfix so it performs the can-act reduction from agi/dex
for combos there. [Skotlex]
* Modified pc_steal_item so that it behaves more closely to the way it does
on Aegis. [Skotlex]
2006/10/18 2006/10/18
* Added a overflow check when calculating party exp share. [Skotlex] * Added a overflow check when calculating party exp share. [Skotlex]
2006/10/16 2006/10/16

View File

@ -1,5 +1,8 @@
Date Added Date Added
2006/10/19
* Commented out the monster_noteleport mapflag from the guild castles as
this is the Aegis behaviour [Skotlex]
2006/10/18 2006/10/18
* Added monster_noteleport mapflag to the guild castle maps to prevent * Added monster_noteleport mapflag to the guild castle maps to prevent
"avoiding MVPs" by forcing them to teleport from rude-attacks. [Skotlex] "avoiding MVPs" by forcing them to teleport from rude-attacks. [Skotlex]

View File

@ -41,27 +41,27 @@ prtg_cas02.gat mapflag gvg_castle
prtg_cas03.gat mapflag gvg_castle prtg_cas03.gat mapflag gvg_castle
prtg_cas04.gat mapflag gvg_castle prtg_cas04.gat mapflag gvg_castle
prtg_cas05.gat mapflag gvg_castle prtg_cas05.gat mapflag gvg_castle
//Also set monster_noteleport to prevent MVPs from "escaping". //Uncomment to disable monsters teleporting (prevents them from "escaping" when rude attacked)
aldeg_cas01.gat mapflag monster_noteleport //aldeg_cas01.gat mapflag monster_noteleport
aldeg_cas02.gat mapflag monster_noteleport //aldeg_cas02.gat mapflag monster_noteleport
aldeg_cas03.gat mapflag monster_noteleport //aldeg_cas03.gat mapflag monster_noteleport
aldeg_cas04.gat mapflag monster_noteleport //aldeg_cas04.gat mapflag monster_noteleport
aldeg_cas05.gat mapflag monster_noteleport //aldeg_cas05.gat mapflag monster_noteleport
gefg_cas01.gat mapflag monster_noteleport //gefg_cas01.gat mapflag monster_noteleport
gefg_cas02.gat mapflag monster_noteleport //gefg_cas02.gat mapflag monster_noteleport
gefg_cas03.gat mapflag monster_noteleport //gefg_cas03.gat mapflag monster_noteleport
gefg_cas04.gat mapflag monster_noteleport //gefg_cas04.gat mapflag monster_noteleport
gefg_cas05.gat mapflag monster_noteleport //gefg_cas05.gat mapflag monster_noteleport
payg_cas01.gat mapflag monster_noteleport //payg_cas01.gat mapflag monster_noteleport
payg_cas02.gat mapflag monster_noteleport //payg_cas02.gat mapflag monster_noteleport
payg_cas03.gat mapflag monster_noteleport //payg_cas03.gat mapflag monster_noteleport
payg_cas04.gat mapflag monster_noteleport //payg_cas04.gat mapflag monster_noteleport
payg_cas05.gat mapflag monster_noteleport //payg_cas05.gat mapflag monster_noteleport
prtg_cas01.gat mapflag monster_noteleport //prtg_cas01.gat mapflag monster_noteleport
prtg_cas02.gat mapflag monster_noteleport //prtg_cas02.gat mapflag monster_noteleport
prtg_cas03.gat mapflag monster_noteleport //prtg_cas03.gat mapflag monster_noteleport
prtg_cas04.gat mapflag monster_noteleport //prtg_cas04.gat mapflag monster_noteleport
prtg_cas05.gat mapflag monster_noteleport //prtg_cas05.gat mapflag monster_noteleport
// Novice Guild Castles === // Novice Guild Castles ===
//n_castle.gat mapflag gvg_castle //n_castle.gat mapflag gvg_castle
@ -70,10 +70,10 @@ nguild_gef.gat mapflag gvg_castle
nguild_pay.gat mapflag gvg_castle nguild_pay.gat mapflag gvg_castle
nguild_prt.gat mapflag gvg_castle nguild_prt.gat mapflag gvg_castle
nguild_alde.gat mapflag monster_noteleport //nguild_alde.gat mapflag monster_noteleport
nguild_gef.gat mapflag monster_noteleport //nguild_gef.gat mapflag monster_noteleport
nguild_pay.gat mapflag monster_noteleport //nguild_pay.gat mapflag monster_noteleport
nguild_prt.gat mapflag monster_noteleport //nguild_prt.gat mapflag monster_noteleport
// Guild Dungeons ========= // Guild Dungeons =========
gld_dun01.gat mapflag gvg_dungeon gld_dun01.gat mapflag gvg_dungeon

View File

@ -19,6 +19,12 @@
----- -----
======================== ========================
10/19
* Added the actual skill delay of 1000ms to Triple Attack and Chain combo
in skill_cast_db. Added Combo Finish and TigerFist as well with a delay of
700ms. [Skotlex]
* Added the Monk combos to skill_castnodex so their delay is not decreased
by skills. [Skotlex]
10/18 10/18
* Updated the packetdb for the 2006-10-17a client. [Zephiris] * Updated the packetdb for the 2006-10-17a client. [Zephiris]
10/16 10/16

View File

@ -414,7 +414,8 @@
261,1000,0,0,600000,0 261,1000,0,0,600000,0
//-- MO_ABSORBSPIRITS //-- MO_ABSORBSPIRITS
262,2000,0,0,0,0 262,2000,0,0,0,0
//-- MO_TRIPLEATTACK
263,0,1000,0,0,0
//-- MO_INVESTIGATE //-- MO_INVESTIGATE
266,1000,500,0,0,0 266,1000,500,0,0,0
//-- MO_FINGEROFFENSIVE //-- MO_FINGEROFFENSIVE
@ -427,9 +428,12 @@
270,0,0,0,180000,0 270,0,0,0,180000,0
//-- MO_EXTREMITYFIST //-- MO_EXTREMITYFIST
271,4000:3500:3000:2500:2000,3000:2500:2000:1500:1000,0,0,300000 271,4000:3500:3000:2500:2000,3000:2500:2000:1500:1000,0,0,300000
//-- MO_CHAINCOMBO
272,0,1000,0,0,0
//-- MO_COMBOFINISH
273,0,700,0,0,0
//========================================== //==========================================
//===== Sage =============================== //===== Sage ===============================
//-- SA_MAGICROD //-- SA_MAGICROD
276,0,1500,0,400:600:800:1000:1200,0 276,0,1500,0,400:600:800:1000:1200,0
@ -595,7 +599,7 @@
//-- CH_PALMSTRIKE //-- CH_PALMSTRIKE
370,0,300,0,0,0 370,0,300,0,0,0
//-- CH_TIGERFIST //-- CH_TIGERFIST
371,0,0,0,0,2000:4000:6000:8000:10000 371,0,700,0,0,2000:4000:6000:8000:10000
//-- CH_CHAINCRUSH //-- CH_CHAINCRUSH
372,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,0 372,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,0
//========================================== //==========================================

View File

@ -8,10 +8,14 @@
// Delay: With 0, dex affects the skill's delay rate // Delay: With 0, dex affects the skill's delay rate
// Example - 46,1,1 = Double Strafe's casting time and delay is not affected by dex. // Example - 46,1,1 = Double Strafe's casting time and delay is not affected by dex.
// By default, dex NEVER affects after-cast delay, so no need of putting 'x,0,1' in this file // By default, dex NEVER affects after-cast delay, so no need of putting 'x,0,1' in this file
263,0,2 //MO_TRIPLEATTACK
272,0,2 //MO_CHAINCOMBO
273,0,2 //MO_COMBOFINISH
336,1 //WE_CALLPARTNER 336,1 //WE_CALLPARTNER
366,1 //HW_MAGICPOWER 366,1 //HW_MAGICPOWER
370,1 //CH_PALMSTRIKE 370,1 //CH_PALMSTRIKE
371,0,2 //CH_TIGERFIST
372,0,2 //CH_CHAINCRUSH
403,3 //PF_MEMORIZE 403,3 //PF_MEMORIZE
408,1 //WE_BABY 408,1 //WE_BABY
409,1 //WE_CALLPARENT 409,1 //WE_CALLPARENT

View File

@ -3179,9 +3179,10 @@ int pc_show_steal(struct block_list *bl,va_list ap)
*------------------------------------------ *------------------------------------------
*/ */
//** pc.c: //** pc.c:
int pc_steal_item(struct map_session_data *sd,struct block_list *bl) int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
{ {
int i,skill,itemid,flag; static int i = 0;
int rate,itemid,flag;
struct status_data *sd_status, *md_status; struct status_data *sd_status, *md_status;
struct mob_data *md; struct mob_data *md;
struct item tmp_item; struct item tmp_item;
@ -3193,33 +3194,43 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl)
md_status= status_get_status_data(bl); md_status= status_get_status_data(bl);
md = (TBL_MOB *)bl; md = (TBL_MOB *)bl;
if(md->state.steal_flag>=battle_config.skill_steal_max_tries || md_status->mode&MD_BOSS || md->master_id || if(md->state.steal_flag>=battle_config.skill_steal_max_tries ||
md_status->mode&MD_BOSS || md->master_id ||
(md->class_>=1324 && md->class_<1364) || // prevent stealing from treasure boxes [Valaris] (md->class_>=1324 && md->class_<1364) || // prevent stealing from treasure boxes [Valaris]
map[md->bl.m].flag.nomobloot || // check noloot map flag [Lorky] map[md->bl.m].flag.nomobloot || // check noloot map flag [Lorky]
md->sc.data[SC_STONE].timer != -1 || md->sc.data[SC_FREEZE].timer != -1 //status change check md->sc.opt1 //status change check
) )
return 0; return 0;
skill = battle_config.skill_steal_type == 1 rate = battle_config.skill_steal_type
? (sd_status->dex - md_status->dex)/2 + pc_checkskill(sd,TF_STEAL)*6 + 10 ? (sd_status->dex - md_status->dex)/2 + lv*6 + 10
: sd_status->dex - md_status->dex + pc_checkskill(sd,TF_STEAL)*3 + 10; : sd_status->dex - md_status->dex + lv*3 + 10;
skill+= sd->add_steal_rate; //Better make the steal_Rate addition affect % rather than an absolute on top of the total drop rate. [Skotlex] rate += sd->add_steal_rate; //Better make the steal_Rate addition affect % rather than an absolute on top of the total drop rate. [Skotlex]
if (skill < 1) if (rate < 1)
return 0; return 0;
md->state.steal_flag++; //increase steal tries number md->state.steal_flag++; //increase steal tries number
for(i = 0; i<MAX_MOB_DROP; i++)//Pick one mobs drop slot. //preliminar statistical data hints at this behaviour:
{ //each steal attempt: try to steal against ONE mob drop, and no more.
itemid = md->db->dropitem[i].nameid; //We use a static index to prevent giving priority to any of the slots.
if(itemid <= 0 || (itemid>4000 && itemid<5000 && pc_checkskill(sd,TF_STEAL) <= 5)) old_i = i;
continue; do {
if(rand() % 10000 < md->db->dropitem[i].p*skill/100) i++;
break; if (i == MAX_MOB_DROP-1 && lv <= 5)
continue; //Cannot steal "last slot" (card slot)
if (i == MAX_MOB_DROP)
i = 0;
} while (md->db->dropitem[i].p <= 0 && old_i != i);
if(old_i == i) {
md->state.steal_flag = UCHAR_MAX; //Tag for speed up in case you reinsist
return 0; //Mob has nothing stealable!
} }
if (i == MAX_MOB_DROP)
if(rand() % 10000 >= md->db->dropitem[i].p*rate/100)
return 0; return 0;
md->state.steal_flag = UCHAR_MAX; //you can't steal from this mob any more md->state.steal_flag = UCHAR_MAX; //you can't steal from this mob any more

View File

@ -171,7 +171,7 @@ int pc_skill(struct map_session_data*,int,int,int);
int pc_insert_card(struct map_session_data *sd,int idx_card,int idx_equip); int pc_insert_card(struct map_session_data *sd,int idx_card,int idx_equip);
int pc_steal_item(struct map_session_data *sd,struct block_list *bl); int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int skilllv);
int pc_steal_coin(struct map_session_data *sd,struct block_list *bl); int pc_steal_coin(struct map_session_data *sd,struct block_list *bl);
int pc_modifybuyvalue(struct map_session_data*,int); int pc_modifybuyvalue(struct map_session_data*,int);

View File

@ -1031,7 +1031,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
if(dstmd && dstmd->state.steal_flag<battle_config.skill_steal_max_tries && sd->status.weapon != W_BOW && if(dstmd && dstmd->state.steal_flag<battle_config.skill_steal_max_tries && sd->status.weapon != W_BOW &&
(skill=pc_checkskill(sd,RG_SNATCHER)) > 0 && (skill=pc_checkskill(sd,RG_SNATCHER)) > 0 &&
(skill*15 + 55) + pc_checkskill(sd,TF_STEAL)*10 > rand()%1000) { (skill*15 + 55) + pc_checkskill(sd,TF_STEAL)*10 > rand()%1000) {
if(pc_steal_item(sd,bl)) if(pc_steal_item(sd,bl,pc_checkskill(sd,TF_STEAL)))
clif_skill_nodamage(src,bl,TF_STEAL,skill,1); clif_skill_nodamage(src,bl,TF_STEAL,skill,1);
else else
clif_skill_fail(sd,RG_SNATCHER,0,0); clif_skill_fail(sd,RG_SNATCHER,0,0);
@ -1896,7 +1896,9 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
type=(skillid==0)?5:skill_get_hit(skillid); type=(skillid==0)?5:skill_get_hit(skillid);
if(damage < dmg.div_ if(damage < dmg.div_
&& skillid != CH_PALMSTRIKE) //Palm Strike is the only skill that will knockback even if it misses. [Skotlex] //Only skills that knockback even when they miss. [Skotlex]
&& skillid != CH_PALMSTRIKE
&& skillid != HT_PHANTASMIC)
dmg.blewcount = 0; dmg.blewcount = 0;
if(skillid == CR_GRANDCROSS||skillid == NPC_GRANDDARKNESS) { if(skillid == CR_GRANDCROSS||skillid == NPC_GRANDDARKNESS) {
@ -1906,8 +1908,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
} }
if(sd) { if(sd) {
//Sorry for removing the Japanese comments, but they were actually distracting int flag = 0; //Used to signal if this skill can be combo'ed later on.
//from the actual code and I couldn't understand a thing anyway >.< [Skotlex]
if (sd->sc.data[SC_COMBO].timer!=-1) if (sd->sc.data[SC_COMBO].timer!=-1)
{ //End combo state after skill is invoked. [Skotlex] { //End combo state after skill is invoked. [Skotlex]
switch (skillid) { switch (skillid) {
@ -1933,65 +1934,29 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
switch(skillid) switch(skillid)
{ {
case MO_TRIPLEATTACK: case MO_TRIPLEATTACK:
{
int delay = 1000 - 4*sstatus->agi - 2*sstatus->dex;
if (pc_checkskill(sd, MO_CHAINCOMBO) > 0)
delay += 300 * battle_config.combo_delay_rate / 100;
sc_start(src,SC_COMBO,100,MO_TRIPLEATTACK,delay);
clif_combo_delay(src, delay);
if (sd->status.party_id>0) //bonus from SG_FRIEND [Komurka] if (sd->status.party_id>0) //bonus from SG_FRIEND [Komurka]
party_skill_check(sd, sd->status.party_id, MO_TRIPLEATTACK, skilllv); party_skill_check(sd, sd->status.party_id, MO_TRIPLEATTACK, skilllv);
if (pc_checkskill(sd, MO_CHAINCOMBO) > 0)
flag=1;
break; break;
}
case MO_CHAINCOMBO: case MO_CHAINCOMBO:
{
int delay = 1000 - 4*sstatus->agi - 2*sstatus->dex;
if(pc_checkskill(sd, MO_COMBOFINISH) > 0 && sd->spiritball > 0) if(pc_checkskill(sd, MO_COMBOFINISH) > 0 && sd->spiritball > 0)
delay += 300 * battle_config.combo_delay_rate /100; flag=1;
sc_start(src,SC_COMBO,100,MO_CHAINCOMBO,delay);
clif_combo_delay(src,delay);
break; break;
}
case MO_COMBOFINISH: case MO_COMBOFINISH:
{ if (pc_checkskill(sd, CH_TIGERFIST) > 0 && sd->spiritball > 0)
int delay = 700 - 4*sstatus->agi - 2*sstatus->dex; flag=1;
if (
(pc_checkskill(sd, MO_EXTREMITYFIST) > 0 && sd->spiritball >= 4 && sd->sc.data[SC_EXPLOSIONSPIRITS].timer != -1) ||
(pc_checkskill(sd, CH_TIGERFIST) > 0 && sd->spiritball > 0) ||
(pc_checkskill(sd, CH_CHAINCRUSH) > 0 && sd->spiritball > 1)
)
delay += 300 * battle_config.combo_delay_rate /100;
sc_start(src,SC_COMBO,100,MO_COMBOFINISH,delay);
clif_combo_delay(src,delay);
break;
}
case CH_TIGERFIST: case CH_TIGERFIST:
{ //Tigerfist is now a combo-only skill. [Skotlex] if (!flag && pc_checkskill(sd, CH_CHAINCRUSH) > 0 && sd->spiritball > 1)
int delay = 1000 - 4*sstatus->agi - 2*sstatus->dex; flag=1;
if(
(pc_checkskill(sd, MO_EXTREMITYFIST) > 0 && sd->spiritball >= 3 && sd->sc.data[SC_EXPLOSIONSPIRITS].timer != -1) ||
(pc_checkskill(sd, CH_CHAINCRUSH) > 0)
)
delay += 300 * battle_config.combo_delay_rate /100;
sc_start(src,SC_COMBO,100,CH_TIGERFIST,delay);
clif_combo_delay(src,delay);
break;
}
case CH_CHAINCRUSH: case CH_CHAINCRUSH:
{ if (!flag && pc_checkskill(sd, MO_EXTREMITYFIST) > 0 && sd->spiritball > 0 && sd->sc.data[SC_EXPLOSIONSPIRITS].timer != -1)
int delay = 1000 - 4*sstatus->agi - 2*sstatus->dex; flag=1;
if(pc_checkskill(sd, MO_EXTREMITYFIST) > 0 &&
sd->spiritball >= 1 &&
sd->sc.data[SC_EXPLOSIONSPIRITS].timer != -1)
delay += 300 * battle_config.combo_delay_rate /100;
sc_start(src,SC_COMBO,100,CH_CHAINCRUSH,delay);
clif_combo_delay(src,delay);
break; break;
}
case AC_DOUBLE: case AC_DOUBLE:
if((tstatus->race == RC_BRUTE || tstatus->race == RC_INSECT) && if((tstatus->race == RC_BRUTE || tstatus->race == RC_INSECT) &&
pc_checkskill(sd, HT_POWER)) { pc_checkskill(sd, HT_POWER))
{
//TODO: This code was taken from Triple Blows, is this even how it should be? [Skotlex] //TODO: This code was taken from Triple Blows, is this even how it should be? [Skotlex]
sc_start4(src,SC_COMBO,100,HT_POWER,bl->id,0,0,2000); sc_start4(src,SC_COMBO,100,HT_POWER,bl->id,0,0,2000);
clif_combo_delay(src,2000); clif_combo_delay(src,2000);
@ -2014,6 +1979,13 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
sd->ud.attackabletime = sd->canuseitem_tick = sd->ud.canact_tick; sd->ud.attackabletime = sd->canuseitem_tick = sd->ud.canact_tick;
break; break;
} //Switch End } //Switch End
if (flag) { //Possible to chain
flag = DIFF_TICK(sd->ud.canact_tick, tick);
if (flag < 0) flag = 0;
flag += 300 * battle_config.combo_delay_rate/100;
sc_start(src,SC_COMBO,100,skillid,flag);
clif_combo_delay(src, flag);
}
} }
//Display damage. //Display damage.
@ -4223,7 +4195,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case TF_STEAL: case TF_STEAL:
if(sd) { if(sd) {
if(pc_steal_item(sd,bl)) if(pc_steal_item(sd,bl,skilllv))
clif_skill_nodamage(src,bl,skillid,skilllv,1); clif_skill_nodamage(src,bl,skillid,skilllv,1);
else else
clif_skill_fail(sd,skillid,0x0a,0); clif_skill_fail(sd,skillid,0x0a,0);
@ -8613,7 +8585,7 @@ int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
if (bl->type&battle_config.no_skill_delay) if (bl->type&battle_config.no_skill_delay)
return battle_config.min_skill_delay_limit; return battle_config.min_skill_delay_limit;
// instant cast attack skills depend on aspd as delay [celest] // instant cast attack skills depend on aspd as delay [celest]
if (time == 0) { if (time == 0) {
if (skill_get_type(skill_id)&(BF_WEAPON|BF_MISC) && !(skill_get_nk(skill_id)&NK_NO_DAMAGE)) if (skill_get_type(skill_id)&(BF_WEAPON|BF_MISC) && !(skill_get_nk(skill_id)&NK_NO_DAMAGE))
@ -8623,13 +8595,24 @@ int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
} else if (time < 0) } else if (time < 0)
time = -time + status_get_amotion(bl); // if set to <0, the attack motion is added. time = -time + status_get_amotion(bl); // if set to <0, the attack motion is added.
else //Agi reduction should apply only to non-zero delay skills. else //Agi reduction should apply only to non-zero delay skills.
if (battle_config.delay_dependon_agi && !(delaynochange&1)) switch (skill_id)
{ // if skill casttime is allowed to be reduced by dex { //Monk combo skills have their delay reduced by agi/dex.
int scale = battle_config.castrate_dex_scale - status_get_agi(bl); case MO_TRIPLEATTACK:
if (scale > 0) case MO_CHAINCOMBO:
time = time * scale / battle_config.castrate_dex_scale; case MO_COMBOFINISH:
else //To be capped later to minimum. case CH_TIGERFIST:
time = 0; case CH_CHAINCRUSH:
time -= 4*status_get_agi(bl) - 2*status_get_dex(bl);
break;
default:
if (battle_config.delay_dependon_agi && !(delaynochange&1))
{ // if skill casttime is allowed to be reduced by dex
int scale = battle_config.castrate_dex_scale - status_get_agi(bl);
if (scale > 0)
time = time * scale / battle_config.castrate_dex_scale;
else //To be capped later to minimum.
time = 0;
}
} }
if (bl->type == BL_PC && ((TBL_PC*)bl)->delayrate != 100) if (bl->type == BL_PC && ((TBL_PC*)bl)->delayrate != 100)