public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info) { info = new Hashtable(); info.SetSkillUseState(Common.SkillUseState.normal); if (ShotToEnemyRestricted(source, skill)) { info.SetSkillUseState(Common.SkillUseState.invalidTarget); return(false); } if (NotCheckDistance(source)) { info.SetSkillUseState(Common.SkillUseState.tooFar); return(false); } float dmgMult = skill.GetFloatInput("dmg_mult"); float areaDmgMult = skill.GetFloatInput("dmg_area_mult"); float radius = skill.GetFloatInput("radius"); var weapon = source.Weapon(); var character = source.Character(); var raceable = source.Raceable(); bool mastery = RollMastery(source); if (mastery) { dmgMult *= 2; } WeaponHitInfo hit; var shot = weapon.Fire(out hit, skill.data.Id, dmgMult); if (hit.normalOrMissed) { source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot); var targets = GetTargets(source, source.Target().targetObject, radius); var genWeapDmg = weapon.GenerateDamage(); genWeapDmg.Mult(areaDmgMult); InputDamage inpDamage = new InputDamage(source, genWeapDmg); if (mastery) { //inpDamage.SetDamage(inpDamage.damage * 2); inpDamage.Mult(2); } foreach (var pTarget in targets) { pTarget.Value.Damagable().ReceiveDamage(inpDamage); } return(true); } else { source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot); return(false); } }
public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info) { info = new Hashtable(); info.SetSkillUseState(Common.SkillUseState.normal); if (ShotToEnemyRestricted(source, skill)) { info.SetSkillUseState(Common.SkillUseState.invalidTarget); return(false); } if (NotCheckDistance(source)) { info.SetSkillUseState(Common.SkillUseState.tooFar); return(false); } float dmgMult = skill.GetFloatInput("dmg_mult"); float dmgAreaMult = skill.GetFloatInput("dmg_area_mult"); float dmgPc = skill.GetFloatInput("dmg_pc"); float dmgTime = skill.GetFloatInput("dmg_time"); int stackCount = skill.GetIntInput("stack_count"); float radius = skill.GetFloatInput("radius"); var sourceWeapon = source.Weapon(); var sourceBonuses = source.Bonuses(); var sourceMessage = source.MmoMessage(); var sourceCharacter = source.Character(); var sourceRace = source.Raceable(); bool mastery = RollMastery(source); if (mastery) { dmgMult *= 2; dmgAreaMult *= 2; dmgTime *= 2; } WeaponHitInfo hit; var shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult); if (hit.normalOrMissed) { sourceMessage.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot); var genDmg = sourceWeapon.GenerateDamage(); genDmg.Mult(dmgAreaMult); InputDamage inpDamage = new InputDamage(source, genDmg); foreach (var pTarget in GetTargets(source, source.Target().targetObject, radius)) { pTarget.Value.Damagable().ReceiveDamage(inpDamage); if (sourceBonuses.GetBuffCountWithTag(Common.BonusType.increase_damage_on_pc, skill.data.Id) < stackCount) { Buff buff = new Buff(Guid.NewGuid().ToString(), null, Common.BonusType.increase_damage_on_pc, dmgTime, dmgPc); buff.SetTag(skill.data.Id); sourceBonuses.SetBuff(buff, source); } } return(true); } else { sourceMessage.SendShot(Common.EventReceiver.ItemOwner, shot); return(false); } }
protected override void AbsorbDamage(InputDamage inputDamage) { base.AbsorbDamage(inputDamage); }
public override InputDamage ReceiveDamage(InputDamage inputDamage) { return(base.ReceiveDamage(inputDamage)); }
protected override void ModifyDamage(InputDamage damage) { base.ModifyDamage(damage); }
public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info) { info = new Hashtable(); info.SetSkillUseState(SkillUseState.normal); if (!CheckForShotEnemy(source, skill)) { info.SetSkillUseState(SkillUseState.invalidTarget); return(false); } if (NotCheckDistance(source)) { info.SetSkillUseState(SkillUseState.tooFar); return(false); } float dmgMult = skill.data.Inputs.Value <float>("dmg_mult"); float dmg2Mult = skill.data.Inputs.Value <float>("dmg2_mult"); float radius = skill.data.Inputs.Value <float>("radius"); var sourceWeapon = source.GetComponent <BaseWeapon>(); var sourceChar = source.GetComponent <CharacterObject>(); var targetBonuses = source.GetComponent <PlayerTarget>().targetObject.GetComponent <PlayerBonuses>(); bool mastery = RollMastery(source); if (mastery) { dmgMult *= 2; dmg2Mult *= 2; } WeaponHitInfo hit; var shotInfo = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult); if (hit.normalOrMissed) { var items = (source.world as MmoWorld).GetItems((it) => { if (it.GetComponent <DamagableObject>() && it.GetComponent <CharacterObject>()) { if (it.Id != targetBonuses.nebulaObject.Id) { if (sourceChar.RelationTo(it.GetComponent <CharacterObject>()) == FractionRelation.Enemy) { return(true); } } } return(false); }); float minDist = float.MaxValue; Item targetItem = null; foreach (var p in items) { float cdist = p.Value.transform.DistanceTo(targetBonuses.transform); if (cdist < minDist) { minDist = cdist; targetItem = p.Value; } } if (targetItem && (minDist < radius)) { float dmg = sourceWeapon.GetDamage(false).totalDamage *dmg2Mult; WeaponDamage sInpWeapDmg = new WeaponDamage(sourceWeapon.myWeaponBaseType); sInpWeapDmg.SetBaseTypeDamage(dmg); InputDamage inpDamage = new InputDamage(source, sInpWeapDmg); targetItem.GetComponent <DamagableObject>().ReceiveDamage(inpDamage); } source.GetComponent <MmoMessageComponent>().SendShot(EventReceiver.OwnerAndSubscriber, shotInfo); return(true); } else { source.GetComponent <MmoMessageComponent>().SendShot(EventReceiver.OwnerAndSubscriber, shotInfo); return(false); } }
public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info) { info = new Hashtable(); if (!source) { return(false); } if (NotEnemyCheck(source, skill, info)) { return(false); } var sourceWeapon = source.GetComponent <ShipWeapon>(); var sourceCharacter = source.GetComponent <CharacterObject>(); var race = source.GetComponent <RaceableObject>(); float dmgMult = skill.data.Inputs.Value <float>("dmg_mult"); float secondDmgMult = skill.data.Inputs.Value <float>("second_dmg_mult"); float radius = skill.data.Inputs.Value <float>("radius"); float time = skill.data.Inputs.Value <float>("time"); var targetObject = source.GetComponent <PlayerTarget>().targetObject; bool mastery = RollMastery(source); if (mastery) { dmgMult *= 2; secondDmgMult *= 2; time *= 2; } WeaponHitInfo hit; var shotInfo = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult); if (hit.normalOrMissed) { source.GetComponent <MmoMessageComponent>().SendShot(EventReceiver.OwnerAndSubscriber, shotInfo); var items = (source.world as MmoWorld).GetItems((it) => { if (it.GetComponent <DamagableObject>() && it.GetComponent <CharacterObject>()) { if (it.transform.DistanceTo(targetObject.transform) < radius) { if (sourceCharacter.RelationTo(it.GetComponent <CharacterObject>()) == FractionRelation.Enemy) { return(true); } } } return(false); }); float curTime = Time.curtime(); float damage = sourceWeapon.GetDamage(false).totalDamage *dmgMult; WeaponDamage wd = new WeaponDamage(sourceWeapon.myWeaponBaseType); wd.SetBaseTypeDamage(damage); InputDamage inpDamage = new InputDamage(source, wd); foreach (var pair in items) { if (pair.Value.Id != targetObject.Id) { pair.Value.GetComponent <DamagableObject>().ReceiveDamage(inpDamage); } sourceWeapon.AddAdditionalDamager(pair.Value.Id, new ShipWeapon.AdditionalDamage { damageMult = secondDmgMult, expireTime = curTime + time }); } return(true); } else { source.GetComponent <MmoMessageComponent>().SendShot(EventReceiver.OwnerAndSubscriber, shotInfo); return(false); } }
public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info) { info = new Hashtable(); var weapon = source.Weapon(); var targets = GetTargets(source, source, weapon.optimalDistance); if (targets.Count == 0) { return(false); } ConcurrentBag <Item> filteredTargets = new ConcurrentBag <Item>(); foreach (var pItem in targets) { filteredTargets.Add(pItem.Value); if (filteredTargets.Count >= 3) { break; } } float dmgMult = skill.GetFloatInput("dmg_mult"); float dmgAreaMult = skill.GetFloatInput("dmg_area_mult"); float radius = skill.GetFloatInput("radius"); float damagePerTarget = dmgMult / filteredTargets.Count; var sourceMessage = source.MmoMessage(); var sourceCharacter = source.Character(); var sourceRace = source.Raceable(); bool mastery = RollMastery(source); if (mastery) { damagePerTarget *= 2; dmgAreaMult *= 2; } foreach (var target in filteredTargets) { WeaponHitInfo hit; var shot = weapon.Fire(target, out hit, skill.data.Id, damagePerTarget); if (hit.normalOrMissed) { sourceMessage.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot); var nearItems = GetTargets(source, target, radius); WeaponDamage wd = weapon.GenerateDamage(); wd.Mult(dmgAreaMult); InputDamage inpDamage = new InputDamage(source, wd); foreach (var pNear in nearItems) { if (NoId(filteredTargets, pNear.Key)) { pNear.Value.Damagable().ReceiveDamage(inpDamage); } } } else { sourceMessage.SendShot(Common.EventReceiver.ItemOwner, shot); } } return(true); }