|
@@ -1014,8 +1014,10 @@ bool skill_isNotOk_hom(struct homun_data *hd, uint16 skill_id, uint16 skill_lv)
|
|
|
if (sc && !sc->count)
|
|
|
sc = nullptr;
|
|
|
|
|
|
- if (util::vector_exists(hd->blockskill, skill_id))
|
|
|
+ if (util::vector_exists(hd->blockskill, skill_id)) {
|
|
|
+ clif_skill_fail(*sd, skill_id, USESKILL_FAIL_SKILLINTERVAL);
|
|
|
return true;
|
|
|
+ }
|
|
|
|
|
|
switch(skill_id) {
|
|
|
case HFLI_SBR44:
|
|
@@ -1120,9 +1122,16 @@ bool skill_isNotOk_hom(struct homun_data *hd, uint16 skill_id, uint16 skill_lv)
|
|
|
* @return true: Skill cannot be used, false: otherwise
|
|
|
*/
|
|
|
bool skill_isNotOk_mercenary( uint16 skill_id, s_mercenary_data& md ){
|
|
|
- if (util::vector_exists(md.blockskill, skill_id))
|
|
|
+ map_session_data* sd = md.master;
|
|
|
+
|
|
|
+ if (sd == nullptr)
|
|
|
return true;
|
|
|
|
|
|
+ if (util::vector_exists(md.blockskill, skill_id)) {
|
|
|
+ clif_skill_fail(*sd, skill_id, USESKILL_FAIL_SKILLINTERVAL);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
if( md.master != nullptr ){
|
|
|
return skill_isNotOk( skill_id, *md.master );
|
|
|
}else{
|
|
@@ -7342,8 +7351,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
ret = skill_castend_pos2(src,src->x,src->y,skill_id,skill_lv,tick,flag); //cast on homon
|
|
|
if(s_src && !skill_check_unit_range(s_src, s_src->x, s_src->y, skill_id, skill_lv))
|
|
|
ret |= skill_castend_pos2(s_src,s_src->x,s_src->y,skill_id,skill_lv,tick,flag); //cast on master
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
return ret;
|
|
|
}
|
|
|
break;
|
|
@@ -9330,10 +9337,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (sd->hd && battle_config.hom_setting&HOMSET_RESET_REUSESKILL_TELEPORTED) {
|
|
|
- sd->hd->blockskill.clear();
|
|
|
- sd->hd->blockskill.shrink_to_fit();
|
|
|
- }
|
|
|
|
|
|
if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skill_lv == 1 ) || skill_lv == 3 )
|
|
|
{
|
|
@@ -10675,11 +10678,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
break;
|
|
|
|
|
|
case HAMI_CASTLE: //[orn]
|
|
|
- if (src != bl && rnd()%100 < 20 * skill_lv) {
|
|
|
+ if (src != bl && rnd_chance(20 * skill_lv, 100)) {
|
|
|
int x = src->x, y = src->y;
|
|
|
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd,skill_id,skill_get_time2(skill_id,skill_lv));
|
|
|
// Move source
|
|
|
if (unit_movepos(src,bl->x,bl->y,0,0)) {
|
|
|
clif_skill_nodamage(src,src,skill_id,skill_lv,1); // Homunc
|
|
@@ -10726,8 +10727,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
case MH_GOLDENE_FERSE:
|
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
|
|
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_time2(skill_id,skill_lv));
|
|
|
break;
|
|
|
|
|
|
case NPC_DRAGONFEAR:
|
|
@@ -12356,15 +12355,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
for (i = 0; i < ARRAYLENGTH(scs); i++)
|
|
|
if (tsc->getSCE(scs[i])) status_change_end(bl, scs[i]);
|
|
|
}
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
}
|
|
|
break;
|
|
|
case MH_OVERED_BOOST:
|
|
|
if (hd && battle_get_master(src)) {
|
|
|
sc_start(src, battle_get_master(src), type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
}
|
|
|
break;
|
|
|
case MH_GRANITIC_ARMOR:
|
|
@@ -12373,7 +12369,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
struct block_list *s_bl = battle_get_master(src);
|
|
|
if(s_bl) sc_start2(src, s_bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv)); //start on master
|
|
|
sc_start2(src, bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
}
|
|
|
break;
|
|
|
case MH_LIGHT_OF_REGENE: //self
|
|
@@ -12381,7 +12376,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
struct block_list *s_bl = battle_get_master(src);
|
|
|
if(s_bl) sc_start(src, s_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
sc_start2(src, src, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
}
|
|
|
break;
|
|
|
case MH_STYLE_CHANGE:
|
|
@@ -12407,21 +12401,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
clif_skill_nodamage(src,master_bl,skill_id,skill_lv,1);
|
|
|
sc_start(src, master_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
}
|
|
|
-
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
} break;
|
|
|
case MH_PAIN_KILLER:
|
|
|
bl = battle_get_master(src);
|
|
|
if (bl != nullptr)
|
|
|
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
break;
|
|
|
case MH_MAGMA_FLOW:
|
|
|
sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
break;
|
|
|
case MH_SUMMON_LEGION: {
|
|
|
int summons[5] = {MOBID_S_HORNET, MOBID_S_GIANT_HORNET, MOBID_S_GIANT_HORNET, MOBID_S_LUCIOLA_VESPA, MOBID_S_LUCIOLA_VESPA};
|
|
@@ -12448,8 +12435,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
sc_start4(&sum_md->bl,&sum_md->bl, SC_MODECHANGE, 100, 1, 0, MD_CANATTACK|MD_AGGRESSIVE, 0, 60000);
|
|
|
}
|
|
|
}
|
|
|
- if (hd)
|
|
|
- skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -13398,10 +13383,25 @@ TIMER_FUNC(skill_castend_id){
|
|
|
|
|
|
if (!sd || sd->skillitem != ud->skill_id || skill_get_delay(ud->skill_id, ud->skill_lv))
|
|
|
ud->canact_tick = i64max(tick + skill_delayfix(src, ud->skill_id, ud->skill_lv), ud->canact_tick - SECURITY_CASTTIME);
|
|
|
- if (sd) { //Cooldown application
|
|
|
- int cooldown = pc_get_skillcooldown(sd,ud->skill_id, ud->skill_lv); // Increases/Decreases cooldown of a skill by item/card bonuses.
|
|
|
- if(cooldown) skill_blockpc_start(sd, ud->skill_id, cooldown);
|
|
|
+
|
|
|
+ // Cooldown application
|
|
|
+ switch (src->type) {
|
|
|
+ case BL_PC:{
|
|
|
+ // Increases/Decreases cooldown of a skill by item/card bonuses.
|
|
|
+ int cooldown = pc_get_skillcooldown(sd, ud->skill_id, ud->skill_lv);
|
|
|
+ if (cooldown > 0)
|
|
|
+ skill_blockpc_start(sd, ud->skill_id, cooldown);
|
|
|
+ } break;
|
|
|
+ case BL_HOM:{
|
|
|
+ homun_data& hd = reinterpret_cast<homun_data&>(*src);
|
|
|
+#ifdef RENEWAL
|
|
|
+ skill_blockhomun_start(&hd, ud->skill_id, skill_get_cooldown(ud->skill_id, ud->skill_lv));
|
|
|
+#else
|
|
|
+ skill_blockhomun_start(&hd, ud->skill_id, skill_get_delay(ud->skill_id, ud->skill_lv));
|
|
|
+#endif
|
|
|
+ } break;
|
|
|
}
|
|
|
+
|
|
|
if( battle_config.display_status_timers && sd )
|
|
|
clif_status_change(src, EFST_POSTDELAY, 1, skill_delayfix(src, ud->skill_id, ud->skill_lv), 0, 0, 0);
|
|
|
if( sd )
|
|
@@ -23069,6 +23069,9 @@ int skill_blockhomun_start(struct homun_data *hd, uint16 skill_id, int tick) //[
|
|
|
|
|
|
hd->blockskill.push_back(skill_id);
|
|
|
|
|
|
+ if (battle_config.display_status_timers)
|
|
|
+ clif_skill_cooldown(*hd->master, skill_id, tick);
|
|
|
+
|
|
|
return add_timer(gettick() + tick, skill_blockhomun_end, hd->bl.id, skill_id);
|
|
|
}
|
|
|
|
|
@@ -23101,6 +23104,9 @@ int skill_blockmerc_start(s_mercenary_data *md, uint16 skill_id, int tick)
|
|
|
|
|
|
md->blockskill.push_back(skill_id);
|
|
|
|
|
|
+ if (battle_config.display_status_timers)
|
|
|
+ clif_skill_cooldown(*md->master, skill_id, tick);
|
|
|
+
|
|
|
return add_timer(gettick() + tick, skill_blockmerc_end, md->bl.id, skill_id);
|
|
|
}
|
|
|
/**
|