// ==================================================================== // Class: Engine.AdminBase // Parent: Core.Object // // // ==================================================================== class AdminBase extends Object Within PlayerController abstract native; var bool bAdmin; var AccessControl Manager; var localized string Msg_PlayerList; var localized string Msg_AllGameMaps; var localized string Msg_AllMapLists; var localized string Msg_MapRotationList; var localized string Msg_NoMapsAdded; var localized string Msg_AddedMapToList; var localized string Msg_NoMapsRemoved; var localized string Msg_RemovedFromList; var localized string Msg_PlayerBanned; var localized string Msg_SessionBanned; var localized string Msg_PlayerKicked; var localized string Msg_NextMapNotFound; var localized string Msg_ChangingMapTo; var localized string Msg_NoMapInRotation; var localized string Msg_NoMapsFound; var localized string Msg_MapIsInRotation; var localized string Msg_MapNotInRotation; var localized string Msg_UnknownParam; var localized string Msg_NoParamsFound; var localized string Msg_ParamModified; var localized string Msg_ParamNotModified; var localized string Msg_MapListAdded; var localized string Msg_MapListRemoved; var localized string Msg_MapIsNotInRotation; var localized string Msg_EditingMapList; function Created() { if (Level.Game.AccessControl != None) Manager = Level.Game.AccessControl; } //if _RO_ function DoLoginSilent( string Username, string Password ); //end _RO_ function DoLogin( string UserName, string Password ); function DoLogout(); function DoSwitch( string URL) { Level.ServerTravel( URL, false ); } function GoToNextMap() { if (bAdmin) { Level.Game.bChangeLevels=true; Level.Game.bAlreadyChanged=false; Level.Game.RestartGame(); } } function ShowCurrentMapList() { local int i, c; local array Ar; i = MapHandler.GetGameIndex(string(Level.Game.Class)); c = MapHandler.GetActiveList(i); Ar = MapHandler.GetCacheMapList( Level.Game.Acronym ); SendComplexMsg(Ar, Msg_AllGameMaps@MapHandler.GetMapListTitle(i,c)); } function array GetMapListNames(string GameType) { local int i; local array Ar; i = MapHandler.GetGameIndex(GameType); Ar = MapHandler.GetMapListNames(i); return Ar; } function MaplistCommand( string Cmd, string Extra ) { local array Values; local string Str; local int i, c; if (CanPerform("Ml")) { Cmd = Caps(Cmd); i = MapHandler.GetGameIndex(string(Level.Game.Class)); switch (Cmd) { case "LIST": Values = MapHandler.GetMapListNames(i); SendComplexMsg(Values, Repl(Msg_AllMapLists, "%gametype%", string(Level.Game.Class))); break; case "USED": if (Extra == "") c = MapHandler.GetActiveList(i); else c = int(Extra); Str = MapHandler.GetMapListTitle(i, c); Values = MapHandler.GetMapList(i, c); SendComplexMsg(Values, Repl(Msg_MapRotationList, "%maplist%", Str)); break; case "SWITCH": if (Extra == "") c = MapHandler.GetActiveList(i); else c = int(Extra); Str = MapHandler.GetMapListTitle(i, c); case "ADD": c = MapHandler.GetActiveList(i); Split(Extra, ",", Values); if (Values.Length == 0) ClientMessage( Repl(Msg_NoMapsAdded, "%maplist%", MapHandler.GetMapListTitle(i,c)) ); else { for ( i = Values.Length - 1; i >= 0; i-- ) { if ( !MapHandler.AddMap(i,c,Values[i]) ) Values.Remove(i,1); } SendComplexMsg(Values, Msg_AddedMapToList @ MapHandler.GetMapListTitle(i, c)); } break; case "DEL": c = MapHandler.GetActiveList(i); Split(Extra, ",", Values); if ( Values.Length == 0 ) ClientMessage( Repl(Msg_NoMapsRemoved, "%maplist%", MapHandler.GetMaplistTitle(i,c)) ); else { for ( i = Values.Length - 1; i >= 0; i-- ) { if ( !MapHandler.RemoveMap(i,c,Values[i]) ) Values.Remove(i,1); } SendComplexMsg(Values, Msg_RemovedFromList @ MapHandler.GetMapListTitle(i, c)); } break; } } } function RestartCurrentMap() { Level.ServerTravel("?restart",false); } // ===================================================================================================================== // ===================================================================================================================== // Console Commands // ===================================================================================================================== // ===================================================================================================================== exec function PlayerList() { local PlayerReplicationInfo PRI; if ( CanPerform("Xp") ) { log(Msg_PlayerList); ForEach DynamicActors(class'PlayerReplicationInfo', PRI) log(PRI.PlayerName@"( ping"@PRI.Ping$")"); } } exec function Kick( string Cmd, string Extra ) { local array Params; local array AllPRI; local Controller C, NextC; local int i; if (CanPerform("Kp") || CanPerform("Kb")) // Kp = Kick Players, Kb = Kick/Ban { if (Cmd ~= "List") { // Get the list of players to kick by showing their PlayerID // TODO: Display Fixed Playername (no garbage chars in name)? // TODO: Display Sorted ? Level.Game.GameReplicationInfo.GetPRIArray(AllPRI); for (i = 0; i Records; class'CacheManager'.static.GetGameTypeList(Records); for ( i = 0; i < Records.Length; i++ ) { if (GameType ~= Records[i].ClassName) break; if (GameType ~= Records[i].GameAcronym) break; if (GameType ~= Records[i].TextName) break; if (Right(Records[i].ClassName, Len(GameType)+1) ~= ("."$GameType)) break; if (Right(Records[i].TextName, Len(GameType)+1) ~= ("."$GameType)) break; } if ( i < Records.Length ) return Records[i].ClassName; return ""; } protected function SendComplexMsg(array Arr, string Title) { local int i, Longest; local string Line, Border; local string Prefix, Suffix; for (i = 0; i < Arr.Length; i++) if ( Len(Arr[i]) > Longest ) Longest = Len(Arr[i]); // Account for borders Longest += 8; for (Border = ""; Len(Border) < Longest; Border = Border $ "-"); ClientMessage(Title); ClientMessage(Border); for (i = 0; i < Arr.Length; i++) { Prefix = Right("[] "$i, 4)$")"; Suffix = " []"; Line = Prefix $ Arr[i] $ Suffix; while (Len(Line) < Longest) { Suffix = " " $ Suffix; Line = Prefix $ Arr[i] $ Suffix; } ClientMessage(Line); } ClientMessage(Border); } // Mask can be *|*Name|Name*|*Name*|Name protected function bool MaskedCompare(string SettingName, string Mask) { local bool bMaskLeft, bMaskRight; local int MaskLen; if (Mask == "*" || Mask == "**") return true; MaskLen = Len(Mask); bMaskLeft = Left(Mask, 1) == "*"; bMaskRight = Right(Mask, 1) == "*"; if (bMaskLeft && bMaskRight) return Instr(Caps(SettingName), Mid(Caps(Mask), 1, MaskLen-2)) >= 0; if (bMaskLeft) return Left(SettingName, MaskLen -1) ~= Left(Mask, MaskLen - 1); if (bMaskRight) return Right(SettingName, MaskLen -1) ~= Right(Mask, MaskLen - 1); return SettingName ~= Mask; } // TODO: Add support for bPositiveOnly function bool IsNumeric(string Param, optional bool bPositiveOnly) { local int p; p=0; while (Mid(Param, p, 1) == " ") p++; while (Mid(Param, p, 1) >= "0" && Mid(Param, p, 1) <= "9") p++; while (Mid(Param, p, 1) == " ") p++; if (Mid(Param, p) != "") return false; return true; } function array SplitParams(string Params) { local array Splitted; local string Delim; local int p, start; while (Params != "") { p = 0; while (Mid(Params, p, 1) == " ") p++; if (Mid(Params, p) == "") break; // Special case: Delimited string start = p; if (Mid(Params, p, 1) == "\"") { p++; start++; while (Mid(Params, p, 1) != "" && Mid(Params, p, 1) != "\"") p++; // Do not accept unfinished quoted strings if (Mid(Params, p, 1) == "\"") { Splitted[Splitted.Length] = Mid(Params, start, p-start); p++; } } else { while (Mid(Params, p, 1) != "" && Mid(Params, p, 1) != Delim) p++; Splitted[Splitted.Length] = Mid(Params, start, p-start); } Params = Mid(Params, p); } return Splitted; } defaultproperties { Msg_AllGameMaps="Maps that are valid (can be added) to" Msg_AllMapLists="Available maplists for %gametype%." Msg_MapRotationList="Active maps for maplist %maplist%." Msg_NoMapsAdded="No maps added to the maplist %maplist%." Msg_AddedMapToList="Maps successfully added to maplist" Msg_NoMapsRemoved="No maps were removed from the maplist %maplist%." Msg_RemovedFromList="Maps successfully removed from maplist" Msg_NextMapNotFound="Next map not found; Restarting same map" Msg_ChangingMapTo="Changing Map to %NextMap%" Msg_PlayerBanned="%Player% has been banned from this server" Msg_SessionBanned="%Player% has been banned for this match" Msg_PlayerKicked="%Player% has been kicked" Msg_NoMapInRotation="No maps configured for %maplist%." Msg_NoMapsFound="No matching maps in maplist %maplist% were found." Msg_MapIsInRotation="Matching %maplist% maps" Msg_MapNotInRotation="Matching maps which are not members of %maplist%." Msg_UnknownParam="Unknown Parameter : %Value%" Msg_NoParamsFound="No Parameters found!" Msg_ParamModified="Modification Successful" Msg_ParamNotModified="Could not Modify Parameter" Msg_EditingMapList="Now editing maplist" Msg_MapListAdded="Maplist %listname% successfully added for gametype" Msg_MapListRemoved="Maplist %listname% successfully removed from gametype" Msg_PlayerList="Player List:" }