Files
NguyenVanDat c454eba988 add auto team
2025-12-10 13:55:52 +07:00

186 lines
5.2 KiB
C#

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<CDlgActivity*>(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<CDlgActivity*>(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;i<CECUIConfig::Instance().GetGameUI().nAutoTeamTransmitEnabledMap.size();i++ )
// {
// if( world_id == CECUIConfig::Instance().GetGameUI().nAutoTeamTransmitEnabledMap[i] )
// {
// bFound = true;
// break;
// }
// }
//
// if( !bFound )
// {
// GetGameUIMan()->MessageBox("", 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();
// }
}
}