コード例 #1
0
ファイル: Skill_00000452.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            if (NotEnemyCheck(source, skill, info))
            {
                return(false);
            }

            float dmgMult = skill.GetFloatInput("dmg_mult");
            float hpMult  = skill.GetFloatInput("hp_mult");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                hpMult  *= 2;
            }
            WeaponHitInfo hit;
            var           shot = source.Weapon().Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                float hp = hit.actualDamage.totalDamage * hpMult;
                source.Damagable().RestoreHealth(source, hp);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: Skill_00000458.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            if (NotEnemyCheck(source, skill, info))
            {
                return(false);
            }

            var sourceWeapon    = source.Weapon();
            var targetObject    = source.Target().targetObject;
            var targetDamagable = targetObject.Damagable();

            float damageMult   = skill.GetFloatInput("dmg_mult");
            float hpPc         = skill.GetFloatInput("hp_pc");
            float hpRestoredPc = skill.GetFloatInput("hp_restored_pc");

            bool targetHpLow = true;

            if (targetDamagable.health > targetDamagable.maximumHealth * hpPc)
            {
                targetHpLow = false;
            }

            if (!targetHpLow)
            {
                damageMult = 1;
            }

            bool mastery = RollMastery(source);

            if (mastery)
            {
                damageMult *= 2;
            }
            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, damageMult);

            if (hit.normalOrMissed)
            {
                if (targetDamagable.killed)
                {
                    float resotedHp = source.Damagable().maximumHealth *hpRestoredPc;
                    if (mastery)
                    {
                        resotedHp *= 2;
                    }

                    source.Damagable().RestoreHealth(source, resotedHp);
                }
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #4
0
        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 hpPc    = skill.GetFloatInput("hp_pc");
            float radius  = skill.GetFloatInput("radius");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                hpPc    *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            float hpVal = source.Damagable().maximumHealth *hpPc;

            WeaponHitInfo hit;
            var           shot = source.Weapon().Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                //Buff speedBuff = new Buff(skill.data.Id.ToString(), null, Common.BonusType.increase_speed_on_pc, speedTime, speedPc);
                //source.Bonuses().SetBuff(speedBuff, source);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);

                var sWeapon = source.Weapon();
                var mmoMsg  = source.MmoMessage();

                foreach (var friend in GetNearestFriends(source, radius))
                {
                    var heal = sWeapon.Heal(friend.Value, hpVal, skill.idInt);
                    mmoMsg.SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
                }
                return(true);
            }
            return(false);
        }
コード例 #5
0
        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 speedPc   = skill.GetFloatInput("speed_pc");
            float speedTime = skill.GetFloatInput("speed_time");
            float radius    = skill.GetFloatInput("radius");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult   *= 2;
                speedTime *= 2;
            }
            var           sourceWeapon  = source.Weapon();
            var           sourceBonuses = source.Bonuses();
            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                Buff buff = new Buff(skill.data.Id.ToString(), null, Common.BonusType.increase_speed_on_pc, speedTime, speedPc);
                sourceBonuses.SetBuff(buff, source);

                foreach (var ally in GetHealTargets(source, source, radius))
                {
                    Buff buff2 = new Buff(skill.data.Id.ToString(), null, Common.BonusType.increase_speed_on_pc, speedTime, speedPc);
                    ally.Value.Bonuses().SetBuff(buff2, source);
                }
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #6
0
ファイル: Skill_0000044A.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();

            if (NotEnemyCheck(source, skill, info))
            {
                ResetCounter();
                return(false);
            }


            var dmgMult = skill.GetFloatInput("dmg_mult");
            var hpPc    = skill.GetFloatInput("hp_pc");
            var hpTime  = skill.GetFloatInput("hp_time");

            mUseCounter++;
            if (source.Skills().lastSkill != skill.data.Id)
            {
                mUseCounter = 0;
            }

            mUseCounter = Mathf.Clamp(mUseCounter, 0, 2);
            dmgMult     = ModifyDamageMult(dmgMult);

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                hpTime  *= 2;
            }

            var           sourceWeapon = source.Weapon();
            var           targetObject = source.Target().targetObject;
            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                Buff buff = new Buff(skill.id, null, Common.BonusType.increase_healing_speed_on_pc, hpTime, hpPc);
                source.Bonuses().SetBuff(buff, source);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #7
0
ファイル: Skill_0000042C.cs プロジェクト: OlegGelezcov/neb
        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 blockProb = skill.GetFloatInput("block_prob");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult   *= 2;
                blockProb *= 2;
            }

            WeaponHitInfo hit;
            var           shot = source.Weapon().Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                var targetWeapon = source.Target().targetObject.Weapon();
                if (targetWeapon)
                {
                    if (Rand.Float01() < blockProb)
                    {
                        targetWeapon.BlockSingleShot();
                    }
                }
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #8
0
ファイル: Skill_00000413.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(SkillUseState.normal);

            if (!source)
            {
                return(false);
            }
            var damagable = source.GetComponent <DamagableObject>();

            if (!damagable)
            {
                return(false);
            }

            float hpPc = skill.GetFloatInput("hp_pc");
            float hp   = hpPc * damagable.maximumHealth;
            //damagable.SetHealth(damagable.health + hp);
            bool mastery = RollMastery(source);

            if (mastery)
            {
                hp *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }
            //damagable.RestoreHealth(source, hp);
            //source.Weapon().HealSelf(hp, skill.idInt);
            source.MmoMessage().SendHeal(EventReceiver.OwnerAndSubscriber, source.Weapon().HealSelf(hp, skill.idInt));
            return(true);
        }
コード例 #9
0
ファイル: Skill_00000428.cs プロジェクト: OlegGelezcov/neb
        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 dmgPc   = skill.GetFloatInput("dmg_pc");
            float dmgTime = skill.GetFloatInput("dmg_time");

            var sourceWeapon  = source.Weapon();
            var targetObject  = source.Target().targetObject;
            var targetBonuses = targetObject.Bonuses();

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                dmgTime *= 2;
            }

            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                Buff buff = new Buff(skill.data.Id.ToString(), null, Common.BonusType.decrease_damage_on_pc, dmgTime, dmgPc);
                targetBonuses.SetBuff(buff, source);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #10
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            if (NotEnemyCheck(source, skill, info))
            {
                return(false);
            }
            var           targetObject  = source.Target().targetObject;
            var           sourceWeapon  = source.Weapon();
            var           sourceBonuses = source.Bonuses();
            WeaponHitInfo hit;

            float dmgMult   = skill.GetFloatInput("dmg_mult");
            float speedPc   = skill.GetFloatInput("speed_pc");
            float speedTime = skill.GetFloatInput("speed_time");
            float radius    = skill.GetFloatInput("radius");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult   *= 2;
                speedTime *= 2;
            }

            var shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);

                var items = GetTargets(source, targetObject, radius);
                foreach (var pItem in items)
                {
                    var  item        = pItem.Value;
                    var  itemBonuses = item.Bonuses();
                    Buff speedDebuff = new Buff(skill.id, null, Common.BonusType.decrease_speed_on_pc, speedTime, speedPc);
                    itemBonuses.SetBuff(speedDebuff, source);
                }
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #11
0
ファイル: Skill_000003E8.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(SkillUseState.normal);
            if (ShotToEnemyRestricted(source, skill))
            {
                info.SetSkillUseState(SkillUseState.invalidTarget);
                return(false);
            }
            if (NotCheckDistance(source))
            {
                info.SetSkillUseState(SkillUseState.tooFar);
                return(false);
            }

            float dmgMult = skill.GetFloatInput("dmg_mult");

            if (RollMastery(source))
            {
                dmgMult *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            string id = source.Id + skill.data.Id;



            WeaponHitInfo hit;
            var           sourceWeapon = source.Weapon();
            var           shotInfo     = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                source.MmoMessage().SendShot(EventReceiver.OwnerAndSubscriber, shotInfo);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(EventReceiver.ItemOwner, shotInfo);
                return(false);
            }
        }
コード例 #12
0
        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);
            }

            var           targetObject  = source.Target().targetObject;
            var           sourceWeapon  = source.Weapon();
            var           sourceBonuses = source.Bonuses();
            WeaponHitInfo hit;
            float         dmgMult = skill.GetFloatInput("dmg_mult");
            float         hpPc    = skill.GetFloatInput("hp_pc");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                hpPc    *= 2;
            }

            var shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                sourceWeapon.Heal(source, source.Damagable().maximumHealth *hpPc);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #13
0
ファイル: Skill_0000042D.cs プロジェクト: OlegGelezcov/neb
        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 radius  = skill.GetFloatInput("radius");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                radius  *= 2;
            }

            BaseWeapon          sourceWeapon = source.Weapon();
            MmoMessageComponent message      = source.MmoMessage();
            NebulaObject        targetObject = source.Target().targetObject;
            WeaponHitInfo       hit;

            Hashtable shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                message.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                ConcurrentDictionary <string, Item> targets = GetTargets(source, targetObject, radius);
                int counter = 0;
                foreach (var pTarget in targets)
                {
                    var shot2 = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);
                    message.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot2);
                    counter++;
                    if (counter == 2)
                    {
                        break;
                    }
                }
                return(true);
            }
            else
            {
                message.SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #14
0
ファイル: Skill_0000045E.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            if (NotEnemyCheck(source, skill, info))
            {
                return(false);
            }

            var sourceWeapon = source.Weapon();
            var targetObject = source.Target().targetObject;

            float damageMult = skill.GetFloatInput("dmg_mult");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                damageMult *= 2;
            }

            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, damageMult);

            if (hit.normalOrMissed)
            {
                Vector3 center         = (source.transform.position + targetObject.transform.position) * 0.5f;
                float   radius         = source.transform.DistanceTo(targetObject.transform) * 0.5f;
                var     skillComponent = source.GetComponent <Skill_0000045E_Component>();
                if (skillComponent == null)
                {
                    skillComponent = source.AddComponent <Skill_0000045E_Component>();
                }

                skillComponent.SetSkill(center, radius, skill.data);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #15
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();

            info.SetSkillUseState(Common.SkillUseState.normal);

            float healMult = skill.GetFloatInput("heal_mult");

            float radius = skill.GetFloatInput("radius");

            var weapon = source.Weapon();

            float damage = weapon.GetDamage(false).totalDamage;

            float totalHealing = healMult * damage;


            var items = GetNearestFriends(source, radius); //GetHealTargets(source, source, radius);

            //if(items.Count == 0 ) {
            //    return false;
            //}
            int count = items.Count;

            if (count == 0)
            {
                count = 1;
            }

            float healPerItem = totalHealing / items.Count;

            bool mastery = RollMastery(source);

            if (mastery)
            {
                healPerItem *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            var message = source.MmoMessage();

            foreach (var pitem in items)
            {
                var heal = weapon.Heal(pitem.Value, healPerItem, skill.data.Id);
                message.SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
            }

            return(true);
        }
コード例 #16
0
ファイル: Skill_0000044C.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            if (NotEnemyCheck(source, skill, info))
            {
                return(false);
            }

            var sourceWeapon  = source.Weapon();
            var targetObject  = source.Target().targetObject;
            var targetBonuses = targetObject.Bonuses();

            float dmgMult = skill.GetFloatInput("dmg_mult");
            float hpPc    = skill.GetFloatInput("hp_pc");
            float hpTime  = skill.GetFloatInput("hp_time");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                hpTime  *= 2;
            }

            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                Buff buff = new Buff(skill.id, null, Common.BonusType.decrease_max_hp_on_pc, hpTime, hpPc);
                targetBonuses.SetBuff(buff, source);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                source.MmoMessage().SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #17
0
ファイル: Skill_00000447.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            if (NotEnemyCheck(source, skill, info))
            {
                return(false);
            }

            var targetObject  = source.Target().targetObject;
            var sourceWeapon  = source.Weapon();
            var sourceMessage = source.MmoMessage();

            float dmgMult     = skill.GetFloatInput("dmg_mult");
            float dmgAreaMult = skill.GetFloatInput("dmg_area_mult");
            float radius      = skill.GetFloatInput("radius");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult     *= 2;
                dmgAreaMult *= 2;
            }

            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                sourceMessage.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                var items = GetTargets(source, targetObject, radius);
                foreach (var pItem in items)
                {
                    var           item = pItem.Value;
                    WeaponHitInfo hit2;
                    var           shot2 = sourceWeapon.Fire(item, out hit2, skill.data.Id, dmgAreaMult);
                    if (hit2.normalOrMissed)
                    {
                        sourceMessage.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot2);
                    }
                }
                return(true);
            }
            else
            {
                sourceMessage.SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #18
0
ファイル: Skill_00000406.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            bool result = base.TryCast(source, skill, out info);

            if (result)
            {
                var   damagable = source.Damagable();
                float hpPc      = skill.GetFloatInput("hp_pc");
                bool  mastery   = RollMastery(source);
                if (mastery)
                {
                    hpPc *= 2;
                }
                //damagable.RestoreHealth(source, damagable.maximumHealth * hpPc);
                var heal = source.Weapon().HealSelf(damagable.maximumHealth * hpPc, skill.idInt);
                source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
            }
            return(result);
        }
コード例 #19
0
ファイル: Skill_0000044B.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            if (NotEnemyCheck(source, skill, info))
            {
                return(false);
            }

            var sourceWeapon    = source.Weapon();
            var targetObject    = source.Target().targetObject;
            var targetDamagable = targetObject.Damagable();
            var sourceMessage   = source.MmoMessage();

            float dmgMult      = skill.GetFloatInput("dmg_mult");
            float timedDmgMult = skill.GetFloatInput("timed_dmg_mult");
            float timedDmgTime = skill.GetFloatInput("dmg_time");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
            }

            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                var timedDamage = sourceWeapon.GenerateDamage().totalDamage *timedDmgMult / timedDmgTime;
                targetDamagable.SetTimedDamage(timedDmgTime, timedDamage, sourceWeapon.myWeaponBaseType, skill.idInt);
                sourceMessage.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            else
            {
                sourceMessage.SendShot(Common.EventReceiver.ItemOwner, shot);
                return(false);
            }
        }
コード例 #20
0
ファイル: Skill_00000416.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(Common.SkillUseState.normal);

            float hpPc      = skill.GetFloatInput("hp_pc");
            float hpPcTimed = skill.GetFloatInput("hp_pc_timed");
            float hpTime    = skill.GetFloatInput("hp_time");

            var   damagable       = source.Damagable();
            float maxHealth       = damagable.maximumHealth;
            float hpInstance      = hpPc * maxHealth;
            float hpRestorePerSec = hpPcTimed * maxHealth / hpTime;

            string id = source.Id + skill.data.Id.ToString();

            bool mastery = RollMastery(source);

            if (mastery)
            {
                hpInstance      *= 2;
                hpTime          *= 2;
                hpRestorePerSec *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }


            //damagable.RestoreHealth(source, hpInstance);
            source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, source.Weapon().HealSelf(hpInstance, skill.idInt));

            damagable.SetRestoreHPPerSec(hpRestorePerSec, hpTime, id);

            return(true);
        }
コード例 #21
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(Common.SkillUseState.normal);

            bool castOnTarget = true;

            if (source.Target().hasTarget)
            {
                if (FriendTargetInvalid(source))
                {
                    info.SetSkillUseState(Common.SkillUseState.invalidTarget);
                    //return false;
                    castOnTarget = false;
                }
                else
                {
                    if (NotCheckDistance(source))
                    {
                        info.SetSkillUseState(Common.SkillUseState.tooFar);
                        //return false;
                    }
                    castOnTarget = false;
                }
            }
            else
            {
                castOnTarget = false;
            }



            float healMult  = skill.GetFloatInput("heal_mult");
            var   weapon    = source.Weapon();
            float damage    = weapon.GetDamage().totalDamage;
            float healValue = damage * healMult;

            bool mastery = RollMastery(source);

            if (mastery)
            {
                healValue *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            if (castOnTarget)
            {
                //firtst heal friend
                var heal = source.Weapon().Heal(source.Target().targetObject, healValue, skill.data.Id);
                source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
            }

            //second heal self
            var selfHeal = source.Weapon().HealSelf(healValue, skill.idInt);

            source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, selfHeal);

            return(true);
        }
コード例 #22
0
ファイル: Skill_0000044D.cs プロジェクト: OlegGelezcov/neb
        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);
        }
コード例 #23
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(SkillUseState.normal);

            float odMult = skill.GetFloatInput("od_mult");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                odMult *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            var sourceTarget = source.Target();

            if (sourceTarget.targetObject)
            {
                var targetObject = sourceTarget.targetObject;

                var targetCharacter = targetObject.Character();
                if (targetCharacter)
                {
                    var relation = source.Character().RelationTo(targetCharacter);

                    if (relation == Common.FractionRelation.Friend)
                    {
                        var sourceWeapon = source.Weapon();

                        if (source.transform.DistanceTo(targetObject.transform) <= odMult * sourceWeapon.optimalDistance)
                        {
                            source.MmoMessage().StartJumpToPosition(targetObject.transform.position, skill.data.Id);

                            return(true);
                        }
                        else
                        {
                            info.SetSkillUseState(SkillUseState.tooFar);
                        }
                    }
                    else
                    {
                        info.SetSkillUseState(SkillUseState.invalidTarget);
                    }
                }
                else
                {
                    info.SetSkillUseState(SkillUseState.invalidTarget);
                }
            }
            else
            {
                info.SetSkillUseState(SkillUseState.invalidTarget);
            }
            return(false);
        }
コード例 #24
0
ファイル: Skill_00000407.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(SkillUseState.normal);

            if (ShotToEnemyRestricted(source, skill))
            {
                info.SetSkillUseState(SkillUseState.invalidTarget);
                return(false);
            }

            if (NotCheckDistance(source))
            {
                info.SetSkillUseState(SkillUseState.tooFar);
                return(false);
            }

            float hp_pc     = skill.data.Inputs.Value <float>("hp_pc");
            float hp_radius = skill.data.Inputs.Value <float>("hp_radius");
            float dmgMult   = skill.data.Inputs.Value <float>("dmg_mult");


            var sourceWeapon    = source.GetComponent <BaseWeapon>();
            var sourceChar      = source.GetComponent <CharacterObject>();
            var sourceDamagable = source.GetComponent <DamagableObject>();

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult *= 2;
                hp_pc   *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            WeaponHitInfo hit;
            var           shotInfo = sourceWeapon.GetComponent <BaseWeapon>().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 (source.transform.DistanceTo(it.transform) <= hp_radius)
                        {
                            if (sourceChar.RelationTo(it.GetComponent <CharacterObject>()) == FractionRelation.Friend)
                            {
                                return(true);
                            }
                        }
                    }
                    return(false);
                });

                float hp = hp_pc * sourceDamagable.maximumHealth;

                var sourceMmoMessage = source.MmoMessage();
                foreach (var p in items)
                {
                    /*
                     * var d = p.Value.GetComponent<DamagableObject>();
                     * d.RestoreHealth(source, hp);*/
                    //d.SetHealth(d.health + hp);
                    var heal = sourceWeapon.Heal(p.Value, hp, skill.idInt);
                    sourceMmoMessage.SendHeal(EventReceiver.OwnerAndSubscriber, heal);

                    info.Add(p.Value.Id, p.Value.Type);
                }

                return(true);
            }
            return(false);
        }
コード例 #25
0
ファイル: Skill_0000042E.cs プロジェクト: OlegGelezcov/neb
        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);
            }
        }
コード例 #26
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(SkillUseState.normal);
            if (ShotToEnemyRestricted(source, skill))
            {
                info.SetSkillUseState(SkillUseState.invalidTarget);
                return(false);
            }
            if (NotCheckDistance(source))
            {
                info.SetSkillUseState(SkillUseState.tooFar);
                return(false);
            }

            var sourceWeapon = source.Weapon();
            var sourceTarget = source.Target();

            var targetBonuses = sourceTarget.targetObject.Bonuses();

            if (!sourceTarget)
            {
                return(false);
            }
            if (!sourceTarget.targetObject)
            {
                return(false);
            }
            var targetShip = sourceTarget.targetObject.GetComponent <BaseShip>();

            if (!targetShip)
            {
                return(false);
            }

            float targetResistance = sourceTarget.targetObject.GetComponent <BaseShip>().commonResist;
            float dmgMult          = skill.GetFloatInput("dmg_mult");
            float resistTime       = skill.GetFloatInput("resist_time");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult    *= 2;
                resistTime *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            WeaponHitInfo hit;
            var           shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                Buff resistDebuff = new Buff(skill.data.Id.ToString(), null, Common.BonusType.decrease_resist_on_cnt, resistTime, targetResistance);
                targetBonuses.SetBuff(resistDebuff, source);
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
                return(true);
            }
            return(false);
        }
コード例 #27
0
ファイル: Skill_00000410.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(Common.SkillUseState.normal);

            //if(!CheckForHealAlly(source)) {
            //    info.SetSkillUseState(Common.SkillUseState.invalidTarget);
            //    return false;
            //}
            //if(NotCheckDistance(source)) {
            //    info.SetSkillUseState(Common.SkillUseState.tooFar);
            //    return false;
            //}

            if (!source)
            {
                info.SetSkillUseState(Common.SkillUseState.invalidTarget);
                return(false);
            }

            float healMult     = skill.GetFloatInput("heal_mult");
            float healAreaMult = skill.GetFloatInput("area_heal");
            float radius       = skill.GetFloatInput("radius");

            float damage   = source.Weapon().GetDamage().totalDamage;
            float selfHeal = damage * healMult;
            float areaHeal = damage * healAreaMult;

            bool mastery = RollMastery(source);

            if (mastery)
            {
                info.SetMastery(true);
                selfHeal *= 2;
                areaHeal *= 2;
            }
            else
            {
                info.SetMastery(false);
            }

            var weapon  = source.Weapon();
            var message = source.MmoMessage();

            foreach (var friend in GetNearestFriends(source, radius))
            {
                if (friend.Value.Id == source.Id)
                {
                    message.SendHeal(Common.EventReceiver.OwnerAndSubscriber, weapon.HealSelf(selfHeal, skill.idInt));
                }
                else
                {
                    message.SendHeal(Common.EventReceiver.OwnerAndSubscriber, weapon.Heal(friend.Value, areaHeal, skill.idInt));
                }
            }
            return(true);

            /*
             * var weapon = source.Weapon();
             * var heal = weapon.Heal(source.Target().targetObject, targetHeal, skill.data.Id);
             *
             * var message = source.MmoMessage();
             * message.SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
             *
             * var items = GetHealTargets(source, source.Target().targetObject, radius);
             * foreach(var pitem in items) {
             *  var additionalHeal = weapon.Heal(pitem.Value, areaHeal);
             *  message.SendHeal(Common.EventReceiver.OwnerAndSubscriber, additionalHeal);
             * }
             * return true;*/
        }
コード例 #28
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();

            float dmgMult         = skill.GetFloatInput("dmg_mult");
            float dmgTimedMult    = skill.GetFloatInput("dmg_timed_mult");
            float time            = skill.GetFloatInput("time");
            var   sourceCharacter = source.Character();
            var   sourceRaceable  = source.Raceable();

            info.SetSkillUseState(SkillUseState.normal);
            if (ShotToEnemyRestricted(source, skill))
            {
                info.SetSkillUseState(SkillUseState.invalidTarget);
                return(false);
            }
            if (NotCheckDistance(source))
            {
                info.SetSkillUseState(SkillUseState.tooFar);
                return(false);
            }

            WeaponHitInfo hit;

            var   sourceWeapon = source.Weapon();
            float baseDamage   = sourceWeapon.GetDamage().totalDamage;
            float timedDamage  = baseDamage * dmgTimedMult;

            //float secondDamage = baseDamage * dmgAreaMult;

            bool mastery = RollMastery(source);

            if (mastery)
            {
                dmgMult     *= 2;
                timedDamage *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            var shot = source.Weapon().Fire(out hit, skill.data.Id, dmgMult);

            if (hit.normalOrMissed)
            {
                source.MmoMessage().SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);

                source.Target().targetObject.Damagable().SetTimedDamage(time, timedDamage / time, sourceWeapon.myWeaponBaseType, skill.idInt);

                /*
                 * WeaponDamage sInpWeapDmg = new WeaponDamage(sourceWeapon.myWeaponBaseType);
                 * sInpWeapDmg.SetBaseTypeDamage(secondDamage);
                 * InputDamage inpDamage = new InputDamage(source, sInpWeapDmg);
                 * if(mastery) {
                 *  inpDamage.Mult(2);
                 *  //inpDamage.SetDamage(inpDamage.damage * 2);
                 * }
                 * foreach(var pitem in GetTargets(source, source.Target().targetObject, radius)) {
                 *  pitem.Value.Damagable().ReceiveDamage(inpDamage);
                 * }*/
                return(true);
            }

            return(false);
        }
コード例 #29
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            info.SetSkillUseState(Common.SkillUseState.normal);

            bool castOnTarget = true;

            if (source.Target().hasTarget)
            {
                if (FriendTargetInvalid(source))
                {
                    castOnTarget = false;
                }
                else
                {
                    if (NotCheckDistance(source))
                    {
                        info.SetSkillUseState(Common.SkillUseState.tooFar);
                        return(false);
                    }
                }
            }
            else
            {
                castOnTarget = false;
            }

            float radius   = skill.GetFloatInput("radius");
            float healMult = skill.GetFloatInput("heal_mult");
            float dmgMult  = skill.GetFloatInput("dmg_mult");

            bool mastery = RollMastery(source);

            if (mastery)
            {
                healMult *= 2;
                dmgMult  *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            NebulaObject enemyCenterObj = null;
            float        healVal        = source.Weapon().GetDamage().totalDamage;

            if (castOnTarget)
            {
                var tObj = source.Target().targetObject;

                var heal = source.Weapon().Heal(tObj, healMult * healVal, skill.idInt);
                source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
                var nearestFriend = GetNearestFriend(tObj, source, radius);
                info.Add((int)SPC.Var1, new Hashtable {
                    { (int)SPC.ItemId, tObj.Id }, { (int)SPC.ItemType, tObj.Type }
                });


                if (nearestFriend != null)
                {
                    heal = source.Weapon().Heal(nearestFriend, healMult * healVal, skill.idInt);
                    source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
                    info.Add((int)SPC.Var2, new Hashtable {
                        { (int)SPC.ItemId, nearestFriend.Id }, { (int)SPC.ItemType, nearestFriend.Type }
                    });
                }
                enemyCenterObj = source.Target().targetObject;
            }
            else
            {
                var heal = source.Weapon().HealSelf(healVal, skill.idInt);
                source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
                info.Add((int)SPC.Var1, new Hashtable {
                    { (int)SPC.ItemId, source.Id }, { (int)SPC.ItemType, source.Type }
                });

                var nearestFriend = GetNearestFriend(source, source, radius);
                if (nearestFriend != null)
                {
                    heal = source.Weapon().Heal(nearestFriend, healMult * healVal, skill.idInt);
                    source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
                    info.Add((int)SPC.Var2, new Hashtable {
                        { (int)SPC.ItemId, nearestFriend.Id }, { (int)SPC.ItemType, nearestFriend.Type }
                    });
                }
                enemyCenterObj = source;
            }

            var sWeapon  = source.Weapon();
            var sMessage = source.MmoMessage();

            foreach (var enemy in GetNearestEnemies(enemyCenterObj, source, radius))
            {
                WeaponHitInfo hit;
                var           fire = sWeapon.Fire(enemy.Value, out hit, skill.idInt, dmgMult);
                sMessage.SendShot(Common.EventReceiver.OwnerAndSubscriber, fire);
                log.InfoFormat("send fire to object {0}->{1}".Olive(), enemy.Value.Id, enemy.Value.getItemType());
            }
            //var weapon = source.Weapon();
            //var message = source.MmoMessage();
            //var targetObject = source.Target().targetObject;

            //var healValue = weapon.GetDamage(false).totalDamage * healMult;
            //var firstHeal = weapon.Heal(targetObject, healValue, skill.data.Id);
            //message.SendHeal(Common.EventReceiver.OwnerAndSubscriber, firstHeal);

            //var healTargets = GetHealTargets(source, targetObject, radius);
            //foreach(var pHealTarget in healTargets) {
            //    var secondHeal = weapon.Heal(pHealTarget.Value, healValue, skill.data.Id);
            //    message.SendHeal(Common.EventReceiver.OwnerAndSubscriber, secondHeal);
            //    break;
            //}

            //var dmgTargets = GetTargets(source, targetObject, radius);
            //foreach(var pDmgTarget in dmgTargets) {
            //    WeaponHitInfo hit;
            //    var shot = weapon.Fire(pDmgTarget.Value, out hit, skill.data.Id, dmgMult);
            //    message.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);
            //}
            return(true);
        }
コード例 #30
0
ファイル: Skill_0000040F.cs プロジェクト: OlegGelezcov/neb
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();

            info.SetSkillUseState(Common.SkillUseState.normal);

            bool castOnTarget = true;

            if (source.Target().hasTarget)
            {
                if (FriendTargetInvalid(source))
                {
                    info.SetSkillUseState(Common.SkillUseState.invalidTarget);
                    //return false;
                    castOnTarget = false;
                }
                else
                {
                    if (NotCheckDistance(source))
                    {
                        info.SetSkillUseState(Common.SkillUseState.tooFar);
                        //return false;
                        castOnTarget = false;
                    }
                }
            }
            else
            {
                castOnTarget = false;
            }

            float healMult   = skill.GetFloatInput("heal_mult");
            float resistPc   = skill.GetFloatInput("resist_pc");
            float resistTime = skill.GetFloatInput("resist_time");


            float damage  = source.Weapon().GetDamage().totalDamage;
            float healing = damage * healMult;

            bool mastery = RollMastery(source);

            if (mastery)
            {
                healing    *= 2;
                resistTime *= 2;
                info.SetMastery(true);
            }
            else
            {
                info.SetMastery(false);
            }

            NebulaObject targetObject = null;

            if (castOnTarget)
            {
                targetObject = source.Target().targetObject;
                var heal = source.Weapon().Heal(targetObject, healing, skill.data.Id);
                source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal);
                Buff resistBuff = new Buff(skill.data.Id.ToString(), null, Common.BonusType.increase_resist_on_cnt, resistTime, resistPc);
                targetObject.Bonuses().SetBuff(resistBuff, source);
            }

            targetObject = source;
            var heal2 = source.Weapon().Heal(targetObject, healing, skill.data.Id);

            source.MmoMessage().SendHeal(Common.EventReceiver.OwnerAndSubscriber, heal2);
            Buff resistBuff2 = new Buff(skill.data.Id.ToString(), null, Common.BonusType.increase_resist_on_cnt, resistTime, resistPc);

            targetObject.Bonuses().SetBuff(resistBuff2, source);


            return(true);
        }