VOID CActionItem_Skill::DoAction( VOID ) { // 获取将使用的技能 const SCLIENT_SKILL* pSkill = GetSkillImpl(); if( !pSkill ) return; INT idUser = -1; CObject_PlayerMySelf *pMySelf = CObjectManager::GetMe()->GetMySelf(); if( !pMySelf ) return; idUser = pMySelf->GetID(); // 自动打怪,连续施放的技能 if (TRUE == pSkill->m_pDefine->m_bAutoRedo) { tActionItem* pItem = CGameInterface::GetMe()->Skill_GetActive(); // 有激活技能 if (pItem) { // 当前技能正在激活中 if (pItem->GetID() == GetID()) { // 此次操作为关闭操作 CGameInterface::GetMe()->Skill_SetActive( CActionSystem::GetMe()->GetMyDefaultSkillAtion() ); // 关闭自动打怪 CAI_MySelf* pMySelfAI = (CAI_MySelf*)( pMySelf->CharacterLogic_GetAI() ); if( pMySelfAI ) pMySelfAI->m_bCurrSkill = FALSE; return; } else { // 选中状态 AutoKeepOn(); } } // 没有激活技能 else { // 选中状态 AutoKeepOn(); } } // 单次施放的技能 else { // 瞬发技能不会打断自动技能 if (FALSE == pSkill->m_pDefine->m_nImmediately) { CAI_MySelf* pMySelfAI = (CAI_MySelf*)( pMySelf->CharacterLogic_GetAI() ); if( pMySelfAI ) pMySelfAI->m_bCurrSkill = FALSE; } } // 进行技能使用的条件判断 // 是否学会、冷却时间、消耗 { ORESULT oResult; // 是否已经学会 oResult = pSkill->IsCanUse_Leaned(); if( OR_FAILED( oResult ) ) { CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( oResult ) ); return ; } // 检查冷却是否结束 oResult = pSkill->IsCanUse_CheckCoolDown(); if( OR_FAILED( oResult ) ) { CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( oResult ) ); return ; } // 消耗检测 oResult = pSkill->IsCanUse_CheckDeplete( idUser ); if( OR_FAILED( oResult ) ) { CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( oResult ) ); return ; } } //================ // 根据鼠标选择操作类型 switch( pSkill->m_pDefine->m_nSelectType ) // 此类型从表中读出 { case SELECT_TYPE_NONE: // 无需选择,直接施放(以自己为中心的范围自动攻击) { // id,位置,方向 CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), fVector2(pMySelf->GetPosition().x, pMySelf->GetPosition().z), pMySelf->GetFaceDir()); // 恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; case SELECT_TYPE_CHARACTER: // 选择角色 { // 有无选择主目标 if( CObjectManager::GetMe()->GetMainTarget() ) { // id,目标id CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), CObjectManager::GetMe()->GetMainTarget()->GetServerID()); } else { // 无选择目标提示信息 CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( OR_NO_TARGET ) ); } // 恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; case SELECT_TYPE_POS: // 以鼠标的位置为中心的范围攻击 { // id, //CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), fVector2(pMySelf->GetPosition().x, pMySelf->GetPosition().z), pMySelf->GetFaceDir()); // 恢复激活Action CActionSystem::GetMe()->SetDefaultAction(this); } break; case SELECT_TYPE_DIR: // 方向(扇形) // 人物的方向技能使用 //CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), fVector2(pMySelf->GetPosition().x, pMySelf->GetPosition().z), pMySelf->GetFaceDir()); CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); break; case SELECT_TYPE_SELF: // 对自己进行操作 { CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), CObjectManager::GetMe()->GetMySelf()->GetServerID()); // 恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; case SELECT_TYPE_HUMAN_GUID: // 其他玩家 { // 当前是否已经选择了一个队友 GUID_t guid; CObjectManager::GetMe()->GetMainTarget(guid); if(guid == (GUID_t)-1) { // 尚未选择合法的对象 STRING strTemp = NOCOLORMSGFUNC("GMDP_Struct_Skill_Info_Invalidate_Target"); CEventSystem::GetMe()->PushEvent(GE_NEW_DEBUGMESSAGE, strTemp.c_str()); return; } CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), (GUID_t)guid); // 恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; } }
VOID CActionItem_Skill::DoAction(VOID) { const SCLIENT_SKILL* pSkill = GetSkillImpl(); if(!pSkill) return; ORESULT oResult; // oResult = pSkill->IsCanUse_Leaned(); if ( OR_FAILED( oResult ) ) { CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( oResult ) ); return ; } ////检查冷却是否结束 oResult = pSkill->IsCanUse_CheckCoolDown(); if ( OR_FAILED( oResult ) ) { CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( oResult ) ); return ; } // 消耗检测 INT idUser; CObject_PlayerMySelf *pMySelf = CObjectManager::GetMe()->GetMySelf( ); idUser = (pMySelf)?(pMySelf->GetID()):(INVALID_ID); oResult = pSkill->IsCanUse_CheckDeplete( idUser ); if ( OR_FAILED( oResult ) ) { CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( oResult ) ); return ; } //如果是连续的那么就换为选中状态。 AutoKeepOn(); //根据操作类型 switch(pSkill->m_pDefine->m_nSelectType) { case SELECT_TYPE_NONE: { CGameProcedure::s_pGameInterface->Player_UseSkill(GetID()); //恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; case SELECT_TYPE_CHARACTER: { if(CObjectManager::GetMe()->GetMainTarget()) { CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), CObjectManager::GetMe()->GetMainTarget()->GetServerID()); } else { CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, GetOResultText( OR_NO_TARGET ) ); } //恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; case SELECT_TYPE_POS: CActionSystem::GetMe()->SetDefaultAction(this); // CGameProcedure::s_pGameInterface->Skill_SetActive(this); break; case SELECT_TYPE_DIR: CActionSystem::GetMe()->SetDefaultAction(this); // CGameProcedure::s_pGameInterface->Skill_SetActive(this); break; case SELECT_TYPE_SELF: { CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), CObjectManager::GetMe()->GetMySelf()->GetServerID()); //恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; case SELECT_TYPE_HUMAN_GUID: { //当前是否已经选择了一个队友 GUID_t guid; CObjectManager::GetMe()->GetMainTarget(guid); if(guid == (GUID_t)-1) { //尚未选择合法的对象 CEventSystem::GetMe()->PushEvent(GE_NEW_DEBUGMESSAGE, "无效目标"); return; } CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), (GUID_t)guid); //恢复激活Action CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; } }