Ejemplo n.º 1
0
        private void UpdateSkillDesc(ActiveSkillData skillData)
        {
            KActiveSkill currSkillSetting = KConfigFileManager.GetInstance().GetActiveSkill(skillData.SkillID, skillData.Level);
            KActiveSkill nextSkillSetting = KConfigFileManager.GetInstance().GetActiveSkill(skillData.SkillID, skillData.Level + 1);

            if (currSkillSetting != null)
            {
                skillNameTxt.text = "<fff1cc>" + currSkillSetting.Text + "<->";
                curDescTxt.text   = "<949393>" + currSkillSetting.Desc + "<->";
            }
            if (nextSkillSetting != null)
            {
                nextDescTxt.text    = "<ebba10>" + nextSkillSetting.Desc + "<->";
                reqLevelTxt.text    = "<ebba10>" + nextSkillSetting.LearnLevel + "<->";
                reqMoneyTxt.text    = "<ebba10>" + nextSkillSetting.CostMoney + "<->";
                proBarSp.fillAmount = ((float)skillData.SkillExp) / nextSkillSetting.MaxSkillExp;
            }
            else
            {
                nextDescTxt.text    = "<ff0000>已达最高等级<->";
                reqLevelTxt.text    = "<ff0000>--<->";
                reqMoneyTxt.text    = "<ff0000>--<->";
                proBarSp.fillAmount = 1.0f;
            }
        }
Ejemplo n.º 2
0
        public void OnSkillEffectOp(KProtoBuf buf, bool fristTime)
        {
            S2C_SKILL_EFFECT respond    = buf as S2C_SKILL_EFFECT;
            KAttackEvent     kaEvt      = (KAttackEvent)respond.byAttackEvent;
            SceneEntity      killerHero = GetSceneObject(respond.wCasterID) as SceneEntity;
            SceneEntity      targetHero = GetSceneObject(respond.wTargetHeroID) as SceneEntity;

            if (null == targetHero)
            {
                return;
            }
            if (!fristTime && null == targetHero)
            {
                return;
            }
            targetHero.property.lastHitSkillId  = respond.wSkillID;
            targetHero.property.lastAttackEvent = respond.byAttackEvent;
            if (null != targetHero.AnimCmp)
            {
                targetHero.AnimCmp.ResetFightingState();
            }
            KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(targetHero.property.lastHitSkillId, 1);

            if (fristTime && null != killerHero)
            {
                KActiveSkill activeSkill = KConfigFileManager.GetInstance().GetActiveSkill(targetHero.property.lastHitSkillId, 1);
                if (null != activeSkill)
                {
                    if (activeSkill.ClientCache)
                    {
                        if (null != killerHero.ActiveAction)
                        {
                            killerHero.ActiveAction.AddSkillEffectMessage(respond, Time.realtimeSinceStartup);
                            return;
                        }
                    }
                    else if (null != killerHero && skillDisplay.HitDelayTimeScale > 0.00001f)
                    {
                        float distance = Vector3.Distance(killerHero.Position, targetHero.Position);
                        float _time    = distance * skillDisplay.HitDelayTimeScale;
                        DelayCallManager.instance.CallFunction(OnSkillEffectParam, _time, buf, false, targetHero, targetHero.property.hp - (int)respond.wDamage, Time.realtimeSinceStartup);
                        return;
                    }
                }
            }
            if (fristTime)
            {
                targetHero.property.fightHp           = (int)(targetHero.property.hp - respond.wDamage);
                targetHero.property.updateFightHpTime = Time.realtimeSinceStartup;
            }
            if (targetHero.property.heroObjType == KHeroObjectType.hotPlayer)
            {
                if (null != targetHero.AnimCmp)
                {
                    targetHero.AnimCmp.ResetFightingState();
                }
            }
            targetHero.Action.PlayFightEffect(respond.wSkillID, (int)respond.wDamage, respond.byAttackEvent, killerHero);
        }
Ejemplo n.º 3
0
        public void DefaultSkill()
        {
            ushort          job            = PlayerManager.GetInstance().MajorPlayer.Job;
            uint            defaultSkillId = GetDefaultSkillId(job);
            ActiveSkillData skillData      = new ActiveSkillData();
            KActiveSkill    skillSetting   = KConfigFileManager.GetInstance().GetActiveSkill(defaultSkillId, 1);

            skillData.SkillID = (ushort)defaultSkillId;
            ActiveSkillDict.Add(skillData.SkillID, skillData);
            skillData.cdTicket.SetCD(skillSetting.SkillCD);
        }
Ejemplo n.º 4
0
        public void CommonAttack(SceneEntity hero)
        {
            OperaAttack action = new OperaAttack(Owner);

            action.IsPushStack = true;
            KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill((uint)Owner.Job, 1);

            if (null == skill)
            {
                return;
            }
            action.deltaSpace = ((float)skill.CastRange) / 100f;
            action.target     = hero;
            Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
        }
Ejemplo n.º 5
0
        public void MoveAndSkill(ushort skillid, SceneEntity target)
        {
            OperaSkill action = new OperaSkill(Owner);

            Owner.property.target = target;
            EventDispatcher.GameWorld.DispatchEvent(ControllerCommand.CHANGE_TARGET);

            action.target      = target;
            action.IsPushStack = true;
            action.skillId     = skillid;
            KActiveSkill skill     = KConfigFileManager.GetInstance().GetActiveSkill((uint)skillid, 1);
            float        CastRange = ((float)skill.CastRange) / 100f;

            CastRange         = Mathf.Max(1.5f, CastRange);
            action.deltaSpace = CastRange;
            Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
        }
Ejemplo n.º 6
0
        public bool RequestSkill(uint skillId)
        {
            KActiveSkill _skill = KConfigFileManager.GetInstance().GetActiveSkill(skillId, 1);

            ticker.SetCD(_skill.AllSkillCD);
            if (ticker.IsEnable())
            {
                ActiveSkillData skill = GetActiveSkillVOByID(skillId);
                if (null == skill)
                {
                    return(false);
                }
                if (skill.cdTicket.IsEnable())
                {
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 7
0
        public void SetSkillList(KNMSkillDataList skillList)
        {
            ActiveSkillDict.Clear();
            activeSkillList = new uint[skillList.ActiveSkillData.Count];
            int index = 0;

            foreach (KNMActiveSkillData nmactiveSkillData in skillList.ActiveSkillData)
            {
                ActiveSkillData activeSkillData = new ActiveSkillData();
                activeSkillData.Level    = nmactiveSkillData.SkillLevel;
                activeSkillData.SkillExp = nmactiveSkillData.SkillExp;
                activeSkillData.SkillID  = nmactiveSkillData.SkillID;
                ActiveSkillDict.Add(activeSkillData.SkillID, activeSkillData);
                activeSkillList[index++] = nmactiveSkillData.SkillID;
                KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill(activeSkillData.SkillID, activeSkillData.Level);
                activeSkillData.cdTicket.SetCD(skill.SkillCD);
            }


            PassiveSkillDict.Clear();
            foreach (KNMPassiveSkillData nmapassiveSkillData in skillList.PassiveSkillData)
            {
                PassiveSkillData passiveSkillData = new PassiveSkillData();
                passiveSkillData.Level   = nmapassiveSkillData.SkillLevel;
                passiveSkillData.SkillID = nmapassiveSkillData.SkillID;

                KPassiveSkill passiveSkillSetting = KConfigFileManager.GetInstance().GetPassiveSkill(passiveSkillData.SkillID, 1);
                if (passiveSkillSetting.SkillType > 0)
                {
                    PassiveSkillDict.Add(passiveSkillData.SkillID, passiveSkillData);
                }
                else
                {
                    TalentSkillDict.Add(passiveSkillData.SkillID, passiveSkillData);
                }
            }
        }
Ejemplo n.º 8
0
        //播放攻击动画
        public void PlayFightAnimation(SceneEntity target, uint skillId, Vector3 position)
        {
            Owner.AnimCmp.ResetFightingState();
            uint          jobId        = Owner.TabID;
            KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(skillId, jobId);
            KActiveSkill  skillSetting = KConfigFileManager.GetInstance().GetActiveSkill(skillId, 1);

            AnimActionParam param = new AnimActionParam();

            param.skillId = (ushort)skillId;
            if (null != target)
            {
                KingSoftCommonFunction.LootAt(Owner.gameObject, target.gameObject);
                param.targetId = target.property.Id;
            }
            param.position = position;
            param.target   = target;
            if (null != Owner.property.activeAction)
            {
                Owner.property.activeAction.FinishImmediate();
            }
            if (skillDisplay.SkillType.CompareTo("MOVINGAOE") == 0)
            {
                SkillMovingAOE(param, skillDisplay, false);
            }
            else if (skillDisplay.SkillType.CompareTo("ANIM") == 0)
            {
                SkillSelf(param, skillDisplay, false);
            }
            else if (skillDisplay.SkillType.CompareTo("RUSH") == 0)
            {
                SkillRush(param, skillDisplay, false);
            }
            else if (skillDisplay.SkillType.CompareTo("SHOT") == 0)
            {
            }
        }
Ejemplo n.º 9
0
        public void OnSkill(ushort skillId)
        {
            AnimationComponent.OperaWalking = false;
            if (SkillLogic.GetInstance().RequestSkill(skillId))
            {
                KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(skillId, (uint)SceneLogic.GetInstance().MainHero.Job);

                if (skillDisplay.Opera.CompareTo("NONE") == 0)
                {
                    SceneLogic.GetInstance().MainHero.Action.SendSkill(skillId);
                }
                else if (skillDisplay.Opera.CompareTo("TARGET") == 0)
                {
                    if (SceneLogic.GetInstance().MainHero.property.target != null && SceneLogic.GetInstance().MainHero.property.target.property.isCanAttack&& !SceneLogic.GetInstance().MainHero.property.target.property.isDeaded)
                    {
                        SceneLogic.GetInstance().MainHero.Action.MoveAndSkill(skillId, SceneLogic.GetInstance().MainHero.property.target);
                    }
                }
                else if (skillDisplay.Opera.CompareTo("DIR_RAND") == 0)
                {
                    EventRet ret  = SceneLogic.GetInstance().MainHero.DispatchEvent(ControllerCommand.TryFinishAction);
                    bool     bRet = (bool)ret.GetReturn <AnimationComponent>();
                    if (!bRet)
                    {
                        return;
                    }
                    ActiveSkillData skillVO = SkillLogic.GetInstance().GetActiveSkillVOByID(skillId);
                    KActiveSkill    skill   = KConfigFileManager.GetInstance().GetActiveSkill((uint)skillId, skillVO.Level);
                    if (null == skill)
                    {
                        return;
                    }
                    float   CastMinRange   = ((float)skill.CastMinRange) / 100f;
                    float   CastRange      = ((float)skill.CastRange) / 100f;
                    Vector3 currMousePoint = KingSoftCommonFunction.ScreenMouseToGround(SceneLogic.GetInstance().MainHero.Position);
                    currMousePoint = new Vector3(currMousePoint.x, SceneLogic.GetInstance().MainHero.Position.y, currMousePoint.z);
                    Vector3 dir = currMousePoint - SceneLogic.GetInstance().MainHero.Position;
                    dir = new Vector3(dir.x, 0, dir.z);
                    float f = Vector3.Distance(Vector3.zero, dir);
                    if (f < CastMinRange)
                    {
                        Vector3 dir2 = dir.normalized * CastMinRange;
                        currMousePoint = SceneLogic.GetInstance().MainHero.Position + dir2;
                    }
                    else if (f > CastRange)
                    {
                        Vector3 dir2 = dir.normalized * CastRange;
                        currMousePoint = SceneLogic.GetInstance().MainHero.Position + dir2;
                    }
                    Vector3 p        = KingSoftCommonFunction.NearPosition(currMousePoint);
                    Vector3 midPoint = SceneLogic.GetInstance().MainHero.Position + (p - SceneLogic.GetInstance().MainHero.Position) * 0.5f;
                    if (KingSoftCommonFunction.IsPointCanWalk(midPoint))
                    {
                        SceneLogic.GetInstance().MainHero.Action.SendSkill(skillId, p);
                    }
                }
                else if (skillDisplay.Opera.CompareTo("TARGET_DIR") == 0)
                {
                    EventRet ret  = SceneLogic.GetInstance().MainHero.DispatchEvent(ControllerCommand.TryFinishAction);
                    bool     bRet = (bool)ret.GetReturn <AnimationComponent>();
                    if (!bRet)
                    {
                        return;
                    }
                    ActiveSkillData skillVO = SkillLogic.GetInstance().GetActiveSkillVOByID(skillId);
                    KActiveSkill    skill   = KConfigFileManager.GetInstance().GetActiveSkill((uint)skillId, skillVO.Level);
                    if (null == skill)
                    {
                        return;
                    }
                    float   CastRange = 2f;
                    Vector3 currMousePoint;
                    if (SceneLogic.GetInstance().MainHero.property.target != null && SceneLogic.GetInstance().MainHero.property.target.property.isCanAttack&& !SceneLogic.GetInstance().MainHero.property.target.property.isDeaded)
                    {
                        currMousePoint = SceneLogic.GetInstance().MainHero.property.target.Position;
                    }
                    else
                    {
                        currMousePoint = KingSoftCommonFunction.ScreenMouseToGround(SceneLogic.GetInstance().MainHero.Position);
                    }

                    Vector3 dir = currMousePoint - SceneLogic.GetInstance().MainHero.Position;
                    dir = new Vector3(dir.x, 0, dir.z);
                    if (dir.x == 0 && dir.z == 0)
                    {
                        dir = new Vector3(0f, 1f, 0f);
                    }
                    float f = Vector3.Distance(Vector3.zero, dir);
                    SceneLogic.GetInstance().MainHero.Forward = dir;
                    Vector3 dir2 = dir.normalized * CastRange;
                    currMousePoint = SceneLogic.GetInstance().MainHero.Position + dir2;
                    Vector3 p = KingSoftCommonFunction.NearPosition(currMousePoint);
                    SceneLogic.GetInstance().MainHero.Action.SendSkill(skillId, p);
                }
            }
        }
Ejemplo n.º 10
0
        //升级主动技能
        public void UpgradeSkill(uint skillID, int type)
        {
            int skillIdx = 0;

            if (type == 1)
            {
                skillIdx = 0;
                ActiveSkillData activeSkillData;
                if (ActiveSkillDict.TryGetValue(skillID, out activeSkillData) == false)
                {
                    activeSkillData         = new ActiveSkillData();
                    activeSkillData.SkillID = skillID;
                    ActiveSkillDict.Add(skillID, activeSkillData);
                    uint [] oldList = activeSkillList;
                    activeSkillList = new uint[activeSkillList.Length + 1];
                    Array.Copy(oldList, activeSkillList, oldList.Length);
                    activeSkillList[oldList.Length] = skillID;

                    HashSet <uint> rushSkillList = KConfigFileManager.GetInstance().GetRushSkillSet();
                    if (!rushSkillList.Contains(skillID))
                    {
                        for (int i = 0; i < ShortCutDataManager.Instance.Count; i++)
                        {
                            ShortCutData data = ShortCutDataManager.Instance.datas[i];
                            if (data.type == SHORTCUTITEM.NONE)
                            {
                                ButtonBarView.GetInstance().SetShortCut(i, SHORTCUTITEM.SKILL, (int)skillID, true);
                                break;
                            }
                        }
                    }
                }
                activeSkillData.Level += 1;
                KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill(activeSkillData.SkillID, activeSkillData.Level);
                activeSkillData.cdTicket.SetCD(skill.SkillCD);
            }
            else
            {
                KPassiveSkill    passiveSkillSetting = KConfigFileManager.GetInstance().GetPassiveSkill(skillID, 1);
                PassiveSkillData passiveSkillData;
                if (passiveSkillSetting.SkillType > 0)
                {
                    if (PassiveSkillDict.TryGetValue(skillID, out passiveSkillData) == false)
                    {
                        passiveSkillData = new PassiveSkillData();
                        PassiveSkillDict.Add(skillID, passiveSkillData);
                    }
                    passiveSkillData.Level += 1;
                    skillIdx = 1;
                }
                else
                {
                    if (TalentSkillDict.TryGetValue(skillID, out passiveSkillData) == false)
                    {
                        passiveSkillData = new PassiveSkillData();
                        TalentSkillDict.Add(skillID, passiveSkillData);
                    }
                    passiveSkillData.Level += 1;
                    skillIdx = 2;
                }
            }
            EventDispatcher.GameWorld.Dispath(ControllerCommand.UPDATE_SKILL, skillIdx, skillID);
        }
Ejemplo n.º 11
0
 public override void DoUpdate()
 {
     if (pause)
     {
         return;
     }
     if (Owner.property.heroObjType == KHeroObjectType.hotPlayer && null != Owner.AnimCmp && null != Owner.Weapon)
     {
         if (Owner.ActiveAction != null && Owner.ActiveAction.WeaponPosition != WeaponComponent.BIND_POINT.DEFAULT)
         {
             Owner.Weapon.SetWeaponPosition(Owner.ActiveAction.WeaponPosition);
         }
         else if (Owner.AnimCmp.IsFighting())
         {
             Owner.Weapon.SetWeaponPosition(WeaponComponent.BIND_POINT.RIGHT_HAND);
         }
         else
         {
             Owner.Weapon.SetWeaponPosition(WeaponComponent.BIND_POINT.BEI);
         }
     }
     if (Owner.property.isDeadTemp)
     {
         if (null == Owner.ActiveAction || (Owner.ActiveAction.isDead == false && Owner.ActiveAction.actionType != Action.ACTION_TYPE.FLY))
         {
             ActionDead dead = new ActionDead(Owner);
             Owner.ActiveAction = dead;
         }
     }
     if (Owner.ActiveAction.IsFinish())
     {
         if (null == Owner.property.nextAction || !Owner.property.nextAction.IsCanActive())
         {
             if (Owner.property.isMainHero)
             {
                 if (null != Owner.property.target && Owner.property.target.property.isCanAttack && Owner.property.AutoAttack && !Owner.property.target.property.isDeadTemp && !Owner.property.CmdAutoAttack)
                 {
                     OperaAttack action = new OperaAttack(Owner);
                     action.IsPushStack = true;
                     KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill((uint)Owner.Job, 1);
                     if (null == skill)
                     {
                         return;
                     }
                     action.deltaSpace  = ((float)skill.CastRange) / 100f;
                     action.target      = Owner.property.target;
                     Owner.ActiveAction = action;
                 }
                 else
                 {
                     if (OperaWalking)
                     {
                         if (Owner.Position.x != Owner.property.finalDestination.x || Owner.Position.z != Owner.property.finalDestination.z)
                         {
                             ActionWalk action = new ActionWalk(Owner);
                             action.endPosition = Owner.property.finalDestination;
                             Owner.ActiveAction = action;
                             Owner.property.finalDestination = action.endPosition;
                         }
                         else
                         {
                             OperaWalking = false;
                             ActionIdle action = new ActionIdle(Owner);
                             Owner.ActiveAction = action;
                         }
                     }
                     else
                     {
                         ActionIdle action = new ActionIdle(Owner);
                         Owner.ActiveAction = action;
                     }
                 }
             }
             else
             {
                 if (Owner.Position.x != Owner.property.finalDestination.x || Owner.Position.z != Owner.property.finalDestination.z)
                 {
                     ActionWalk action = new ActionWalk(Owner);
                     action.beginPosition            = Owner.Position;
                     action.endPosition              = Owner.property.finalDestination;
                     action.speed                    = Owner.Speed;
                     Owner.ActiveAction              = action;
                     Owner.property.finalDestination = action.endPosition;
                 }
                 else
                 {
                     ActionIdle action = new ActionIdle(Owner);
                     Owner.ActiveAction = action;
                 }
             }
         }
         else
         {
             Owner.ActiveAction        = Owner.property.nextAction;
             Owner.property.nextAction = null;
         }
     }
     else
     {
         if (Owner.ActiveAction.actionType != Action.ACTION_TYPE.OPERA && !Owner.property.isMainHero)
         {
             if (
                 Mathf.Abs(Owner.Position.x - Owner.property.finalDestination.x) > 0.001f
                 ||
                 Mathf.Abs(Owner.Position.z - Owner.property.finalDestination.z) > 0.001f
                 )
             {
                 Owner.ActiveAction.TryFinish();
             }
         }
         Owner.ActiveAction.Update();
     }
     if (null != Owner.AidAction && !Owner.AidAction.IsFinish())
     {
         Owner.AidAction.Update();
     }
 }
Ejemplo n.º 12
0
        public override void DoUpdate()
        {
            int _listLen = SkillLogic.GetInstance().activeSkillList.Length;

            if (_listLen > skillList.Length)
            {
                skillList = new uint[_listLen - 1];
                Array.Copy(SkillLogic.GetInstance().activeSkillList, 1, skillList, 0, _listLen - 1);
            }

            if (!Owner.property.CmdAutoAttack)
            {
                return;
            }
            if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.FLY)
            {
                return;
            }
            if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.ANIM)
            {
                if (Owner.ActiveAction is ActionMovingAOE)
                {
                    ActionMovingAOE aoe = (ActionMovingAOE)Owner.ActiveAction;
                    UpdateMoveAoe(aoe);
                    return;
                }
                else
                {
                    if (!Owner.ActiveAction.IsCanFinish())
                    {
                        return;
                    }
                }
            }
            else if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.OPERA)
            {
                return;
            }

            if (!SelectAim())
            {
                return;
            }

            int _len = skillList.Count();

            if (_len > 0)
            {
                curIndex = curIndex % +_len;
                for (int i = 0; i < _len; i++)
                {
                    uint skillId = skillList[curIndex];
                    try
                    {
                        if (!SkillLogic.GetInstance().RequestSkill((uint)skillId))
                        {
                            curIndex = (curIndex + 1) % +_len;
                            continue;
                        }
                        KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(skillId, Owner.property.tabID);
                        if (!Owner.ActiveAction.TryFinish())
                        {
                            continue;
                        }
                        if (skillDisplay.Opera.CompareTo("TARGET") == 0)
                        {
                            SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target);
                            Owner.property.AutoAttack = false;
                            return;
                        }
                        else if (skillDisplay.Opera.CompareTo("NONE") == 0)
                        {
                            SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target);
                            return;
                        }
                        else if (skillDisplay.Opera.CompareTo("TARGET_DIR") == 0)
                        {
                            SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target);
                            Owner.property.AutoAttack = false;
                            return;
                        }
                    }
                    catch (NullReferenceException e)
                    {
                    }
                }
            }
            OperaAttack action = new OperaAttack(Owner);

            action.IsPushStack = true;
            KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill((uint)Owner.Job, 1);

            if (null == skill)
            {
                return;
            }
            action.deltaSpace = ((float)skill.CastRange) / 100f;
            action.target     = Owner.property.target;
            EventDispatcher.GameWorld.DispatchEvent(ControllerCommand.CHANGE_TARGET);
            Owner.ActiveAction        = action;
            Owner.property.AutoAttack = false;
        }
Ejemplo n.º 13
0
    public virtual void InitParam(AnimActionParam param, KSkillDisplay skillDisplay)
    {
        displayInfor    = skillDisplay;
        WeaponPosition  = displayInfor.WeaponPosition;
        skillId         = param.skillId;
        targetId        = param.targetId;
        level           = param.level;
        target          = param.target;
        endPosition     = KingSoftCommonFunction.GetGoundHeight(KingSoftCommonFunction.NearPosition(param.position));
        activeSkill     = KConfigFileManager.GetInstance().GetActiveSkill(skillId, level);
        FirstAttackTime = 0;
        animArys        = displayInfor.Anim.Split('|');
        int [] ids = KingSoftCommonFunction.RandomAry(animArys.Length);
        beginFxs = displayInfor.BeginEffect.Split('|');
        beginFxs = KingSoftCommonFunction.GrowArrays(beginFxs, animArys.Length);
        if (isRandomAnim)
        {
            animArys = KingSoftCommonFunction.RandomAryByList(animArys, ids);
            beginFxs = KingSoftCommonFunction.RandomAryByList(beginFxs, ids);
        }
        if (beginFxs[0].Length > 0)
        {
            AssetLoader.GetInstance().PreLoad(URLUtil.GetResourceLibPath() + beginFxs[0]);
        }
        if (displayInfor.EndEffect.Length > 0)
        {
            AssetLoader.GetInstance().PreLoad(URLUtil.GetResourceLibPath() + displayInfor.EndEffect);
        }
        if (displayInfor.BulletEffect.Length > 0)
        {
            AssetLoader.GetInstance().PreLoad(URLUtil.GetResourceLibPath() + displayInfor.BulletEffect);
        }

        try
        {
            string [] AttackTimes = activeSkill.AttackTimeList.Split(';');
            if (displayInfor.CameraEffect.CompareTo("SHAKE_ALL") == 0)
            {
                foreach (string _t in AttackTimes)
                {
                    try
                    {
                        shakeTimes.Add((float)System.Convert.ToDouble(_t));
                    }
                    catch (System.Exception e)
                    {
                    }
                }
                if (shakeTimes.Count > 0)
                {
                    FirstAttackTime = (float)shakeTimes[0];
                }
            }
            else
            {
                if (AttackTimes.Length > 0)
                {
                    try
                    {
                        FirstAttackTime = (float)System.Convert.ToDouble(AttackTimes[0]);
                    }
                    catch (System.Exception e)
                    {
                    }
                }
            }
            if (activeSkill.ClientCache)
            {
                KAminEvent _event = KConfigFileManager.GetInstance().GetAnimEvent(hero.property.tabID, animArys[0]);
                if (null == _event)
                {
                    FirstAttackTime = hero.AnimCmp.GetAnimLong(animArys[0]) - 0.3f;
                }
                else
                {
                    FirstAttackTime = _event.time;
                }
            }
        }
        catch (System.Exception e) {
        }
        hitTicker.SetCD(FirstAttackTime);
        finishTicker.SetCD(FirstAttackTime + displayInfor.hitDelay);
    }
Ejemplo n.º 14
0
        public void OnHeroDeathOp(KProtoBuf buf, bool fristTime)
        {
            S2C_HERO_DEATH respond    = buf as S2C_HERO_DEATH;
            SceneEntity    targetHero = GetSceneObject(respond.heroID) as SceneEntity;
            SceneEntity    killerHero = GetSceneObject(respond.KillerID) as SceneEntity;

            if (null == targetHero)
            {
                return;
            }
            if (targetHero == mainHero)
            {
                ReliveView.GetInstance().ShowView();
            }

            targetHero.property.isDeaded = true;
            uint          lastSkillId  = targetHero.property.lastHitSkillId;
            KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(lastSkillId, targetHero.property.tabID);

            if (fristTime && null != killerHero)
            {
                KActiveSkill activeSkill = KConfigFileManager.GetInstance().GetActiveSkill(lastSkillId, 1);
                if (null != activeSkill && activeSkill.ClientCache)
                {
                    if (null != killerHero.ActiveAction)
                    {
                        killerHero.ActiveAction.AddDeadMessage(respond);
                        return;
                    }
                }
                else if (null != killerHero && skillDisplay.HitDelayTimeScale > 0.00001f)
                {
                    float distance = Vector3.Distance(killerHero.Position, targetHero.Position);
                    float _time    = distance * skillDisplay.HitDelayTimeScale;
                    DelayCallManager.instance.CallFunction(OnHeroDeathParam, _time, buf, false);
                    return;
                }
            }
            if (null != targetHero)
            {
                if (targetHero.property.activeAction.isFlying)
                {
                    if (skillDisplay.DeadType != KSkillDisplay.DEAD_TYPE.PHYSICS)
                    {
                        targetHero.property.isDeadTemp = true;
                        return;
                    }
                }
                targetHero.DispatchEvent(ControllerCommand.FinishImmediate);
                targetHero.DispatchEvent(ControllerCommand.CLEAR_BUFF);
                targetHero.Action.ToDead(killerHero);
                targetHero.property.isDeadTemp = true;
                if (null != killerHero)
                {
                    if (killerHero.gameObject.GetComponent <AttackSlow>() == null)
                    {
                        if (null == skillDisplay || skillDisplay.DieAttackSlowTime <= 0)
                        {
                            return;
                        }
                        killerHero.DispatchEvent(
                            ControllerCommand.SLOW,
                            killerHero.AnimCmp.GetLastLogicAnimName(),
                            skillDisplay.DieAttackSlowTime,
                            skillDisplay.DieAttackSpeed);
                    }
                }
            }
        }