/// <summary> /// Get all debuffs for buff group /// </summary> /// <param name="prm">Buff type group </param> /// <returns>Array of all debuffs for buff group parameter</returns> public static BonusType[] GetDebuffsForParameter(BuffParameter prm) { switch (prm) { case BuffParameter.cooldown: return(new BonusType[] { BonusType.increase_cooldown_on_cnt, BonusType.increase_cooldown_on_pc }); case BuffParameter.damage: return(new BonusType[] { BonusType.decrease_damage_on_cnt, BonusType.decrease_damage_on_pc }); case BuffParameter.max_energy: return(new BonusType[] { BonusType.decrease_max_energy_on_cnt }); case BuffParameter.optimal_distance: return(new BonusType[] { BonusType.decrease_optimal_distance_on_cnt, BonusType.decrease_optimal_distance_on_pc }); case BuffParameter.resist: return(new BonusType[] { BonusType.decrease_resist_on_cnt, BonusType.decrease_resist_on_pc, BonusType.block_resist }); case BuffParameter.speed: return(new BonusType[] { BonusType.decrease_speed_on_cnt, BonusType.decrease_speed_on_pc }); case BuffParameter.crit_damage: return(new BonusType[] { BonusType.decrease_crit_damage_on_pc, BonusType.decrease_crit_damage_on_cnt }); case BuffParameter.crit_chance: return(new BonusType[] { BonusType.decrease_crit_chance_on_cnt, BonusType.decrease_crit_chance_on_pc }); case BuffParameter.max_hp: return(new BonusType[] { BonusType.decrease_max_hp_on_cnt, BonusType.decrease_max_hp_on_pc }); case BuffParameter.hp: return(new BonusType[] { BonusType.decrease_healing_speed_on_pc }); case BuffParameter.healing: return(new BonusType[] { BonusType.decrease_healing_on_cnt, BonusType.decrease_healing_on_pc }); case BuffParameter.energy_cost: return(new BonusType[] { BonusType.increase_energy_cost_on_pc, BonusType.increase_energy_cost_on_cnt }); case BuffParameter.dron_strength: return(new BonusType[] { BonusType.decrease_dron_strength_on_pc, BonusType.decrease_dron_strength_on_cnt }); case BuffParameter.input_damage: return(new BonusType[] { BonusType.increase_input_damage_on_pc }); default: return(new BonusType[] { }); } }
public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info) { info = new Hashtable(); if (!CheckForShotEnemy(source, skill)) { return(false); } float dmgMult = skill.data.Inputs.Value <float>("dmg_mult"); float effectProb = skill.data.Inputs.Value <float>("effect_prob"); var sourceWeapon = source.GetComponent <BaseWeapon>(); var targetBonuses = source.GetComponent <PlayerTarget>().targetObject.GetComponent <PlayerBonuses>(); bool mastery = RollMastery(source); if (mastery) { dmgMult *= 2; effectProb *= 2; } WeaponHitInfo hit; var shotInfo = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult); if (hit.normalOrMissed) { if (Rand.Float01() < effectProb) { BuffParameter prm = CommonUtils.GetRandomEnumValue <BuffParameter>(new List <BuffParameter>()); BonusType[] debuffs = BuffUtils.GetBuffsForParameter(prm); foreach (var dbf in debuffs) { targetBonuses.RemoveBuffs(dbf); } } source.GetComponent <MmoMessageComponent>().SendShot(EventReceiver.OwnerAndSubscriber, shotInfo); return(true); } else { source.GetComponent <MmoMessageComponent>().SendShot(EventReceiver.OwnerAndSubscriber, shotInfo); return(false); } }
/// <summary> /// Return array of buffs for buff type parameter group /// </summary> /// <param name="prm">Parameter group</param> /// <returns>Array of buffs for parameter group</returns> public static BonusType[] GetBuffsForParameter(BuffParameter prm) { switch (prm) { case BuffParameter.cooldown: return(new BonusType[] { BonusType.decrease_cooldown_on_cnt, BonusType.decrease_cooldown_on_pc }); case BuffParameter.damage: return(new BonusType[] { BonusType.increase_damage_on_cnt, BonusType.increase_damage_on_pc }); case BuffParameter.max_energy: return(new BonusType[] { BonusType.increase_max_energy_on_cnt }); case BuffParameter.optimal_distance: return(new BonusType[] { BonusType.increase_optimal_distance_on_cnt, BonusType.increase_optimal_distance_on_pc }); case BuffParameter.resist: return(new BonusType[] { BonusType.increase_resist_on_cnt, BonusType.increase_resist_on_pc }); case BuffParameter.speed: return(new BonusType[] { BonusType.increase_speed_on_cnt, BonusType.increase_speed_on_pc }); case BuffParameter.crit_damage: return(new BonusType[] { BonusType.increase_crit_damage_on_cnt, BonusType.increase_crit_damage_on_pc }); case BuffParameter.crit_chance: return(new BonusType[] { BonusType.increase_crit_chance_on_cnt, BonusType.increase_crit_chance_on_pc }); case BuffParameter.max_hp: return(new BonusType[] { BonusType.increase_max_hp_on_cnt, BonusType.increase_max_hp_on_pc }); case BuffParameter.hp: return(new BonusType[] { BonusType.increase_healing_speed_on_pc }); case BuffParameter.healing: return(new BonusType[] { BonusType.increase_healing_on_cnt, BonusType.increase_healing_on_pc, BonusType.buff_41c }); case BuffParameter.energy_cost: return(new BonusType[] { BonusType.decrease_energy_cost_on_pc, BonusType.decrease_energy_cost_on_cnt }); case BuffParameter.dron_strength: return(new BonusType[] { BonusType.increase_dron_strength_on_cnt, BonusType.increase_dron_strength_on_pc }); case BuffParameter.exp: return(new BonusType[] { BonusType.increase_exp_on_pc }); case BuffParameter.input_damage: return(new BonusType[] { BonusType.decrease_input_damage_on_pc }); case BuffParameter.reflection: return(new BonusType[] { BonusType.reflection_pc }); case BuffParameter.restore_hp_on_sec: return(new BonusType[] { BonusType.restore_hp_at_sec_on_pc, BonusType.restore_hp_at_sec_on_cnt }); case BuffParameter.absorb_damage: return(new BonusType[] { BonusType.absorb_damage_pc, BonusType.absorb_damage_cnt }); case BuffParameter.convert_damage_to_hp: return(new BonusType[] { BonusType.convert_absorbed_damage_to_hp_pc }); case BuffParameter.vampirism: return(new BonusType[] { BonusType.vampirism_pc }); case BuffParameter.invisibility: return(new BonusType[] { BonusType.invisibility }); default: return(new BonusType[] { }); } }