Prepare fixtures
This commit is contained in:
parent
797e5ea192
commit
9c94356263
6021 changed files with 722805 additions and 22 deletions
72
kf_sources/AdminPlus_v4/Classes/APCleanList.uc
Normal file
72
kf_sources/AdminPlus_v4/Classes/APCleanList.uc
Normal 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."
|
||||
}
|
||||
50
kf_sources/AdminPlus_v4/Classes/APPawnActions.uc
Normal file
50
kf_sources/AdminPlus_v4/Classes/APPawnActions.uc
Normal 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;
|
||||
}
|
||||
}
|
||||
42
kf_sources/AdminPlus_v4/Classes/APPerkList.uc
Normal file
42
kf_sources/AdminPlus_v4/Classes/APPerkList.uc
Normal 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="")
|
||||
}
|
||||
25
kf_sources/AdminPlus_v4/Classes/APPoofProj.uc
Normal file
25
kf_sources/AdminPlus_v4/Classes/APPoofProj.uc
Normal 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'
|
||||
}
|
||||
78
kf_sources/AdminPlus_v4/Classes/APRageList.uc
Normal file
78
kf_sources/AdminPlus_v4/Classes/APRageList.uc
Normal 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."
|
||||
}
|
||||
15
kf_sources/AdminPlus_v4/Classes/APWeaponList.uc
Normal file
15
kf_sources/AdminPlus_v4/Classes/APWeaponList.uc
Normal 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"
|
||||
}
|
||||
BIN
kf_sources/AdminPlus_v4/Classes/APWipe.uc
Normal file
BIN
kf_sources/AdminPlus_v4/Classes/APWipe.uc
Normal file
Binary file not shown.
49
kf_sources/AdminPlus_v4/Classes/APZedList.uc
Normal file
49
kf_sources/AdminPlus_v4/Classes/APZedList.uc
Normal 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'));
|
||||
}
|
||||
31
kf_sources/AdminPlus_v4/Classes/AdminList.uc
Normal file
31
kf_sources/AdminPlus_v4/Classes/AdminList.uc
Normal 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;
|
||||
}
|
||||
BIN
kf_sources/AdminPlus_v4/Classes/Helper.uc
Normal file
BIN
kf_sources/AdminPlus_v4/Classes/Helper.uc
Normal file
Binary file not shown.
40
kf_sources/AdminPlus_v4/Classes/MutAdminPlus.uc
Normal file
40
kf_sources/AdminPlus_v4/Classes/MutAdminPlus.uc
Normal 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."
|
||||
}
|
||||
BIN
kf_sources/AdminPlus_v4/Classes/PlayerControllerArray.uc
Normal file
BIN
kf_sources/AdminPlus_v4/Classes/PlayerControllerArray.uc
Normal file
Binary file not shown.
BIN
kf_sources/AdminPlus_v4/Classes/UltraAdmin.uc
Normal file
BIN
kf_sources/AdminPlus_v4/Classes/UltraAdmin.uc
Normal file
Binary file not shown.
21
kf_sources/AdminPlus_v4/Classes/index.html
Normal file
21
kf_sources/AdminPlus_v4/Classes/index.html
Normal 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>
|
||||
65
kf_sources/AdminPlus_v4/Classes/newUTServerAdminSpectator.uc
Normal file
65
kf_sources/AdminPlus_v4/Classes/newUTServerAdminSpectator.uc
Normal 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
|
||||
}
|
||||
542
kf_sources/AdminPlus_v4/Classes/newxWebQueryCurrent.uc
Normal file
542
kf_sources/AdminPlus_v4/Classes/newxWebQueryCurrent.uc
Normal 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
|
||||
{
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue