internal void Player_UseSkill(CActionItem_Skill skillAction, Vector3 pos) { //CActionItem pAction = (CActionItem)CActionSystem.Instance.GetAction_SkillID(skillDefineId); if (skillAction == null) { return; } CAI_Base pMySelfAI = CObjectManager.Instance.getPlayerMySelf().CharacterLogic_GetAI(); SCLIENT_SKILL pSkill = (SCLIENT_SKILL)skillAction.GetImpl(); if (pSkill == null) { return; } //发送消息 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, pos.x); cmdTemp.SetValue <float>(4, pos.z); cmdTemp.SetValue <float>(5, -1); cmdTemp.SetValue <uint>(6, MacroDefine.INVALID_GUID); pMySelfAI.PushCommand(cmdTemp); //发送事件 CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_ON_SKILL_ACTIVE, skillAction.GetDefineID()); }
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()); }
//激活鼠标命令 public void MouseCommand_Active(SCommand_Mouse cmd) { CObject_PlayerMySelf mySelf = CObjectManager.Instance.getPlayerMySelf(); if (mySelf == null) { return; } switch (cmd.m_typeMouse) { case MOUSE_CMD_TYPE.MCT_PLAYER_MOVETO: { if (uPrevMoveTime == 0 || GameProcedure.s_pTimeSystem.GetTimeNow() > uPrevMoveTime + 100) { //CEventSystem::GetMe()->PushEvent(GE_AUTO_RUNING_CHANGE, 0); uPrevMoveTime = GameProcedure.s_pTimeSystem.GetTimeNow(); float x = cmd.GetValue <float>(0); float z = cmd.GetValue <float>(1); Vector3 targeMove = new Vector3(x, 0, z); GameInterface.Instance.Player_MoveTo(targeMove); } } break; case MOUSE_CMD_TYPE.MCT_PLAYER_SELECT: { GameProcedure.s_pGameInterface.Object_SelectAsMainTarget(cmd.GetValue <int>(0) , CObjectManager.DESTROY_MAIN_TARGET_TYPE.DEL_RIGHT_CLICK); if (m_cmdCurrent_Left.m_typeMouse == MOUSE_CMD_TYPE.MCT_SKILL_DIR || m_cmdCurrent_Left.m_typeMouse == MOUSE_CMD_TYPE.MCT_SKILL_AREA) { m_cmdCurrent_Left.m_typeMouse = MOUSE_CMD_TYPE.MCT_NULL; m_cmdCurrent_Left.SetValue(0, 0); m_cmdCurrent_Left.SetValue(1, 0); //恢复激活技能 CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } // AxTrace(0, 0, "Active: SelectPlayer(ID=%d)", (int)cmd.m_afParam[0]); } break; case MOUSE_CMD_TYPE.MCT_SKILL_OBJ: { //首先选择 GameProcedure.s_pGameInterface.Object_SelectAsMainTarget(cmd.GetValue <int>(1) , CObjectManager.DESTROY_MAIN_TARGET_TYPE.DEL_RIGHT_CLICK); tActionItem pItem = cmd.GetValue <tActionItem>(0); if (pItem == null) { break; } //进入攻击 if (pItem.GetType() == ACTION_OPTYPE.AOT_PET_SKILL) { // 先不实现宠物技能 // int nPetSkillID = ((PET_SKILL*)(((CActionItem_PetSkill*)pItem)->GetImpl()))->m_pDefine->m_nID; // CDataPool::GetMe()->Pet_SendUseSkillMessage(nPetSkillID, // INVALID_ID, cmd.m_afParam[1], cmd.m_afParam[2]); } else { tActionItem skill = cmd.GetValue <tActionItem>(0); GameProcedure.s_pGameInterface.Player_UseSkill((CActionItem_Skill)skill, cmd.GetValue <int>(1)); } } break; case MOUSE_CMD_TYPE.MCT_SKILL_AREA: { tActionItem pItem = cmd.GetValue <tActionItem>(0); if (pItem == null) { break; } if (pItem.GetType() == ACTION_OPTYPE.AOT_PET_SKILL) { // int nPetSkillID = ((PET_SKILL*)(((CActionItem_PetSkill*)pItem)->GetImpl()))->m_pDefine->m_nID; // CDataPool::GetMe()->Pet_SendUseSkillMessage(nPetSkillID, // INVALID_ID, cmd.m_afParam[1], cmd.m_afParam[2]); } else { tActionItem skill = cmd.GetValue <tActionItem>(0); Vector3 pos = new Vector3(cmd.GetValue <float>(1), 0, cmd.GetValue <float>(2)); GameProcedure.s_pGameInterface.Player_UseSkill((CActionItem_Skill)skill, pos); } //恢复激活Action CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case MOUSE_CMD_TYPE.MCT_CANCEL_SKILL: { //恢复激活Action CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case MOUSE_CMD_TYPE.MCT_SKILL_DIR: { // 支持方向攻击 [1/25/2011 ivan edit] tActionItem pItem = cmd.GetValue <tActionItem>(0); if (pItem == null) { break; } if (pItem.GetType() == ACTION_OPTYPE.AOT_PET_SKILL) { //TODO } else { tActionItem skill = cmd.GetValue <tActionItem>(0); float dir = cmd.GetValue <float>(1); GameProcedure.s_pGameInterface.Player_UseSkill((CActionItem_Skill)skill, dir); } //恢复激活Action CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case MOUSE_CMD_TYPE.MCT_HIT_TRIPPEROBJ: { GameProcedure.s_pGameInterface.TripperObj_Active(cmd.GetValue <int>(0)); // AxTrace(0, 0, "Active: TripObj(ID=%d)", (int)cmd.m_adwParam[0]); } break; case MOUSE_CMD_TYPE.MCT_SPEAK: { // 当鼠标点击其他的时候自动寻路结束(临时方案,具体等策划案子) [9/1/2011 edit by ZL] CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_AUTO_RUNING_CHANGE); int npcId = cmd.GetValue <int>(0); //首先选择 GameInterface.Instance.Object_SelectAsMainTarget(npcId); //谈话 //CGameProcedure::s_pGameInterface->Player_Speak(cmd.m_adwParam[0]); GameInterface.Instance.Player_Speak(npcId); } break; case MOUSE_CMD_TYPE.MCT_CONTEXMENU: { //首先选择 //CGameProcedure::s_pGameInterface->Object_SelectAsMainTarget((INT)cmd.m_adwParam[0], 1); //显示右键菜单 //CGameProcedure::s_pGameInterface->Object_ShowContexMenu(cmd.m_adwParam[0]); } break; case MOUSE_CMD_TYPE.MCT_REPAIR: { //do nothing... } break; case MOUSE_CMD_TYPE.MCT_CANCLE_REPAIR: { //取消修理 CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case MOUSE_CMD_TYPE.MCT_UI_USE_IDENTIFY: { // 使用鉴定卷轴 break; } case MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_IDENTIFY: { // 取消使用鉴定卷轴 //CDataPool::GetMe()->Identify_UnLock(); break; } case MOUSE_CMD_TYPE.MCT_UI_USE_EXCHANGE: { // if(TRUE == CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_IsInStall()) // { // CEventSystem::GetMe()->PushEvent(GE_INFO_INTERCOURSE,"你正在摆摊……"); // return ; // } // CGameProcedure::s_pGameInterface->Object_SelectAsMainTarget((INT)cmd.m_adwParam[0]); // CObject* pChar = (CObject*) CObjectManager::GetMe()->GetMainTarget(); // if(pChar && g_theKernel.IsKindOf(pChar->GetClass(), GETCLASS(CObject_PlayerOther))) // { // //先判定距离是不是合法 // if(pChar) // { // const fVector3 pMePos = CObjectManager::GetMe()->GetMySelf()->GetPosition(); // const fVector3 pOtherPos = ((CObject*)pChar)->GetPosition(); // // FLOAT fDistance = // TDU_GetDist(fVector2(pMePos.x, pMePos.z), // fVector2(pOtherPos.x, pOtherPos.z)); // // if( EXCHANGE_MAX_DISTANCE < fDistance ) // { // CEventSystem::GetMe()->PushEvent(GE_INFO_INTERCOURSE,"距离太远,启动交易失败"); // return; // } // } // // //不能向已经死亡的玩家发送交易申请 // if ( ((CObject_Character*)pChar)->CharacterLogic_Get() == CObject_Character::CHARACTER_LOGIC_DEAD ) // { // CEventSystem::GetMe()->PushEvent(GE_INFO_INTERCOURSE,"不能向已经死亡的玩家申请交易"); // return ; // } // // CGExchangeApplyI msg; // msg.SetObjID(pChar->GetServerID()); // CNetManager::GetMe()->SendPacket(&msg); // CEventSystem::GetMe()->PushEvent(GE_INFO_INTERCOURSE,"交易请求已经发送"); // CGameProcedure::s_pGameInterface->Skill_CancelAction(); // return ; // } } break; case MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_EXCHANGE: { CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); break; } case MOUSE_CMD_TYPE.MCT_SALE: break; case MOUSE_CMD_TYPE.MCT_CANCEL_SALE: { CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); break; } case MOUSE_CMD_TYPE.MCT_BUYMULT: break; case MOUSE_CMD_TYPE.MCT_CANCEL_BUYMULT: { CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); break; } case MOUSE_CMD_TYPE.MCT_UI_USE_ADDFRIEND: { //首先选择 // CGRelation Msg; // Msg.GetRelation()->CleanUp(); // Msg.GetRelation()->m_Type = REQ_ADDFRIEND; // REQUEST_ADD_RELATION_WITH_GROUP* pFriend = &(Msg.GetRelation()->m_AddRelationWithGroup); // pFriend->CleanUp(); // CGameProcedure::s_pGameInterface->Object_SelectAsMainTarget((INT)cmd.m_adwParam[0]); // CObject_Character* pCharObj = (CObject_Character*)CObjectManager::GetMe()->GetMainTarget(); // if( pCharObj == NULL ) // break; // if( pCharObj == CObjectManager::GetMe()->GetMySelf() ) // 如果是自己,就不加 // break; // if( g_theKernel.IsKindOf( pCharObj->GetClass(), GETCLASS(CObject_PlayerOther) ) ) // 如果是玩家 // { // ENUM_RELATION sCamp = CGameInterface::GetMe()->GetCampType( // pCharObj, // (CObject*)CObjectManager::GetMe()->GetMySelf() ); // // // 通过PK模式判断是否为敌人 [8/19/2011 edit by ZL] // if (sCamp != RELATION_ENEMY) { // INT tempRelation = CObjectManager::GetMe()->GetMySelf()->GetRelationOther(pCharObj); // if ( tempRelation != -1 ) // sCamp = (ENUM_RELATION)tempRelation; // } // // if( sCamp != RELATION_FRIEND ) // 如果是同一阵营的 // { // CGameProcedure::s_pEventSystem->PushEvent( GE_INFO_INTERCOURSE, "无效目标"); // break; // } // } // else // { // CGameProcedure::s_pEventSystem->PushEvent( GE_INFO_INTERCOURSE, "无效目标"); // break; // } // pFriend->SetTargetName( pCharObj->GetCharacterData()->Get_Name() ); // //需要重写--Ivan // //pFriend->SetGroup( SCRIPT_SANDBOX::Friend::m_nCurTeam ); // pFriend->SetRelationType( RELATION_TYPE_FRIEND ); // CNetManager::GetMe()->SendPacket( &Msg ); } break; case MOUSE_CMD_TYPE.MCT_UI_USE_CANCEL_ADDFRIEND: CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); break; case MOUSE_CMD_TYPE.MCT_USE_ITEM: { //使用物品 // CGameProcedure::s_pGameInterface->PacketItem_UserItem(( // tActionItem*)cmd.m_apParam[0], // cmd.m_adwParam[1], // fVector2(cmd.m_afParam[2], cmd.m_afParam[3])); //恢复激活Action CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case MOUSE_CMD_TYPE.MCT_CANCEL_USE_ITEM: { //恢复激活Action CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case MOUSE_CMD_TYPE.MCT_LEAP: { //轻功... //SkillID_t id = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->GetDefaultFlySkillID(); //CObjectManager::GetMe()->GetMySelf()->CharacterLogic_GetAI()->PushCommand_Fly(id, cmd.m_afParam[0], cmd.m_afParam[1]); } break; case MOUSE_CMD_TYPE.MCT_CATCH_PET: { //CGameProcedure::s_pGameInterface->Player_UseSkill( cmd.m_adwParam[0], int( cmd.m_adwParam[1] ) ); } break; case MOUSE_CMD_TYPE.MCT_ENTER_BUS: { // 进入载具 [8/26/2011 ivan edit] //CGameProcedure::s_pGameInterface->Player_EnterSpecialBus(cmd.m_adwParam[0]); } break; case MOUSE_CMD_TYPE.MCT_EXIT_BUS: { // 离开载具 [8/26/2011 ivan edit] //CGameProcedure::s_pGameInterface->Player_ExitSpecialBus(cmd.m_adwParam[0]); } break; case MOUSE_CMD_TYPE.MCT_HyperLink: { HyperItemBase link = cmd.GetValue <HyperItemBase>(0); link.Click(); } break; case MOUSE_CMD_TYPE.MCT_SKILL_NONE: { tActionItem skill = cmd.GetValue <tActionItem>(0); //无目标技能 CActionItem_Skill curSkill = (CActionItem_Skill)skill; if (curSkill != null) { CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(curSkill.GetDefineID()); } } break; case MOUSE_CMD_TYPE.MCT_SKILL_SELF: { tActionItem skill = cmd.GetValue <tActionItem>(0); //无目标技能 CActionItem_Skill curSkill = (CActionItem_Skill)skill; int ServerID = cmd.GetValue <int>(1); //针对自己的技能; if (curSkill != null) { CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(curSkill.GetDefineID(), ServerID); } } break; default: //AxTrace(0, 0, "Active: ERROR!(%d)", cmd.m_typeMouse); break; } }