using BrewMonster.Network; using CSNetwork.GPDataType; namespace BrewMonster { public class CECAutoTeam { public const float TASK_TEAM_DISTANCE = 300.0f; public enum AutoTeamType { TYPE_UNKNOWN, TYPE_TASK, TYPE_ACTIVITY, } protected int m_iType; // Auto team type protected int m_iCurGoal; // For task-based teams: task ID; otherwise activity/event ID protected A3DVECTOR3 m_vTaskPos; // In task teams: player position protected CECCounter m_cntCancel; // CECAutoTeam::CECAutoTeam() // { // m_iType = TYPE_UNKNOWN; // m_iCurGoal = 0; // m_vTaskPos.Clear(); // m_cntCancel.SetPeriod(500); // m_cntCancel.Reset(); // } public void Tick(float dwDeltaTime) { if (m_iType == (int)AutoTeamType.TYPE_TASK && m_iCurGoal>0 && m_cntCancel.IncCounter(dwDeltaTime)) { A3DVECTOR3 vPos = CECGameRun.Instance.GetHostPlayer().GetPos(); var target = m_vTaskPos - vPos; if (target.MagnitudeH() > TASK_TEAM_DISTANCE) { m_vTaskPos = vPos; Cancel((int)AutoTeamType.TYPE_TASK); } m_cntCancel.Reset(); } } public bool DoAutoTeam(int type, int iGoalID) { // if(EC_Game.GetGameRun().GetHostPlayer().GetTeam()) // return false; //todo need to get bAutoTeamForTask var bAutoTeamForTask = 1; if( type == (int)AutoTeamType.TYPE_TASK && bAutoTeamForTask<=0)//&& !g_pGame->GetConfigs()->GetGameSettings().bAutoTeamForTask return false; // Èç¹ûÕýÔÚ½øÐл×é¶ÓÇëÇó£¬ÔòºöÂÔÆäËûÇëÇó //todo need to get m_iCurGoal if( m_iType == (int)AutoTeamType.TYPE_TASK && m_iCurGoal>0)// && m_iCurGoal return false; // ¼Ç¼´ËʱµÄλÖà if( type == (int)AutoTeamType.TYPE_TASK ) m_vTaskPos = EC_Game.GetGameRun().GetHostPlayer().GetPos(); if( m_iType == type && m_iCurGoal == iGoalID ) return false; UnityGameSession.c2s_CmdAutoTeamSetGoal(type, iGoalID, 1); return true; } void Cancel(int type) { if (m_iType == type && m_iCurGoal>0) UnityGameSession.c2s_CmdAutoTeamSetGoal(type, m_iCurGoal, 0); } // public void OnPrtcAutoTeamSetGoalRe(Protocol p) // { // enum // { // ERR_INVALID_GOAL = -1, // ERR_INVALID_ROLE_STATUS = -2, // }; // // using namespace GNET; // AutoTeamSetGoal_Re* pProto = (AutoTeamSetGoal_Re*)p; // if( pProto->retcode == 0 ) // { // if( pProto->op == 1 ) // { // m_iType = (int)pProto->goal_type; // m_iCurGoal = pProto->goal_id; // // if( pProto->goal_type == TYPE_ACTIVITY ) // GetGameUIMan()->AddChatMessage(GetGameUIMan()->GetStringFromTable(10864), GP_CHAT_MISC); // // // ¸üнçÃæ // CDlgActivity* pDlg = dynamic_cast(GetGameUIMan()->GetDialog("Win_Activity")); // if( pDlg ) pDlg->UpdateActivityList(true); // } // } // else // { // if( pProto->goal_type == TYPE_ACTIVITY ) // { // if( pProto->op == 1 && pProto->retcode == ERR_INVALID_GOAL ) // GetGameUIMan()->MessageBox("", GetGameUIMan()->GetStringFromTable(10860), MB_OK, A3DCOLORRGBA(255, 255, 255, 160)); // else if( pProto->op == 0 && pProto->retcode == ERR_INVALID_ROLE_STATUS ) // GetGameUIMan()->MessageBox("", GetGameUIMan()->GetStringFromTable(10861), MB_OK, A3DCOLORRGBA(255, 255, 255, 160)); // } // } // } // void CECAutoTeam::OnPrtcPlayerLeave(GNET::Protocol* p) // { // enum // { // REASON_COMPOSE_TEAM = 0, // REASON_INVALID_STATUS, // REASON_PLAYER_OP, // REASON_JOIN_TEAM, // REASON_TIMEOUT, // }; // // using namespace GNET; // AutoTeamPlayerLeave* pProto = (AutoTeamPlayerLeave*)p; // if( m_iType == TYPE_ACTIVITY ) // { // switch(pProto->reason) // { // case REASON_INVALID_STATUS: // GetGameUIMan()->MessageBox("", GetGameUIMan()->GetStringFromTable(10862), MB_OK, A3DCOLORRGBA(255, 255, 255, 160)); // break; // case REASON_TIMEOUT: // GetGameUIMan()->AddChatMessage(GetGameUIMan()->GetStringFromTable(10863), GP_CHAT_MISC); // break; // } // } // // m_iCurGoal = 0; // m_iType = TYPE_UNKNOWN; // // // ¸üнçÃæ // CDlgActivity* pDlg = dynamic_cast(GetGameUIMan()->GetDialog("Win_Activity")); // if( pDlg ) pDlg->UpdateActivityList(true); // } // // void CECAutoTeam::OnWorldChanged() // { // if( !IsMatchingForActivity() ) // return; // // bool bFound = false; // int world_id = g_pGame->GetGameRun()->GetWorld()->GetInstanceID(); // for( size_t i=0;iMessageBox("", GetGameUIMan()->GetStringFromTable(10865), MB_OK, A3DCOLORRGBA(255, 255, 255, 160)); // Cancel(TYPE_ACTIVITY); // } // } // // CECGameUIMan* CECAutoTeam::GetGameUIMan() // { // return g_pGame->GetGameRun()->GetUIManager()->GetInGameUIMan(); // } // // CECGameSession* CECAutoTeam::GetGameSession() // { // return g_pGame->GetGameSession(); // } // // CECHostPlayer* CECAutoTeam::GetHostPlayer() // { // return g_pGame->GetGameRun()->GetHostPlayer(); // } } }