コード例 #1
0
    public override void Active()
    {
        base.Active();
        if (null == hero.BodyGo)
        {
            return;
        }
        KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(hero.property.lastHitSkillId, hero.property.tabID);
        Vector3       forward      = hero.Position - attacker.Position;

        forward.Normalize();
        hero.transform.position = hero.transform.position + (Vector3.up * 0.2f);
        if (!Bind())
        {
            ActionMonsterDie action = new ActionMonsterDie(hero);
            action.attacker    = attacker;
            action.IsPushStack = false;
            hero.DispatchEvent(ControllerCommand.SetActiveAction, action);
            hero.transform.position = hero.transform.position - (Vector3.up * 0.2f);
            return;
        }

        hero.BodyGo.animation.Stop();
        float _f = 10f;

        _rootRB.velocity        = forward * skillDisplay.PhysicsVelocity * Random.Range(0.8f, 1.2f);
        _rootRB.velocity       += Vector3.up * skillDisplay.PhysicsVelocityUp * Random.Range(0.8f, 1.2f);
        _rootRB.angularVelocity = new Vector3(0, Random.Range(30f, 60f), 0);
    }
コード例 #2
0
    public override void Active()
    {
        base.Active();
        KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(hero.property.lastHitSkillId, hero.property.tabID);
        Vector3       forward      = hero.Position - attacker.Position;

        forward.Normalize();
        jump.beginPosition = hero.Position;
        jump.dampen        = true;
        if (null == skillDisplay)
        {
            height           = 0;
            distance         = 0;
            speed            = 100f;
            jump.endPosition = KingSoftCommonFunction.NearPosition(hero.Position);
        }
        else
        {
            height           = skillDisplay.DieJump;
            distance         = skillDisplay.DieDistance;
            speed            = skillDisplay.DieSpeed;
            jump.endSpeed    = skillDisplay.DieSpeed2;
            jump.endPosition = KingSoftCommonFunction.NearPosition(hero.Position + forward * distance);
        }
        lookForward      = new Vector3(-forward.x, 0f, -lookForward.z);
        jump.speed       = speed;
        attackerPosition = attacker.transform.position;
        jump.height      = height;
        jump.Active();
        hero.DispatchEvent(ControllerCommand.CrossFadeAnimation, "dead", AMIN_MODEL.ONCE, false);
    }
コード例 #3
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);
        }
コード例 #4
0
        public void SkillSelf(AnimActionParam param, KSkillDisplay skillDisplay, bool isPushStack)
        {
            ActionByAnim action = new ActionByAnim(Owner);

            action.InitParam(param, skillDisplay);
            action.IsPushStack = isPushStack;
            if (!action.IsCanActive())
            {
                return;
            }
            Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
        }
コード例 #5
0
 public KSkillDisplay GetSkillDisplay(uint skillID, uint HeroID)
 {
     if (skillDisplay != null)
     {
         KSkillDisplay r = skillDisplay.getData(skillID + "_" + HeroID);
         if (null == r)
         {
             r = skillDisplay.getData(skillID + "_0");
         }
         return(r);
     }
     return(null);
 }
コード例 #6
0
        public void ToDead(SceneEntity killer)
        {
            if (null != killer)
            {
                KingSoftCommonFunction.LootAt(Owner.gameObject, killer.gameObject);
            }
            Owner.property.fightHp = 0;

            if (Owner.HeroType == KHeroObjectType.hotMonster)
            {
                if (null != killer && killer.property.isMainHero)
                {
                    HitPanelView.GetInstance().hit();
                }
                KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(Owner.property.lastHitSkillId, Owner.property.tabID);
                if (Owner.property.lastAttackEvent == (byte)KAttackEvent.aeCrit || skillDisplay.DeadType == KSkillDisplay.DEAD_TYPE.BOMB)
                {
                    ActionBomb action = new ActionBomb(Owner);
                    action.IsPushStack = false;
                    Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
                }
                else if (skillDisplay.DeadType == KSkillDisplay.DEAD_TYPE.PHYSICS)
                {
                    ActionPlysiceDie action = new ActionPlysiceDie(Owner);
                    action.attacker    = killer;
                    action.IsPushStack = false;
                    Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
                }
                else
                {
                    ActionMonsterDie action = new ActionMonsterDie(Owner);
                    action.attacker    = killer;
                    action.IsPushStack = false;
                    Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
                }
                //ActionBomb
            }
            else
            {
                ActionDie action = new ActionDie(Owner);
                action.IsPushStack = false;
                Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
            }
        }
コード例 #7
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)
            {
            }
        }
コード例 #8
0
ファイル: SkillLogic.cs プロジェクト: moto2002/DinaGameClient
        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);
                }
            }
        }
コード例 #9
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;
        }
コード例 #10
0
        //播放战斗效果
        public void PlayFightEffect(ushort wSkillID, int damage, byte byAttackEvent, SceneEntity killerHero)
        {
            if (byAttackEvent == (byte)KAttackEvent.aeMiss)
            {
                if (Owner.property.isMainHero)
                {
                    Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "2", "FightFont", "effect_ui_shuzitanchu_putong.res");
                }
                else
                {
                    Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "1", "FightFont", "effect_ui_shuzitanchu_putong.res");
                }
                return;
            }
            else if (byAttackEvent == (byte)KAttackEvent.aeCrit)
            {
                Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "CritFont", "effect_ui_shuzitanchu_baoji2.res");
            }
            else if (Owner.property.isMainHero)
            {
                Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "HurtFont", "effect_ui_shuzitanchu_putong.res", NumTip.OFFSET_TYPE.LEFT);
            }
            else
            {
                Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "AttackFont", "effect_ui_shuzitanchu_putong.res");
            }
            KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(wSkillID, Owner.TabID);

            if (skillDisplay.OnHitAction.CompareTo("JUMP") == 0)
            {
                ActionBeAttactedAndThrowUp action = new ActionBeAttactedAndThrowUp(Owner);
                action.hitAnim     = skillDisplay.OnHitAnim;
                action.time        = skillDisplay.OnHitEffecTime;
                action.height      = skillDisplay.OnHitHeight;
                Owner.ActiveAction = action;
                //action
            }
            else if (Owner.property.heroObjType == KHeroObjectType.hotMonster && Owner.heroSetting.MonsterGrade == KMonsterGrade.mgQuestBoss)
            {
                if (Owner.property.activeAction.TryFinish())
                {
                    ActiionBeAttack beAttack = new ActiionBeAttack(Owner);
                    Owner.DispatchEvent(ControllerCommand.SetActiveAction, beAttack);
                }
            }
            else
            {
                Owner.DispatchEvent(ControllerCommand.BE_HIT);
            }

            Vector3 forward = Vector3.forward;

            if (null != killerHero)
            {
                forward = killerHero.transform.position - Owner.transform.position;
                forward = new Vector3(forward.x, 0, forward.z);
                forward.Normalize();
            }
            if (skillDisplay.HitShakeTime > 0 && skillDisplay.HitShakeDelta > 0)
            {
                Owner.DispatchEvent(ControllerCommand.HIT_SLOW, skillDisplay.HitShakeTime, skillDisplay.HitShakeDelta);
            }

            if (null != skillDisplay && skillDisplay.HitEffect.Length > 0 /*&& skillDisplay.BulletEffect.Length == 0*/)
            {
                AssetInfo inf = AssetLoader.GetInstance().Load(URLUtil.GetResourceLibPath() + skillDisplay.HitEffect);
                if (inf.isDone(false))
                {
                    if (skillDisplay.SingleHitFx)
                    {
                        GameObject _hit = null;
                        if (hitFxs.TryGetValue(skillDisplay.HitEffect, out _hit))
                        {
                            GameObject.Destroy(_hit);
                        }
                    }
                    GameObject hitObject = inf.CloneGameObject();
                    ObjectUtil.SetTagWithAllChildren(hitObject, CameraLayerManager.GetInstance().GetMissionSignName());
                    hitObject.transform.parent   = Owner.transform.parent;
                    hitObject.transform.position = Owner.transform.position;
                    hitObject.transform.forward  = forward;
                    if (skillDisplay.SingleHitFx)
                    {
                        hitFxs[skillDisplay.HitEffect] = hitObject;
                    }
                    KingSoftCommonFunction.SetLayer(hitObject, 11);
                    DestoryObject dos = hitObject.AddComponent <DestoryObject>();
                    dos.delta = 5;
                    if (skillDisplay.HitBindPoint.Length > 0)
                    {
                        if (skillDisplay.HitBindPoint.CompareTo("Ground") != 0)
                        {
                            Transform t = Owner.GetChildTransform(skillDisplay.HitBindPoint);
                            if (null != t)
                            {
                                hitObject.transform.parent        = t;
                                hitObject.transform.localPosition = Vector3.zero;
                                hitObject.transform.localScale    = Vector3.one;
                            }
                        }
                    }
                    hitObject.SetActive(true);
                }
            }
        }
コード例 #11
0
ファイル: ActionRush.cs プロジェクト: moto2002/DinaGameClient
 public override void InitParam(AnimActionParam param, KSkillDisplay skillDisplay)
 {
     isRandomAnim = false;
     base.InitParam(param, skillDisplay);
 }
コード例 #12
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);
    }
コード例 #13
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);
                    }
                }
            }
        }