Retrieving NexGen player's account type
Posted: Fri Oct 02, 2020 10:29 pm
How can I retrieve NexGen player's account type? Like "Level 4 Admin" in screenshot.
Code: Select all
static function string GetPlayerIdent(Tournamentplayer P, bool bDebug) {
//local string result;
return P.PlayerReplicationInfo.Playername;
// NexgenClient does not exist at the time when ModifyPlayer() is executed
/*
if (NexgenClient_PlayerIDFind(P, result))
{
if (bDebug)
P.log(CSelfname $ ".GetPlayerIdent() returns" @ result);
return result;
}
else
{
if (bDebug)
P.log(CSelfname $ ".GetPlayerIdent() returns the Playername:" @ P.PlayerReplicationInfo.Playername);
return P.PlayerReplicationInfo.Playername;
}
*/
}
Code: Select all
static function bool NexgenClient_PlayerIDFind(Tournamentplayer P, out string NexgenPlayerID) {
local Info NexgenClient;
// if PlayerReplicationInfoSB(P.PlayerReplicationInfo).NexgenClient != None)
ForEach P.AllActors(class'Info', NexgenClient)
if (NexgenClient.Class.Name == 'NexgenClient') // NexgenClient.Tag is NONE, so not usable
{
if (string(P.PlayerReplicationInfo.PlayerID) == NexgenClient.GetPropertyText("playerNum"))
{
NexgenPlayerID = NexgenClient.GetPropertyText("playerID");
return NexgenPlayerID != "";
}
}
return false;
}
Automatically merged
Code: Select all
//=============================================================================
// MyMutator.
//=============================================================================
class MyMutator expands Mutator;
function PostBeginPlay() {
Super.PostBeginPlay();
Level.Game.BaseMutator.AddMutator(self);
}
function Mutate(string MutateString, PlayerPawn Sender) {
local Info NexgenClient;
Super.Mutate(MutateString, Sender);
if (MutateString ~= "NI") {
NexgenClient = GetNexgenClient(Sender);
if (NexgenClient == None)
Sender.ClientMessage("NexgenClient not found for" @ Sender.GetHumanName());
else {
Sender.ClientMessage("For" @ Sender.GetHumanName() @ "found" @ NexgenClient.Name);
// for full set of options look at
// https://github.com/dscheerens/nexgen/blob/master/Nexgen/Classes/NexgenClient.uc
Sender.ClientMessage("bNetLogin:" @ NexgenClient.GetPropertyText("bNetLogin"));
Sender.ClientMessage("bNetWait:" @ NexgenClient.GetPropertyText("bNetWait"));
Sender.ClientMessage("loginComplete:" @ NexgenClient.GetPropertyText("loginComplete"));
Sender.ClientMessage("ipAddress:" @ NexgenClient.GetPropertyText("ipAddress"));
Sender.ClientMessage("playerID:" @ NexgenClient.GetPropertyText("playerID"));
Sender.ClientMessage("playerNum:" @ NexgenClient.GetPropertyText("playerNum"));
Sender.ClientMessage("bHasAccount:" @ NexgenClient.GetPropertyText("bHasAccount"));
Sender.ClientMessage("loginOptions:" @ NexgenClient.GetPropertyText("loginOptions"));
Sender.ClientMessage("playerName:" @ NexgenClient.GetPropertyText("playerName"));
Sender.ClientMessage("team:" @ NexgenClient.GetPropertyText("team"));
Sender.ClientMessage("rights:" @ NexgenClient.GetPropertyText("rights"));
Sender.ClientMessage("title:" @ NexgenClient.GetPropertyText("title"));
Sender.ClientMessage("country:" @ NexgenClient.GetPropertyText("country"));
Sender.ClientMessage("bSpectator:" @ NexgenClient.GetPropertyText("bSpectator"));
Sender.ClientMessage("bFirePressed:" @ NexgenClient.GetPropertyText("bFirePressed"));
Sender.ClientMessage("bInitialized:" @ NexgenClient.GetPropertyText("bInitialized"));
Sender.ClientMessage("badConnectionSince:" @ NexgenClient.GetPropertyText("badConnectionSince"));
Sender.ClientMessage("bBadConnectionDetected:" @ NexgenClient.GetPropertyText("bBadConnectionDetected"));
Sender.ClientMessage("bMuted:" @ NexgenClient.GetPropertyText("bMuted"));
Sender.ClientMessage("bNoTeamSwitch:" @ NexgenClient.GetPropertyText("bNoTeamSwitch"));
Sender.ClientMessage("lastRespawnTime:" @ NexgenClient.GetPropertyText("lastRespawnTime"));
Sender.ClientMessage("spawnProtectionTimeX:" @ NexgenClient.GetPropertyText("spawnProtectionTimeX"));
Sender.ClientMessage("idleTime:" @ NexgenClient.GetPropertyText("idleTime"));
Sender.ClientMessage("idleTimeCP:" @ NexgenClient.GetPropertyText("idleTimeCP"));
Sender.ClientMessage("idleTimeRemaining:" @ NexgenClient.GetPropertyText("idleTimeRemaining"));
Sender.ClientMessage("bUseNexgenMessageHUD:" @ NexgenClient.GetPropertyText("bUseNexgenMessageHUD"));
Sender.ClientMessage("bIsReadyToPlay:" @ NexgenClient.GetPropertyText("bIsReadyToPlay"));
Sender.ClientMessage("lastAliveCheck:" @ NexgenClient.GetPropertyText("lastAliveCheck"));
Sender.ClientMessage("spawnProtectionTimeX:" @ NexgenClient.GetPropertyText("spawnProtectionTimeX"));
}
}
}
static function Info GetNexgenClient(PlayerPawn P) {
local Info NexgenClient;
ForEach P.AllActors(class'Info', NexgenClient) {
if (NexgenClient.Class.Name == 'NexgenClient')
if (string(P.PlayerReplicationInfo.PlayerID) == NexgenClient.GetPropertyText("playerNum"))
return NexgenClient;
}
return None;
}
Code: Select all
> mutate ni
For Buggie found NexgenClient1
bNetLogin: False
bNetWait: False
loginComplete: True
ipAddress: 192.168.1.0
playerID: 68A33A864C91B20DAE42A391F9D65CA5
playerNum: 1
bHasAccount: True
loginOptions: ClientKey=Q3R8Y-MP9KD-3M6KB-383YB-7PK9Q
playerName: Buggie
team: 0
rights: A,B,C,D,E,F,G,H,I,J,K,L,M
title: Root Admin
country:
bSpectator: False
bFirePressed: False
bInitialized: True
badConnectionSince: 0.000000
bBadConnectionDetected: False
bMuted: False
bNoTeamSwitch: False
lastRespawnTime: 0.000000
spawnProtectionTimeX: 0.000000
idleTime: 0.000000
idleTimeCP: 0.000000
idleTimeRemaining: 0
bUseNexgenMessageHUD: False
bIsReadyToPlay: False
lastAliveCheck: 0.000000
spawnProtectionTimeX: 0.000000
1) That thing that identifies a player. IMO it is "ClientKey" or " ClientID" in USER.INI, section [NexgenCC.GeneralConfig].
Code: Select all
function bool PlayerIsNexgenAdmin(Pawn P) {
// something like InStr(Caps(atTypeName[i]), "ADMIN") would be enough, no check for given rights needed
Code: Select all
// Add default right definitions.
addRightDefiniton("A", control.lng.allowedToPlayRightDesc);
addRightDefiniton("B", control.lng.vipSlotAccessRightDesc);
addRightDefiniton("C", control.lng.adminSlotAccessRightDesc);
addRightDefiniton("D", control.lng.needsNoPWRightDesc);
addRightDefiniton("E", control.lng.canBeIdleRightDesc);
addRightDefiniton("F", control.lng.matchAdminRightDesc);
addRightDefiniton("G", control.lng.moderatorRightDesc);
addRightDefiniton("K", control.lng.matchSetRightDesc);
addRightDefiniton("H", control.lng.banOpRightDesc);
addRightDefiniton("I", control.lng.accountMngrRightDesc);
addRightDefiniton("J", control.lng.serverAdminRightDesc);
addRightDefiniton("L", control.lng.canBanAccountsRightDesc);
addRightDefiniton("M", control.lng.hiddenAdminRightDesc, true);
Code: Select all
if (InStr("," $ NexgenClient.GetPropertyText("rights") $ ",", ",J,") != -1)
// do some stuff which allowed only for serverAdminRight priveledge.
Automatically merged
In code above:
In code above:Barbie wrote: ↑Mon May 16, 2022 10:24 am 2) Nice to have would be the following:(atTypeName is defined in Nexgen.ini, section [Nexgen112N.NexgenConfigExt])Code: Select all
function bool PlayerIsNexgenAdmin(Pawn P) { // something like InStr(Caps(atTypeName[i]), "ADMIN") would be enough, no check for given rights needed
Code: Select all
var PlayerPawn TempPlayer;
function Info GetNexgenClient(PlayerPawn P) {
local Info NexgenClient;
local string TempStr;
TempPlayer = P;
TempStr = GetPropertyText("TempPlayer");
ForEach P.AllActors(class'Info', NexgenClient) {
if (NexgenClient.Class.Name == 'NexgenClient')
if (TempStr == NexgenClient.GetPropertyText("player"))
return NexgenClient;
}
return None;
}
Code: Select all
static function bool NexgenClient_Find(PlayerReplicationInfo PRI, out Info NexgenClient) {
/******************************************************************************
Returns TRUE if a NexgenClient was found.
string(PRI.Owner) is something like
MH-UM-Curse-Of-Pharao1.TFemale0
An instance of class'NexgenClient' returns something like
TFemale1'MH-UM-Curse-Of-Pharao1.TFemale0'
with GetPropertyText("player").
So the right side of that string (without the ') must be equal to
string(PRI.Owner).
******************************************************************************/
local Info I;
local byte OwnerStrLen;
if (PRI != None && PRI.Owner != None)
{
OwnerStrLen = len(PRI.Owner);
ForEach PRI.Owner.AllActors(class'Info', I)
if (I.Class.Name == 'NexgenClient') // NexgenClient.Tag is NONE, so not usable
if (string(PRI.Owner) == left(right(I.GetPropertyText("player"), OwnerStrLen + 1), OwnerStrLen))
{
NexgenClient = I;
return true;
}
}
return false;
}