//得到定义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; } }
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); }
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); } } } } }
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); }
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()); }
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); } } }
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); }
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); }
//-------------------------------------------------- //在鼠标上存储命令 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; } }