Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using BattleCore;
- using BattleCore.Events;
- using BattleCorePsyOps;
- namespace BaseDuel
- {
- public class BaseGame
- {
- public BaseGame(string BotName, Configuration cfg)
- {
- m_LoadedBase = new Base();
- m_GameState = GameState.Deactivated;
- m_BaseManager = new BaseManager(cfg);
- m_Spec = new SpecManager(BotName, cfg);
- }
- private ShortChat msg = new ShortChat(); // Simple class for cfg chat msgs
- private Random ran = new Random(); // Used for random stuffs
- private BaseManager m_BaseManager; // Controls how we load bases
- private Base m_LoadedBase; // Base currently being used
- private List<string> m_WaitList; // Players waitting to get in
- private BaseTeam m_AlphaTeam, m_BravoTeam; // Teams
- private SpecManager m_Spec; // Controls where bot specs
- private GameState m_GameState; // Status of game
- private DateTime m_MatchStartTimestamp; // Timer for STARTING game
- private double m_MatchStartTime = 10; // Seconds
- private DateTime m_MatchEndTimestamp;
- private double m_MatchEndTime = 8;
- private double m_TeamOutLimit = 7500; // Seconds
- private DateTime m_MatchTotalTimeStamp; // Keep time for match
- private int m_MatchCount = 0; // How many matches have been played in session
- private int m_MatchMinimum = 6; // Minimum amount of of matches won to win session
- private int m_MatchWinBy = 2; // How many matches you have to "Win by"
- private bool m_SafeWin = true;
- private bool m_WarpOutOnMatchEnd = true;
- private bool m_StatKeeper = false;
- private byte m_TeamSortMode = 1;
- //----------------------------------------------------------------------//
- // Chat Commands //
- //----------------------------------------------------------------------//
- public Queue<EventArgs> GameSettings(string PlayerName)
- {
- Queue<EventArgs> q = new Queue<EventArgs>();
- q.Enqueue(msg.pm(PlayerName, "+--------------------------------------------------------------------+"));
- q.Enqueue(msg.pm(PlayerName, "| Base Duel Game Settings Status: "+m_GameState.ToString().PadLeft(14)+" |"));
- q.Enqueue(msg.pm(PlayerName, "| -Setting-".PadRight(25) + "-Value-".PadLeft(5).PadRight(10) + "-Help Command-".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "+--------------------------------------------------------------------+"));
- q.Enqueue(msg.pm(PlayerName, "| Match Start Time".PadRight(25) + (m_MatchStartTime.ToString() +".s").PadLeft(5).PadRight(10) + "More Info: !help matchstarttime".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "| Base Selection Mode".PadRight(25) + m_BaseManager.BaseMode.ToString().PadLeft(5).PadRight(10) + "More Info: !help basesort".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "| Team Sort Mode".PadRight(25) + m_TeamSortMode.ToString().PadLeft(5).PadRight(10) + "More Info: !help teamsort".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "| Minimum Match Count".PadRight(25) + m_MatchMinimum.ToString().PadLeft(5).PadRight(10) + "More Info: !help matchminimum".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "| Match Win By".PadRight(25) + m_MatchWinBy.ToString().PadLeft(5).PadRight(10) + "More Info: !help matchwinby".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "| Safe Win".PadRight(25) + m_SafeWin.ToString().PadLeft(5).PadRight(10) + "More Info: !help safewin".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "| AllWarp at Match End".PadRight(25) + m_WarpOutOnMatchEnd.ToString().PadLeft(5).PadRight(10) + "More Info: !help matchendaw".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "| Stats Recorded".PadRight(25) + m_StatKeeper.ToString().PadLeft(5).PadRight(10) + "More Info: !help statkeeper".PadRight(34) + "|"));
- q.Enqueue(msg.pm(PlayerName, "+--------------------------------------------------------------------+"));
- return q;
- }
- public EventArgs UnloadGame(string PlayerName)
- {
- m_GameState = GameState.Deactivated;
- return msg.arena("[ Base Duel ] - Game Unloaded.");
- }
- public EventArgs LoadGame(string PlayerName)
- {
- if (m_GameState != GameState.Deactivated)
- return msg.pm(PlayerName, "[ Base Duel ] Game has already been activated.");
- m_LoadedBase = m_BaseManager.LoadedBase;
- m_WaitList = new List<string>();
- m_AlphaTeam = new BaseTeam("Alpha Team", 887);
- m_BravoTeam = new BaseTeam("Bravo Team", 889);
- m_GameState = GameState.On;
- return msg.arena("[ Base Duel ] - Game Loaded.");
- }
- public Queue<EventArgs> Shuffle(ChatEvent c)
- {
- Queue<EventArgs> q = new Queue<EventArgs>();
- if (m_GameState != GameState.Deactivated)
- {
- q.Enqueue(msg.pm(c.PlayerName, "Base Duel has not been loaded."));
- return q;
- }
- return q;
- }
- //----------------------------------------------------------------------//
- // Timer Functions //
- //----------------------------------------------------------------------//
- public Queue<EventArgs> MainGameTimer()
- {
- Queue<EventArgs> q = new Queue<EventArgs>();
- EventArgs e = m_Spec.UpdateSpecPosition; // Update bot position
- if (e != null) q.Enqueue(e);
- switch (m_GameState)
- {
- case GameState.Deactivated:
- return q;
- case GameState.On:
- break;
- case GameState.MatchStarting:
- MatchStartTimer(q);
- break;
- case GameState.MatchOn:
- CheckForTeamOut(q);
- break;
- case GameState.MatchEnding:
- MatchEndTimer(q);
- break;
- }
- return q;
- }
- private void MatchStartTimer(Queue<EventArgs> q)
- {
- if ((DateTime.Now - m_MatchStartTimestamp).TotalSeconds < m_MatchStartTime) return;
- if (m_MatchCount > 0 || m_WaitList.Count > 1)
- StartMatch(q);
- else
- {
- m_GameState = GameState.On;
- q.Enqueue(msg.arena("Game start cancelled, not enough players."));
- }
- }
- private void MatchEndTimer(Queue<EventArgs> q)
- {
- if ((DateTime.Now - m_MatchEndTimestamp).TotalSeconds > m_MatchEndTime)
- {
- if (m_AlphaTeam.TeamInBase && m_BravoTeam.TeamInBase)
- {
- q.Enqueue(msg.arena("Game End False Positive- Game ending timer reset."));
- m_GameState = GameState.MatchOn;
- m_MatchEndTimestamp = DateTime.Now;
- }
- else
- {
- if (!m_AlphaTeam.TeamInBase && !m_BravoTeam.TeamInBase)
- EndMatch(null,q);
- else if (!m_AlphaTeam.TeamInBase)
- EndMatch(m_BravoTeam, q);
- else if (!m_BravoTeam.TeamInBase)
- EndMatch(m_AlphaTeam, q);
- }
- }
- }
- //----------------------------------------------------------------------//
- // Incoming Events //
- //----------------------------------------------------------------------//
- public Queue<EventArgs> UpdatePosition(PlayerPositionEvent pos)
- {
- if (m_GameState == GameState.Deactivated) return null; //Only continue if module game is activated
- Queue<EventArgs> q = new Queue<EventArgs>();
- switch (m_GameState)
- {
- case GameState.On:
- break;
- case GameState.MatchStarting:
- break;
- case GameState.MatchOn:
- BaseTeam t; // Grab player info
- BasePlayer p;
- GetPlayerInfo(pos.PlayerName, out p, out t);
- if (p != null)
- {
- TeamTimestampUpdates(q, pos, p, t);
- CheckForSafeWin(q, pos, p, t);
- }
- break;
- case GameState.MatchEnding:
- break;
- }
- return q;
- }
- public Queue<EventArgs> AddToWaitList(string PlayerName)
- {
- if (m_GameState == GameState.Deactivated || m_WaitList.Contains(PlayerName)) return null;
- Queue<EventArgs> q = new Queue<EventArgs>();
- m_WaitList.Add(PlayerName);
- q.Enqueue(msg.pm(PlayerName, "You have been added to Base Duel Wait list. blah txt."));
- switch (m_GameState)
- {
- case GameState.On:
- if (m_TeamSortMode == 1 && m_WaitList.Count > 1)
- {
- m_GameState = GameState.MatchStarting;
- m_MatchStartTimestamp = DateTime.Now;
- }
- break;
- case GameState.MatchStarting:
- break;
- case GameState.MatchOn:
- break;
- case GameState.MatchEnding:
- break;
- }
- return q;
- }
- public Queue<EventArgs> RemoveFromWaitList(string PlayerName)
- {
- if (m_GameState == GameState.Deactivated) return null;
- m_WaitList.Remove(PlayerName);
- return null;
- }
- //----------------------------------------------------------------------//
- // Game Functions //
- //----------------------------------------------------------------------//
- private void StartMatch(Queue<EventArgs> q)
- {
- if (m_MatchCount == 0) PreGameSort(q);
- m_AlphaTeam.PlayerInBase();
- m_BravoTeam.PlayerInBase();
- SendPlayersToStart(q);
- m_GameState = GameState.MatchOn;
- m_MatchTotalTimeStamp = DateTime.Now;
- }
- private void EndMatch( BaseTeam Winner, Queue<EventArgs> q)
- {
- if (Winner == null)
- {
- // No winners
- q.Enqueue(msg.arena("No winners - Rematch code here."));
- }
- else
- Winner.Score++;
- q.Enqueue(msg.arena("Alpha Team [ " + m_AlphaTeam.Score + " ] Bravo Team [ " + m_BravoTeam.Score + " ] "));
- if (m_WarpOutOnMatchEnd) SendTeamPM(q, "*prize #7");
- if ((m_MatchCount + 1) >= m_MatchMinimum && Math.Abs(m_AlphaTeam.Score - m_BravoTeam.Score) >= m_MatchWinBy)
- {
- q.Enqueue(msg.arena("Game Win. - End Code Here. Winner [ "+ (m_AlphaTeam.Score > m_BravoTeam.Score ? m_AlphaTeam.TeamName: m_BravoTeam.TeamName) +" ]"));
- m_GameState = GameState.Paused;
- return;
- }
- // Check for end of game here - if not continue
- m_MatchCount++;
- m_BaseManager.LoadNextBase();
- m_LoadedBase = m_BaseManager.LoadedBase;
- q.Enqueue(msg.arena("Game will begin in (" + m_MatchStartTime + ")seconds. Please select the ship you wish to fly in, now."));
- m_MatchStartTimestamp = DateTime.Now;
- m_GameState = GameState.MatchStarting;
- }
- private void PreGameSort(Queue<EventArgs> q)
- {
- switch (m_TeamSortMode)
- {
- case 1:
- m_AlphaTeam = new BaseTeam("Alpha Team", 887); // Reset teams
- m_BravoTeam = new BaseTeam("Bravo Team", 889); // -----------
- m_AlphaTeam.Score = 0;
- m_BravoTeam.Score = 0;
- m_Spec.SetSpecMode(false);
- List<string> player2sort = new List<string>();
- player2sort = new List<string>(m_WaitList.ToArray());
- string manOut = m_WaitList[m_WaitList.Count - 1];
- m_WaitList = new List<string>();
- m_Spec.ResetSpecList();
- bool alternate = false;
- if (player2sort.Count % 2 != 0) // Odd number - one man out
- {
- player2sort.Remove(manOut); // Take out last man
- m_WaitList.Add(manOut); // Add him back to Wait list
- }
- for (int j = 0; j < 10; j += 1) // Shuffle all players in our sort list
- for (int i = 0; i < player2sort.Count; i += 1) // Shuffling 10 times to make it more random ?!?!
- {
- string temp = player2sort[i];
- int r = ran.Next(i, player2sort.Count);
- player2sort[i] = player2sort[r];
- player2sort[r] = temp;
- }
- for (int i = 0; i < player2sort.Count; i += 1) // Split them up into 2 teams
- {
- alternate = !alternate;
- m_Spec.addToSpecList(player2sort[i]);
- if (alternate)
- m_AlphaTeam.AddPlayer(new BasePlayer(player2sort[i]));
- else
- m_BravoTeam.AddPlayer(new BasePlayer(player2sort[i]));
- }
- break;
- }
- }
- private void TeamTimestampUpdates(Queue<EventArgs> q, PlayerPositionEvent pos, BasePlayer p, BaseTeam t)
- {
- if (m_BaseManager.LoadedBase.PlayerInBase(pos.MapPositionX, pos.MapPositionY))
- {
- if (t.TeamName == m_AlphaTeam.TeamName)
- m_AlphaTeam.PlayerInBase();
- else
- m_BravoTeam.PlayerInBase();
- }
- }
- private void CheckForSafeWin(Queue<EventArgs> q, PlayerPositionEvent pos, BasePlayer p, BaseTeam t)
- {
- if (m_SafeWin && pos.ShipState.IsSafe)
- {
- if (t.TeamName == m_AlphaTeam.TeamName)
- {
- if (m_BaseManager.LoadedBase.PlayerInBravoBase(pos.MapPositionX, pos.MapPositionY))
- {
- EndMatch(m_AlphaTeam, q);
- }
- }
- else if (m_BaseManager.LoadedBase.PlayerInAlphaBase(pos.MapPositionX, pos.MapPositionY))
- {
- EndMatch(m_BravoTeam, q);
- }
- }
- }
- private void CheckForTeamOut(Queue<EventArgs> q)
- {
- m_AlphaTeam.UpdateTeamAlive(m_TeamOutLimit); // Update each team to see if they are still in
- m_BravoTeam.UpdateTeamAlive(m_TeamOutLimit); // -
- // Team was detected as being out - starting end of match
- if (!m_AlphaTeam.TeamInBase || !m_BravoTeam.TeamInBase)
- {
- q.Enqueue(msg.arena("Team Out detected. activating teamout timer now."));
- m_GameState = GameState.MatchEnding;
- m_MatchEndTimestamp = DateTime.Now;
- }
- }
- //----------------------------------------------------------------------//
- // Misc //
- //----------------------------------------------------------------------//
- private void SendTeamPM(Queue<EventArgs> q, string message)
- {
- for (int i = 0; i < m_AlphaTeam.TeamMembers.Count; i += 1)
- q.Enqueue(msg.pm(m_AlphaTeam.TeamMembers[i].PlayerName, message));
- for (int i = 0; i < m_BravoTeam.TeamMembers.Count; i += 1)
- q.Enqueue(msg.pm(m_BravoTeam.TeamMembers[i].PlayerName, message));
- }
- private void SendPlayersToStart(Queue<EventArgs> q)
- {
- for (int i = 0; i < m_AlphaTeam.TeamMembers.Count; i += 1)
- {
- q.Enqueue(msg.pm(m_AlphaTeam.TeamMembers[i].PlayerName, "*setfreq " + m_AlphaTeam.Frequency));
- q.Enqueue(msg.pm(m_AlphaTeam.TeamMembers[i].PlayerName, "*warpto " + m_LoadedBase.AlphaStartX + " " + m_LoadedBase.AlphaStartY));
- }
- for (int i = 0; i < m_BravoTeam.TeamMembers.Count; i += 1)
- {
- q.Enqueue(msg.pm(m_BravoTeam.TeamMembers[i].PlayerName, "*setfreq " + m_BravoTeam.Frequency));
- q.Enqueue(msg.pm(m_BravoTeam.TeamMembers[i].PlayerName, "*warpto " + m_LoadedBase.BravoStartX + " " + m_LoadedBase.BravoStartY));
- }
- q.Enqueue(msg.teamPM(m_AlphaTeam.TeamMembers[0].PlayerName, "Good Luck Alpha Team. Match[ "+(m_MatchCount + 1)+" ] Base[ "+m_LoadedBase.BaseName+" ]"));
- q.Enqueue(msg.teamPM(m_BravoTeam.TeamMembers[0].PlayerName, "Good Luck Bravo Team. Match[ " + (m_MatchCount + 1) + " ] Base[ " + m_LoadedBase.BaseName + " ]"));
- q.Enqueue(msg.pub("*shipreset"));
- }
- private void GetPlayerInfo(string PlayerName, out BasePlayer player, out BaseTeam team)
- {
- for (int i = 0; i < m_AlphaTeam.TeamMembers.Count; i += 1)
- {
- if (m_AlphaTeam.TeamMembers[i].PlayerName == PlayerName)
- {
- team = m_AlphaTeam;
- player = m_AlphaTeam.TeamMembers[i];
- return;
- }
- if (m_BravoTeam.TeamMembers[i].PlayerName == PlayerName)
- {
- team = m_BravoTeam;
- player = m_BravoTeam.TeamMembers[i];
- return;
- }
- }
- player = null;
- team = null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment