/// <summary> /// This is the function that starts the game. /// </summary> /// <param name="lenght">Lenght of the game.</param> /// <param name="draw">If this is a draw game.</param> public static void StartGame(TimeSpan lenght, bool draw) { if( draw ) { CTFMessage( string.Format( "A Draw! Game will continue for {0}", MiscUtility.FormatTimeSpan( lenght ) ) ); } else { if (Spawn != null) Spawn.StartTimer(); Teams = Stone.Teams; if (Teams == 0) { int number = PlayerJoinList.Count; if ( number < 20 ) // Silver edit, old: (number < 16) || (number == 18) Teams = 2; else Teams = 4; } Item wall; if (Teams == 3) { wall = new Item(578); wall.Hue = 1150; wall.Movable = false; wall.MoveToWorld(new Point3D(5943, 451, 22), Map.Felucca); walls[0] = wall; wall = new Item(578); wall.Hue = 1150; wall.Movable = false; wall.MoveToWorld(new Point3D(5943, 452, 22), Map.Felucca); walls[1] = wall; } else if (Teams == 2) { wall = new Item(578); wall.Hue = 1150; wall.Movable = false; wall.MoveToWorld(new Point3D(5943, 451, 22), Map.Felucca); walls[0] = wall; wall = new Item(578); wall.Hue = 1150; wall.Movable = false; wall.MoveToWorld(new Point3D(5943, 452, 22), Map.Felucca); walls[1] = wall; wall = new Item(577); wall.Hue = 33; wall.Movable = false; wall.MoveToWorld(new Point3D(5955, 455, 22), Map.Felucca); walls[2] = wall; wall = new Item(577); wall.Hue = 33; wall.Movable = false; wall.MoveToWorld(new Point3D(5956, 455, 22), Map.Felucca); walls[3] = wall; } for (int i = 0; i < Teams; i++) GameData.TeamList.Add(new CTFTeamGameData(TeamArray[i])); List<CTFPlayerData> playerlist = new List<CTFPlayerData>(); foreach (Mobile m in PlayerJoinList) { CTFPlayerData pd = CTFData.GetPlayerData(m); if (pd != null) playerlist.Add(pd); else { pd = new CTFPlayerData(m); CTFData.PlayerDictionary[m] = pd; CTFData.PlayerList.Add(pd); playerlist.Add(pd); } } playerlist.Sort(); // Selection System by Silver int idx = 0; int max = playerlist.Count; if( Stone.CTFLeagueGame ) { int CTFLeagueTeam = -1; while( idx < max ) { CTFLeagueTeam = -1; CTFPlayerData pd = playerlist[idx]; if( pd.Mob.SolidHueOverride == 1109 ) CTFLeagueTeam = 0; else if( pd.Mob.SolidHueOverride == 1266 ) CTFLeagueTeam = 1; else LeaveGame( pd.Mob ); if( CTFLeagueTeam != -1 ) { CTFPlayerGameData pgd = new CTFPlayerGameData(pd.Mob, TeamArray[CTFLeagueTeam]); GameData.PlayerDictionary[pd.Mob] = pgd; GameData.PlayerList.Add(pgd); GameData.TeamList[CTFLeagueTeam].PlayerList.Add(pgd); ArmPlayer(pgd); pd.Mob.SendGump(new CTFRewardGump(pd.Mob, 0)); } pd.Mob.SolidHueOverride = -1; idx++; } } else { int startTeam = Utility.Random(Teams); bool revert = false; while( idx < max ) { for( int team = 0; team < Teams && idx < max; team++ ) { CTFPlayerData pd = playerlist[idx]; CTFPlayerGameData pgd = new CTFPlayerGameData(pd.Mob, TeamArray[((revert ? (Teams - team - 1) : team) + startTeam)%Teams]); GameData.PlayerDictionary[pd.Mob] = pgd; GameData.PlayerList.Add(pgd); GameData.TeamList[((revert ? (Teams - team - 1) : team) + startTeam)%Teams].PlayerList.Add(pgd); ArmPlayer(pgd); pd.Mob.SendGump(new CTFRewardGump(pd.Mob, 0)); idx++; } revert = !revert; } } PlayerJoinList.Clear(); ResetTeams(); CTFMessage( "The game has started." ); } // Set idle check 4 min after game starts NextIdleCheck = DateTime.Now + CTFGame.IdleTime; StartTime = DateTime.Now; CurLength = lenght; GameTimer = new CtfGameTimer(lenght, TimeSpan.FromMinutes(1.0)); GameTimer.Start(); }
public CTFPlayerGameDataGump(CTFPlayerData pd) : base(pd) { SetData(); }