как нефиг делать, толкьо придется систему замен по стэктайпам прилично так переписывать
выкинуть изврат с параметром stackType2 и написать как это сделано в птс - эффект в скилле, в котором перечисляются дополнительные стэктайпы, которые надо снять при наложении скилла + этот же эффект запрещает накладывать другие скиллы с этими стэктайпами пока работает скилл.
эффект зовется p_block_buff_slot.
в хф по такому принципу работают импровед баффы, а в ГоД+ по такому принципу пашут почти все баффы перерожденных классов.
пример на импрувед комбате
Код:
skill_begin skill_name = [s_improve_combat1] /* [임프로브 컴뱃] */ skill_id = 1499 level = 1 operate_type = A2 magic_level = 70 special_level = 0 magic_critical_rate = 5 change_skill_id = 0 self_effect = {} effect = {{i_dispel_by_slot;pa_up;9};{i_dispel_by_slot;pd_up;9};{p_block_buff_slot;{pa_up;pd_up}};{p_physical_attack;{all};15;per};{p_physical_defence;{all};15;per}} end_effect = {} is_magic = 1 is_double = 0 mp_consume1 = 6 mp_consume2 = 21 cast_range = 400 effective_range = 900 skill_hit_time = 1.5 skill_cool_time = 0 skill_hit_cancel_time = 0.5 reuse_delay = 2 activate_rate = -1 lv_bonus_rate = 0 basic_property = none abnormal_time = 2400 abnormal_lv = 1 abnormal_type = improve_pa_pd_up abnormal_instant = 0 irreplaceable_buff = 0 buff_protect_level = 0 attribute = {attr_none;0} trait = {trait_none} effect_point = 679 target_type = target affect_scope = single affect_limit = {0;0} next_action = none debuff = 0 ride_state = {@ride_none;@ride_strider;@ride_wyvern;@ride_wolf} multi_class = 0 olympiad_use = 1 skill_end
у меня к примеру это идет как параметр скилла
Код:
<!-- Improve Combat / Совершенство в Бою -->
<skill id="1499" levels="1" name="Improve Combat">
<!-- Сочетание эффектов увеличения Физ. Атк. и увеличения Физ. Защ. дает значительное преимущество в бою. Увеличивает Физ. Атк. и Физ. Защ. на 15%. Время действия: 40 мин. -->
<set name="magicType" val="MAGIC" />
<set name="icon" val="icon.skill1499" />
<set name="reuseDelay" val="2000" />
<set name="magicLevel" val="70" />
<set name="castRange" val="400" />
<set name="hitTime" val="1500" />
<set name="hitCancelTime" val="500" />
<set name="mpConsume1" val="6" />
<set name="mpConsume2" val="21" />
<set name="effectPoint" val="679" />
<set name="target" val="ONE" />
<set name="skillType" val="BUFF" />
<set name="operateType" val="OP_ACTIVE" />
<set name="nextAction" val="NONE" />
<set name="blockSlot" val="pa_up;pd_up" />
<for>
<effect count="1" name="Buff" stackOrder="1" stackType="improve_pa_pd_up" time="2400" val="0">
<mul order="0x30" stat="pAtk" val="1.15" />
<mul order="0x30" stat="pDef" val="1.15" />
</effect>
</for>
</skill>
При попытке наложения баффа идет сверка не только со стэктайпом, но и со списком заблокированных слотов, просто проверив у скиллов всех наложенных баффов параметр blockSlot и если в каком-то из скиллов нашелся такой же стэктайп в этом параметре - бафф не накладываем.
А если не нашли, а притом скилл имеет список blockSlot и ничего более не мешает наложить бафф, то сначала снимаем все баффы с стэктайпом из blockSlot и уже после этого накладываем бафф.