コード例 #1
0
ファイル: PlayerSkill.cs プロジェクト: OlegGelezcov/neb
 public SkillExecutor GetExecutor()
 {
     if (!mCachedExecutors.ContainsKey(data.Id))
     {
         mCachedExecutors.Add(data.Id, SkillExecutor.Factory(data.Id)());
     }
     return(mCachedExecutors[data.Id]);
     // return SkillExecutor.Executor(data.Id);
 }
コード例 #2
0
    public ActiveSkill(string id, string name, int amount, string executorTypeName)
    {
        _id     = id;
        _name   = name;
        _amount = amount;
        Type executorType = Type.GetType(executorTypeName);

        _executor = (SkillExecutor)Activator.CreateInstance(executorType ?? throw new Exception());
    }
コード例 #3
0
        public override void Start()
        {
            base.Start();
            mWeapon    = RequireComponent <BaseWeapon>();
            mMessage   = RequireComponent <MmoMessageComponent>();
            mCharacter = RequireComponent <CharacterObject>();
            mTarget    = RequireComponent <PlayerTarget>();
            mMovable   = GetComponent <MovableObject>();
            m_Skills   = GetComponent <PlayerSkills>();
            m_Bonuses  = GetComponent <PlayerBonuses>();

            mChestLiveDuration = nebulaObject.world.Resource().ServerInputs.GetValue <float>("chest_life");
            //log.InfoFormat("chest life = {0}", mChestLiveDuration);
            mShotTimer = m_ShotCooldown;

            mDead = false;

            combatAIType = aiType as CombatAIType;
            if (combatAIType == null)
            {
                log.Error("CombatBasseAI must have CombatAIType, but not simple AIType");
            }
            mShipWeapon = GetComponent <ShipWeapon>();
            if (Rand.Int() % 2 == 0)
            {
                mMovNearTargetType = MovingNearTarget.Circle;
            }
            else
            {
                mMovNearTargetType = MovingNearTarget.LIne;
            }
            mStartPosition = nebulaObject.transform.position;

#if USE_SKILLS
            //--------------------------TESTING------------------------------------
            var ship = GetComponent <BaseShip>();
            if (ship)
            {
                string sSkill = skills[Rand.Int(skills.Count - 1)];
                ship.shipModel.Slot(ShipModelSlotType.CB).Module.SetSkill(SkillExecutor.SkilIDFromHexString(sSkill));
                mSkills = GetComponent <PlayerSkills>();
                mSkills.UpdateSkills(ship.shipModel);
            }
            //--------------------------------------------------------------------
#endif

            mBotObject = GetComponent <BotObject>();
            SetupSkills();
        }
コード例 #4
0
        public override void Load(IController hud)
        {
            base.Load(hud);

            settings      = new Settings(Hud);
            skillExecutor = new SkillExecutor(settings);

            settingsThread = new Thread(() =>
            {
                settings.ShowDialog();
            });
            settingsThread.SetApartmentState(ApartmentState.STA);
            settingsThread.Start();

            watermark = Hud.Render.CreateFont("tahoma", 8, 255, 255, 0, 0, true, false, false);
        }
コード例 #5
0
ファイル: PlayerSkills.cs プロジェクト: OlegGelezcov/neb
        //message handler on critical hit
        public void OnCriticalHit()
        {
            // log.InfoFormat("Message: OnCriticalHit yellow");
            if (HasSkill(SkillExecutor.SkilIDFromHexString(INCREASE_MAX_HP_FOR_CRIT_ID)))
            {
                var skill = GetSkillById(SkillExecutor.SkilIDFromHexString(INCREASE_MAX_HP_FOR_CRIT_ID));
                if (skill != null)
                {
                    if (skill.isOn)
                    {
                        float hpPc       = skill.GetDataInput <float>("hp_pc", 0f);
                        float hpTime     = skill.GetDataInput <float>("hp_time", 0f);
                        int   stackCount = skill.GetDataInput <int>("stack_count", 0);

                        int buffCount = bonuses.GetBuffCountWithTag(BonusType.increase_max_hp_on_pc, INCREASE_MAX_HP_FOR_CRIT_BUFF_TAG);
                        if (buffCount < stackCount)
                        {
                            // log.InfoFormat("set buff to max hp green");
                            Buff buff = new Buff(Guid.NewGuid().ToString(), null, BonusType.increase_max_hp_on_pc, hpTime, hpPc);
                            buff.SetTag(INCREASE_MAX_HP_FOR_CRIT_BUFF_TAG);
                            bonuses.SetBuff(buff, buff.owner);
                        }
                    }
                }
            }

            if (HasSkill(m456ID))
            {
                var skill = GetSkillById(m456ID);
                if (skill.isOn)
                {
                    float dmgPc          = skill.GetFloatInput("dmg_pc");
                    float enCostPc       = skill.GetFloatInput("en_pc");
                    float time           = skill.GetFloatInput("time");
                    Buff  dmgBuff        = new Buff(skill.id, null, BonusType.increase_damage_on_pc, time, dmgPc);
                    Buff  energyCostBuff = new Buff(skill.id, null, BonusType.decrease_energy_cost_on_pc, time, enCostPc);
                    bonuses.SetBuff(dmgBuff, dmgBuff.owner);
                    bonuses.SetBuff(energyCostBuff, energyCostBuff.owner);
                }
            }
        }
コード例 #6
0
ファイル: PlayerSkills.cs プロジェクト: OlegGelezcov/neb
        public override void Start()
        {
            if (!m_StartCalled)
            {
                m_StartCalled = true;

                mPlayerShip = GetComponent <BaseShip>();
                bonuses     = GetComponent <PlayerBonuses>();
                mDamagable  = GetComponent <DamagableObject>();
                message     = GetComponent <MmoMessageComponent>();
                energy      = GetComponent <ShipEnergyBlock>();

                m439ID = SkillExecutor.SkilIDFromHexString("00000439");
                m43AID = SkillExecutor.SkilIDFromHexString("0000043A");
                m451ID = SkillExecutor.SkilIDFromHexString("00000451");
                m456ID = SkillExecutor.SkilIDFromHexString("00000456");
                m45CID = SkillExecutor.SkilIDFromHexString("0000045C");
            }
            SetBlockedProperty(false);
            started = true;
        }
コード例 #7
0
        public override void Load(IController hud)
        {
            base.Load(hud);

            settings      = new Settings(Hud);
            skillExecutor = new SkillExecutor(settings);

            settingsThread = new Thread(() =>
            {
                settings.ShowDialog();
            });
            settingsThread.SetApartmentState(ApartmentState.STA);
            settingsThread.Start();

            watermarkEnabled  = Hud.Render.CreateFont("tahoma", 8, 255, 0, 170, 0, true, false, false);
            watermarkDisabled = Hud.Render.CreateFont("tahoma", 8, 255, 170, 0, 0, true, false, false);

            version = Hud.Render.CreateFont("tahoma", 8, 255, 227, 227, 0, false, false, false);

            activeSkillBrush   = settings.Hud.Render.CreateBrush(255, 0, 170, 0, 3.14f);
            inactiveSkillBrush = settings.Hud.Render.CreateBrush(255, 170, 0, 0, 3.14f);
        }
コード例 #8
0
ファイル: PlayerSkills.cs プロジェクト: OlegGelezcov/neb
 public void OnCriticalHeal(float critHeal)
 {
     if (bonuses != null)
     {
         float buffVal = bonuses.Value(BonusType.buff_41c);
         if (Mathf.NotEqual(buffVal, 0.0f))
         {
             int sid = SkillExecutor.SkilIDFromHexString("0000041C");
             if (HasSkill(sid))
             {
                 var skill = GetSkillById(sid);
                 (skill.GetExecutor() as Skill_0000041C).Make(nebulaObject, skill, buffVal);
             }
         }
     }
     //if(m41C.active) {
     //    var skill = GetSkillById(SkillExecutor.SkilIDFromHexString(SKILL_0000041C));
     //    if(skill != null ) {
     //        (skill.GetExecutor() as Skill_0000041C).Make(nebulaObject, skill, m41C.value);
     //    }
     //}
 }
コード例 #9
0
ファイル: PlayerSkills.cs プロジェクト: OlegGelezcov/neb
        //Check for skill "000003F9" - when give chance regenerate health when object killed, check before sending OnWasKilled
        public bool RespawnBySkill()
        {
            //log.InfoFormat("PlayerSkills.RespwanBySkill(): check blue");

            //only for players
            if (nebulaObject.IsPlayer())
            {
                int skillID = SkillExecutor.SkilIDFromHexString(RESPAWN_SKILL_ID);

                //we must have this skill and this skill is on
                if (HasSkill(skillID))
                {
                    var skill = GetSkillById(skillID);
                    if (skill.isPersistentAndActive || skill.isPassive)
                    {
                        float respawnProb   = skill.data.Inputs.GetValue <float>("resurrect_pc", 0f);
                        float regeneratedHp = skill.data.Inputs.GetValue <float>("hp_regen_pc", 0f);
                        float randomNumber  = Rand.Float01();
                        //log.InfoFormat("Respawn by skill check, respawn prob = {0:F1}, random number = {1:F1} blue", respawnProb, randomNumber);
                        if (randomNumber < respawnProb)
                        {
                            var damagable = nebulaObject.Damagable();
                            damagable.ForceSetHealth(damagable.maximumHealth * regeneratedHp);
                            nebulaObject.MmoMessage().SendResurrect();
                            return(true);
                        }
                    }
                }

                int skill417ID = SkillExecutor.SkilIDFromHexString(SKILL_00000417);
                if (HasSkill(skill417ID))
                {
                    var skill = GetSkillById(skill417ID);
                    if (skill.isPersistentAndActive || skill.isPassive)
                    {
                        float respawnProb   = skill.GetFloatInput("resurrect_pc");
                        float regeneratedHp = skill.GetFloatInput("hp_regen_pc");
                        float randomNumber  = Rand.Float01();

                        //log.InfoFormat("respawn by skill test need: {0} real: {1}", respawnProb, randomNumber);
                        if (randomNumber < respawnProb)
                        {
                            // log.InfoFormat("object was success respawned by skill 00000417 [green]");
                            var damagable = nebulaObject.Damagable();
                            damagable.ForceSetHealth(damagable.maximumHealth * regeneratedHp);
                            nebulaObject.MmoMessage().SendResurrect();
                            return(true);
                        }
                    }
                }

                int s435 = SkillExecutor.SkilIDFromHexString(SKILL_00000435);
                if (HasSkill(s435))
                {
                    var skill = GetSkillById(s435);
                    if (skill.isPersistentAndActive || skill.isPassive)
                    {
                        var resurrectProb = skill.GetFloatInput("resurrect_pc");
                        var hpPc          = skill.GetFloatInput("hp_regen_pc");
                        if (Rand.Float01() < resurrectProb)
                        {
                            var damagable = nebulaObject.Damagable();
                            damagable.ForceSetHealth(damagable.maximumHealth * hpPc);
                            nebulaObject.MmoMessage().SendResurrect();
                            return(true);
                        }
                    }
                }

                int s453 = SkillExecutor.SkilIDFromHexString(SKILL_00000453);
                if (HasSkill(s453))
                {
                    var skill = GetSkillById(s453);
                    if (skill.isPersistentAndActive || skill.isPassive)
                    {
                        var resurrectProb = skill.GetFloatInput("resurrect_pc");
                        var hpPc          = skill.GetFloatInput("hp_regen_pc");
                        if (Rand.Float01() < resurrectProb)
                        {
                            var damagable = nebulaObject.Damagable();
                            damagable.ForceSetHealth(damagable.maximumHealth * hpPc);
                            nebulaObject.MmoMessage().SendResurrect();
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
コード例 #10
0
ファイル: PlayerSkills.cs プロジェクト: OlegGelezcov/neb
        /// <summary>
        /// Called when my health restored
        /// </summary>
        /// <param name="sourceObject">Object which restore health to me</param>
        /// <param name="hp">Number of hp restored</param>
        public void OnHealthRestored(NebulaObject sourceObject, float hp)
        {
            ConcurrentBag <string> removedKeys = new ConcurrentBag <string>();
            float time = Time.curtime();

            foreach (var pair in mDamageHealReceivers)
            {
                if (time > pair.Value.expireTime || (!pair.Value.target))
                {
                    removedKeys.Add(pair.Key);
                }
            }

            if (removedKeys.Count > 0)
            {
                foreach (var id in removedKeys)
                {
                    DamageReceiver old;
                    mDamageHealReceivers.TryRemove(id, out old);
                }
            }

            var character = GetComponent <CharacterObject>();
            var race      = GetComponent <RaceableObject>();

            foreach (var pair in mDamageHealReceivers)
            {
                float damage = hp * pair.Value.damagePercent;

                //pair.Value.target.ReceiveDamage(nebulaObject.Type, nebulaObject.Id, damage, character.workshop, character.level, race.race);
                if (pair.Value.target)
                {
                    WeaponHitInfo hit;
                    var           shot = nebulaObject.Weapon().Fire(pair.Value.target.nebulaObject, out hit, SkillExecutor.SkilIDFromHexString("000007D5"), damage, true, true);
                    nebulaObject.MmoMessage().SendShot(EventReceiver.OwnerAndSubscriber, shot);
                }
            }

            if (sourceObject.Id != nebulaObject.Id)
            {
                if (HasSkill(m451ID))
                {
                    var skill = GetSkillById(m451ID);
                    if (skill.isOn)
                    {
                        float resistPc   = skill.GetFloatInput("resist_pc");
                        float resistTime = skill.GetFloatInput("resist_time");
                        int   stackCount = skill.GetIntInput("stack_count");

                        if (bonuses.GetBuffCountWithTag(BonusType.increase_resist_on_pc, m451ID) < stackCount)
                        {
                            Buff buff = new Buff(Guid.NewGuid().ToString(), null, BonusType.increase_resist_on_pc, resistTime, resistPc);
                            buff.SetTag(m451ID);
                            bonuses.SetBuff(BonusType.increase_resist_on_pc, buff, buff.owner);
                        }
                    }
                }
            }
        }