Esempio n. 1
0
        public bool Conform(INPC en)
        {
            if (en.IsCanAttackNPC())
            {
                return(false);
            }
            if (CommonCondition.IsPetAndSummon(en))
            {
                return(false);
            }
            if (!CommonCondition.IsNpcCanAttackByTable(en))
            {
                return(false);
            }
            IPlayer    player      = EntitySystem.m_ClientGlobal.MainPlayer;
            ISkillPart m_skillPart = player.GetPart(Client.EntityPart.Skill) as ISkillPart;

            if (m_skillPart != null)
            {
                int error = 0;
                if (m_skillPart.CheckCanAttackTarget(en, out error))
                {
                    return(false);
                }
                else
                {
                    float dis = EntityHelper.GetEntityDistance(player, en);
                    if (dis <= m_nRange && en.IsDead())
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Esempio n. 2
0
 /// <summary>
 ///释放技能表现效果
 /// </summary>
 /// <param name="skill_id"></param>
 /// <param name="skillPart"></param>
 /// <param name="attackActionID"></param>
 void FreeSkill(uint skill_id, ISkillPart skillPart, uint attackActionID)
 {
     if(m_bHideOtherPlayer)
     {
         if(IsMainPlayer())
         {
             m_caster.InitCastSkill(skill_id, skillPart, attackActionID);
         }
         else
         {
             INPC npc = m_Master as INPC;
              if (npc != null)
              {
                  if (!npc.IsMainPlayerSlave())
                  {
                      m_caster.InitCastSkill(skill_id, skillPart, attackActionID);
                  }
              }
         }
     }
     else
     {
         m_caster.InitCastSkill(skill_id, skillPart, attackActionID);
     }
   
 }
Esempio n. 3
0
        public bool Conform(IPlayer en)
        {
            if (en.IsDead())
            {
                return(false);
            }
            if (en.IsHide())
            {
                return(false);
            }
            IPlayer    player      = EntitySystem.m_ClientGlobal.MainPlayer;
            ISkillPart m_skillPart = player.GetPart(Client.EntityPart.Skill) as ISkillPart;

            if (m_skillPart != null)
            {
                int error = 0;
                if (!m_skillPart.CheckCanAttackTarget(en, out error))
                {
                    return(false);
                }
                else
                {
                    float dis = EntityHelper.GetEntityDistance(player, en);
                    if (dis <= m_nRange && !en.IsDead())
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Esempio n. 4
0
        public void InitFollowFx()
        {
            if (m_attacker == null)
            {
                DestroyFx();
                return;
            }
            bStart      = true;
            bDestory    = false;
            m_targetObj = m_attacker.GetTargetGameObject();
            ISkillPart skillPart = m_attacker.GetSkillPart();

            if (skillPart != null)
            {
                m_SkillTarget = skillPart.GetSkillTarget();

                table.SkillDatabase db = GameTableManager.Instance.GetTableItem <table.SkillDatabase>((uint)m_skillId, 1);
                if (db != null)
                {
                    if (db.flyspeed != 0)
                    {
                        m_speed = db.flyspeed * 1.0f / 100;
                    }
                }
            }

            // m_targetNode = m_attacker.GetTargetHitNode();
            m_startTime = Time.time;
            castPos     = m_attacker.GetTargetHitNodePos(m_SkillTarget, targetHitNode);
            float dis = GetVectorDistance(transform.position, castPos);

            totalTime = dis / m_speed;
        }
Esempio n. 5
0
 public CreatureCondition(UnityEngine.Vector3 center, uint rang, long fileterTarget)
 {
     m_rang       = rang;
     m_centerpos  = center;
     m_mainPlayer = EntitySystem.m_ClientGlobal.MainPlayer;
     m_skillPart  = m_mainPlayer.GetPart(Client.EntityPart.Skill) as ISkillPart;
 }
Esempio n. 6
0
    public void InitCastSkill(uint skill_id, ISkillPart skillPart, uint attackActionID)
    {
        if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
        {
            playerSkill = skillPart as PlayerSkillPart;
            SkillEffectProp skillEffectProp;
            if (playerSkill.SkillEffectDic.TryGetValue((int)skill_id, out skillEffectProp) == false)
            {
                skillEffectProp = playerSkill.RegisterSkill(skill_id);
                if (skillEffectProp == null)
                {
                    Log.LogGroup("ZDY", "没有注册技能配置 {0}", skill_id.ToString());
                }
                return;
            }

            playerSkill.NextSkillID     = 0;
            playerSkill.CurSkillID      = skill_id;
            playerSkill.AttackAnimState = null;
            playerSkill.SetFighting(true);

            SkillEffect skillEffect = CreateSkillEffect(skillEffectProp);
            Cast(skillEffect, skill_id);
        }
    }
Esempio n. 7
0
    private void ResetJoystick()
    {
        m_widget_joystick.alpha = 0.5f;
        m_widget_joystick.gameObject.transform.localPosition        = m_trans_joystickPos.localPosition;
        m_sprite_joystickThumb.transform.localPosition              = Vector3.zero;
        m_sprite_joystickBg.transform.localPosition                 = Vector3.zero;
        m_sprite_joystickThumb.GetComponent <BoxCollider>().enabled = false;

        Client.IControllerSystem controllerSys = Client.ClientGlobal.Instance().GetControllerSystem();
        if (controllerSys != null)
        {
            Client.IController ctrl = controllerSys.GetActiveCtrl();
            if (ctrl != null)
            {
                ctrl.OnMessage(Engine.MessageCode.MessageCode_JoystickEnd);
            }
        }
        Engine.Utility.EventEngine.Instance().DispatchEvent((int)(int)Client.GameEventID.JOYSTICK_UNPRESS, null);
        if (MainPlayerHelper.GetMainPlayer() != null)
        {
            ISkillPart part = MainPlayerHelper.GetMainPlayer().GetPart(EntityPart.Skill) as ISkillPart;
            if (part != null)
            {
                int st = part.GetCurSkillState();
                if (st == (int)SkillState.None || st == (int)SkillState.Prepare)
                {
                    stForbiddenJoystick info = new stForbiddenJoystick();
                    info.playerID  = MainPlayerHelper.GetPlayerUID();
                    info.bFobidden = false;
                    EventEngine.Instance().DispatchEvent((int)GameEventID.SKILL_FORBIDDENJOYSTICK, info);
                }
            }
        }
    }
Esempio n. 8
0
        // 根据ID获取技能部件
        public static ISkillPart GetSkillPart(uint uid, EntityType type)
        {
            IEntitySystem es = ClientGlobal.Instance().GetEntitySystem();

            if (es == null)
            {
                Engine.Utility.Log.Error("GetEntitySystem failed!");
                return(null);
            }
            if (type == EntityType.EntityType_NPC)
            {
                IRobot robot = es.FindEntity <IRobot>(uid);
                if (robot != null)
                {
                    type = EntityType.EntityTYpe_Robot;
                }
            }
            long    id     = EntitySystem.EntityHelper.MakeUID(type, uid);
            IEntity player = es.FindEntity(id);

            if (player == null)
            {
                Engine.Utility.Log.Error("GetAttack failed!");
                return(null);
            }

            ISkillPart skillPart = player.GetPart(EntityPart.Skill) as ISkillPart;

            return(skillPart);
        }
Esempio n. 9
0
    public SKILL_RESULT_CODE CastSkill(uint dwSkillID, ref KTarget pTarget)
    {
        int nRetCode = 0;
        SKILL_RESULT_CODE nResult          = SKILL_RESULT_CODE.srcFailed;
        KCharacter        pTargetCharacter = null;

        if (m_pEntity == null)
        {
            return(SKILL_RESULT_CODE.srcFailed);
        }

        ISkillPart skillPart = m_pEntity.GetPart(EntityPart.Skill) as ISkillPart;

        if (skillPart == null)
        {
            return(SKILL_RESULT_CODE.srcFailed);
        }

        if (pTarget == null)
        {
            return(SKILL_RESULT_CODE.srcFailed);
        }

        nRetCode = pTarget.GetTarget(ref pTargetCharacter);
        if (nRetCode == 0 || pTargetCharacter == null)
        {
            return(SKILL_RESULT_CODE.srcFailed);
        }

        IEntity targetEntity = pTargetCharacter.m_pEntity;

        if (targetEntity == null)
        {
            return(SKILL_RESULT_CODE.srcFailed);
        }

        skillPart.ReqNpcUseSkill(targetEntity, dwSkillID);


        //
        KSkill pSkill = FirstFightMgr.Instance().m_SkillManager.GetSkill(dwSkillID);

        pSkill.Cast(this, this, ref pTarget);



        //测试代码
        // 伤害飘子
        //FlyFontDataManager.Instance.ShowDamage(999, 1, pTargetCharacter.m_dwID, EntityType.EntityType_NPC, 1000000);
        //pTargetCharacter.Test_ConcludeResult();



        nResult = SKILL_RESULT_CODE.srcSuccess;
Exit0:
        return(nResult);
    }
Esempio n. 10
0
        // 进入状态
        public override void Enter(object param)
        {
            totalTime = 0;
            skillPart = m_SkillPart;
            if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
            {
                PlayerSkillPart playerSkill = skillPart as PlayerSkillPart;
                if (playerSkill.AttackAnimState != null)
                {
                    //  playerSkill.PlaySkillAnim("Skill005", false);
                    //收招
                    string aniName = playerSkill.AttackAnimState.name + "_over";
                    if (playerSkill.Master.GetAnimationState(aniName) != null)
                    {
                        playerSkill.PlaySkillAnim(aniName, false);
                    }
                }
                else
                {
                    //Engine.Utility.Log.Trace("SkillOverState.Enter {0}技能收招动作为空!", playerSkill.GetMaster().GetName());
                }
                playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, false);
                if (playerSkill.IsMainPlayer())
                {
                    stNextSkill       st = new stNextSkill();
                    IControllerSystem cs = playerSkill.GetCtrollerSys();
                    if (cs == null)
                    {
                        Log.Error("ExecuteCmd: ControllerSystem is null");
                        return;
                    }

                    if (cs.GetCombatRobot().Status == CombatRobotStatus.RUNNING)
                    {
                        if (playerSkill.IsCombo(playerSkill.CurSkillID))
                        {//挂机连击
                            st.curSkillID = playerSkill.CurSkillID;
                            SkillDoubleHitDataBase db = GameTableManager.Instance.GetTableItem <SkillDoubleHitDataBase>((uint)playerSkill.CurSkillID);
                            if (db != null)
                            {
                                st.nextSkillID = db.nextskillid;
                                if (db.nextskillid == db.beginskillid)
                                {//挂机第三招要收招
                                    st.nextSkillID = 0;
                                }
                                EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLSYSTEM_STIFFTIMEOVER, st);
                            }
                        }
                    }
                    else
                    {//非挂机时  插入其他技能
                        st.nextSkillID = 0;
                        EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLSYSTEM_STIFFTIMEOVER, st);
                    }
                }
            }
        }
Esempio n. 11
0
    public void Execute(GameCmd.stNotifyUninterruptMagicUserCmd_S cmd)
    {
        if (cmd.actiontype == UninterruptActionType.UninterruptActionType_SkillCJ)
        {
            ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.userid, EntityType.EntityType_Player);

            if (skillPart == null)
            {
                Engine.Utility.Log.Error("获取主角技能部件失败!");
                return;
            }
            Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSBREAK,
                                                                new stGuildBreak()
            {
                action = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ, uid = cmd.userid, skillid = skillPart.GetCurSkillDataBase().wdID
            });
            TimerAxis.Instance().KillTimer(m_uReadSliderTimerID, this);
            skillPart.OnInterruptSkill(cmd.userid, cmd.time, cmd.type, (uint)cmd.actiontype);
        }
        else if (cmd.actiontype == UninterruptActionType.UninterruptActionType_GOHOME)
        {
            long id = EntitySystem.EntityHelper.MakeUID(EntityType.EntityType_Player, cmd.userid);

            IEntitySystem pEntitySystem = ClientGlobal.Instance().GetEntitySystem();
            if (pEntitySystem != null)
            {
                IPlayer pPlayer = pEntitySystem.FindPlayer((uint)id);
                if (pPlayer != null)
                {
                    if (pPlayer.IsMainPlayer())
                    {
                        Client.stUninterruptMagic param = new Client.stUninterruptMagic();
                        param.time  = cmd.time;
                        param.type  = cmd.actiontype;
                        param.uid   = id;
                        param.npcId = cmd.npcid;
                        EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, param);
                    }
                    else
                    {
                    }
                }
            }
        }
        else
        {
            long id = EntitySystem.EntityHelper.MakeUID(EntityType.EntityType_Player, cmd.userid);

            Client.stUninterruptMagic param = new Client.stUninterruptMagic();
            param.time  = cmd.time;
            param.type  = cmd.actiontype;
            param.uid   = id;
            param.npcId = cmd.npcid;
            EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, param);
        }
    }
Esempio n. 12
0
 bool IsHideFx()
 {
     if (m_Atttacker != null)
     {
         ISkillPart sp = m_Atttacker.GetSkillPart();
         if (sp != null)
         {
             return(sp.IsHideOtherFx());
         }
     }
     return(false);
 }
Esempio n. 13
0
        public SkillStateBase(Engine.Utility.StateMachine <ISkillPart> machine, ISkillPart skillpart)
        {
            m_Statemachine = machine;
            m_SkillPart    = skillpart;
            if (skillpart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
            {
                PlayerSkillPart skill = skillpart as PlayerSkillPart;

                m_isMainPlayer = SkillSystem.GetClientGlobal().IsMainPlayer(skill.GetMaster());
                m_caster       = skill.Caster;
            }
        }
Esempio n. 14
0
    public void Execute(GameCmd.stMultiAttackDownMagicUserCmd_S cmd)
    {
        EntityType type      = EntitySystem.EntityHelper.GetEntityEtype(cmd.byAttackerType);
        ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.dwAttackerID, type);

        if (skillPart == null)
        {
            Engine.Utility.Log.Error("获取type :{0} id:{1}技能部件失败!", type, cmd.dwAttackerID);
            return;
        }
        // 处理技能结果
        skillPart.OnDamage(cmd);
        //服务器发送打断
    }
Esempio n. 15
0
    public void AddSkill(GameCmd.stAddSkillUserCmd_S cmd)
    {
        ISkillPart skillPart = SkillHelper.GetMainPlayerSkillPart();

        List <GameCmd.stAddSkillUserCmd_S.Item> skillList = new List <stAddSkillUserCmd_S.Item>();

        skillList = cmd.data;

        List <uint> updateSkillIds = new List <uint>();
        Dictionary <uint, SkillInfo> skillInfos = new Dictionary <uint, SkillInfo>();
        SkillInfo skillInfo = null;


        for (int i = 0; i < skillList.Count; i++)
        {
            var  item    = skillList[i];
            uint totalid = item.id;

            ushort skillID = (ushort)(totalid >> 16);
            ushort level   = (ushort)totalid;

            uint coldTime = item.cold;
            skillInfo = new SkillInfo((uint)skillID, (uint)level, coldTime);
            DataManager.Manager <LearnSkillDataManager>().InitUserSkill((uint)skillID, (uint)level, coldTime, item.hookfalg);
            DataManager.Manager <ArenaSetSkillManager>().InitUserSkill((uint)skillID, (uint)level, coldTime);
            DataManager.Manager <ClanManger>().InitUserSkill((uint)skillID, (uint)level, coldTime);
            Log.LogGroup("ZDY", "add skill {0} lev = {1}", skillID, level);
            if (skillPart != null)
            {
                skillPart.OnAddSkill((uint)skillID, (uint)level, coldTime);
            }
            else
            {
                Log.Error("skillpart is null");
            }


            if (!skillInfos.ContainsKey(skillID))
            {
                skillInfos.Add(skillID, skillInfo);
            }
        }

        //氏族技能
        DataManager.Manager <ClanManger>().OnPlayerSkillUpdate(skillInfos.Keys.ToList());
        DataManager.Manager <LearnSkillDataManager>().OnSkillAdd(skillInfos, (GameCmd.SkillAddType)cmd.type);
        DataManager.Manager <LearnSkillDataManager>().DispatchRedPoingMsg();
    }
Esempio n. 16
0
    void ReqUsePetSkill(stMultiAttackUpMagicUserCmd_C cmd)
    {
        IPlayer player = MainPlayerHelper.GetMainPlayer();

        if (player == null)
        {
            return;
        }
        ISkillPart sp = player.GetPart(EntityPart.Skill) as ISkillPart;

        if (sp == null)
        {
            return;
        }
        sp.RequestUsePetSkill(cmd);
    }
Esempio n. 17
0
    public void Execute(GameCmd.stNotifyUninterruptEventMagicUserCmd_CS cmd)
    {
        GameCmd.UninterruptActionType action = (UninterruptActionType)cmd.actiontype;
        if (action == UninterruptActionType.UninterruptActionType_SkillCJ)
        {
            ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.desid, EntityType.EntityType_Player);
            if (skillPart == null)
            {
                Engine.Utility.Log.Error("获取技能部件失败!");
                return;
            }
            skillPart.OnInterruptEventSkill((uint)cmd.etype);
        }
        else
        {
            if (cmd.etype == stNotifyUninterruptEventMagicUserCmd_CS.EventType.EventType_Break)
            {
                if (ClientGlobal.Instance().IsMainPlayer(cmd.desid) && action == UninterruptActionType.UninterruptActionType_CampCJ)
                {
                    TipsManager.Instance.ShowTips("采集被打断了");
                }

                Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSBREAK,
                                                                    new stGuildBreak()
                {
                    action = action, uid = cmd.desid, npcId = cmd.npcid
                });
            }
            else if (cmd.etype == stNotifyUninterruptEventMagicUserCmd_CS.EventType.EventType_Over)
            {
                Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSEND,
                                                                    new stGuildEnd()
                {
                    action = action, uid = cmd.desid, npcId = cmd.npcid
                });

                if (action == UninterruptActionType.UninterruptActionType_CampCJ)
                {
                    Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.CAMP_ADDCOLLECTNPC,
                                                                        new stCampCollectNpc()
                    {
                        enter = false
                    });
                }
            }
        }
    }
Esempio n. 18
0
        public bool Conform(INPC en)
        {
            IClientGlobal cg        = SkillSystem.GetClientGlobal();
            IEntity       player    = cg.MainPlayer;
            ISkillPart    skillPart = (ISkillPart)player.GetPart(EntityPart.Skill);
            SkillDatabase db        = skillPart.GetCurSkillDataBase();

            if (db != null)
            {
                float dis = EntitySystem.EntityHelper.GetEntityDistance(player, en);
                if (dis <= db.dwAttackDis)
                {
                    return(true);
                }
            }
            return(false);
        }
Esempio n. 19
0
    public void SetCurStateSkillList()
    {
        SortedDictionary <int, uint> tempDic = null;

        if (CurState == SkillSettingState.StateOne)
        {
            tempDic = stateOneDic;
        }
        else if (CurState == SkillSettingState.StateTwo)
        {
            tempDic = stateTwoDic;
        }
        List <uint> skillIDList = new List <uint>();

        var iter = tempDic.GetEnumerator();

        while (iter.MoveNext())
        {
            var dic = iter.Current;
            if (dic.Value != 0)
            {
                if (m_autoFightSkillStatus.ContainsKey(dic.Value))
                {
                    if (m_autoFightSkillStatus[dic.Value] == 1)
                    {
                        skillIDList.Add(dic.Value);
                    }
                }
            }
        }
        //  skillIDList.Reverse();
        uint commonSkillID = GetCommonSkillIDByJob();

        skillIDList.Insert(0, commonSkillID);
        ISkillPart skillPart = Protocol.SkillHelper.GetMainPlayerSkillPart();

        if (skillPart != null)
        {
            skillPart.SetCurStateList(skillIDList);
        }

        Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.SKILLSYSTEM_SKILLLISTCHANE, (int)CurState);
    }
Esempio n. 20
0
 void DoInsertSkill()
 {
     if (m_commondQue.Count > 0)
     {
         //技能
         IPlayer mp = MainPlayerHelper.GetMainPlayer();
         if (mp != null)
         {
             ISkillPart sp = mp.GetPart(EntityPart.Skill) as ISkillPart;
             if (sp != null)
             {
                 stSkillCommond st = m_commondQue.Dequeue();
                 if (st.type == 0)
                 {
                     OnUseSkill(st.skillID);
                 }
             }
         }
     }
 }
Esempio n. 21
0
    public void GetDesPos(stGetDstPosDataUserCmd_CS cmd)
    {
        IEntity player = EntitySystem.EntityHelper.GetEntity(SceneEntryType.SceneEntry_Player, cmd.userid);

        //Move move = new Move();
        //move.m_speed = player.GetProp( (int)CreatureProp.MoveSpeed ) * 0.001f; // 速度为测试速度
        ////move.m_target = scenePos;
        //move.strRunAct = Client.EntityAction.Run;
        //move.path = new List<Vector3>();
        //move.path.Add( new Vector3( cmd.x , 0 , -cmd.y ) );

        if (player != null)
        {
            ISkillPart skillPart = player.GetPart(EntityPart.Skill) as ISkillPart;
            skillPart.GetDesPos(cmd);
        }
        //IEntity npc = EntitySystem.EntityHelper.GetEntity( SceneEntryType.SceneEntry_NPC , cmd.npcid );
        //if(npc != null)
        //{
        //    npc.SendMessage( EntityMessage.EntityCommand_MovePath , (object)move );
        //}
    }
Esempio n. 22
0
    public void ExecuteSkillFailed(GameCmd.stMultiAttackReturnMagicUserCmd_S cmd)
    {
        ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.dwUserID, EntityType.EntityType_Player);

        if (skillPart == null)
        {
            Engine.Utility.Log.Error("获取主角技能部件失败!");
            return;
        }
        else
        {
            Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSBREAK,
                                                                new stGuildBreak()
            {
                action = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ, uid = cmd.dwUserID, skillid = cmd.wdSkillID
            });
            TimerAxis.Instance().KillTimer(m_uReadSliderTimerID, this);
            string str = "";// "skill error code = " + cmd.fail_code + " ";
            if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_success)
            {
                //使用成功
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_break)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_jinengbeidaduan);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_use)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_jinengzhengzaishiyong);
                Log.Error("使用过程 error code {0}", cmd.fail_code);
            }

            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_outRange)
            {
                Client.IControllerSystem cs = ClientGlobal.Instance().GetControllerSystem();
                if (cs != null)
                {
                    Client.ICombatRobot robot = cs.GetCombatRobot();
                    if (robot != null && robot.Status == CombatRobotStatus.RUNNING)
                    {
                        if (MainPlayerHelper.GetMainPlayer() == null)
                        {
                            return;
                        }
                        ISkillPart sp = MainPlayerHelper.GetMainPlayer().GetPart(EntityPart.Skill) as ISkillPart;
                        if (sp == null)
                        {
                            return;
                        }

                        if (sp.GetSkillTarget() != null)
                        {
                            Move    move     = new Move();
                            Vector3 targePos = sp.GetSkillTarget().GetPos();
                            Vector3 dir      = targePos - MainPlayerHelper.GetMainPlayer().GetPos();
                            targePos           = targePos - dir.normalized * 1f;
                            move.m_target      = targePos;
                            move.m_ignoreStand = true;
                            Log.Error("自动挂机,打不到,朝向目标移动");

                            IController ctr = cs.GetActiveCtrl();
                            if (ctr != null)
                            {
                                ctr.MoveToTarget(targePos);
                            }
                            //MainPlayerHelper.GetMainPlayer().SendMessage(EntityMessage.EntityCommand_MoveTo, (object)move);
                            // Vector3 lookat = playerSkill.GetSkillTarget().GetNode().GetTransForm().forward;
                            return;
                        }
                    }
                }

                str = GetLocalText(LocalTextType.Skill_Commond_mubiaochaochugongjijuli);
                Log.Error("技能使用超超出范围 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_shapeErr)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_bianshenzhuangtaixiabunengshiyongjineng);
                Log.Error("变身不能使用技能 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_petFight)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_chongwuweichuzhanbunengshiyongjineng);
                Log.Error("宠物未出战不能使用技能 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_notExist)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_jinengbucunzai);
                Log.Error("技能不存在 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_none)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_jinengweizhicuowu);
                Log.Error("技能未知 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_needAim)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_shifanggaijinengxuyaoxuanzemubiao);
                Log.Error("技能需要目标error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_aimErr)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_mubiaoxuanzecuowu);
                Log.Error("技能目标错误 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_cantAtt)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_dangqianmubiaowufagongji);
                Log.Error("目标无法攻击 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_inCD)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_jinenglengquezhong);
                Log.Error("技能冷却中 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_lackSP)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_fashuzhibuzu);
                Log.Error("缺蓝 error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_flagsErr)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_dangqianjinengzhuangtaicuowu);
                Log.Error("flags error code {0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_NeedItemNumNotEnough)
            {
                str = GetLocalText(LocalTextType.Skill_Commond_shiyongchongwujinnegsuoxudaojubuzu);
                Log.Error("使用宠物技能所需道具不足{0}", cmd.fail_code);
            }
            else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_rideCantUse)
            {
                NetService.Instance.Send(new GameCmd.stDownRideUserCmd_C()
                {
                });
                return;
                //str = GetLocalText(LocalTextType.Skill_Commond_qichengzhuangtaiwufashiyongzhujuejineng);
                //Log.Error("骑乘无法使用技能{0}", cmd.fail_code);
            }
            else if (cmd.fail_code == 16)
            {                        //协议未更新 先写数字防止后期忘了
                str = "眩晕状态,技能不能使用"; // GetLocalText(LocalTextType.Skill_Commond_qichengzhuangtaiwufashiyongzhujuejineng);
                Log.Error("瞬移技能不能使用{0}", cmd.fail_code);
            }
            else
            {
                str = GetLocalText(LocalTextType.Skill_Commond_jinengweizhicuowu);
                Log.Error("技能未知错误 ");
            }
            if (cmd.dwUserID == MainPlayerHelper.GetPlayerID())
            {
                TipsManager.Instance.ShowTips(str);
            }
        }

        skillPart.OnUseSkillFailed(cmd.dwUserID, cmd.wdSkillID);
    }
Esempio n. 23
0
        // 进入状态
        public override void Enter(object param)
        {
            Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYSTOPMOVE, OnEvent);
            Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYBEGINMOVE, OnEvent);

            m_skillDoubleDb = null;
            m_fTotalTime    = 0;
            skillPart       = m_SkillPart;
            // m_skillDatabase = skillPart.GetCurSkillDataBase();

            if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
            {
                PlayerSkillPart playerSkill = skillPart as PlayerSkillPart;
                //m_nDoubleHitSkillId = (uint)playerSkill.NextSkillID;
                if (playerSkill.IsMainPlayer())
                {
                    Log.LogGroup("ZDY", "mainpalyer enter skillattackstate================");
                }
                m_skillDatabase = GameTableManager.Instance.GetTableItem <SkillDatabase>(playerSkill.CurSkillID, 1);


                if (m_skillDatabase == null)
                {
                    m_Statemachine.ChangeState((int)SkillState.None, null);
                    return;
                }
                m_uDbJiangzhiTime          = m_skillDatabase.wdStiffTime;
                playerSkill.SkillStiffTime = 0;
                m_skillDoubleDb            = GameTableManager.Instance.GetTableItem <SkillDoubleHitDataBase>(playerSkill.CurSkillID);
                if (IsMainPlayer())
                {
                    Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLSYSTEM_USESKILL, playerSkill.CurSkillID);
                }

                if (m_skillDatabase.dwMoveType == (uint)SkillMoveType.FastMove)
                {
                    //处理位移技能
                    Move    move     = new Move();
                    Vector3 targePos = playerSkill.Master.GetPos();
                    if (playerSkill.GetSkillTarget() != null)
                    {
                        targePos = playerSkill.GetSkillTarget().GetPos();
                        Vector3 dir = targePos - playerSkill.Master.GetPos();
                        targePos      = targePos - dir.normalized * 1f;
                        move.m_target = targePos;
                        // Vector3 lookat = playerSkill.GetSkillTarget().GetNode().GetTransForm().forward;
                    }
                    else
                    {
                        m_Statemachine.ChangeState((int)SkillState.None, playerSkill);
                        Log.LogGroup("ZDY", "skilltarget is null");
                        return;
                    }

                    move.m_ignoreStand = true;
                    if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
                    {
                        Log.LogGroup("ZDY", "冲锋 目标位置 " + targePos);
                    }
                    AnimationState ani = playerSkill.AttackAnimState;
                    if (ani == null)
                    {
                        m_Statemachine.ChangeState((int)SkillState.None, playerSkill);
                        Log.LogGroup("ZDY", "ani is null");
                        return;
                    }
                    move.strRunAct = ani.name;
                    int   curSpeed  = playerSkill.Master.GetProp((int)WorldObjProp.MoveSpeed);
                    uint  flySpeed  = m_skillDatabase.flyspeed;
                    float speedFact = 1;
                    if (flySpeed != 0)
                    {
                        speedFact = flySpeed * 1.0f / curSpeed;
                    }
                    Log.LogGroup("ZDY", "冲锋倍数 " + speedFact);
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true);
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)speedFact);

                    float dis = Vector3.Distance(targePos, playerSkill.Master.GetPos());
                    if (dis > 1)
                    {
                        Log.LogGroup("ZDY", " send moveto ");
                        playerSkill.Master.SendMessage(EntityMessage.EntityCommand_MoveTo, (object)move);
                    }

                    playerSkill.gotoPos = targePos;
                }
                else
                {
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)1f);
                }
                if (m_skillDatabase.useSkillType == (int)UseSkillType.GuideNoSlider)
                {
                    if (m_skillDatabase.dwMoveType == (int)SkillMoveType.SkillOverMove)
                    {
                        playerSkill.Master.SendMessage(EntityMessage.EntityCommand_SetVisible, false);
                    }
                    if (m_skillDatabase.wdStiffTime == 0)
                    {//狂扫八方的技能
                        playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true);
                    }
                }
                else if (m_skillDatabase.useSkillType == (int)UseSkillType.GuideSlider)
                {
                    if (playerSkill.IsMainPlayer())
                    {
                        Client.stUninterruptMagic evenparam = new Client.stUninterruptMagic();
                        evenparam.time = m_skillDatabase.dwGuideTime;
                        evenparam.type = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ;
                        evenparam.uid  = SkillSystem.GetClientGlobal().MainPlayer.GetUID();
                        EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, evenparam);
                    }
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true);
                }
                //
                if (m_skillDatabase.dwUseMethod == (int)UseMethod.ContinueLock)
                {
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommand_SetVisible, false);
                }


                INPC npc = playerSkill.Master as INPC;
                if (npc != null)
                {
                    int masterID = npc.GetProp((int)NPCProp.Masterid);
                    if (masterID == PlayerSkillPart.m_ClientGlobal.MainPlayer.GetID())
                    {
                        /*     Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLCD_BEGIN, playerSkill.CurSkillID);*/
                    }
                }
            }
        }
Esempio n. 24
0
    /// <summary>
    /// 刷数据
    /// </summary>
    void RefreshTargetGridData()
    {
        IEntitySystem entitySystem = ClientGlobal.Instance().GetEntitySystem();
        IPlayer       mainPlayer   = ClientGlobal.Instance().MainPlayer;

        if (entitySystem == null)
        {
            return;
        }

        if (mainPlayer == null)
        {
            return;
        }

        ISkillPart sp = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart;

        if (sp == null)
        {
            return;
        }

        m_lstAllEnemy.Clear();
        m_lstTargetEnemyId.Clear();

        //加入已经锁的敌人
        for (int i = 0; i < m_lstLockEnemyId.Count; i++)
        {
            if (m_lstTargetEnemyId.Count < 5)
            {
                m_lstTargetEnemyId.Add(m_lstLockEnemyId[i]);
            }
        }

        //所有人
        entitySystem.FindNearstPlayer(ref m_lstAllPlayer);

        //所有敌人
        for (int i = 0; i < m_lstAllPlayer.Count; i++)
        {
            int nSkillError;

            //最多选取5个可攻击敌人(减少计算量)
            if (m_lstAllEnemy.Count >= 5)
            {
                break;
            }

            bool b = sp.CheckCanAttackTarget(m_lstAllPlayer[i], out nSkillError);
            if (b)
            {
                m_lstAllEnemy.Add(m_lstAllPlayer[i]);
            }
        }

        //加入选中的敌人
        if (m_lstTargetEnemyId.Count < 5 && false == m_lstTargetEnemyId.Contains(m_selectEnemyId))
        {
            bool b = false;
            for (int i = 0; i < m_lstAllEnemy.Count; i++)
            {
                if (m_lstAllEnemy[i].GetID() == m_selectEnemyId)
                {
                    b = true;
                    m_lstTargetEnemyId.Add(m_selectEnemyId);
                }
            }

            //无选中的
            if (false == b)
            {
                this.m_selectEnemyId = 0;
            }
        }

        //清除不在九宫格的
        //for (int i = m_lstTargetEnemyId.Count - 1; i >= 0; i--)
        //{
        //    if (m_lstLockEnemyId.Contains(m_lstTargetEnemyId[i]))
        //    {
        //        continue;
        //    }

        //    bool exist = false;
        //    for (int j = 0; j < m_lstAllEnemy.Count; j++)
        //    {
        //        if (m_lstAllEnemy[j].GetID() == m_lstTargetEnemyId[i])
        //        {
        //            exist = true;
        //        }
        //    }

        //    if (false == exist)
        //    {
        //        m_lstTargetEnemyId.Remove(m_lstTargetEnemyId[i]);
        //    }
        //}


        for (int i = 0; i < m_lstAllEnemy.Count; i++)
        {
            //排除玩家自己
            uint enemyId      = m_lstAllEnemy[i].GetID();
            uint mainPlayerId = mainPlayer.GetID();

            //玩家自己,排除
            if (enemyId == mainPlayerId)
            {
                continue;
            }

            //string name = string.Format("--->>> enemyName = {0}", m_lstAllEnemy[i].GetName());
            //Debug.LogError(name);

            //已经在列表中
            if (m_lstTargetEnemyId.Contains(enemyId))
            {
                continue;
            }

            //新加入进来的(最多5个)
            if (m_lstTargetEnemyId.Count < 5)
            {
                m_lstTargetEnemyId.Add(enemyId);
            }
        }
    }
Esempio n. 25
0
        public IEntity FindMinHpTeamer(uint range)
        {
            IControllerSystem cs = EntitySystem.m_ClientGlobal.GetControllerSystem();

            if (cs == null)
            {
                return(null);
            }
            IControllerHelper ch = cs.GetControllerHelper();

            if (ch == null)
            {
                return(null);
            }
            m_minHpPlayerList.Clear();
            FindAllEntity <IPlayer>(ref m_minHpPlayerList);
            List <IPlayer> myTeamList = new List <IPlayer>();

            for (int i = 0; i < m_minHpPlayerList.Count; i++)
            {
                IPlayer player = m_minHpPlayerList[i];

                if (ch.IsSameTeam(player))
                {
                    IPlayer mainPlayer = m_ClientGlobal.MainPlayer;
                    if (mainPlayer != null)
                    {
                        ISkillPart sp = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart;
                        if (sp != null)
                        {
                            int error = 0;
                            if (!sp.CheckCanAttackTarget(player, out error))
                            {
                                myTeamList.Add(player);
                            }
                        }
                    }
                }
            }
            IEntity en = null;

            for (int i = 0; i < myTeamList.Count; i++)
            {
                IPlayer player = myTeamList[i];
                if (en == null)
                {
                    en = player;
                }
                int   maxHp       = en.GetProp((int)CreatureProp.MaxHp);
                int   curHP       = en.GetProp((int)CreatureProp.Hp);
                float oldScale    = (maxHp - curHP) * 1.0f / maxHp;
                int   playermaxHp = player.GetProp((int)CreatureProp.MaxHp);
                int   playercurHP = player.GetProp((int)CreatureProp.Hp);
                float newScale    = (playermaxHp - playercurHP) * 1.0f / playermaxHp;
                if (newScale > oldScale)
                {
                    en = player;
                }
            }
            return(en);
        }
Esempio n. 26
0
 public SkillOverState(StateMachine <ISkillPart> machine, ISkillPart caster)
     : base(machine, caster)
 {
     m_nStateID = (int)SkillState.Over;
 }
Esempio n. 27
0
    public void Execuete(GameCmd.stReturnObjectPosMagicUserCmd_S cmd)
    {
        //冲锋应该是goto  瞬移应该是enumMoveType_Immediate  此处待后台修改 前台先山寨一下
        if (cmd.byMoveType == stReturnObjectPosMagicUserCmd_S.enumMoveType.enumMoveType_GoTo || cmd.byMoveType == stReturnObjectPosMagicUserCmd_S.enumMoveType.enumMoveType_Immediate)
        {
            IEntitySystem es = ClientGlobal.Instance().GetEntitySystem();
            if (es == null)
            {
                Engine.Utility.Log.Error("GetEntitySystem failed!");
                return;
            }

            stEntryPosition userPos = cmd.userpos;
            if (userPos != null)
            {
                IEntity player = es.FindEntity <IPlayer>(userPos.dwTempID);
                if (player != null)
                {
                    //MapVector2 mapPos = MapVector2.FromCoordinate(userPos.x, userPos.y);
                    Vector3    pos       = new Vector3(userPos.cur_pos.x * 0.01f, 0, -userPos.cur_pos.y * 0.01f); // 服务器到客户端坐标转换
                    ISkillPart skillPart = SkillHelper.GetSkillPart(userPos.dwTempID, EntityType.EntityType_Player);

                    if (skillPart != null)
                    {
                        if (skillPart.IsFastMove())
                        {
                            Move move = new Move();
                            move.m_target      = pos;
                            move.m_ignoreStand = true;
                            player.SendMessage(EntityMessage.EntityCommand_MoveTo, (object)move);
                        }
                        else
                        {
                            //不是在释放快速移动技能 立刻设置位置 否则延迟设置

                            player.SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                            //Vector3 rot = GameUtil.S2CDirection(userPos.byDir);
                            //player.SendMessage(EntityMessage.EntityCommand_SetRotate, (object)rot);
                        }
                        IEntity skillTarget = skillPart.GetSkillTarget();
                        if (skillTarget != null && skillTarget.GetUID() != player.GetUID())
                        {
                            SkillDatabase db = skillPart.GetCurSkillDataBase();
                            if (db != null)
                            {
                                if (db.targetType == (int)SkillTargetType.TargetForwardPoint)
                                {
                                    return;
                                }
                            }
                            player.SendMessage(EntityMessage.EntityCommand_LookTarget, skillTarget.GetPos());
                        }
                    }
                }
            }

            if (cmd.npcpos != null)
            {
                INPC npc = es.FindEntity <INPC>(cmd.npcpos.dwTempID);
                if (npc != null)
                {
                    //MapVector2 mapPos = MapVector2.FromCoordinate(cmd.npcpos.x, cmd.npcpos.y);
                    Vector3    pos       = new Vector3(cmd.npcpos.cur_pos.x * 0.01f, 0, -cmd.npcpos.cur_pos.y * 0.01f); // 服务器到客户端坐标转换
                    ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.npcpos.dwTempID, EntityType.EntityType_NPC);

                    if (skillPart != null)
                    {  //不是在释放快速移动技能 立刻设置位置 否则延迟设置
                        npc.SendMessage(EntityMessage.EntityCommand_StopMove, (object)pos);
                    }
                }
            }

            EventEngine.Instance().DispatchEvent((int)GameEventID.CAMERA_MOVE_END);
        }
    }
Esempio n. 28
0
    public void OnUseSkill(uint uSkillID)
    {
        if (uSkillID == 0)
        {
            return;
        }
        IControllerSystem cs = ClientGlobal.Instance().GetControllerSystem();

        if (cs == null)
        {
            Engine.Utility.Log.Error("ExecuteCmd: ControllerSystem is null");
            return;
        }

        ICombatRobot combot = cs.GetCombatRobot();

        if (combot.Status == CombatRobotStatus.RUNNING)
        {
            //解除普攻连击
            stSkillLongPress longPress = new stSkillLongPress();
            longPress.bLongPress = false;
            EventEngine.Instance().DispatchEvent((int)GameEventID.SKLL_LONGPRESS, longPress);
            combot.InsertSkill(uSkillID);

            return;
        }
        bool canuse = EventEngine.Instance().DispatchVote((int)GameVoteEventID.SKILL_CANUSE, uSkillID);

        if (canuse)
        {
            table.SkillDatabase db = GameTableManager.Instance.GetTableItem <table.SkillDatabase>(uSkillID, 1);
            if (db != null)
            {
                IControllerSystem ctrl = ClientGlobal.Instance().GetControllerSystem();
                if (ctrl != null)
                {
                    MessageCode code = MessageCode.MessageCode_ButtonX;

                    ctrl.OnMessage(code, uSkillID);
                }
            }
        }
        else
        {
            IPlayer mainPlayer = MainPlayerHelper.GetMainPlayer();
            if (mainPlayer != null)
            {
                ISkillPart skillPart = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart;
                if (skillPart != null)
                {
                    Client.stTipsEvent en = skillPart.GetSkillNotUseReason(uSkillID);
                    if (en.errorID != 0)
                    {
                        EventEngine.Instance().DispatchEvent((int)GameEventID.TIPS_EVENT, en);
                    }
                }
            }

            AddSkillCommond(uSkillID);
        }
    }
Esempio n. 29
0
    public void PrepareUseSkill(GameCmd.stPrepareUseSkillSkillUserCmd_S cmd)
    {
        EntityType type      = EntitySystem.EntityHelper.GetEntityEtype(cmd.usertype);
        ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.userid, type);

        if (skillPart == null)
        {
            Engine.Utility.Log.Error("获取技能部件失败!" + cmd.userid + " type is " + Enum.GetName(typeof(EntityType), type));
            return;
        }
        if (cmd.level == 0)
        {
            cmd.level = 1;
        }
        SkillDatabase database = GameTableManager.Instance.GetTableItem <table.SkillDatabase>(cmd.skillid, (int)cmd.level);

        if (database == null)
        {
            Engine.Utility.Log.Error(" skill database is null skillid is " + cmd.skillid.ToString() + " level is " + cmd.level.ToString());
            return;
        }
        skillPart.OnPrepareUseSkill(cmd);


        if (type == EntityType.EntityType_Player)
        {
            uint time = (database.dwReadTime);
            if (time > 0)
            {
                TimerAxis.Instance().SetTimer(m_uReadSliderTimerID, time, this, 1);
            }
        }
        else if (type == EntityType.EntityType_NPC)
        {
            IEntitySystem es = ClientGlobal.Instance().GetEntitySystem();
            if (es == null)
            {
                Engine.Utility.Log.Error("GetEntitySystem failed!");
                return;
            }

            INPC npc = es.FindEntity <INPC>(cmd.userid);
            if (npc != null)
            {
                int masterID = npc.GetProp((int)NPCProp.Masterid);
                if (masterID == MainPlayerHelper.GetPlayerID())
                {
                    SkillDatabase db = GameTableManager.Instance.GetTableItem <SkillDatabase>((uint)cmd.skillid);
                    if (db != null)
                    {
                        if (db.petType == 1 || db.petType == 2)
                        {
                            Client.stSkillCDChange st = new Client.stSkillCDChange();
                            st.skillid = (uint)cmd.skillid;
                            st.cd      = -1;
                            Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.SKILLCD_BEGIN, st);
                            TipsManager.Instance.ShowTips(npc.GetName() + CommonData.GetLocalString("使用") + db.strName);
                        }
                    }
                }
            }
        }
    }
Esempio n. 30
0
        //-------------------------------------------------------------------------------------------------------
        public void AddPart(EntityPart enPart)
        {
            int entityPart = (int)enPart;

            if (m_Parts.ContainsKey(entityPart))
            {
                return;
            }

            switch (enPart)
            {
            case EntityPart.Skill:        // 技能
            {
                ISkillSystem skillSys = EntitySystem.m_ClientGlobal.GetSkillSystem();
                if (skillSys == null)
                {        //编辑器模式不需要
                    break;
                }
                ISkillPart skillPart = skillSys.CreateSkillPart();
                if (skillPart == null)
                {
                    return;
                }
                if (!skillPart.Create(this))
                {
                    Engine.Utility.Log.Error("AddPart failed!");
                    skillPart = null;
                    return;
                }
                m_Parts[entityPart] = skillPart;
                break;
            }

            case EntityPart.Buff:     // Buff
            {
                ISkillSystem skillSys = EntitySystem.m_ClientGlobal.GetSkillSystem();
                if (skillSys == null)
                {        //编辑器模式不需要
                    break;
                }
                IBuffPart buffpart = skillSys.CreateBuffPart();
                if (buffpart == null)
                {
                    return;
                }

                if (!buffpart.Create(this))
                {
                    Engine.Utility.Log.Error("AddPart failed!");
                    buffpart = null;
                    return;
                }
                m_Parts[entityPart] = buffpart;
                break;
            }

            case EntityPart.Equip:     // Equip 装备
            {
                IEquipPart equipPart = new EquipPart();
                if (equipPart == null)
                {
                    return;
                }

                if (!equipPart.Create(this))
                {
                    Engine.Utility.Log.Error("AddPart failed!");
                    equipPart = null;
                    return;
                }
                m_Parts[entityPart] = equipPart;
                break;
            }
            }
        }