Prepare fixtures

This commit is contained in:
dkanus 2026-07-14 20:27:09 +07:00
commit 9c94356263
6021 changed files with 722805 additions and 22 deletions

View file

@ -0,0 +1,72 @@
class APCleanList extends Info;
var string MSG_Clean[4];
function Clean(PlayerController pc, UltraAdmin Admin, string trash)
{
local Pickup Pickup;
local CrossbuzzsawBlade CrossbuzzsawBlade;
local PipeBombProjectile Pipes;
local bool bAll, bSaw, bPipe, bDosh;
switch(trash)
{
case "saw":
bSaw = true;
trash = MSG_Clean[0];
break;
case "pipe":
bPipe = true;
trash = MSG_Clean[1];
break;
case "dosh":
bDosh = true;
trash = MSG_Clean[2];
break;
default:
bAll = true;
trash = MSG_Clean[3];
}
foreach DynamicActors(class'Pickup', Pickup)
{
if(Pickup == none)
continue;
// remove dosh only if specified
if(Pickup.bDropped || ((bAll || bDosh) && Pickup.IsA('CashPickup')))
Pickup.Destroy();
}
// saw removing
if(bSaw || bAll)
{
//remove this annoying shit
foreach DynamicActors(class'CrossbuzzsawBlade', CrossbuzzsawBlade)
{
if(CrossbuzzsawBlade == none)
continue;
if(CrossbuzzsawBlade.ImpactActor != none)
CrossbuzzsawBlade.Destroy();
}
}
// pipe removing
if(bPipe || bAll)
{
foreach DynamicActors(class'PipeBombProjectile', Pipes)
{
if(Pipes == none)
continue;
Pipes.Destroy();
}
}
Admin.BroadcastText("%b"$class'Helper'.static.ParsePlayerName(pc)@trash);
}
defaultproperties
{
MSG_Clean[0]="%wcleaned all %rbuzzsaws%w."
MSG_Clean[1]="%wcleaned all %rpipes%w."
MSG_Clean[2]="%wcleaned all %rdosh%w."
MSG_Clean[3]="%wcleaned all %rgarbage%w."
}

View file

@ -0,0 +1,50 @@
class APPawnActions extends Info;
function EditPawn(Pawn p, string param)
{
if(p == none || p.controller == none)
{
return;
}
// force walking before any other action
p.bAmbientCreature = false;
p.UnderWaterTime = p.Default.UnderWaterTime;
p.SetCollision(true, true , true);
p.SetPhysics(PHYS_Walking);
p.bCollideWorld = true;
p.JumpZ = p.Default.JumpZ;
p.bCanJump = true;
p.controller.GotoState('PlayerWalking');
p.PlayTeleportEffect(true, true);
switch(param)
{
case "ghost":
p.bAmbientCreature = true;
p.UnderWaterTime = -1.0;
p.SetCollision(false, false, false);
p.bCollideWorld = false;
p.controller.GotoState('PlayerFlying');
p.PlayTeleportEffect(true, true);
break;
case "fly":
p.bAmbientcreature = false;
p.UnderWaterTime = p.Default.UnderWaterTime;
p.Setcollision(true, true , true);
p.bCollideWorld = true;
p.controller.GotoState('PlayerFlying');
p.PlayTeleportEffect(true, true);
break;
case "spider":
p.bAmbientCreature = false;
p.UnderWaterTime = p.Default.UnderWaterTime;
p.SetCollision(true, true , true);
p.bCollideWorld = true;
p.JumpZ = 0.0;
xPawn(p).bflaming = true;
p.controller.GotoState('PlayerSpidering');
p.PlayTeleportEffect(true, true);
break;
}
}

View file

@ -0,0 +1,42 @@
class APPerkList extends Info
abstract;
struct PerkRecord
{
var array<string> PerkName;
var string PerkClass;
};
var array<PerkRecord> PerkList;
static function class<KFVeterancyTypes> getPerkClass(string Perk)
{
local int i,n,j;
local array<PerkRecord> temp;
local string strTemp;
temp = default.PerkList;
for(i=0; i<temp.Length; i++)
{
j = temp[i].PerkName.Length;
for(n=0; n<j; n++)
{
if(Perk != temp[i].PerkName[n])
continue;
strTemp = temp[i].PerkClass;
}
}
return class<KFVeterancyTypes>(dynamicLoadObject(strTemp, class'Class'));
}
defaultproperties
{
PerkList[00]=(PerkName=("med","medic"),PerkClass="KFMod.KFVetFieldMedic")
PerkList[01]=(PerkName=("zerk","berserker"),PerkClass="KFMod.KFVetBerserker")
PerkList[02]=(PerkName=("mando","comando"),PerkClass="KFMod.KFVetCommando")
PerkList[03]=(PerkName=("sharp","sharpshooter"),PerkClass="KFMod.KFVetSharpshooter")
PerkList[04]=(PerkName=("sup","support","spec"),PerkClass="KFMod.KFVetSupportSpec")
PerkList[05]=(PerkName=("pyro","firebug","firefag"),PerkClass="KFMod.KFVetFirebug")
PerkList[06]=(PerkName=("demo","demolition"),PerkClass="KFMod.KFVetDemolitions")
PerkList[07]=(PerkName=("none"),PerkClass="")
}

View file

@ -0,0 +1,25 @@
class APPoofProj extends KFMod.ShotgunBullet;
simulated function ProcessTouch(Actor Other, Vector HitLocation)
{
local Pawn HitPawn;
if(Other == None || Other == Instigator || Other.Base == Instigator)
return;
if(Role == ROLE_Authority)
{
if(ExtendedZCollision(Other) != None)
HitPawn = Pawn(Other.Base);
else
HitPawn = Pawn(Other);
if(HitPawn != None)
HitPawn.Died(Instigator.Controller, MyDamageType, HitLocation);
}
Destroy();
}
defaultproperties
{
MyDamageType=class'KFMod.DamTypeDwarfAxe'
}

View file

@ -0,0 +1,78 @@
class APRageList extends Info;
var string MSG_Rage[6];
function Rage(PlayerController pc, UltraAdmin Admin, string strVictim)
{
local KFMonster M;
local string msg;
local bool bAll, bPAT, bFP, bSC, bGore, bSiren;
switch(strVictim)
{
case "all":
bAll = true;
msg = MSG_Rage[0];
break;
case "f":
case "fp":
case "fleshpound":
bFP = true;
msg = MSG_Rage[1];
break;
case "s":
case "sc":
case "scrake":
bSC = true;
msg = MSG_Rage[2];
break;
case "p":
case "b":
case "pat":
case "boss":
case "patriarch":
bPAT = true;
msg = MSG_Rage[3];
break;
case "g":
case "gore":
case "gorefast":
bGore = true;
msg = MSG_Rage[4];
break;
case "siren":
bSiren = true;
msg = MSG_Rage[5];
break;
default:
class'Helper'.static.TellAbout(pc,Admin,"MsgRage");
return;
}
foreach DynamicActors(class'KFMonster', M)
{
if(M == none)
continue;
if(ClassIsChildOf(M.class, class'KFMod.ZombieScrakeBase') && (bAll || bSC))
M.gotoState('RunningState');
if(ClassIsChildOf(M.class, class'KFMod.ZombieFleshPoundBase') && (bAll || bFP))
M.gotoState('RageCharging');
if(ClassIsChildOf(M.class, class'KFMod.ZombieBossBase') && (bAll || bPAT))
M.gotoState('Charging');
if(ClassIsChildOf(M.class, class'KFMod.ZombieGoreFastBase') && (bAll || bGore))
M.gotoState('RunningState');
if(ClassIsChildOf(M.class, class'KFMod.ZombieSirenBase') && (bAll || bSiren))
M.SetAnimAction('Siren_Scream');;
}
Admin.SendMessage(pc,msg);
}
defaultproperties
{
MSG_Rage[0]="%wYou raged all %rniggas %win the hood."
MSG_Rage[1]="%wYou raged all %rFleshpounds%w."
MSG_Rage[2]="%wYou raged all %rScrakes%w."
MSG_Rage[3]="%wYou raged all %rPatriarchs%w."
MSG_Rage[4]="%wYou raged all %rGorefasts%w."
MSG_Rage[5]="%wYou raged all %rSirens%w."
}

View file

@ -0,0 +1,15 @@
class APWeaponList extends Object
PerObjectConfig
config(AdminPlus_v4);
var config array<string> Weapons;
var array<string> DefaultEquip;
defaultproperties
{
DefaultEquip[0]="KFMod.Knife"
DefaultEquip[1]="KFMod.Single"
DefaultEquip[2]="KFMod.Nade"
DefaultEquip[3]="KFMod.Syringe"
DefaultEquip[4]="KFMod.Welder"
}

Binary file not shown.

View file

@ -0,0 +1,49 @@
class APZedList extends Object
config(AdminPlus_v4);
struct ZedRecord
{
var config array<string> ZedName; //zed name, for comfort
var config string ZedClassName; //color tag
};
var config array<ZedRecord> ZedList; //zed list
static function class<KFMonster> getZedClass(string zed, string eventType)
{
local int i,n,j;
local array<ZedRecord> temp;
local string strTemp;
// parse event type
switch(eventType)
{
case "h":
eventType = "_HALLOWEEN";
break;
case "c":
eventType = "_CIRCUS";
break;
case "x":
eventType = "_XMas";
break;
case "none":
eventType = ""; //in case we want to spawn some custom shit
break;
default:
eventType = "_STANDARD";
}
temp = default.ZedList;
for(i=0; i<temp.Length; i++)
{
j = temp[i].ZedName.Length;
for(n=0; n<j; n++)
{
if(zed != temp[i].ZedName[n])
continue;
strTemp = temp[i].ZedClassName$eventType;
}
}
return class<KFMonster>(dynamicLoadObject(strTemp, class'Class'));
}

View file

@ -0,0 +1,31 @@
class AdminList extends Object
abstract
config(AdminPlus_v4);
struct AdminRecord
{
var string AdminLogin;
var string AdminPass;
var string AdminID;
var byte AdminPriv;
};
var config array<AdminRecord> AdminList;
static function bool CheckAdmin(PlayerController outer, string Username, string Password)
{
local int i;
local array<AdminRecord> temp;
temp = default.AdminList;
for(i=0; i<temp.Length; i++)
{
if(temp[i].AdminID != outer.GetPlayerIDHash())
continue;
if(temp[i].AdminLogin == Username && temp[i].AdminPass == Password)
{
outer.PlayerReplicationInfo.bAdmin = true;
return true;
}
}
return false;
}

Binary file not shown.

View file

@ -0,0 +1,40 @@
class MutAdminPlus extends Mutator;
event PreBeginPlay()
{
super.PreBeginPlay();
Level.Game.AccessControl.AdminClass = class'UltraAdmin';
Level.Game.bAllowMPGameSpeed = true;
}
event PostBeginPlay()
{
class'XWebAdmin.UTServerAdmin'.default.QueryHandlerClasses[0]="AdminPlus_v4.newxWebQueryCurrent";
class'XWebAdmin.UTServerAdmin'.default.SpectatorType=Class'AdminPlus_v4.newUTServerAdminSpectator';
}
static function FillPlayInfo(PlayInfo PlayInfo)
{
super.FillPlayInfo(PlayInfo);
//PlayInfo.AddSetting("Admin Plus", "bAllowLoaded", default.LoadedDisplayText, 0, 1, "Check");
}
static event string GetDescriptionText(string Property)
{
/* switch(Property)
{
case "bAllowLoaded":
return default.LoadedDescText;
} */
return super.GetDescriptionText(Property);
}
defaultproperties
{
GroupName="KF-AdminPlus"
FriendlyName="AdminPlus_v4"
Description="Extended and overpowered version of AdminPlus v2 / Admin Control."
}

Binary file not shown.

View file

@ -0,0 +1,21 @@
<html>
<head><title>Index of /kf_sources/AdminPlus_v4/Classes/</title></head>
<body>
<h1>Index of /kf_sources/AdminPlus_v4/Classes/</h1><hr><pre><a href="../">../</a>
<a href="APCleanList.uc">APCleanList.uc</a> 26-Apr-2019 00:29 1650
<a href="APPawnActions.uc">APPawnActions.uc</a> 26-Apr-2019 00:39 1411
<a href="APPerkList.uc">APPerkList.uc</a> 28-Feb-2019 07:35 1288
<a href="APPoofProj.uc">APPoofProj.uc</a> 27-Sep-2019 20:59 571
<a href="APRageList.uc">APRageList.uc</a> 26-Apr-2019 00:32 2039
<a href="APWeaponList.uc">APWeaponList.uc</a> 28-Feb-2019 20:43 342
<a href="APWipe.uc">APWipe.uc</a> 30-Apr-2019 03:01 1342
<a href="APZedList.uc">APZedList.uc</a> 28-Feb-2019 20:14 1119
<a href="AdminList.uc">AdminList.uc</a> 18-Mar-2019 10:30 702
<a href="Helper.uc">Helper.uc</a> 09-Oct-2019 21:07 23640
<a href="MutAdminPlus.uc">MutAdminPlus.uc</a> 19-Jun-2019 21:07 997
<a href="PlayerControllerArray.uc">PlayerControllerArray.uc</a> 27-Feb-2019 22:13 20038
<a href="UltraAdmin.uc">UltraAdmin.uc</a> 09-Oct-2019 21:06 124318
<a href="newUTServerAdminSpectator.uc">newUTServerAdminSpectator.uc</a> 14-Apr-2019 08:33 1347
<a href="newxWebQueryCurrent.uc">newxWebQueryCurrent.uc</a> 14-Apr-2019 08:43 17301
</pre><hr></body>
</html>

View file

@ -0,0 +1,65 @@
class newUTServerAdminSpectator extends UTServerAdminSpectator;
var bool isWindows;
function InitPlayerReplicationInfo()
{
super.InitPlayerReplicationInfo();
PlayerReplicationInfo.bAdmin = true;
}
function string ConvertString(string msg)
{
local int i;
local string tmp;
local string result;
local int code;
tmp=msg;
for(i=0; i<Len(msg); i++)
{
code=Asc(tmp);
if(code>1000) code-=848;
if(i==0) result=Chr(code);
else result=result$Chr(code);
tmp=Mid(tmp,1);
}
return result;
}
function string FormatMessage(PlayerReplicationInfo PRI, String Text, name Type)
{
local string Message;
local string cPlayerName;
if(PRI!=none)
cPlayerName=PRI.PlayerName;
if(!isWindows)
{
Text=ConvertString(Text);
if(PRI!=none)
cPlayerName=ConvertString(PRI.PlayerName);
}
if(PRI != None)
{
if(Type == 'Say' && PRI == PlayerReplicationInfo)
Message = Text;
else if(Type == 'Say')
Message = cPlayerName$": "$Text;
else if(Type == 'TeamSay')
Message = "["$cPlayerName$"]: "$Text;
else
Message = "("$Type$") "$Text;
}
else if(Type == 'Console')
Message = "WebAdmin:"@Text;
else
Message = "("$Type$") "$Text;
return Message;
}
defaultproperties
{
isWindows=true
}

View file

@ -0,0 +1,542 @@
class newxWebQueryCurrent extends xWebQueryCurrent;
var xAdminUser CurAdmin; // Currently logged admin (not thread safe)
function string ConvertString(string msg)
{
local int i;
local string tmp;
local string result;
local int code;
tmp=msg;
for(i=0; i<Len(msg); i++)
{
code=Asc(tmp);
if(code>191 && code<400) code+=848;
if(i==0) result=Chr(code);
else result=result$Chr(code);
tmp=Mid(tmp,1);
}
return result;
}
function QueryCurrentConsole(WebRequest Request, WebResponse Response)
{
local String SendStr, OutStr;
//Flame. Префикс перед сообщением вебадмина
local string prefixAdminString;
local int sayPos;
CurAdmin = Level.Game.AccessControl.GetLoggedAdmin(Spectator);
if(CurAdmin == none)
{
log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA: CurAdmin == none!!!!");
}
prefixAdminString=CurAdmin.UserName;
//
if (CanPerform("Xc"))
{
SendStr = Request.GetVariable("SendText", "");
//Flame. Конвертация и префикс админа
sayPos=InStr(SendStr,"say");
if(sayPos>=0)
{
SendStr=ConvertString(SendStr);
if(sayPos==0)
SendStr="say "$prefixAdminString@Mid(SendStr,4);
}
//
if (SendStr != "" && !(Left(SendStr, 6) ~= "debug " || SendStr ~= "debug"))
{
if (Left(SendStr, 4) ~= "say ")
Level.Game.Broadcast(Spectator, Mid(SendStr, 4), 'Say');
else if (SendStr ~= "pause")
{
if (Level.Pauser == None)
Level.Pauser = Spectator.PlayerReplicationInfo;
else Level.Pauser = None;
}
else if (SendStr ~= "dump")
Spectator.Dump();
else if ((Left(SendStr, 4) ~= "get " || Left(SendStr,4) ~= "set ") &&
(InStr(Caps(SendStr), "XADMINCONFIG") != -1 || !CanPerform("Ms")) )
{
if ( InStr(Caps(SendStr), "XADMINCONFIG") != -1 )
{
StatusError(Response, ConsoleUserlist);
ShowMessage(Response, Error, "");
log("User attempted to modify or enumerate admin account information illegally using the webadmin console. User:"$Request.Username$".",'WebAdmin');
}
else if ( !CanPerform("Ms") )
AccessDenied(Response);
}
else
{
OutStr = Level.ConsoleCommand(SendStr);
if (OutStr != "")
{
Spectator.AddMessage(None, OutStr, 'Console');
}
Spectator.ConsoleCommand("admin " $ SendStr);
log(prefixAdminString $ "executed " $ SendStr);
}
}
Response.Subst("LogURI", CurrentConsoleLogPage);
Response.Subst("SayURI", CurrentConsoleSendPage);
ShowPage(Response, CurrentConsolePage);
}
else
AccessDenied(Response);
}
function QueryCurrentPlayers(WebRequest Request, WebResponse Response)
{
local string Sort, PlayerListSubst, TempStr, TempTag, TempData;
local string TableHeaders, GameType, Reverse, ColorNames[2], Last;
local StringArray PlayerList;
local Controller P, NextP;
local int i, Cols, mlength;
local string IP, ID;
local bool bCanKick, bCanBan, bCanKickBots;
Response.Subst("Section", CurrentLinks[1]);
Response.Subst("PostAction", CurrentPlayersPage);
ColorNames[0] = class'TeamInfo'.default.ColorNames[0];
ColorNames[1] = class'TeamInfo'.default.ColorNames[1];
MLength = int(Eval(Len(ColorNames[0]) > Len(ColorNames[1]), string(Len(ColorNames[0])), string(Len(ColorNames[1]))));
if (CanPerform("Xp|Kp|Kb|Ko"))
{
PlayerList = new(None) class'SortedStringArray';
Sort = Request.GetVariable("Sort", "Name");
Last = Request.GetVariable("Last");
Response.Subst("Sort", Sort);
Cols = 0;
bCanKick = CanPerform("Kp");
bCanBan = CanPerform("Kb");
bCanKickBots = CanPerform("Ko|Mb");
if (Last == Sort && Request.GetVariable("ReverseSort") == "")
{
PlayerList.ToggleSort();
Reverse = "?ReverseSort=True";
}
else Reverse = "";
// Count the number of Columns allowed
if (bCanKick || bCanBan || bCanKickBots)
{
// Use 'do-while' to avoid access-none when destroying Controllers within the loop
P = Level.ControllerList;
if (P != None)
{
do {
NextP = P.NextController;
if( PlayerController(P) != None
&& P.PlayerReplicationInfo != None
&& NetConnection(PlayerController(P).Player) != None)
{
if ( bCanBan && Request.GetVariable("Ban" $ string(P.PlayerReplicationInfo.PlayerID)) != "" )
Level.Game.AccessControl.KickBanPlayer(PlayerController(P));
//if _RO_
else if ( bCanBan && Request.GetVariable("Session" $ string(P.PlayerReplicationInfo.PlayerID)) != "" )
Level.Game.AccessControl.BanPlayer(PlayerController(P), true);
//end _RO_
else if ( bCanKick && Request.GetVariable("Kick" $ string(P.PlayerReplicationInfo.PlayerID)) != "" )
Level.Game.AccessControl.KickPlayer(PlayerController(P));
}
else if ( PlayerController(P) == None && bCanKickBots && P.PlayerReplicationInfo != None &&
Request.GetVariable("Kick" $ string(P.PlayerReplicationInfo.PlayerID)) != "")
{ // Kick Bots
P.Destroy();
}
P = NextP;
} until (P == None);
}
if (bCanKick || bCanKickBots) Cols += 1;
if (bCanBan) Cols += 2;
Response.Subst("KickButton", SubmitButton("Kick", KickButtonText[Cols-1]));
// Build of valid TableHeaders
TableHeaders = "";
if (bCanKick || bCanKickBots)
{
Response.Subst("HeadTitle", "Kick");
TableHeaders $= WebInclude(PlayerListHeader);
}
if (bCanBan)
{
//if _RO_
Response.Subst("HeadTitle", "Session");
TableHeaders $= WebInclude(PlayerListHeader);
//end _RO_
Response.Subst("HeadTitle", "Ban");
TableHeaders $= WebInclude(PlayerListHeader);
}
if (Sort ~= "Name") Response.Subst("ReverseSort", Reverse);
else Response.Subst("ReverseSort", "");
Response.Subst("HeadTitle", "Name");
TableHeaders $= WebInclude(PlayerListLinkedHeader);
if (Level.Game.GameReplicationInfo.bTeamGame)
{
if (Sort ~= "Team") Response.Subst("ReverseSort", Reverse);
else Response.Subst("ReverseSort", "");
Response.Subst("HeadTitle", "Team");
TableHeaders $= WebInclude(PlayerListLinkedHeader);
}
if (Sort ~= "Ping") Response.Subst("ReverseSort", Reverse);
else Response.Subst("ReverseSort", "");
Response.Subst("HeadTitle", "Ping");
TableHeaders $= WebInclude(PlayerListLinkedHeader);
if (Sort ~= "Score") Response.Subst("ReverseSort", Reverse);
else Response.Subst("ReverseSort", "");
Response.Subst("HeadTitle", "Score");
TableHeaders $= WebInclude(PlayerListLinkedHeader);
//if _RO_
Response.Subst("HeadTitle", "Team Kills");
TableHeaders $= WebInclude(PlayerListHeader);
//end _RO_
Response.Subst("HeadTitle", "IP");
TableHeaders $= WebInclude(PlayerListHeader);
// evo ---
if (Level.Game.AccessControl.bBanbyID)
{
Response.Subst("HeadTitle", "Global ID");
TableHeaders $= WebInclude(PlayerListHeader);
}
// --- evo
Response.Subst("TableHeaders", TableHeaders);
}
if (CanPerform("Ms"))
{
GameType = Level.GetItemName(SetGamePI(GameType));
if (GamePI != None && GamePI.Settings[GamePI.FindIndex(GameType$".MinPlayers")].SecLevel <= CurAdmin.MaxSecLevel())
{
if ((Request.GetVariable("SetMinPlayers", "") != "") && UnrealMPGameInfo(Level.Game) != None)
{
UnrealMPGameInfo(Level.Game).MinPlayers = Min(Max(int(Request.GetVariable("MinPlayers", String(0))), 0), 32);
Level.Game.SaveConfig();
}
Response.Subst("MinPlayers", string(UnrealMPGameInfo(Level.Game).MinPlayers));
Response.Subst("MinPlayerPart", WebInclude(PlayerListMinPlayers));
}
else
{
Response.Subst("MinPlayers", "");
Response.Subst("MinPlayersPart", "");
}
}
for (P=Level.ControllerList; P!=None; P=P.NextController)
{
TempData = "";
if (!P.bDeleteMe && P.bIsPlayer && P.PlayerReplicationInfo != None)
{
Response.Subst("Content", CheckBox("Kick" $ string(P.PlayerReplicationInfo.PlayerID), False));
if (CanPerform("Kp"))
TempData $= WebInclude(CellCenter);
if (CanPerform("Kb"))
{
//if _RO_
if ( PlayerController(P) != None )
{
Response.Subst("Content", Checkbox("Session" $ string(P.PlayerReplicationInfo.PlayerID), False));
TempData $= WebInclude(CellCenter);
Response.Subst("Content", Checkbox("Ban" $ string(P.PlayerReplicationInfo.PlayerID), False));
TempData $= WebInclude(CellCenter);
}
else
{
Response.Subst("Content", "");
TempData $= WebInclude(CellCenter)$WebInclude(CellCenter);
}
//else
//if ( PlayerController(P) != None )
// Response.Subst("Content", Checkbox("Ban" $ string(P.PlayerReplicationInfo.PlayerID), False));
//else Response.Subst("Content", "");
//TempData $= WebInclude(CellCenter);
//end _RO_
}
TempStr = "";
if (DeathMatch(Level.Game) != None && DeathMatch(Level.Game).bTournament && P.PlayerReplicationInfo.bReadyToPlay)
TempStr = " (Ready) ";
else if (P.PlayerReplicationInfo.bIsSpectator)
TempStr = " (Spectator) ";
else if (PlayerController(P) == None)
TempStr = " (Bot) ";
if( PlayerController(P) != None )
{
IP = PlayerController(P).GetPlayerNetworkAddress();
IP = HtmlEncode(" " $ Left(IP, InStr(IP, ":")));
// evo ---
ID = HtmlEncode(" " $ Eval(Level.Game.AccessControl.bBanbyID, PlayerController(P).GetPlayerIDHash(), " "));
// --- evo
}
else
{
IP = HtmlEncode(" ");
ID = HtmlEncode(" ");
}
Response.Subst("Content", HtmlEncode(ConvertString(P.PlayerReplicationInfo.PlayerName) $ TempStr));
TempData $= WebInclude(NowrapLeft);
if (Level.Game.bTeamGame)
{
if (P.PlayerReplicationInfo.Team != None && P.PlayerReplicationInfo.Team.TeamIndex < 4)
Response.Subst("Content", "<span style='background-color: "$class'TeamInfo'.default.ColorNames[P.PlayerReplicationInfo.Team.TeamIndex]$"'>"$HtmlEncode(" ")$"</span>"$HtmlEncode(P.PlayerReplicationInfo.Team.GetHumanReadableName()));
else if (P.PlayerReplicationInfo.bIsSpectator)
Response.Subst("Content", HtmlEncode(" "));
TempData $= WebInclude(NowrapCenter);
}
Response.Subst("Content", string(P.PlayerReplicationInfo.Ping*4));
TempData $= WebInclude(CellCenter);
Response.Subst("Content", string(int(P.PlayerReplicationInfo.Score)));
TempData $= WebInclude(CellCenter);
//if _RO_
Response.Subst("Content", string(P.PlayerReplicationInfo.FFKills));
TempData $= WebInclude(CellCenter);
//end _RO_
Response.Subst("Content", IP);
TempData $= WebInclude(CellCenter);
if (Level.Game.AccessControl.bBanbyID)
{
Response.Subst("Content", ID);
TempData $= WebInclude(CellCenter);
}
switch (Sort)
{
case "Name":
TempTag = ConvertString(P.PlayerReplicationInfo.PlayerName); break;
case "Team": // Ordered by Team, then subordered by last selected sort method
TempTag = PadRight(class'TeamInfo'.default.ColorNames[P.PlayerReplicationInfo.Team.TeamIndex],MLength,"0");
switch (Last)
{
case "Name":
TempTag $= ConvertString(P.PlayerReplicationInfo.PlayerName); break;
case "Ping":
TempTag $= PadLeft(string(P.PlayerReplicationInfo.Ping*4), 5, "0"); break;
default:
TempTag $= PadLeft(string(int(P.PlayerReplicationInfo.Score)), 4, "0"); break;
}
break;
case "Ping":
TempTag = PadLeft(string(P.PlayerReplicationInfo.Ping*4), 5, "0"); break;
default:
TempTag = PadLeft(string(int(P.PlayerReplicationInfo.Score)), 4, "0"); break;
}
Response.Subst("RowContent", TempData);
PlayerList.Add( WebInclude(RowLeft), TempTag);
}
}
PlayerListSubst = "";
if (PlayerList.Count() > 0)
{
for ( i=0; i<PlayerList.Count(); i++)
{
if (Sort ~= "Score")
PlayerListSubst = PlayerList.GetItem(i) $ PlayerListSubst;
else PlayerListSubst $= PlayerList.GetItem(i);
}
}
else
{
Response.Subst("SpanContent", NoPlayersConnected);
Response.Subst("SpanLength", "6");
Response.Subst("RowContent", WebInclude(CellColSpan));
PlayerListSubst = WebInclude(RowCenter);
}
Response.Subst("PlayerList", PlayerListSubst);
Response.Subst("MinPlayers", string(UnrealMPGameInfo(Level.Game).MinPlayers));
Response.Subst("PageHelp", NotePlayersPage);
MapTitle(Response);
ShowPage(Response, CurrentPlayersPage);
}
else
AccessDenied(Response);
}
function QueryCurrentGame(WebRequest Request, WebResponse Response)
{
local StringArray ExcludeMaps, IncludeMaps, MovedMaps;
local class<GameInfo> GameClass;
local string NewGameType, SwitchButtonName, GameState, NewMap;
local bool bMakeChanges;
local Controller C;
local xPlayer XP;
local TeamPlayerReplicationInfo PRI;
local int MultiKills, Sprees, GameIndex;
if (CanPerform("Mt|Mm"))
{
if (Request.GetVariable("SwitchGameTypeAndMap", "") != "")
{
if (CanPerform("Mt"))
ServerChangeMap(Request, Response, Request.GetVariable("MapSelect"), Request.GetVariable("GameTypeSelect"));
else AccessDenied(Response);
return;
}
else if (Request.GetVariable("SwitchMap", "") != "")
{
if (CanPerform("Mm|Mt"))
{
NewMap = Request.GetVariable("MapSelect");
Level.ServerTravel(NewMap$"?game="$Level.Game.Class$"?mutator="$UsedMutators(), false);
ShowMessage(Response, WaitTitle, Repl(MapChangingTo, "%MapName%", NewMap));
}
else AccessDenied(Response);
return;
}
bMakeChanges = (Request.GetVariable("ApplySettings", "") != "");
if (CanPerform("Mt") && (bMakeChanges || Request.GetVariable("SwitchGameType", "") != ""))
{
NewGameType = Request.GetVariable("GameTypeSelect");
GameClass = class<GameInfo>(DynamicLoadObject(NewGameType, class'Class'));
}
else GameClass = None;
if (GameClass == None)
{
GameClass = Level.Game.Class;
NewGameType = String(GameClass);
}
GameIndex = Level.Game.MaplistHandler.GetGameIndex(NewGameType);
ExcludeMaps = ReloadExcludeMaps(NewGameType);
IncludeMaps = ReloadIncludeMaps(ExcludeMaps, GameIndex, Level.Game.MaplistHandler.GetActiveList(GameIndex));
GameState = "";
// Show game status if admin has necessary privs
if (CanPerform("Ma"))
{
if (Level.Game.NumPlayers > 0)
{
for (C = Level.ControllerList; C != None; C = C.NextController)
{
MultiKills = 0;
Sprees = 0;
PRI = None;
XP = xPlayer(C);
if (XP != None && !XP.bDeleteMe)
{
if (TeamPlayerReplicationInfo(XP.PlayerReplicationInfo) != None)
PRI = TeamPlayerReplicationInfo(XP.PlayerReplicationInfo);
if (PRI != None)
{
Response.Subst("PlayerName", HtmlEncode(ConvertString(PRI.PlayerName)));
Response.Subst("Kills", string(PRI.Kills));
//if _RO_
Response.Subst("FFKills", string(PRI.FFKills));
//end _RO_
Response.Subst("Deaths", string(PRI.Deaths));
Response.Subst("Suicides",string(PRI.Suicides));
//if _RO_
/*
//end _RO_
for (i = 0; i < 7; i++)
MultiKills += PRI.MultiKills[i];
Response.Subst("MultiKills", string(MultiKills));
for (i = 0; i < 6; i++)
Sprees += PRI.Spree[i];
Response.Subst("Sprees", string(Sprees));
//if _RO_
*/
//end _RO_
GameState $= WebInclude(StatTableRow);
}
}
}
}
else
//if _RO_
GameState = "<tr><td colspan=\"5\" align=\"center\">"@NoPlayersConnected@"</td></tr>";
//else
//GameState = "<tr><td colspan=\"6\" align=\"center\">"@NoPlayersConnected@"</td></tr>";
//end _RO_
Response.Subst("StatRows", GameState);
Response.Subst("GameState", WebInclude(StatTable));
}
if (GameClass == Level.Game.Class)
{
SwitchButtonName="SwitchMap";
MovedMaps = New(None) Class'SortedStringArray';
MovedMaps.CopyFromId(IncludeMaps, IncludeMaps.FindTagId(Left(string(Level), InStr(string(Level), "."))));
}
else SwitchButtonName="SwitchGameTypeAndMap";
if (CanPerform("Mt"))
{
Response.Subst("Content", Select("GameTypeSelect", GenerateGameTypeOptions(NewGameType)));
Response.Subst("GameTypeButton", SubmitButton("SwitchGameType", SwitchText));
}
else Response.Subst("Content", Level.Game.Default.GameName);
Response.Subst("GameTypeSelect", WebInclude(CellLeft));
Response.Subst("Content", Select("MapSelect", GenerateMapListSelect(IncludeMaps, MovedMaps)));
Response.Subst("MapSelect", WebInclude(CellLeft));
Response.Subst("MapButton", SubmitButton(SwitchButtonName, SwitchText));
Response.Subst("PostAction", CurrentGamePage);
Response.Subst("Section", CurrentLinks[0]);
Response.Subst("PageHelp", NoteGamePage);
MapTitle(Response);
ShowPage(Response, CurrentGamePage);
}
else AccessDenied(Response);
}
defaultproperties
{
}

View file

@ -0,0 +1,7 @@
<html>
<head><title>Index of /kf_sources/AdminPlus_v4/</title></head>
<body>
<h1>Index of /kf_sources/AdminPlus_v4/</h1><hr><pre><a href="../">../</a>
<a href="Classes/">Classes/</a> 29-Jun-2025 19:43 -
</pre><hr></body>
</html>