//得到定义ID
    public override int GetDefineID()
    {
        SCLIENT_SKILL pSkill = GetSkillImpl();

        if (pSkill == null)
        {
            return(-1);
        }

        return(pSkill.m_pDefine.m_nID * 100 + pSkill.m_nLevel);
    }
    //得到所在容器的索引
    //	技能			- 第几个技能
    public override int GetPosIndex()
    {
        SCLIENT_SKILL pSkill = (SCLIENT_SKILL)GetSkillImpl();

        if (pSkill != null)
        {
            return(-1);
        }

        return(pSkill.m_nPosIndex);
    }
    // 获得玩家想要升级技能所需的人物等级 [3/29/2012 Ivan]
    internal int GetNextRoleLevel()
    {
        SCLIENT_SKILL      impl   = GetSkillImpl();
        SCLIENT_SKILLCLASS pXinfa = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(impl.m_pDefine.m_nSkillClass);

        if (pXinfa != null)
        {
            return(pXinfa.nNeedMyLevel);
        }

        return(-1);
    }
    public bool IsJingJieSkill()
    {
        SCLIENT_SKILL impl = GetSkillImpl();

        if (impl == null)
        {
            return(false);
        }
        SCLIENT_SKILLCLASS pXinfa = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(impl.m_pDefine.m_nSkillClass);

        if (pXinfa != null && pXinfa.IsJingJie())
        {
            return(true);
        }
        return(false);
    }
    public int GetXinfaID()
    {
        SCLIENT_SKILL impl = GetSkillImpl();

        if (impl == null)
        {
            return(-1);
        }
        SCLIENT_SKILLCLASS pXinfa = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(impl.m_pDefine.m_nSkillClass);

        if (pXinfa != null)
        {
            return(pXinfa.m_pDefine.nID);
        }
        return(-1);
    }
    // 心法特殊描述 [5/9/2012 SUN]
    public string GetDesc1()
    {
        SCLIENT_SKILL pSkill = GetSkillImpl() as SCLIENT_SKILL;

        if (pSkill != null)
        {
            SCLIENT_SKILLCLASS pXinfa = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(pSkill.m_pDefine.m_nSkillClass);
            DBC.COMMON_DBC <_DBC_XINFA_SKILL_DATA> dbc = CDataBaseSystem.Instance.GetDataBase <_DBC_XINFA_SKILL_DATA>((int)DataBaseStruct.DBC_XINFA_SKILL_DATA);
            _DBC_XINFA_SKILL_DATA define = dbc.Search_Index_EQU(pXinfa.m_pDefine.nID);
            int nMenPai    = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_MenPai();
            int nStepValue = define.nMenPaiValue[nMenPai] / 100;
            int curValue   = pXinfa.m_nLevel * nStepValue;
            return(string.Format(pSkill.GetSkillDesc(), nStepValue, curValue));
        }
        return("");
    }
    //是否能够自动继续进行
    public virtual bool AutoKeepOn()
    {
        SCLIENT_SKILL pSkillImpl = GetSkillImpl();

        if (pSkillImpl != null)
        {
            return(false);
        }

        //是否能够能够自动进行
        if (pSkillImpl.m_pDefine.m_bAutoRedo)
        {
            CObjectManager.Instance.getPlayerMySelf().SetActiveSkill(this);
            return(true);
        }

        return(false);
    }
    void OnEvent(GAME_EVENT_ID eventid, List <string> vParam)
    {
        switch (eventid)
        {
        case GAME_EVENT_ID.GE_CHANGE_BAR:
        {
            for (int i = 0; i < MAX_SHORTCUT_COUNT; i++)
            {
                int actionID = CActionSystem.Instance.MainMenuBar_Get(i);
                mItems[i] = null;
                CActionItem pItem = CActionSystem.Instance.GetActionByActionId(actionID);
                if (pItem != null)
                {
                    switch (pItem.GetType())
                    {
                    case ACTION_OPTYPE.AOT_SKILL:
                    {
                        SCLIENT_SKILL pSkill = pItem.GetImpl() as SCLIENT_SKILL;
                        if (pSkill == null)
                        {
                            break;
                        }
                        mItems[i] = pItem;
                    }
                    break;

                    case ACTION_OPTYPE.AOT_PET_SKILL:
                    {
                        PET_SKILL pPetSkill = pItem.GetImpl() as PET_SKILL;
                        if (pPetSkill == null)
                        {
                            break;
                        }
                        mItems[i] = pItem;
                    }
                    break;
                    }
                }
            }
        }
        break;
        }
    }
Esempio n. 9
0
    public void Player_UseSkill(int idSkill, float fDir)
    {
        //判断是否为合法的范围技能
        CActionItem pAction = (CActionItem)CActionSystem.Instance.GetAction_SkillID(idSkill);

        if (pAction != null)
        {
            return;
        }

        //取得技能数据
        SCLIENT_SKILL pSkill = (SCLIENT_SKILL)pAction.GetImpl();

        if (pSkill != null)
        {
            return;
        }


        //检测目标是否合法

        //	if(!(pSkill->IsValidTarget(idObj))) return;


        CAI_Base pMySelfAI = CharacterLogic_GetAI();

        //发送消息
        SCommand_AI cmdTemp = new SCommand_AI();

        cmdTemp.m_wID = (int)AICommandDef.AIC_USE_SKILL;
        cmdTemp.SetValue(0, pSkill.m_pDefine.m_nID);
        cmdTemp.SetValue(1, pSkill.m_nLevel);
        cmdTemp.SetValue(2, MacroDefine.INVALID_ID);
        cmdTemp.SetValue(3, -1.0f);
        cmdTemp.SetValue(4, -1.0f);
        cmdTemp.SetValue(5, fDir);
        cmdTemp.SetValue(6, -1.0f);
        cmdTemp.SetValue(7, MacroDefine.INVALID_GUID);
        pMySelfAI.PushCommand(cmdTemp);

        //发送事件
        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_ON_SKILL_ACTIVE, idSkill);
    }
    // 得到技能等级
    public virtual int GetSkillLevel()
    {
        SCLIENT_SKILL pImpl = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_Skill(m_idSkillImpl);

        if (pImpl != null)
        {
            //  [11/4/2010 ivan edit]
            //return pImpl->m_pDefine->m_nLevelRequirement;
            //return pImpl->m_nLevel;

            // 没有技能等级,只有心法等级 [10/13/2011 Ivan edit]
            SCLIENT_SKILLCLASS pClass = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(pImpl.m_pDefine.m_nSkillClass);
            if (pClass != null)
            {
                return(pClass.m_nLevel);
            }
        }
        return(0);
    }
Esempio n. 11
0
 void levelUpInputDelegate(ref POINTER_INFO ptr)
 {
     if (ptr.evt == POINTER_INFO.INPUT_EVENT.TAP)
     {
         Transform    parent    = ptr.targetObj.gameObject.transform.parent;
         ActionButton actionBtn = parent.FindChild("Icon").gameObject.GetComponent <ActionButton>();
         if (actionBtn != null)
         {
             CActionItem_Skill skillAction = actionBtn.CurrActionItem as CActionItem_Skill;
             if (skillAction != null)
             {
                 SCLIENT_SKILL skill = skillAction.GetImpl() as SCLIENT_SKILL;
                 if (skill != null)
                 {
                     CDataPool.Instance._StudySkill.SendStudySkillEvent(skill.m_pDefine.m_nSkillClass, skill.m_pDefine.m_nMenPai, 1);
                 }
             }
         }
     }
 }
Esempio n. 12
0
    const int RideSkill = 21;//骑马技能ID:21
    //获取坐骑技能id
    int getRideSkillID()
    {
        if (GetCharacterData() == null)
        {
            return(-1);
        }
        int RideSkillID = -1;

        System.Collections.Generic.Dictionary <int, SCLIENT_SKILL> skills = GetCharacterData().Get_Skill();
        foreach (int k in skills.Keys)
        {
            SCLIENT_SKILL skill = skills[k];
            if (skill.m_pDefine != null && skill.m_pDefine.m_nID == RideSkill)
            {
                RideSkillID = k;
                break;
            }
        }
        return(RideSkillID);
    }
    public string GetUpLevelDesc()
    {
        string        strDesc = null;
        SCLIENT_SKILL impl    = GetSkillImpl();

        if (impl == null)
        {
            return(strDesc);
        }
        SCLIENT_SKILLCLASS pXinfa = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(impl.m_pDefine.m_nSkillClass);

        if (pXinfa == null)
        {
            return(strDesc);
        }

        int needLevel = pXinfa.GetNeedLevel();

        if (needLevel > CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_Level())
        {
            strDesc = "#R人物等级 " + needLevel;
        }
        else
        {
            strDesc = "人物等级 " + "#G" + needLevel;
        }

        Spend spend = CDataPool.Instance._StudySkill.GetUplevelXinfaSpend(pXinfa.m_pDefine.nID, pXinfa.m_nLevel + 1);
        int   myExp = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_Exp();

        if (spend.dwSpendExperience > myExp)
        {
            strDesc += "\n" + "#R历练值 " + spend.dwSpendExperience;
        }
        else
        {
            strDesc += "\n" + "#W历练值 " + "#G" + spend.dwSpendExperience;
        }

        return(strDesc);
    }
Esempio n. 14
0
        internal void Player_UseSkill(CActionItem_Skill skillAction, float dir)
        {
            //判断是否为合法的范围技能
            //CActionItem pAction = (CActionItem)CActionSystem.Instance.GetAction_SkillID(idSkill);

            if (skillAction == null)
            {
                return;
            }

            //取得技能数据
            SCLIENT_SKILL pSkill = (SCLIENT_SKILL)skillAction.GetImpl();

            if (pSkill == null)
            {
                return;
            }


            //检测目标是否合法

            //	if(!(pSkill->IsValidTarget(idObj))) return;


            CAI_Base pMySelfAI = CObjectManager.Instance.getPlayerMySelf().CharacterLogic_GetAI();
            //发送消息
            SCommand_AI cmdTemp = new SCommand_AI();

            cmdTemp.m_wID = (int)AICommandDef.AIC_USE_SKILL;
            cmdTemp.SetValue <int>(0, pSkill.m_pDefine.m_nID);
            cmdTemp.SetValue <byte>(1, pSkill.m_nLevel);
            cmdTemp.SetValue <int>(2, MacroDefine.INVALID_ID);
            cmdTemp.SetValue <float>(3, -1.0f);
            cmdTemp.SetValue <float>(4, -1.0f);
            cmdTemp.SetValue <float>(5, dir);
            cmdTemp.SetValue <uint>(6, MacroDefine.INVALID_GUID);
            pMySelfAI.PushCommand(cmdTemp);

            //发送事件
            CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_ON_SKILL_ACTIVE, skillAction.GetDefineID());
        }
Esempio n. 15
0
    void handlerUplevel(int nIndex)
    {
        if (nIndex < 0 || nIndex >= buttons.Count)
        {
            return;
        }
        CActionItem_Skill skillAction = buttons[nIndex].CurrActionItem as CActionItem_Skill;

        if (skillAction != null)
        {
            SCLIENT_SKILL skill = skillAction.GetImpl() as SCLIENT_SKILL;
            if (skill != null)
            {
                CDataPool.Instance._StudySkill.SendStudySkillEvent(skill.m_pDefine.m_nSkillClass, skill.m_pDefine.m_nMenPai, 1);
            }
            else
            {
                LogManager.LogWarning("handle uplevel failed index=" + nIndex);
            }
        }
    }
Esempio n. 16
0
    public void Player_UseSkill(int idSkill, uint guid)
    {
        CActionItem pAction = (CActionItem)CActionSystem.Instance.GetAction_SkillID(idSkill);

        if (pAction != null)
        {
            return;
        }

        //取得技能数据
        SCLIENT_SKILL pSkill = (SCLIENT_SKILL)pAction.GetImpl();

        if (pSkill != null)
        {
            return;
        }

        CAI_Base pMySelfAI = CharacterLogic_GetAI();

        //发送消息
        SCommand_AI cmdTemp = new SCommand_AI();

        cmdTemp.m_wID = (int)AICommandDef.AIC_USE_SKILL;

        cmdTemp.SetValue(0, pSkill.m_pDefine.m_nID);
        cmdTemp.SetValue(1, pSkill.m_nLevel);
        cmdTemp.SetValue(2, MacroDefine.INVALID_ID);
        cmdTemp.SetValue(3, -1.0f);
        cmdTemp.SetValue(4, -1.0f);
        cmdTemp.SetValue(5, -1.0f);
        cmdTemp.SetValue(6, guid);
        pMySelfAI.PushCommand(cmdTemp);

        //发送事件
        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_ON_SKILL_ACTIVE, idSkill);
    }
Esempio n. 17
0
    void UpdateSkill()
    {
        if (!gameObject.active)
        {
            return;
        }

        ResetUI();
        if (tabMode == TAB_MODE.TAB_SKILL)
        {
            int num       = CActionSystem.Instance.GetSkillActionNum();
            int showIndex = 0;
            for (int i = 0; i < num; i++)
            {
                if (showIndex >= buttons.Count)
                {
                    break;
                }
                CActionItem_Skill skill = CActionSystem.Instance.EnumAction(i, ActionNameType.Skill) as CActionItem_Skill;
                if (skill != null && skill.GetXinfaID() >= SCLIENT_SKILLCLASS.XINFATYPE_SKILLBENGIN)
                {
                    //LogManager.LogWarning("Xinfa = " + skill.GetXinfaID() + " skill = " + skill.GetDefineID());
                    //这里可能有问题
                    items[showIndex].SetActiveRecursively(true);
                    SCLIENT_SKILL skillData = skill.GetImpl() as SCLIENT_SKILL;
                    buttons[showIndex].UpdateItemFromAction(skill);
                    if (skillData != null && skillData.IsCanUse_CheckLevel(CObjectManager.Instance.getPlayerMySelf().ID, (int)skillData.m_nLevel) == OPERATE_RESULT.OR_OK)
                    {
                        buttons[showIndex].EnableDrag();
                        txtLevels[showIndex].Text = "等级:" + skill.GetSkillLevel();
                    }
                    else
                    {
                        buttons[showIndex].DisableDrag();
                        txtLevels[showIndex].Text = "未学习";
                    }

                    buttons[showIndex].EnableDoAction = true;

                    //update text
                    txtNames[showIndex].Text = skill.GetName();


                    SCLIENT_SKILLCLASS skillClass = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(skill.GetXinfaID());
                    //升级可操作
                    string error;
                    if (!CDataPool.Instance.isCanSkillLevelUp(skillClass.m_pDefine.nID, skillClass.m_nLevel + 1, out error))
                    {
                        levelUpBtns[showIndex].Hide(true);
                        //levelUpBtns[showIndex].controlIsEnabled = false;
                        toolText[showIndex] = UIString.Instance.ParserString_Runtime(error);
                    }
                    else
                    {
                        // levelUpBtns[showIndex].controlIsEnabled = true;
                        levelUpBtns[showIndex].Hide(false);
                        toolText[showIndex] = null;
                    }

                    showIndex++;
                }
            }
        }
        else if (tabMode == TAB_MODE.TAB_JINGJIE)
        {
            int num       = CActionSystem.Instance.GetSkillActionNum();
            int showIndex = 0;
            for (int i = 0; i < num; i++)
            {
                if (showIndex >= buttons.Count)
                {
                    break;
                }
                CActionItem_Skill skill = CActionSystem.Instance.EnumAction(i, ActionNameType.Skill) as CActionItem_Skill;
                //LogManager.LogWarning("Xinfa = " + skill.GetXinfaID() + " skill = " + skill.GetDefineID());
                if (skill != null && (skill.GetXinfaID() >= SCLIENT_SKILLCLASS.XINFATYPE_JINGJIEBEGIN && skill.GetXinfaID() < SCLIENT_SKILLCLASS.XINFATYPE_SKILLBENGIN))
                {
                    //这里可能有问题
                    items[showIndex].SetActiveRecursively(true);

                    buttons[showIndex].UpdateItemFromAction(skill);
                    buttons[showIndex].DisableDrag();
                    buttons[showIndex].EnableDoAction = false;

                    //update text
                    txtNames[showIndex].Text  = skill.GetName();
                    txtLevels[showIndex].Text = "等级:" + skill.GetSkillLevel();

                    SCLIENT_SKILLCLASS skillClass = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(skill.GetXinfaID());
                    //升级可操作
                    string error;
                    if (!CDataPool.Instance.isCanSkillLevelUp(skillClass.m_pDefine.nID, skillClass.m_nLevel + 1, out error))
                    {
                        levelUpBtns[showIndex].controlIsEnabled = false;
                        toolText[showIndex] = UIString.Instance.ParserString_Runtime(error);
                    }
                    else
                    {
                        levelUpBtns[showIndex].controlIsEnabled = true;
                        toolText[showIndex] = null;
                    }
                    showIndex++;
                }
            }
        }
        else if (tabMode == TAB_MODE.TAB_USUALSKILL)
        {
            int num = CActionSystem.Instance.GetSkillActionNum();
            //LogManager.LogWarning("Skill count = " + num);
            int showIndex = 0;
            for (int i = 0; i < num; i++)
            {
                CActionItem_Skill skill = CActionSystem.Instance.EnumAction(i, ActionNameType.Skill) as CActionItem_Skill;


                if (showIndex >= buttons.Count)
                {
                    break;
                }

                //超过51不属于普通技能
                if (skill != null && (skill.GetXinfaID() == -1 && skill.GetIDTable() < 51))
                {
                    // LogManager.LogWarning("Xinfa = " + skill.GetXinfaID() + "skill = " + skill.GetDefineID() + "index=" + i);
                    //这里可能有问题
                    items[showIndex].SetActiveRecursively(true);

                    buttons[showIndex].UpdateItemFromAction(skill);
                    buttons[showIndex].EnableDrag();
                    buttons[showIndex].EnableDoAction = true;

                    //update text
                    txtNames[showIndex].Text  = skill.GetName();
                    txtLevels[showIndex].Text = "等级:" + skill.GetSkillLevel();

                    levelUpBtns[showIndex].gameObject.SetActiveRecursively(false);

                    showIndex++;
                }
            }
        }
    }
    bool isAttackableSkill(CActionItem item)
    {
        if (item == null)
        {
            return(false);
        }
        bool          result = false;
        SCLIENT_SKILL pSkill = item.GetImpl() as SCLIENT_SKILL;

        switch (item.GetType())
        {
        case ACTION_OPTYPE.AOT_SKILL:
        {
            if (pSkill == null)
            {
                break;
            }
            ENUM_SELECT_TYPE typeSel = (ENUM_SELECT_TYPE)pSkill.m_pDefine.m_nSelectType;
            switch (typeSel)
            {
            case ENUM_SELECT_TYPE.SELECT_TYPE_CHARACTER:
            case ENUM_SELECT_TYPE.SELECT_TYPE_DIR:
            case ENUM_SELECT_TYPE.SELECT_TYPE_POS:
            case ENUM_SELECT_TYPE.SELECT_TYPE_NONE:
                result = true;
                break;

            default:
                break;
            }
        }
        break;

        default:
            break;
        }

        if (result)
        {
            OPERATE_RESULT retVal = pSkill.IsCanUse_CheckCoolDown();
            if (retVal != OPERATE_RESULT.OR_OK)
            {
                return(false);
            }

            retVal = pSkill.IsCanUse_CheckPassive();
            if (retVal != OPERATE_RESULT.OR_OK)
            {
                return(false);
            }

            retVal = pSkill.IsCanUse_CheckLevel(CObjectManager.Instance.getPlayerMySelf().ID, pSkill.m_nLevel);
            if (retVal != OPERATE_RESULT.OR_OK)
            {
                return(false);
            }

            retVal = pSkill.IsCanUse_CheckFightState(CObjectManager.Instance.getPlayerMySelf().ID);
            if (retVal != OPERATE_RESULT.OR_OK)
            {
                return(false);
            }

            retVal = pSkill.IsCanUse_CheckDeplete(CObjectManager.Instance.getPlayerMySelf().ID);
            if (retVal != OPERATE_RESULT.OR_OK)
            {
                return(false);
            }

            retVal = pSkill.IsCanUse_Leaned();
            if (retVal != OPERATE_RESULT.OR_OK)
            {
                return(false);
            }
        }
        return(result);
    }
    bool CanUseSkill(CActionItem skillItem, CObject_Character target)
    {
        if (skillItem == null)
        {
            return(false);
        }
        if (target == null)
        {
            return(false);
        }
        if (target.IsDie())
        {
            return(false);
        }
        switch (skillItem.GetType())
        {
        case ACTION_OPTYPE.AOT_SKILL:
        {
            SCLIENT_SKILL pSkill = skillItem.GetImpl() as SCLIENT_SKILL;
            if (pSkill == null)
            {
                break;
            }

            Vector3 avatarPos        = CObjectManager.Instance.getPlayerMySelf().GetPosition();
            Vector3 avatarPosOnPlane = new Vector3(avatarPos.x, 0, avatarPos.z);
            Vector3 targetPos        = new Vector3(-1, 0, -1);
            int     ServerID         = -1;
            targetPos = new Vector3(target.GetPosition().x, 0, target.GetPosition().z);
            ServerID  = target.ServerID;
            Vector3        PosOnPlane = new Vector3(targetPos.x, 0, targetPos.z);
            float          dir        = Vector3.Angle(avatarPosOnPlane, PosOnPlane);
            OPERATE_RESULT result     = pSkill.IsCanUse(CObjectManager.Instance.getPlayerMySelf().ID,
                                                        pSkill.m_nLevel,
                                                        ServerID,
                                                        targetPos.x,
                                                        targetPos.z,
                                                        dir);

            if (result == OPERATE_RESULT.OR_OK)
            {
                return(true);
            }
        }
        break;

        case ACTION_OPTYPE.AOT_PET_SKILL:
        {
            PET_SKILL pPetSkill = skillItem.GetImpl() as PET_SKILL;
            if (pPetSkill == null)
            {
                break;
            }
            if (Interface.Pet.Instance.IsFighting(pPetSkill.m_nPetNum))
            {
                return(true);
            }
        }
        break;
        }
        return(false);
    }
Esempio n. 20
0
    //--------------------------------------------------
    //在鼠标上存储命令
    public void MouseCommand_Set(bool bHoverInUI, CObject pSelectObj, Vector3 fvPos, tActionItem pActiveSkill)
    {
        m_cmdCurrent_Left.m_typeMouse  = MOUSE_CMD_TYPE.MCT_NULL;
        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_NULL;
        //bool bCtrlDown = CInputSystem.GetMe().IsKeyDown(KeyCode.KC_LCONTROL) || CInputSystem.GetMe().IsKeyDown(KeyCode.KC_RCONTROL);

        //在UI上空
        if (bHoverInUI)
        {
            if (UISystem.Instance.CurrHyperlink != null)
            {
                m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_HyperLink;
                m_cmdCurrent_Left.SetValue(0, UISystem.Instance.CurrHyperlink);
            }
            else if (pActiveSkill != null)
            {
                switch (pActiveSkill.GetType())
                {
                //修理装备
                case ACTION_OPTYPE.AOT_MOUSECMD_REPARE:
                {
                    //左键挂锤子
                    m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_REPAIR;
                    //右键取消
                    m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCLE_REPAIR;
                }
                break;

                //鉴定装备
                case ACTION_OPTYPE.AOT_MOUSECMD_IDENTIFY:
                {
                    //左键鉴定
                    m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_IDENTIFY;
                    //右键取消
                    m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_IDENTIFY;
                }
                break;

                case ACTION_OPTYPE.AOT_MOUSECMD_ADDFRIEND:
                {
                    //左键鉴定
                    m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_ADDFRIEND;
                    //右键取消
                    m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_ADDFRIEND;
                }
                break;

                case ACTION_OPTYPE.AOT_MOUSECMD_EXCHANGE:
                {
                    //左键鉴定
                    m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_EXCHANGE;
                    //右键取消
                    m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_EXCHANGE;
                }
                break;

                case ACTION_OPTYPE.AOT_MOUSECMD_SALE:
                {
                    //左键鉴定
                    m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_SALE;
                    //右键取消
                    m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCEL_SALE;
                }
                break;

                case ACTION_OPTYPE.AOT_MOUSECMD_BUYMULT:
                {
                    //左键鉴定
                    m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_BUYMULT;
                    //右键取消
                    m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCEL_BUYMULT;
                }
                break;

                default:
                    break;
                }
            }
            else
            {
                return;
            }
        }
        else
        {
            //计算相应obj鼠标指令
            if (pSelectObj != null)
            {
                pSelectObj.FillMouseCommand_Left(ref m_cmdCurrent_Left, pActiveSkill);
                pSelectObj.FillMouseCommand_Right(ref m_cmdCurrent_Right, pActiveSkill);
            }

            if (m_cmdCurrent_Left.m_typeMouse == MOUSE_CMD_TYPE.MCT_NULL)
            {
                if (pActiveSkill != null)
                {
                    switch (pActiveSkill.GetType())
                    {
                    case ACTION_OPTYPE.AOT_SKILL:
                    case ACTION_OPTYPE.AOT_PET_SKILL:
                    {
                        SCLIENT_SKILL skillImpl = (SCLIENT_SKILL)pActiveSkill.GetImpl();

                        if (skillImpl == null)
                        {
                            {
                                m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_PLAYER_MOVETO;
                                m_cmdCurrent_Left.SetValue(0, fvPos.x);
                                m_cmdCurrent_Left.SetValue(1, fvPos.z);
                            }
                            return;
                        }

                        //选择类型
                        //                              ENUM_SELECT_TYPE typeSel = (ENUM_SELECT_TYPE)( pActiveSkill.type()== ACTION_OPTYPE.AOT_SKILL ?
                        //                                  ((SCLIENT_SKILL)pSkillImpl)->m_pDefine->m_nSelectType :
                        //                                  ((PET_SKILL)pSkillImpl)->m_pDefine->m_nSelectType);

                        ENUM_SELECT_TYPE typeSel = (ENUM_SELECT_TYPE)skillImpl.m_pDefine.m_nSelectType;
                        switch (typeSel)
                        {
                        //点选角色
                        case ENUM_SELECT_TYPE.SELECT_TYPE_CHARACTER:
                        {
                            //进入这里说明逻辑出错了,不然会在character里面填充
                            //如果FillMouseCommand_Left填充失败,说明目标是不可攻击对象,执行移动操作
                            if (pSelectObj == null)
                            {
                                m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_PLAYER_MOVETO;
                                m_cmdCurrent_Left.SetValue(0, fvPos.x);
                                m_cmdCurrent_Left.SetValue(1, fvPos.z);
                            }
                        }
                        break;

                        //点选范围
                        case ENUM_SELECT_TYPE.SELECT_TYPE_POS:
                        {
                            //储存技能
                            m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_SKILL_AREA;
                            m_cmdCurrent_Left.SetValue(0, pActiveSkill);
                            m_cmdCurrent_Left.SetValue(1, fvPos.x);
                            m_cmdCurrent_Left.SetValue(2, fvPos.z);
                            //                                      FLOAT fRingRange = (FLOAT)( pActiveSkill.type()==AOT_SKILL ?
                            //                                          ((SCLIENT_SKILL*)pSkillImpl)->m_pDefine->m_fDamageRange :
                            //                                      ((PET_SKILL*)pSkillImpl)->m_pDefine->m_fDamageRange);
                            m_cmdCurrent_Left.SetValue(5, skillImpl.m_pDefine.m_fDamageRange);

                            //取消技能
                            m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCEL_SKILL;
                        }
                        break;

                        //方向
                        case ENUM_SELECT_TYPE.SELECT_TYPE_DIR:
                        {
                            //储存技能
                            m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_SKILL_DIR;
                            m_cmdCurrent_Left.SetValue(0, pActiveSkill);

                            //计算方向

                            //鼠标位置
                            Vector3 avatarPos = CObjectManager.Instance.getPlayerMySelf().GetPosition();

                            Vector3 avatarPosOnPlane = new Vector3(avatarPos.x, 0, avatarPos.z);
                            Vector3 PosOnPlane       = new Vector3(fvPos.x, 0, fvPos.z);
                            float   angle            = Vector3.Angle(avatarPosOnPlane, PosOnPlane);
                            m_cmdCurrent_Left.SetValue(1, angle);
                            //取消技能
                            m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCEL_SKILL;
                        }
                        break;

                        //add by ss 增加对无目标技能和只对自己的处理流程
                        case ENUM_SELECT_TYPE.SELECT_TYPE_SELF:
                        {
                            m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_SKILL_SELF;
                            m_cmdCurrent_Left.SetValue(0, pActiveSkill);
                            m_cmdCurrent_Left.SetValue(1, CObjectManager.Instance.getPlayerMySelf().ServerID);
                        }
                        break;

                        case ENUM_SELECT_TYPE.SELECT_TYPE_NONE:
                        {
                            m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_SKILL_NONE;
                            m_cmdCurrent_Left.SetValue(0, pActiveSkill);
                        }
                        break;
                        }
                    }
                    break;

                    case ACTION_OPTYPE.AOT_ITEM:
                    {
                        if (pActiveSkill == null || pActiveSkill.GetType() != ACTION_OPTYPE.AOT_ITEM)
                        {
                            break;
                        }

                        CObject_Item pItem = (CObject_Item)(((CActionItem_Item)pActiveSkill).GetImpl());
                        if (pItem == null)
                        {
                            break;
                        }

                        //必须是能够使用的物品,必须支持任务物品 [1/24/2011 ivan edit]
                        if (pItem.GetItemClass() != ITEM_CLASS.ICLASS_COMITEM && pItem.GetItemClass() != ITEM_CLASS.ICLASS_TASKITEM)
                        {
                            break;
                        }

                        bool bAreaItem = ((CObject_Item_Medicine)pItem).IsAreaTargetType();

                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_USE_ITEM;
                        m_cmdCurrent_Left.SetValue(0, pActiveSkill);
                        m_cmdCurrent_Left.SetValue(1, 0);
                        m_cmdCurrent_Left.SetValue(2, fvPos.x);
                        m_cmdCurrent_Left.SetValue(3, fvPos.z);
                        m_cmdCurrent_Left.SetValue(4, (int)(bAreaItem ? 1 : 0));

                        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCEL_USE_ITEM;
                    }
                    break;

                    //修理单独处理
                    case ACTION_OPTYPE.AOT_MOUSECMD_REPARE:
                    {
                        //左键挂锤子
                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_REPAIR;
                        //右键取消
                        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCLE_REPAIR;
                    }
                    break;

                    //鉴定装备
                    case ACTION_OPTYPE.AOT_MOUSECMD_IDENTIFY:
                    {
                        //左键鉴定
                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_IDENTIFY;
                        //右键取消
                        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_IDENTIFY;
                    }
                    break;

                    case ACTION_OPTYPE.AOT_MOUSECMD_ADDFRIEND:
                    {
                        //左键鉴定
                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_ADDFRIEND;
                        //右键取消
                        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_ADDFRIEND;
                    }
                    break;

                    case ACTION_OPTYPE.AOT_MOUSECMD_EXCHANGE:
                    {
                        //左键鉴定
                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_EXCHANGE;
                        //右键取消
                        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_EXCHANGE;
                    }
                    break;

                    case ACTION_OPTYPE.AOT_MOUSECMD_CATCHPET:
                    {
                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_CATCH_PET;
                        m_cmdCurrent_Left.SetValue(0, fvPos.x);
                        m_cmdCurrent_Left.SetValue(1, fvPos.z);
                    }
                    break;

                    case ACTION_OPTYPE.AOT_MOUSECMD_SALE:
                    {
                        //左键鉴定
                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_SALE;
                        //右键取消
                        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCEL_SALE;
                    }
                    break;

                    case ACTION_OPTYPE.AOT_MOUSECMD_BUYMULT:
                    {
                        //左键
                        m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_BUYMULT;
                        //右键
                        m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_CANCEL_BUYMULT;
                    }
                    break;

                    default:
                        //移动
                    {
                        //if (pSelectObj != CObjectManager.Instance.getPlayerMySelf())
                        {
                            m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_PLAYER_MOVETO;
                            m_cmdCurrent_Left.SetValue(0, fvPos.x);
                            m_cmdCurrent_Left.SetValue(1, fvPos.z);
                        }
                    }
                    break;
                    }
                }
                else //temp fix 添加默认左键事件, TODO,find其他地方是否有默认左键事件
                {
                    //移动
                    {
                        if (pSelectObj == null)
                        {
                            m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_PLAYER_MOVETO;
                            m_cmdCurrent_Left.SetValue(0, fvPos.x);
                            m_cmdCurrent_Left.SetValue(1, fvPos.z);
                        }
                    }
                }
            }
            //选择玩家
            if (m_cmdCurrent_Right.m_typeMouse == MOUSE_CMD_TYPE.MCT_NULL)
            {
                m_cmdCurrent_Right.m_typeMouse = MOUSE_CMD_TYPE.MCT_PLAYER_SELECT;
                m_cmdCurrent_Right.SetValue(0, -1);
            }
        }
    }
    //激活动作
    public override void DoAction()
    {
        SCLIENT_SKILL pSkill = (SCLIENT_SKILL)GetSkillImpl();

        if (pSkill == null)
        {
            return;
        }

        OPERATE_RESULT oResult;

        //
        oResult = pSkill.IsCanUse_Leaned();
        if (GameDefineResult.Instance.OR_FAILED(oResult))
        {
            CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult));
            return;
        }
        ////检查冷却是否结束
        oResult = pSkill.IsCanUse_CheckCoolDown();
        if (GameDefineResult.Instance.OR_FAILED(oResult))
        {
            CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult));
            return;
        }



        // 消耗检测
        int idUser;
        CObject_PlayerMySelf pMySelf = CObjectManager.Instance.getPlayerMySelf();

        idUser  = (pMySelf != null) ? (pMySelf.ID) : (MacroDefine.INVALID_ID);
        oResult = pSkill.IsCanUse_CheckDeplete(idUser);
        if (GameDefineResult.Instance.OR_FAILED(oResult))
        {
            CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult));
            return;
        }

        oResult = pSkill.IsCanUse_CheckLevel(idUser, pSkill.m_nLevel);
        if (GameDefineResult.Instance.OR_FAILED(oResult))
        {
            CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult));
            return;
        }

        //如果是连续的那么就换为选中状态。
        AutoKeepOn();
        //根据操作类型
        switch ((ENUM_SELECT_TYPE)pSkill.m_pDefine.m_nSelectType)
        {
        case ENUM_SELECT_TYPE.SELECT_TYPE_NONE:
        {
            CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID());
            //恢复激活Action
            CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill());
        }
        break;

        case ENUM_SELECT_TYPE.SELECT_TYPE_CHARACTER:
        {
            //取得技能数据
            int idMyself = CObjectManager.Instance.getPlayerMySelf().ServerID;

            if (CObjectManager.Instance.GetMainTarget() != null)
            {
                int idTarget = CObjectManager.Instance.GetMainTarget().ServerID;
                // 陈治要求使用增益型技能的时候,选中为敌人的情况下,强制改为自己 [11/14/2011 Ivan edit]
                if (pSkill.m_pDefine.m_nFriendness >= 0 &&
                    idTarget != idMyself)        // 减少判断
                {
                    CObject_Character pTargetObj = (CObject_Character)CObjectManager.Instance.FindServerObject(idTarget);
                    //阵营判断
                    ENUM_RELATION eCampType = pTargetObj.GetCampType(CObjectManager.Instance.getPlayerMySelf());

                    // 通过PK模式判断是否为敌人 [8/19/2011 edit by ZL]
                    if (eCampType != ENUM_RELATION.RELATION_ENEMY)
                    {
                        int tempRelation = CObjectManager.Instance.getPlayerMySelf().GetRelationOther(pTargetObj);
                        eCampType = (ENUM_RELATION)tempRelation;
                    }
                    // 增益型技能:目标不是友好对象的情况下必须强制对自己使用 [11/14/2011 Ivan edit]
                    if (eCampType != ENUM_RELATION.RELATION_FRIEND)
                    {
                        idTarget = idMyself;
                    }
                }
                CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), idTarget);
            }
            else
            {
                // 陈治要求如果增益型技能没有选中对象,则默认目标为自己 [11/14/2011 Ivan edit]
                if (pSkill.m_pDefine.m_nFriendness >= 0)
                {
                    CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), idMyself);
                }
                else
                {
                    CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(OPERATE_RESULT.OR_NO_TARGET));
                    CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), (uint)idMyself);
                }
            }
            //恢复激活Action
            CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill());
        }
        break;

        case ENUM_SELECT_TYPE.SELECT_TYPE_POS:
            CActionSystem.Instance.SetDefaultAction(this);
            break;

        case ENUM_SELECT_TYPE.SELECT_TYPE_DIR:
            CActionSystem.Instance.SetDefaultAction(this);
            //CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill());
            //		CGameProcedure::s_pGameInterface->Skill_SetActive(this);
            break;

        case ENUM_SELECT_TYPE.SELECT_TYPE_SELF:
        {
            CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), CObjectManager.Instance.getPlayerMySelf().ServerID);
            //恢复激活Action
            //  CActionSystem.Instance.SetDefaultAction(GameProcedure.Skill_GetActive());
        }
        break;

        case ENUM_SELECT_TYPE.SELECT_TYPE_HUMAN_GUID:
        {
            //待实现
            //当前是否已经选择了一个队友
            //uint guid;
            //CObjectManager::GetMe()->GetMainTarget(guid);
            //if(guid == (GUID_t)-1)
            //{
            //    //尚未选择合法的对象
            //    CEventSystem::GetMe()->PushEvent(GE_INFO_SELF, "无效目标");
            //    return;
            //}

            //CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), (GUID_t)guid);
            ////恢复激活Action
            //CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive());
        }
        break;
        }
    }