Exemplo n.º 1
0
        //设置初速度
        void SetOriginV(float value, float angle)
        {
            //浮空追击,但是退出了重力系统
            if (!m_isUseGravity)
            {
                return;
            }

            angle = angle % 360;

            m_originVelocity.value = value;
            m_originVelocity.angle = angle;

            m_originVelocity.vSubY = m_originVelocity.value * Mathf.Sin(m_originVelocity.angle * Mathf.Deg2Rad);
            m_originVelocity.vSubZ = m_originVelocity.value * Mathf.Cos(m_originVelocity.angle * Mathf.Deg2Rad);

            m_startMotionTime = Time.time;

            m_startPos = m_transform.position;

            //根据角度确定是什么类型运动
            if (angle > 0 && angle < 180)
            {
                m_gravityMotionType = GravityMotionType.GMT_UP;
            }
            else if (angle == 0 || angle == 180)
            {
                m_gravityMotionType = GravityMotionType.GMT_PUSH;
            }
            else if (angle > 180 && angle < 360)
            {
                m_gravityMotionType = GravityMotionType.GMT_DOWN;
            }

            //navmesh disenable
            NavMeshAgent agent = this.GetComponent <NavMeshAgent>();

            if (agent != null)
            {
                agent.enabled = false;
            }

            //设置被击硬直
            m_BehitState.isNonControl = true;



            m_behitParame = m_actor.damageBebitParam;

            if (m_behitParame == null)
            {
                return;
                //播放声音
                //  m_BehitState.PlayBehitSound(null, m_behitParame.damgageInfo.attackActor);
            }

            m_attackObjForward = m_behitParame.damgageInfo.attackActor.transform.forward;
        }
Exemplo n.º 2
0
        //技能命中,获取被击的信息,发给被击对象做表现
        public void OnBuffDamage(DamageParam damageParam, float phyAttackPercent, float magicAttackPercent, float addedValue, sbyte skillAttrib)
        {
            //攻击者的信息
            ActorObj attackActorObj = damageParam.attackActor;
            ActorObj behitActorObj  = damageParam.behitActor;

            if (behitActorObj.IsDeath())
            {
                return;
            }

            //LuaTable attackSkillDesc = attackActorObj.GetCurSkillDesc(damageParam.skillID);

            BehitParam behitParam = new BehitParam();

            behitParam.displayType = DamageDisplayType.DDT_NORMAL;

            float critRate = 0;

            if (critRate < 0)
            {
                critRate = 0;
            }
            critRate = Math.Min(critRate, 1.0f);

            if (UnityEngine.Random.value < critRate)  //暴击
            {
                behitParam.displayType = DamageDisplayType.DDT_DOUBLE;
            }

            int finalDmg = 0;

            //string strPhydmg = "";

            behitParam.hp = finalDmg;


#if !PUBLISH_RELEASE
            if (m_bMiaoGuai)
            {
                if (attackActorObj.mActorType == ActorType.AT_LOCAL_PLAYER)
                {
                    behitParam.hp += 1000000;
                }
            }
#endif

            //被击效果修正
            behitParam.damgageInfo = damageParam;
            behitParam.displayType = DamageDisplayType.DDT_BUFF;

            //给技能释放者发送回复信息



            // 发送被击消息给被击者
            behitActorObj.OnSkillBeHit(behitParam);
        }
Exemplo n.º 3
0
 public override void DoDamage(int hp, bool bIsMainPlayer, BehitParam behitParam)//lmjedit 真正的暴击
 {
     base.DoDamage(hp, bIsMainPlayer, behitParam);
     if (mActorType == ActorType.AT_BOSS)
     {
         //EventToUI.SetArg(UIEventArg.Arg1, curHp * 1.0f / maxHp);
         //EventToUI.SetArg(UIEventArg.Arg2, behitParam);
         //EventToUI.SendEvent("EU_BOSSBLOOD_SETVALUE");
     }
 }
Exemplo n.º 4
0
        private void OnObjectDead(GameEvent ge, EventParameter parameter)
        {
            MsgData_sObjDeadInfo msg = parameter.msgParameter as MsgData_sObjDeadInfo;
            if (null == msg)
                return;

 
//             for (int i = 0; i < mSceneCache.Count; i++)
//             {
//                 if (mSceneCache[i].ObjGuid == msg.ID)
//                 {
//                     mSceneCache.RemoveAt(i);
//                     Debug.LogError("---------------------------------killid ___ 2:" + msg.KillerID + " bkill:" + msg.ID);
//                     return;
//                 }
//             }

            if (mObjRecord.ContainsKey(msg.ID))
            {
                mObjRecord.Remove(msg.ID);
            }

            ActorObj behitActor = CoreEntry.gActorMgr.GetActorByServerID(msg.ID);
            if (null == behitActor)
            {
                if (!mDeathCache.Contains(msg))
                {
                    mDeathCache.Add(msg);
                }
                //Debug.LogError("---------------------------------怪物死亡 1:" + msg.ID + " monst count:" + mObjRecord.Count);

                return;
            }
            //Debug.LogError("---------------------------------怪物死亡 2  :" + msg.ID + " monst count:" + mObjRecord.Count);
            ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(msg.KillerID);

            BehitParam behitParam = new BehitParam();
            DamageParam damageParam = new DamageParam();
            damageParam.attackActor = attackActor;
            damageParam.behitActor = behitActor;
            damageParam.skillID = msg.KillerSkillID;

            behitParam.damgageInfo = damageParam;
            behitActor.OnDead(msg.KillerSkillID, attackActor, behitParam, EventParameter.Get());
        }
Exemplo n.º 5
0
        IEnumerator DoDead(MsgData_sObjDeadInfo msg)
        {
            yield return new WaitForSeconds(0.3f);

            ActorObj behitActor = CoreEntry.gActorMgr.GetActorByServerID(msg.ID);
            if (null == behitActor)
                yield break;

            ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(msg.KillerID);

            BehitParam behitParam = new BehitParam();
            DamageParam damageParam = new DamageParam();
            damageParam.attackActor = attackActor;
            damageParam.behitActor = behitActor;
            damageParam.skillID = msg.KillerSkillID;

            behitParam.damgageInfo = damageParam;
            behitActor.OnDead(msg.KillerSkillID, attackActor, behitParam, EventParameter.Get());
        }
Exemplo n.º 6
0
        void Update()
        {
            if (!bSceneLoaded)
            {
                return;
            }

            float time = 0.0f;
            float lastTime = Time.realtimeSinceStartup;
            while (mSceneCache.Count > 0)
            {
                if (time > mMaxPrcessingTime)
                {
                    return;
                }

                SceneObj sceneObj = mSceneCache[0];
                switch (sceneObj.ObjType)
                {
                    case EnEntType.EnEntType_Player:
                        MsgData_sSceneObjectEnterHuman humanStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterHuman;
                        CoreEntry.gSceneLoader.LoadOtherPlayer(humanStruct);
                        if (sceneObj.PlayerData != null)
                        {
                            sceneObj.PlayerData = null;
                        }
                        break;
                    case EnEntType.EnEntType_Monster:
                        MsgData_sSceneObjectEnterMonster monsterStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterMonster;
                        //Debug.LogError("创建怪物:" + monsterStruct.Guid);
                        if (!mObjRecord.ContainsKey(monsterStruct.Guid))
                        {
                            CoreEntry.gSceneLoader.LoadMonster(monsterStruct);
                            mObjRecord.Add(monsterStruct.Guid, CoreEntry.gActorMgr.GetActorByServerID(monsterStruct.Guid));
                        }
                        else
                        {
                            //Debug.LogError("重复怪物:" + monsterStruct.Guid);
                        }
                        break;
                    case EnEntType.EnEntType_NPC:
                        MsgData_sSceneObjectEnterNPC npcStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterNPC;
                        CoreEntry.gSceneLoader.LoadNPC(npcStruct);
                        break;
                    case EnEntType.EnEntType_StaticObj:
                        MsgData_sSceneObjectEnterStaticObj sstaticStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterStaticObj;
                        CoreEntry.gSceneLoader.LoadStaticObj(sstaticStruct);
                        break;
                    case EnEntType.EnEntType_Item:
                        MsgData_sSceneObjectEnterItem itemStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterItem;
                        EventParameter param = EventParameter.Get();
                        param.objParameter = itemStruct;
                        CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_OBJ_ITEM_ENTER, param);
                        break;
                    case EnEntType.EnEntType_GatherObj:
                        MsgData_sSceneObjectEnterCollection collectionStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterCollection;
                        CoreEntry.gSceneLoader.LoadCollection(collectionStruct);
                        break;
                    case EnEntType.EnEntType_Pet:
                        MsgData_sSceneObjectEnterPet petStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterPet;
                        CoreEntry.gSceneLoader.LoadPet(petStruct);
                        break;
                    case EnEntType.EnEntType_BiaoChe:
                        MsgData_sSceneObjectEnterBiaoChe cheStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterBiaoChe;
                        CoreEntry.gSceneLoader.LoadBiaoChe(cheStruct);
                        break;
                    case EnEntType.EnEntType_Trap:
                        MsgData_sSceneObjectEnterTrap trapStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterTrap;
                        CoreEntry.gSceneLoader.LoadTrap(trapStruct);
                        break;
                    case EnEntType.EntType_VirtualPlayer:
                        MsgData_sSceneObjectEnterVirtualPlayer vpStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterVirtualPlayer;
                        CoreEntry.gSceneLoader.LoadVirtualPlayer(vpStruct);
                        break;
                    default:
                        break;
                }
                
                mSceneCache.RemoveAt(0);

                time += Time.realtimeSinceStartup - lastTime;
            }

            for (int i = 0; i < mDeathCache.Count; i++)
            {
                MsgData_sObjDeadInfo msg = mDeathCache[i];
                ActorObj behitActor = CoreEntry.gActorMgr.GetActorByServerID(msg.ID);
                if (null == behitActor)
                {
                    continue;
                }

                ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(msg.KillerID);

                BehitParam behitParam = new BehitParam();
                DamageParam damageParam = new DamageParam();
                damageParam.attackActor = attackActor;
                damageParam.behitActor = behitActor;
                damageParam.skillID = msg.KillerSkillID;

                behitParam.damgageInfo = damageParam;
                behitActor.OnDead(msg.KillerSkillID, attackActor, behitParam, EventParameter.Get());

                mDeathCache.RemoveAt(i);
                i--;
            }

            for (int i = 0; i < mLeaveCache.Count; i++)
            {
                ActorObj actor = mLeaveCache[i];
                if (null != actor)
                {
                    if (actor.mActorState.IsDeathEnd())
                    {
                        CoreEntry.gActorMgr.RemoveActorByServerID(actor.ServerID);
                        actor.RecycleObj();

                        EventParameter param = EventParameter.Get();
                        param.longParameter = actor.ServerID;
                        CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_ACTOR_REMOVE, param);

                        if (actor is OtherPlayer)
                        {
                            param = EventParameter.Get();
                            param.longParameter = actor.ServerID;
                            CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_OTHERPLAYER_LEAVE, param);
                        }
                    }
                    else
                    {
                        continue;
                    }
                }
                mLeaveCache.RemoveAt(i);
                i--;
            }
        }
Exemplo n.º 7
0
        public override void OnEnter(ActorObj actor)
        {
            if (actor == null)
            {
                return;
            }

            //塔不没有受击
            bool bChangeColor = true;

            m_state = ACTOR_STATE.AS_BEHIT;

            m_actor     = actor;
            m_transform = actor.transform;

            //if (m_actor != null)
            //{
            //    m_actor.m_bIsInAttack = true;
            //}

            m_behitParame = m_actor.damageBebitParam;

            monsterObj = m_actor as MonsterObj;
            if (monsterObj != null)
            {
                if (monsterObj.IsVip)
                {
                    monsterObj.VipIsUnderAttack();
                }
            }

            if (CurParam != null && CurParam != null)
            {
                m_curSkillID = CurParam.skillID;
            }

            //m_GameDataBase = CoreEntry.gGameDBMgr;

            if (CurParam != null && CurParam.AttackActor != null)
            {
                m_attack = CurParam.AttackActor;
            }


            m_groundLayerMask = 1 << LayerMask.NameToLayer("ground");



            //m_baseTool = CoreEntry.gBaseTool;

            m_gravityMotionBase = this.gameObject.GetComponent <GravityMotionBase>();

            //m_gravityMotionBase.enabled = true;

            //m_ActionEfxList = new List<EfxAttachAction>();

            //修改shader
            //if (m_actor.ChangeShader("Mobile/BeingHitted"))


            if (monsterObj && monsterObj.m_bIsTower)
            {
                bChangeColor = false;
            }

            if (bChangeColor && m_actor.m_bUseBehitColor && m_actor.mActorType == ActorType.AT_MONSTER &&
                m_attack != null && m_attack is PlayerObj)
            {
                m_actor.SetBrightenShader();

                Invoke("RecoverShader", 0.2f);
            }

            //  if (m_actor.mActorType == ActorType.AT_BOSS && m_actor.AddShader("DZSMobile/Balloon"))
            ////  if (m_actor.mActorType == ActorType.AT_BOSS && m_actor.ChangeShader("DZSMobile/Balloon"))
            //  {
            //      Invoke("RemoveShader", 0.2f);
            //  }

            if (m_actor.mActorType == ActorType.AT_BOSS && m_actor.IsInQiJue())
            {
                CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_Boss_QiJue, null);
            }


            m_curRadius = m_actor.GetColliderRadius();

            //如果浮空,就给浮空处理受击
            if (m_gravityMotionBase != null && m_gravityMotionBase.isUseGravityState)
            {
                m_gravityMotionBase.DoBehit();
            }
            else
            {
                m_bHitBack            = false;
                m_isNonControlProtect = false;
                isNonControl          = false;
                m_isHitDownState      = false;

                //小怪倒地被击
                if (m_gravityMotionBase != null)
                {
                    m_gravityMotionBase.BreakExitBehitState();
                }

                //面向被击玩家
                // if (m_actor.actorCreatureDisplayDesc.chIsBehitNotLookAtTarget == 0)
                if (m_actor.mActorType != ActorType.AT_LOCAL_PLAYER &&
                    m_actor.mActorType != ActorType.AT_MECHANICS && //机械类不转向
                    m_attack != null &&
                    !(m_actor is MonsterObj && !m_actor.bHitTurn))
                {
                    //自动释放法宝技能
                    CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_AutoUseMagicKeySkill, null);
                    //只旋转Y轴
                    Vector3 lookPos = new Vector3(m_attack.transform.position.x,
                                                  m_transform.position.y, m_attack.transform.position.z);

                    m_transform.LookAt(lookPos);
                }

                DoBehitEx();
            }
        }
Exemplo n.º 8
0
        //技能命中,获取被击的信息,发给被击对象做表现
        public void OnSkillDamage(DamageParam damageParam)
        {
            if (ArenaMgr.Instance.IsArenaFight)
            {
                ArenaMgr.Instance.OnSkillDamage(damageParam);

                return;
            }

            //攻击者的信息
            ActorObj attackActorObj = damageParam.attackActor;
            ActorObj behitActorObj  = damageParam.behitActor;

            if (null == attackActorObj || null == behitActorObj)
            {
                return;
            }

            if (behitActorObj.IsDeath())
            {
                return;
            }


            BehitParam behitParam = new BehitParam();


            behitParam.displayType = DamageDisplayType.DDT_NORMAL;
            behitParam.hp          = damageParam.Damage;

#if !PUBLISH_RELEASE
            if (m_bMiaoGuai)
            {
                if (attackActorObj.mActorType == ActorType.AT_LOCAL_PLAYER)
                {
                    behitParam.hp += 1000000;
                }
            }
            else
            {
                if (m_bWuShang && attackActorObj.mActorType == ActorType.AT_LOCAL_PLAYER)
                {
                    behitParam.hp = 1;
                }
            }
#endif

            //被击效果修正
            behitParam.damgageInfo = damageParam;

#if !PUBLISH_RELEASE
            if (m_bWuShang && behitActorObj.mActorType == ActorType.AT_LOCAL_PLAYER)
            {
                behitParam.hp = 1;
            }
#endif


            //给技能释放者发送回复信息

            // 发送被击消息给被击者
            //  if (behitParam.hp != 0)
            {
                behitActorObj.OnSkillBeHit(behitParam);
            }

            if (attackActorObj.mActorType == ActorType.AT_LOCAL_PLAYER)
            {
                behitActorObj.Health.ShowHPBar(5);
            }

            //受到其它玩家攻击时,提示开启善恶模式
            if (behitParam.hp > 0 && behitActorObj.mActorType == ActorType.AT_LOCAL_PLAYER)
            {
                if (attackActorObj.mActorType == ActorType.AT_REMOTE_PLAYER)
                {
                    if (PlayerData.Instance.CurPKMode == PKMode.PK_MODE_PEACE && (PlayerData.LastNoteSwitchPKTime <= 0 || (Time.realtimeSinceStartup - PlayerData.LastNoteSwitchPKTime) >= 60))
                    {
                        bool autosetpk = false;
                        if (autosetpk)
                        {
                            UITips.ShowTips("受到攻击,切换善恶模式");
                            PlayerData.Instance.SendSetPKRuleRequest(PKMode.PK_MODE_EVIL);
                        }
                        else
                        {
                            MainPanelMgr.Instance.ShowDialog("TipSwitchPKNote");
                            PlayerData.LastNoteSwitchPKTime = Time.realtimeSinceStartup;
                        }
                    }

                    //没有目标则选中攻击者
                    ActorObj mainplayer = CoreEntry.gActorMgr.MainPlayer;
                    if (mainplayer.m_SelectTargetObject == null)
                    {
                        mainplayer.SelectTarget(attackActorObj);
                    }

                    EventParameter ep = EventParameter.Get();
                    ep.objParameter = attackActorObj;
                    CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_PLAYER_PK_HURT, ep);
                }

                //玩家收到了攻击
                AutoAIMgr automgr = CoreEntry.gAutoAIMgr;
                if (automgr.Config.AutoStrikeBack && TaskMgr.RunTaskType == 0 && !automgr.AutoFight && !behitActorObj.AutoPathFind)
                {
                    float gap = Time.realtimeSinceStartup - automgr.LastOPTime;
                    //LogMgr.Log("Last op gap {0}", gap);
                    if (gap > automgr.Config.StrikeBackGapWithIdle)
                    {
                        automgr.AutoFight = true;
                    }
                }
            }
        }
Exemplo n.º 9
0
        public void EventFunction(GameEvent ge, EventParameter parameter)
        {
            switch (ge)
            {
            case GameEvent.GE_NOTIFY_CAST_SKILL:
            {
                //释放技能
                int        skillID = (int)parameter.intParameter;
                GameObject actor   = parameter.goParameter;

                //调用actorbase释放技能
                ActorObj actorObj = actor.GetComponent <ActorObj>();

                //是否学习了该技能
                if (actorObj.IsHadLearnSkill(skillID))
                {
                    //玩家释放技能前选择目标
                    if (actorObj.mActorType == ActorType.AT_LOCAL_PLAYER)
                    {
                        //若没有目标则马上选择目标
                        CoreEntry.gActorMgr.MainPlayer.CheckSkillTarget();
                    }

                    actorObj.OnRunToAttack(skillID);
                    //actorObj.OnCastSkill(skillID);
                }
            }
            break;

            case GameEvent.GE_NOTIFY_SHOW_SKILL_SCOPE:
            {
                //释放技能
                int        skillID = (int)parameter.intParameter;
                GameObject actor   = parameter.goParameter;

                //调用actorbase释放技能
                ActorObj actorObj = actor.GetComponent <ActorObj>();

                //是否学习了该技能
                if (actorObj.IsHadLearnSkill(skillID))
                {
                    actorObj.OnShowSkillScope(skillID);
                    //actorObj.OnCastSkill(skillID);
                }
            }
            break;

            case GameEvent.GE_NOTIFY_HIDE_SKILL_SCOPE:
            {
                //释放技能
                int        skillID = (int)parameter.intParameter;
                GameObject actor   = parameter.goParameter;

                //调用actorbase释放技能
                ActorObj actorObj = actor.GetComponent <ActorObj>();

                //是否学习了该技能
                if (actorObj.IsHadLearnSkill(skillID))
                {
                    actorObj.OnHideSkillScope(skillID);
                    //actorObj.OnCastSkill(skillID);
                }
            }
            break;

            //
            case GameEvent.GE_SC_SKILLEFFECT:
            {
                MsgData_sCastEffect data = parameter.msgParameter as MsgData_sCastEffect;

                if (data == null)
                {
                    return;
                }


                //服务器这里只冒伤害数字
                bool bIsMainPlayer = false;

                BehitParam behitParam = new BehitParam();

                DamageParam damageParam = new DamageParam();
                damageParam.attackActor = CoreEntry.gActorMgr.GetActorByServerID(data.CasterID);
                damageParam.behitActor  = CoreEntry.gActorMgr.GetActorByServerID(data.TargetID);
                damageParam.skillID     = data.SkillID;
                damageParam.Flags       = data.Flags;
                damageParam.DamagaType  = data.DamagaType;
                damageParam.Damage      = (int)data.Damage;
                damageParam.IsClient    = false;


                behitParam.damgageInfo = damageParam;
                behitParam.displayType = (DamageDisplayType)data.DamagaType;
                behitParam.hp          = (int)data.Damage;


                if (behitParam.damgageInfo.attackActor != null &&
                    behitParam.damgageInfo.attackActor.mActorType == ActorType.AT_LOCAL_PLAYER)
                {
                    bIsMainPlayer = true;
                }

                if (behitParam.damgageInfo.attackActor != null)
                {
                    if (bIsMainPlayer)
                    {
                        behitParam.damgageInfo.attackActor.OnDamage((int)data.Damage, data.SkillID, bIsMainPlayer, behitParam);
                    }
                    else
                    {
                        //其他人要播受击动作
                        OnSkillDamage(damageParam);
                    }
                }
            }
            break;


            case GameEvent.GE_SC_OTHER_CASTSKILL_BEGIN:
            {
                MsgData_sCastBegan data = parameter.msgParameter as MsgData_sCastBegan;
                if (data == null)
                {
                    return;
                }
                ActorObj attackObj = CoreEntry.gActorMgr.GetActorByServerID(data.CasterID);

                if (attackObj == null)
                {
                    return;
                }

                if (attackObj != null && attackObj.mActorType == ActorType.AT_LOCAL_PLAYER)
                {
                    return;
                }



                //todo ,先强行同步位置
                attackObj.SetServerPosition(new Vector2(data.CasterPosX, data.CasterPosY));
                attackObj.OnCastSkill(data.SkillID, data.CasterID, data.TargetID, data.PosX, data.PosY);
            }
            break;


            case GameEvent.GE_SC_OTHER_CASTSKILL_END:
            {
                MsgData_sCastEnd data = parameter.msgParameter as MsgData_sCastEnd;
                if (data == null)
                {
                    return;
                }
                ActorObj attackObj = CoreEntry.gActorMgr.GetActorByServerID(data.CasterID);

                if (attackObj == null)
                {
                    return;
                }

                attackObj.SkillEnd(data.SkillID);
            }
            break;


            //hitback
            case GameEvent.GE_SC_KNOCKBACK:
            {
                MsgData_sKnockBack data = parameter.msgParameter as MsgData_sKnockBack;
                if (data == null)
                {
                    return;
                }
                ActorObj beHitActor  = CoreEntry.gActorMgr.GetActorByServerID(data.TargetID);
                ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(data.CasterID);

                if (beHitActor == null || attackActor == null)
                {
                    return;
                }

                beHitActor.OnHitBack(attackActor, data.MotionSpeed, data.PosX, data.PosY, data.MotionTime);
            }
            break;

            case GameEvent.GE_SC_ADDBUFFList:
            {
                MsgData_sAddBufferList data = parameter.msgParameter as MsgData_sAddBufferList;
                if (data == null)
                {
                    return;
                }
                ActorObj targetObj = CoreEntry.gActorMgr.GetActorByServerID(data.TargetID);
                if (targetObj == null)
                {
                    return;
                }
                for (int i = 0; i < data.BufferList.Count; i++)
                {
                    MsgData_sBuffer _buff    = data.BufferList[i];
                    BuffData        buffdata = new BuffData();
                    buffdata.BufferInstanceID = _buff.BufferInstanceID;
                    buffdata.buffType         = _buff.BufferTemplateID;
                    buffdata.Life             = _buff.Life;
                    buffdata.Count            = 1;
                    //buffdata.Param[0] = data.Param;
                    CoreEntry.gBuffMgr.AddBuff(buffdata, targetObj);
                }
            }
            break;

            case GameEvent.GE_SC_ADDBUFF:
            {
                MsgData_sAddBuffer data = parameter.msgParameter as MsgData_sAddBuffer;

                if (data == null)
                {
                    return;
                }

                /*
                 * if (data.BufferTemplateID == 24100001 || data.BufferTemplateID == 24100002)
                 * {
                 *  Debug.LogError("target目标 "+ data.TargetID +"  添加 iBuffId = " + data.BufferTemplateID);
                 * }
                 */
                // Debug.LogError("target目标 " + data.TargetID + "  添加 iBuffId = " + data.BufferTemplateID);
                ActorObj targetObj = CoreEntry.gActorMgr.GetActorByServerID(data.TargetID);

                if (targetObj == null)
                {
                    return;
                }

                BuffData buffdata = new BuffData();
                buffdata.BufferInstanceID = data.BufferInstanceID;
                buffdata.buffType         = data.BufferTemplateID;
                buffdata.Life             = data.Life;
                buffdata.Count            = 1;

                buffdata.Param[0] = data.Param;
                //LogMgr.LogError("SkillMgr AddBuff " + buffdata.buffType);
                CoreEntry.gBuffMgr.AddBuff(buffdata, targetObj);
            }
            break;

            case GameEvent.GE_SC_UPDATEBUFF:
            {
                MsgData_sUpdateBuffer data = parameter.msgParameter as MsgData_sUpdateBuffer;

                if (data == null)
                {
                    return;
                }

                BuffData buffdata = new BuffData();
                buffdata.BufferInstanceID = data.BufferInstanceID;
                buffdata.Life             = data.Life;
                buffdata.Count            = data.Count;
                buffdata.Param            = data.Param;
                //LogMgr.LogError("SkillMgr UpdateBuff " + buffdata.buffType);
                CoreEntry.gBuffMgr.UpdateBuff(buffdata);
            }
            break;

            case GameEvent.GE_SC_DELBUFF:
            {
                MsgData_sDelBuffer data = parameter.msgParameter as MsgData_sDelBuffer;
                if (data == null)
                {
                    return;
                }
                if (data.BufferTemplateID == 24100001 || data.BufferTemplateID == 24100002)
                {
                    //LogMgr.DebugLog("target目标 "+ data.TargetID + "  删除 iBuffId = " + data.BufferTemplateID);
                }

                //LogMgr.LogError("SkillMgr DelBuff " + data.BufferTemplateID);
                //  if(data.BufferInstanceID)
                ActorObj targetObj = CoreEntry.gActorMgr.GetActorByServerID(data.TargetID);

                if (targetObj != null)
                {
                    //LogMgr.LogError("SKillMgr CoreEntry.gBuffMgr.RemoveBuff " + data.BufferTemplateID);
                    CoreEntry.gBuffMgr.RemoveBuff(data.BufferInstanceID, targetObj);
                    if (targetObj.ServerID == CoreEntry.gActorMgr.MainPlayer.ServerID)
                    {
                        EventParameter msg = new EventParameter();
                        msg.longParameter = data.BufferTemplateID;
                        //Debug.LogError("删除BUFF  " + data.BufferTemplateID);
                        CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_CC_DELEBUFF, msg);
                    }
                }
            }
            break;

            case GameEvent.GE_SC_CAST_MOVE_EFFECRT:
            {
                MsgData_sCastMoveEffect data = parameter.msgParameter as MsgData_sCastMoveEffect;
                if (null == data)
                {
                    return;
                }

                if (data.caseterID == CoreEntry.gActorMgr.MainPlayer.ServerID)
                {
                    return;
                }

                ActorObj casterObj = CoreEntry.gActorMgr.GetActorByServerID(data.caseterID);
                if (null == casterObj)
                {
                    return;
                }

                LuaTable skill_action = CoreEntry.gSkillMgr.GetSkillActon(data.skillID);
                if (null == skill_action)
                {
                    return;
                }

                float   posX    = (float)data.posX;
                float   posZ    = (float)data.posY;
                Vector3 destPos = new Vector3(posX, CommonTools.GetTerrainHeight(new Vector2(posX, posZ)), posZ);

                AnimationCurveData curveData = casterObj.GetComponent <AnimationCurveData>();
                if (null == curveData)
                {
                    LogMgr.LogError(casterObj.gameObject.name + " has no AnimationCurveBase, skill id:" + data.skillID);

                    return;
                }

                casterObj.UseCurveData3(skill_action.Get <string>("animation"), destPos, null);
            }
            break;

            default:
                break;
            }
        }
Exemplo n.º 10
0
 //hp变化,主角,怪物,自己处理吧
 public virtual void DoDamage(int hp, bool bIsMainPlayer, BehitParam behitParam) 
 {
 }
Exemplo n.º 11
0
        //浮空受击
        public void DoBehit()
        {
            //浮空状态不能释放技能
            m_BehitState.isNonControl = true;

            //离地面高度
            float height = GetHeightToGround();

            if (height <= 0.1f)
            {
                return;
            }

            if (nCount > 2)
            {
                m_actor.StopAll();
                string clipName = "hit006";
                m_actor.PlayAction(clipName);

                m_actor.SetActionSpeed(clipName, 2f);

                m_actor.UseCurveData1(clipName, 2.5f);

                m_isUseGravity = false;
                //  ExitBehitState();

                if (!m_actor.IsHadAction(clipName))
                {
                    Vector3    vCurPos = m_actor.transform.position;
                    RaycastHit curHit;
                    //强拉到地面
                    if (Physics.Raycast(vCurPos, -Vector3.up, out curHit, 10, m_groundLayerMask))
                    {
                        vCurPos.y = curHit.point.y;
                    }

                    BaseTool.SetPosition(m_transform, vCurPos);
                }


                float actionLen = m_actor.GetActionLength(clipName);
                Invoke("ExitBehitState", actionLen);
                nCount = 0;
                return;
            }

            nCount++;

            m_behitParame = m_actor.damageBebitParam;

            int skillID = m_behitParame.damgageInfo.skillID;

            //ActorObj m_hitActorBase = m_behitParame.damgageInfo.attackActor;

            //只处理带位移的普通技能
            //LuaTable skillDesc = m_hitActorBase.GetCurSkillDesc(skillID);
            char bodyType = (char)m_actor.BodyType;

            int weight = 1;

            //技能力度纠正
            if (m_behitParame.damgageInfo.weight > 0)
            {
                weight = m_behitParame.damgageInfo.weight;
                LogMgr.UnityLog("Gravity dobehit skillid=" + skillID + ", reset weight=" + weight);
            }

            //获取技能受击反馈
            SkillBehitDisplayDesc behitDisplay = m_gameDataBase.GetSkillBehitDisplayDesc(weight, bodyType);

            if (behitDisplay == null)
            {
                return;
            }

            //没有硬直,定格,没有位移
            if (!behitDisplay.isNonControl)
            {
                return;
            }

            //带位移
            float moveDistance = 0;

            //动作
            if (behitDisplay.behitType == BehitType.BT_NORMAL)
            {
                //普通受击
                // moveDistance = skillDesc.hitMoveDistance;
                moveDistance = 0.2f;
            }
            else if (behitDisplay.behitType == BehitType.BT_HITBACK)
            {
                //美术位移
                if (!m_behitParame.damgageInfo.isNotUseCurveMove)
                {
                    string clipName = behitDisplay.actionList[0];
                    moveDistance = m_actor.GetAnimationCurveLength(clipName);

                    //LogMgr.UnityLog("moveDistance=" + moveDistance + ", clipName=" + clipName);
                }
            }
            else if (behitDisplay.behitType == BehitType.BT_HITDOWN)
            {
                m_actor.StopAll();
                string clipName = behitDisplay.actionList[0];
                m_actor.PlayAction(clipName);
                m_actor.UseCurveData1(clipName, 2.5f);

                m_isUseGravity = false;
                //  ExitBehitState();

                if (!m_actor.IsHadAction(clipName))
                {
                    Vector3    vCurPos = m_actor.transform.position;
                    RaycastHit curHit;
                    //强拉到地面
                    if (Physics.Raycast(vCurPos, -Vector3.up, out curHit, 10, m_groundLayerMask))
                    {
                        vCurPos.y = curHit.point.y;
                    }

                    BaseTool.SetPosition(m_transform, vCurPos);
                }


                float actionLen = m_actor.GetActionLength(clipName);
                Invoke("ExitBehitState", actionLen);

                return;
            }


            else if (behitDisplay.behitType == BehitType.BT_HITSKY)
            {
                //浮空追击
                CancelInvoke("MoveDistanceEnd");
                CancelInvoke("AutoCancelStatic");

                F_ACCE = 0;
                //  SetOriginV(skillDesc.hitSkyOriginV, skillDesc.hitSkyAngle);

                m_actor.StopAll();
                m_actor.PlayAction("hit013", false);
                return;
            }

            //LogMgr.UnityLog("moveDistance=" + moveDistance);


            if (height < 0.5f)
            {
                return;
            }


            //没有位移
            if (moveDistance <= 0.001)
            {
                //F_ACCE = G_ACCE;
                SetOriginV(1, 90);
                m_actor.StopAll();
                m_actor.PlayAction("hit013", false);
            }
            else
            {
                //当前的高度
                SetOriginV(3, 75);
                m_actor.StopAll();
                m_actor.PlayAction("hit013", false);
            }
        }
Exemplo n.º 12
0
        public void OnSkillDamage(DamageParam damageParam)
        {
            long attkerID   = damageParam.attackActor.ServerID;
            int  behitIndex = 0;

            MsgData_sResArenaMemVo attker  = null;
            MsgData_sResArenaMemVo beAtker = null;

            if (attkerID == mArenaFighters[0].RoleID)
            {
                attker     = mArenaFighters[0];
                beAtker    = mArenaFighters[1];
                behitIndex = 1;
            }
            else
            {
                attker     = mArenaFighters[1];
                beAtker    = mArenaFighters[0];
                behitIndex = 0;
            }

            double dmg_value      = .0f;
            double extra_attr_dmg = .0f;
            double attack_dmg     = attker.Atk;

            //1.�����Ƿ�����,Э��û�������ֶΣ���ȥ��

            int src_level = (int)attker.Level;
            int dst_level = (int)beAtker.Level;
            //2.��������,����������
            // ����������;
            string dmgParam = ConfigManager.Instance.Consts.GetValue <string>(3, "param");

            string[] param1 = dmgParam.Split(',');
            float    nVal1  = .0f;
            float    nVal2  = .0f;

            if (param1.Length == 2)
            {
                if (!float.TryParse(param1[0], out nVal1))
                {
                    nVal1 = .0f;
                }
                if (!float.TryParse(param1[1], out nVal2))
                {
                    nVal2 = .0f;
                }
            }

            LuaTable lvupCfg      = ConfigManager.Instance.Actor.GetLevelUpConfig(dst_level);
            double   aviod_param1 = lvupCfg.Get <float>("lv_pvesubdamage");

            dmgParam = ConfigManager.Instance.Consts.GetValue <string>(61, "param");
            param1   = dmgParam.Split('#');
            double aviod_param2 = 0.8f;
            double aviod_param3 = 0.0f;

            string[] param2 = null;
            if (param1.Length > 1)
            {
                param2 = param1[1].Split(',');
            }
            if (null != param2 && param2.Length == 2)
            {
                if (!double.TryParse(param2[0], out aviod_param2))
                {
                    aviod_param2 = 0.8f;
                }
                if (!double.TryParse(param2[1], out aviod_param3))
                {
                    aviod_param3 = 0.0f;
                }
            }

            double damage_f1 = 0.0f;
            double damage_f2 = 0.0f;
            double damage_f3 = 0.0f;
            double dst_def   = Math.Max(1, beAtker.Def - attker.SubDef);

            double dst_avoid_rate = (dst_def / (dst_def + dst_level * aviod_param1)) * aviod_param2 + aviod_param3;

            damage_f1 = (attack_dmg * UnityEngine.Random.Range(nVal1, nVal2) * (1.0f) + extra_attr_dmg) * (1 - dst_avoid_rate);

            // �����Ƿ񱩻�;
            param2 = null;
            if (param1.Length > 2)
            {
                param2 = param1[2].Split(',');
            }
            double critical_param1 = 0.6f;
            double critical_param2 = 0.0f;
            double critical_param3 = 3.0f;

            if (null != param2 && param2.Length == 3)
            {
                if (!double.TryParse(param2[0], out critical_param1))
                {
                    critical_param1 = 0.6f;
                }
                if (!double.TryParse(param2[1], out critical_param2))
                {
                    critical_param2 = 0.0f;
                }
                if (!double.TryParse(param2[2], out critical_param3))
                {
                    critical_param3 = 3.0f;
                }
            }


            double cridam_param1 = 0.5f;
            double cridam_param2 = 0.2f;

            param2 = null;
            if (param1.Length > 3)
            {
                param2 = param1[3].Split(',');
            }
            if (null != param2 && param2.Length == 2)
            {
                if (!double.TryParse(param2[0], out cridam_param1))
                {
                    cridam_param1 = 0.5f;
                }
                if (!double.TryParse(param2[1], out cridam_param2))
                {
                    cridam_param2 = 0.2f;
                }
            }

            double src_critical     = attker.Cri;
            double src_critical_dmg = attker.CriValue;
            double puncture         = attker.AbsAtk;
            double dst_tenacity     = beAtker.DefCri;
            double dst_critical_def = beAtker.SubCri;
            double critical_rate    = 0.0f;

            critical_rate = (src_critical / (src_critical + dst_tenacity * critical_param3)) * critical_param1 + critical_param2;

            double critical_dmg = Math.Max((src_critical_dmg - dst_critical_def + cridam_param1), cridam_param2);             // ����;
            bool   isCritical   = false;

            if (UnityEngine.Random.Range(0.0f, 1.0f) < critical_rate)
            {
                isCritical = true;
                damage_f2  = (damage_f1 + puncture) * (1 + critical_dmg);
            }
            else
            {
                isCritical = false;
                damage_f2  = (damage_f1 + puncture);
            }

            // �����Ƿ񷢶�����,Э��û�������ֶΣ���ȥ��

            // �����˺�;
            double mindmg_param = 0.5f;             //��С�˺�ϵ��;

            damage_f3 = Math.Max(src_level * mindmg_param, damage_f2);

            dmg_value = damage_f3;

            //3.�˺������ͼ���;
            dmg_value = dmg_value * (1 + (attker.DmgAdd * 0.01f));
            dmg_value = dmg_value * (1 - (beAtker.DmgSub * 0.01f));

            //4.�˺�ֵ�����ָ���;
            if (dmg_value <= 1)
            {
                dmg_value = 100.0;
            }

            ActorObj   behitActorObj = damageParam.behitActor;
            BehitParam behitParam    = new BehitParam();

            behitParam.displayType = DamageDisplayType.DDT_NORMAL;
            behitParam.hp          = (int)dmg_value;
            behitParam.damgageInfo = damageParam;
            behitActorObj.OnSkillBeHit(behitParam);

            DoCalHP(behitIndex, dmg_value, isCritical);
        }