186 lines
5.2 KiB
C#
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();
|
|
// }
|
|
}
|
|
}
|