コード例 #1
0
ファイル: SkillComponent.cs プロジェクト: 737871854/FireMen
    void ActivateEffect(SkillPO dataPO)
    {
        if (dataPO.Effect.Length % 3 == 0)
        {
            for (int index = 0; index < dataPO.Effect.Length;)
            {
                string effectName = dataPO.Effect[index++];
                string boneName   = dataPO.Effect[index++];
                float  lifeTime   = dataPO.Effect[index++].ToFloat();
                self.AddEffect(effectName, boneName, lifeTime);
            }
        }

        if (dataPO.TriggerSound.Length == 2)
        {
            string sound   = dataPO.TriggerSound[0];
            int    percent = dataPO.TriggerSound[1].ToInt();
            int    seed    = Random.Range(1, 10000);
            if (seed > percent)
            {
                return;
            }
            Main.SoundController.FireEvent(sound);
        }
    }
コード例 #2
0
ファイル: SkillComponent.cs プロジェクト: 737871854/FireMen
    void ActivateBulletTime(SkillPO dataPO)
    {
        if (dataPO.BulletTime.Length < 6)
        {
            return;
        }

        float         timeScale  = dataPO.BulletTime[0].ToFloat();
        float         timeDelay  = dataPO.BulletTime[1].ToFloat();
        float         bulletTime = dataPO.BulletTime[2].ToFloat();
        int           partCount  = dataPO.BulletTime[3].ToInt();
        int           partHp     = dataPO.BulletTime[4].ToInt();
        List <string> partName   = new List <string>();

        for (int index = 0; index < partCount; ++index)
        {
            partName.Add(dataPO.BulletTime[5 + index]);
        }
        self.ChangeHitting(timeScale, timeDelay, bulletTime, partHp, partName);

        if (dataPO.BulletTimeSound.Length == 2)
        {
            string sound   = dataPO.BulletTimeSound[0];
            int    percent = dataPO.BulletTimeSound[1].ToInt();
            int    seed    = Random.Range(1, 10000);
            if (seed > percent)
            {
                return;
            }
            Main.SoundController.FireEvent(sound);
        }
    }
コード例 #3
0
ファイル: SkillComponent.cs プロジェクト: 737871854/FireMen
    protected List <DelayBuffer> delayBufferList;        //延迟触发

    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name='list'>
    /// 列表.
    /// </param>
    public void Init(object obj)
    {
        self            = GetComponent <Monster>();
        delayBufferList = new List <DelayBuffer>();
        skillDic        = new Dictionary <int, SkillInfo>();
        List <int> skillList = (List <int>)obj;

        for (int index = 0; index < skillList.Count; ++index)
        {
            SkillPO dataPO = SkillData.Instance.GetSkillPO(skillList[index]);
            if (dataPO == null)
            {
                continue;
            }
            SkillInfo skill = new SkillInfo();
            skill.dataPO    = dataPO;
            skill.coolDown  = 0.0f;
            skill.usedCount = dataPO.TriggerTime;
            skillDic.Add(skillList[index], skill);
        }
    }
コード例 #4
0
ファイル: SkillComponent.cs プロジェクト: 737871854/FireMen
    void ActivateBuffer(SkillPO dataPO)
    {
        // 固定伤害输出
        if (dataPO.IsHarm == 1)
        {
            if (dataPO.FixedDamage > 0)
            {
                self.OnAttrChange(AttrType.ATTR_HP, -dataPO.FixedDamage);
            }

            if (dataPO.PercentDamage > 0)
            {
                self.OnAttrChange(AttrType.ATTR_HP, (int)(self.HP * ((float)dataPO.PercentDamage / -10000.0f)));
            }
        }

        // Buffer效果
        if (dataPO.CanTriggerBuff > 0)
        {
            for (int index = 0; index < dataPO.MethodList.Length; ++index)
            {
                self.AddBuffer(dataPO.MethodList[index]);
            }
        }

        // 震频效果(目前震频的幅度和速度参数暂时先固定,看需求是否从技能表中配置后读取)
        if (dataPO.UseShake.Length > 0)
        {
            int shakeType = dataPO.UseShake[0].ToInt();
            if (shakeType > 0)
            {
                EventDispatcher.TriggerEvent(GameEventDef.EVNET_PLAY_SHAKE, shakeType);
                if (dataPO.UseShake.Length == 2)
                {
                    string    shakeBindName   = dataPO.UseShake[1];
                    Transform transformObject = self.FindParentBone(shakeBindName);
                    if (transformObject != null)
                    {
                        EventDispatcher.TriggerEvent(GameEventDef.EVNET_PLAY_CRACK_SCREEN, transformObject.position);
                    }
                }
                else
                {
                    EventDispatcher.TriggerEvent(GameEventDef.EVNET_PLAY_CRACK_SCREEN, self.transform.position);
                }

                Main.SoundController.PlayCrashScreenSound();
            }
        }

        if (dataPO.DamageLifeTime > 0)
        {
            EventDispatcher.TriggerEvent(GameEventDef.EVNET_DAMAGE_LIFE_TIME, dataPO.DamageLifeTime);
        }

        // 是否自爆
        if (dataPO.ImpactBomb == 1)
        {
            self.SetBodyActive(false);
        }

        // 召唤怪物
        if (dataPO.SummonMonsterList.Length % 6 == 0)
        {
            for (int index = 0; index < dataPO.SummonMonsterList.Length;)
            {
                int    monsterId = dataPO.SummonMonsterList[index++].ToInt();
                float  posX      = dataPO.SummonMonsterList[index++].ToFloat();
                float  posY      = dataPO.SummonMonsterList[index++].ToFloat();
                float  posZ      = dataPO.SummonMonsterList[index++].ToFloat();
                string bindName  = dataPO.SummonMonsterList[index++];
                float  delay     = dataPO.SummonMonsterList[index++].ToFloat() / 1000.0f;
                if (bindName != "None")
                {
                    Transform transformObject = self.FindParentBone(bindName);
                    if (transformObject == null)
                    {
                        // 不合法的绑定点
                        continue;
                    }
                    SceneManager.instance.CreateMonster(monsterId, Vector3.zero, transformObject, delay);
                }
                else
                {
                    SceneManager.instance.CreateMonster(monsterId, new Vector3(posX, posY, posZ), null, delay);
                }
            }
        }
    }