/// <summary> /// Performs the substituion for a regular player. /// </summary> /// <param name="outPlayer">The player to sub out.</param> /// <param name="team">The team to move the sub to (outPlayer's team).</param> /// <param name="inPlayer">The player to sub in.</param> public async Task DoPlayerSub(string outPlayer, Team team, string inPlayer) { // Set as successful sub so user doesn't get counted as no-show _sst.ServerInfo.CurrentPlayers[outPlayer].HasMadeSuccessfulSubRequest = true; // Sub old player out await _sst.QlCommands.CustCmdPutPlayerDelayed(outPlayer, Team.Spec, 2); // Sub new player in await _sst.QlCommands.CustCmdPutPlayerDelayed(inPlayer, team, 2); // Set player as active _manager.AddActivePickupPlayer(inPlayer); // Announce await _sst.QlCommands.QlCmdSay(string.Format( "^5[PICKUP]^7 Subbed out old {0} ^7player: {1} for new {0} ^7player: {2}", ((team == Team.Red) ? "^1RED" : "^5BLUE"), outPlayer, inPlayer), false); // Tell the player the rules await _manager.NotifyNewPlayer(inPlayer, team); // Remove from sub candidates _manager.RemoveEligibility(inPlayer); // Record the outgoing player's substituion for tracking/banning purposes _manager.Subs.Append(string.Format("{0}->{1},", inPlayer, outPlayer)); var pickupDb = new DbPickups(); pickupDb.IncrementUserSubsUsedCount(outPlayer); }
/// <summary> /// Performs the captain's player pick. /// </summary> /// <param name="c">The command argument information.</param> /// <param name="team">The team on which the player should be placed.</param> /// <returns></returns> private async Task DoPlayerPick(Cmd c, Team team) { if (!_manager.AvailablePlayers.Contains(Helpers.GetArgVal(c, 1))) { StatusMessage = string.Format("^1[ERROR]^3 {0} is not an eligible player!", Helpers.GetArgVal(c, 1)); await SendServerTell(c, StatusMessage); await _manager.DisplayAvailablePlayers(); await ShowWhosePick(team); return; } await _sst.QlCommands.QlCmdSay(string.Format("^5[PICKUP] {0} ^7({1}{2}^7) picked {1}{3}", ((team == Team.Red) ? "^1RED" : "^5BLUE"), ((team == Team.Red) ? "^1" : "^5"), ((team == Team.Red) ? RedCaptain : BlueCaptain), Helpers.GetArgVal(c, 1)), false); if (team == Team.Red) { _manager.RemoveEligibility(Helpers.GetArgVal(c, 1)); await _sst.QlCommands.CustCmdPutPlayer(Helpers.GetArgVal(c, 1), Team.Red); _manager.AddActivePickupPlayer(Helpers.GetArgVal(c, 1)); await SetPickingTeam(Team.Blue); Log.Write(string.Format("RED captain picked player {0}", Helpers.GetArgVal(c, 1)), _logClassType, _logPrefix); } else if (team == Team.Blue) { _manager.RemoveEligibility(Helpers.GetArgVal(c, 1)); await _sst.QlCommands.CustCmdPutPlayer(Helpers.GetArgVal(c, 1), Team.Blue); _manager.AddActivePickupPlayer(Helpers.GetArgVal(c, 1)); await SetPickingTeam(Team.Red); Log.Write(string.Format("BLUE captain picked player {0}", Helpers.GetArgVal(c, 1)), _logClassType, _logPrefix); } // Notify player await _manager.NotifyNewPlayer(Helpers.GetArgVal(c, 1), team); // Teams are full, we are ready to start if (_manager.AreTeamsFull) { //At this point, add the game to the pickupgames table var pickupDb = new DbPickups(); pickupDb.AddPickupGame(_manager.CreatePickupInfo()); _manager.HasTeamSelectionStarted = false; await _sst.QlCommands.QlCmdSay( "^5[PICKUP]^4 *** ^7TEAMS ARE ^3FULL.^7 PLEASE ^2*READY UP (F3)*^7 TO START THE GAME! ^4***", false); await _sst.QlCommands.QlCmdSay( "^5[PICKUP]^7 Any unpicked players or late-adders will be automatically added to the substitutes list when the game starts!", false); Log.Write("Teams are now full!", _logClassType, _logPrefix); } }