Page 1 of 1

Problem kicking certain names

Posted: Wed Jan 22, 2020 4:05 pm
by UT Sniper (SJA94)
I'm making a mutator that stops people joining a server with the name Player, Player4, Player27, ect, I've got it working somewhat, the only problem is that if the name starts with Player(something like PlayerWithLongName, Player348934823) you just get connection failed with no message in the server or client log even though it should be a valid name.

What should happen is Player gets kicked, Player1 gets kicked, and player11 gets kicked, but player100 doesn't, because it's unlikely for there to be more than 99 different players in 1 server in a single match.

Image

Am I missing something obvious like calling the wrong function for this sort of thing?

Code: Select all

//=============================================================================
// KickNoNames.
//=============================================================================
class KickNoNames expands Mutator;

var() string kickMessagePrefix;
var() string kickMessageStart;
var() string kickMessage1;
var() string kickMessageEnd;


function bool bValidChar(string c){

	if(c == "0" || c == "1" || c == "2" || c == "3" || c == "4" || c == "5" || c == "6" || c == "7" || c == "8" || c == "9"){
		return false;
	}
	
	return true;
}


function bool bValidName(string currentName){

	local int i;
	local int nameLength;
	local string lc;

	nameLength = Len(currentName);
	
	if(Caps(currentName) == "PLAYER"){
		return false;
	}
	
	if(nameLength == 7){
	
		if(!bValidChar(Caps(Mid(currentName, 6, 1)))){
			return false;
		}

	}else if(nameLength == 8){

		if(!bValidChar(Caps(Mid(currentName, 6, 1))) && !bValidChar(Caps(Mid(currentName, 7, 1)))){
			return false;
		}
	}

	return true;
}



function ModifyPlayer(Pawn Other){

	local PlayerReplicationInfo pr;
	local String currentName;
	local int nameLength;

	

	if(Other.IsA('PlayerPawn')){

		if(Other.PlayerReplicationInfo != None){
		
			pr = Other.PlayerReplicationInfo;

			currentName = Caps(pr.PlayerName);

			if(Left(currentName, 6) == "PLAYER"){
											
				nameLength = Len(currentName);

				if(nameLength >= 6 && nameLength <= 8){

					if(!bValidName(currentName)){

						Other.ClientMessage(kickMessagePrefix $ kickMessageStart);
						Other.ClientMessage(kickMessagePrefix $ kickMessage1);
						Other.ClientMessage(kickMessagePrefix $ kickMessageEnd);

						Other.Destroy();

					}				
				}			
			}
		}	
	}

	if ( NextMutator != None )
		NextMutator.ModifyPlayer(Other);
	

}

defaultproperties
{
     kickMessagePrefix="[NoNameKick]: "
     kickMessageStart="You got kicked for using an illegal name."
     kickMessage1="You can't join the server with the name Player(number[s])"
     kickMessageEnd="You can join the server once you have changed your name."
}

Re: Problem kicking certain names

Posted: Wed Jan 22, 2020 8:15 pm
by Barbie
UT Sniper (SJA94) wrote: Wed Jan 22, 2020 4:05 pmPlayer4, Player27, ect
I've notice that sometimes if the connection was lost I was reconnected as "Player6" (the number varies). It seems that either the GameInfo or NexGen module has caused that.
UT Sniper (SJA94) wrote: Wed Jan 22, 2020 4:05 pm

Code: Select all

if(c == "0" || c == "1" || c == "2" || c == "3" || c == "4" || c == "5" || c == "6" || c == "7" || c == "8" || c == "9") return false;
That code is absolutely correct, but you can take advantage of the fact that in every codepage the numbers are sorted from 0 to 9 (assuming "c" is one char only):

Code: Select all

if (c >= "0" && c <= "9") return false;

Re: Problem kicking certain names

Posted: Wed Jan 22, 2020 8:31 pm
by sektor2111
Sometimes instead of that "==" I had to put "~='' when I did stuff with strings - Higor also did this, I don't know why but this was the only way working.
During working stage I would recommend logs - removed in final compilation - you'll see what is ripped at these strings, I do this all time when I'm writing mods having a single target in order to not react when it's not the case.

Perhaps I would write a configuration for chars not allowed as suffix if name starts with string "PLAYER".
It's a good idea but... I think I have already too many things loaded in my games, perhaps it's time to mix them unless I'll reach at 100 mutators...

Re: Problem kicking certain names

Posted: Thu Jan 23, 2020 3:21 am
by Barbie
sektor2111 wrote: Wed Jan 22, 2020 8:31 pm Sometimes instead of that "==" I had to put "~='' when I did stuff with strings - Higor also did this, I don't know why but this was the only way working.
"~=" does a case insensitive string compare.

Re: Problem kicking certain names

Posted: Thu Jan 23, 2020 9:21 am
by UT Sniper (SJA94)
I made a post, clicked post and I was logged out.......

I changed my mutator to use a .ini file to store a list of names that aren't allowed, it's working as expected and gives admins options to add other names they don't want on their server.

What I found out is that if your name is Player(morechars) with an uppercase P the server will change your name to Player[n] but your name will still be displayed as what it should be, this was what was causing me problems making this mutator.

Examples:

A player with the name playerWithLongName, my mutator won't kick you(unless you added that name to the config file).
A player with the name PlayerWithLongName, their name is changed to Player[n], their name is still displayed as PlayerWithLongName, my mutator sees their name as Player[n] and kicks them.

Code: Select all

//=============================================================================
// KickNoNames.
//=============================================================================
class KickNoNames expands Mutator config( NoNameKick );

var() config string badNames[255];
var() config string kickMessagePrefix;
var() config string kickMessageStart;// = "[NoNameKick]: You got kicked for using an illegal name.";
var() config string kickMessage1;// = "[NoNameKick]: You can't join the server with the name Player(number[s])";
var() config string kickMessageEnd;// = "[NoNameKick]: You can join the server once you have changed your name.";


function bool bValidChar(string c){

	if(c >= "0" && c <= "9"){
		return false;
	}
	
	return true;
}


function bool bValidName(string currentName){

	local int i;
	
	for(i = 0; i < 255; i++){
	
		LOG("badNames[" $ i $ "] = "$badNames[i]);

		if(currentName ~= badNames[i]){
			return false;
		}
	}

	return true;
}



function ModifyPlayer(Pawn Other){

	local PlayerReplicationInfo pr;
	local String currentName;
	local int nameLength;

	

	if(Other.IsA('PlayerPawn')){

		if(Other.PlayerReplicationInfo != None){
		
			pr = Other.PlayerReplicationInfo;

			if(!bValidName(pr.PlayerName)){

				Other.ClientMessage(kickMessagePrefix $ kickMessageStart);
				Other.ClientMessage(kickMessagePrefix $ kickMessage1);
				Other.ClientMessage(kickMessagePrefix $ kickMessageEnd);

				Other.Destroy();
				return;

			}				
			
		}	
	}

	if ( NextMutator != None )
		NextMutator.ModifyPlayer(Other);
	

}

defaultproperties
{
     badNames(0)="player"
     badNames(1)="player1"
     badNames(2)="player2"
     badNames(3)="player3"
     badNames(4)="player4"
     badNames(5)="player5"
     badNames(6)="player6"
     badNames(7)="player7"
     badNames(8)="player8"
     badNames(9)="player9"
     badNames(10)="player10"
     badNames(11)="player11"
     badNames(12)="player12"
     badNames(13)="player13"
     badNames(14)="player14"
     badNames(15)="player15"
     badNames(16)="player16"
     badNames(17)="player17"
     badNames(18)="player18"
     badNames(19)="player19"
     badNames(20)="player20"
     badNames(21)="player21"
     badNames(22)="player22"
     badNames(23)="player23"
     badNames(24)="player24"
     badNames(25)="player25"
     badNames(26)="player26"
     badNames(27)="player27"
     badNames(28)="player28"
     badNames(29)="player29"
     badNames(30)="player30"
     badNames(31)="player31"
     badNames(32)="player32"
     badNames(33)="player33"
     badNames(34)="player34"
     badNames(35)="player35"
     badNames(36)="player36"
     badNames(37)="player37"
     badNames(38)="player38"
     badNames(39)="player39"
     badNames(40)="player40"
     badNames(41)="player41"
     badNames(42)="player42"
     badNames(43)="player43"
     badNames(44)="player44"
     badNames(45)="player45"
     badNames(46)="player46"
     badNames(47)="player47"
     badNames(48)="player48"
     badNames(49)="player49"
     badNames(50)="player50"
     badNames(51)="player51"
     badNames(52)="player52"
     badNames(53)="player53"
     badNames(54)="player54"
     badNames(55)="player55"
     badNames(56)="player56"
     badNames(57)="player57"
     badNames(58)="player58"
     badNames(59)="player59"
     badNames(60)="player60"
     badNames(61)="player61"
     badNames(62)="player62"
     badNames(63)="player63"
     badNames(64)="player64"
     badNames(65)="player65"
     badNames(66)="player66"
     badNames(67)="player67"
     badNames(68)="player68"
     badNames(69)="player69"
     badNames(70)="player70"
     badNames(71)="player71"
     badNames(72)="player72"
     badNames(73)="player73"
     badNames(74)="player74"
     badNames(75)="player75"
     badNames(76)="player76"
     badNames(77)="player77"
     badNames(78)="player78"
     badNames(79)="player79"
     badNames(80)="player80"
     badNames(81)="player81"
     badNames(82)="player82"
     badNames(83)="player83"
     badNames(84)="player84"
     badNames(85)="player85"
     badNames(86)="player86"
     badNames(87)="player87"
     badNames(88)="player88"
     badNames(89)="player89"
     badNames(90)="player90"
     badNames(91)="player91"
     badNames(92)="player92"
     badNames(93)="player93"
     badNames(94)="player94"
     badNames(95)="player95"
     badNames(96)="player96"
     badNames(97)="player97"
     badNames(98)="player98"
     badNames(99)="player99"
     badNames(100)="player100"
     badNames(101)="player101"
     badNames(102)="player102"
     badNames(103)="player103"
     badNames(104)="player104"
     badNames(105)="player105"
     badNames(106)="player106"
     badNames(107)="player107"
     badNames(108)="player108"
     badNames(109)="player109"
     badNames(110)="player110"
     badNames(111)="player111"
     badNames(112)="player112"
     badNames(113)="player113"
     badNames(114)="player114"
     badNames(115)="player115"
     badNames(116)="player116"
     badNames(117)="player117"
     badNames(118)="player118"
     badNames(119)="player119"
     badNames(120)="player120"
     badNames(121)="player121"
     badNames(122)="player122"
     badNames(123)="player123"
     badNames(124)="player124"
     badNames(125)="player125"
     badNames(126)="player126"
     badNames(127)="player127"
     badNames(128)="player128"
     badNames(129)="player129"
     badNames(130)="player130"
     badNames(131)="player131"
     badNames(132)="player132"
     badNames(133)="player133"
     badNames(134)="player134"
     badNames(135)="player135"
     badNames(136)="player136"
     badNames(137)="player137"
     badNames(138)="player138"
     badNames(139)="player139"
     badNames(140)="player140"
     badNames(141)="player141"
     badNames(142)="player142"
     badNames(143)="player143"
     badNames(144)="player144"
     badNames(145)="player145"
     badNames(146)="player146"
     badNames(147)="player147"
     badNames(148)="player148"
     badNames(149)="player149"
     badNames(150)="player150"
     badNames(151)="player151"
     badNames(152)="player152"
     badNames(153)="player153"
     badNames(154)="player154"
     badNames(155)="player155"
     badNames(156)="player156"
     badNames(157)="player157"
     badNames(158)="player158"
     badNames(159)="player159"
     badNames(160)="player160"
     badNames(161)="player161"
     badNames(162)="player162"
     badNames(163)="player163"
     badNames(164)="player164"
     badNames(165)="player165"
     badNames(166)="player166"
     badNames(167)="player167"
     badNames(168)="player168"
     badNames(169)="player169"
     badNames(170)="player170"
     badNames(171)="player171"
     badNames(172)="player172"
     badNames(173)="player173"
     badNames(174)="player174"
     badNames(175)="player175"
     badNames(176)="player176"
     badNames(177)="player177"
     badNames(178)="player178"
     badNames(179)="player179"
     badNames(180)="player180"
     badNames(181)="player181"
     badNames(182)="player182"
     badNames(183)="player183"
     badNames(184)="player184"
     badNames(185)="player185"
     badNames(186)="player186"
     badNames(187)="player187"
     badNames(188)="player188"
     badNames(189)="player189"
     badNames(190)="player190"
     badNames(191)="player191"
     badNames(192)="player192"
     badNames(193)="player193"
     badNames(194)="player194"
     badNames(195)="player195"
     badNames(196)="player196"
     badNames(197)="player197"
     badNames(198)="player198"
     badNames(199)="player199"
     badNames(200)="player200"
     badNames(201)="player201"
     badNames(202)="player202"
     badNames(203)="player203"
     badNames(204)="player204"
     badNames(205)="player205"
     badNames(206)="player206"
     badNames(207)="player207"
     badNames(208)="player208"
     badNames(209)="player209"
     badNames(210)="player210"
     badNames(211)="player211"
     badNames(212)="player212"
     badNames(213)="player213"
     badNames(214)="player214"
     badNames(215)="player215"
     badNames(216)="player216"
     badNames(217)="player217"
     badNames(218)="player218"
     badNames(219)="player219"
     badNames(220)="player220"
     badNames(221)="player221"
     badNames(222)="player222"
     badNames(223)="player223"
     badNames(224)="player224"
     badNames(225)="player225"
     badNames(226)="player226"
     badNames(227)="player227"
     badNames(228)="player228"
     badNames(229)="player229"
     badNames(230)="player230"
     badNames(231)="player231"
     badNames(232)="player232"
     badNames(233)="player233"
     badNames(234)="player234"
     badNames(235)="player235"
     badNames(236)="player236"
     badNames(237)="player237"
     badNames(238)="player238"
     badNames(239)="player239"
     badNames(240)="player240"
     badNames(241)="player241"
     badNames(242)="player242"
     badNames(243)="player243"
     badNames(244)="player244"
     badNames(245)="player245"
     badNames(246)="player246"
     badNames(247)="player247"
     badNames(248)="player248"
     badNames(249)="player249"
     badNames(250)="player250"
     badNames(251)="player251"
     badNames(252)="player252"
     badNames(253)="player253"
     badNames(254)="player254"
     kickMessagePrefix="[NoNameKick]:"
     kickMessageStart="You got kicked for using an illegal FART IT STINKS name."
     kickMessage1="You can't join the server with your current name."
     kickMessageEnd="You can join the server once you changed your name."
}

Server.log PASS

Code: Select all

ScriptLog: Team 1
ScriptLog: Login: player434234
Log: Possessed PlayerPawn: TFemale1 DM-1on1-Align.TFemale0
ScriptLog: badNames[0] = player
ScriptLog: badNames[1] = player1
ScriptLog: badNames[2] = player2
...
ScriptLog: badNames[252] = player252
ScriptLog: badNames[253] = player253
ScriptLog: badNames[254] = player254
DevNet: Join succeeded: player434234
Server.log FAIL

Code: Select all


ScriptLog: Team 1
ScriptLog: Login: Player434234
Log: Possessed PlayerPawn: TFemale1 DM-1on1-Align.TFemale1
ScriptLog: badNames[0] = player
ScriptLog: badNames[1] = player1
DevNet: Join succeeded: Player1
KICKED

Re: Problem kicking certain names

Posted: Fri Jan 24, 2020 6:02 pm
by RocketJedi
player names that also have issues administering are players with the name "." without quotes

Re: Problem kicking certain names

Posted: Sat Jan 25, 2020 9:08 am
by UT Sniper (SJA94)
RocketJedi wrote: Fri Jan 24, 2020 6:02 pm player names that also have issues administering are players with the name "." without quotes
If you use the released mutator with this .ini it will stop that.

Code: Select all

[NoNameKick2.KickNoNames]
kickMessagePrefix="[NoNameKick]:"
kickMessageStart="You got kicked for using an illegal name."
kickMessageEnd="You can join the server once you changed your name."
kickMessages[0]="You can't join the server with your current name."
kickMessages[1]="You can't join the server with "
kickMessages[2]=" in your name."
kickMessages[3]=""
kickMessages[4]=""
kickMessages[5]=""
kickMessages[6]=""
kickMessages[7]=""
kickMessages[8]=""
kickMessages[9]=""
wildCards[0]="player"
wildCards[1]="nigger"
wildCards[2]="faggot"
wildCards[3]=""
wildCards[4]=""
wildCards[5]=""
wildCards[6]=""
wildCards[7]=""
wildCards[8]=""
wildCards[9]=""
wildCards[10]=""
wildCards[11]=""
wildCards[12]=""
wildCards[13]=""
wildCards[14]=""
wildCards[15]=""
wildCards[16]=""
wildCards[17]=""
wildCards[18]=""
wildCards[19]=""
wildCards[20]=""
wildCards[21]=""
wildCards[22]=""
wildCards[23]=""
wildCards[24]=""
wildCards[25]=""
wildCards[26]=""
wildCards[27]=""
wildCards[28]=""
wildCards[29]=""
wildCards[30]=""
wildCards[31]=""
badNames[0]="."
badNames[1]="test"
badNames[2]="player2"
badNames[3]="player3"
badNames[4]="player4"
badNames[5]="player5"
badNames[6]="player6"
badNames[7]="player7"
badNames[8]="player8"
badNames[9]="player9"
badNames[10]="player10"
badNames[11]="player11"
badNames[12]="player12"
badNames[13]="player13"
badNames[14]="player14"
badNames[15]="player15"
badNames[16]="player16"
badNames[17]="player17"
badNames[18]="player18"
badNames[19]="player19"
badNames[20]="player20"
badNames[21]="player21"
badNames[22]="player22"
badNames[23]="player23"
badNames[24]="player24"
badNames[25]="player25"
badNames[26]="player26"
badNames[27]="player27"
badNames[28]="player28"
badNames[29]="player29"
badNames[30]="player30"
badNames[31]="player31"
badNames[32]="player32"
badNames[33]=""
badNames[34]=""
badNames[35]=""
badNames[36]=""
badNames[37]=""
badNames[38]=""
badNames[39]=""
badNames[40]=""
badNames[41]=""
badNames[42]=""
badNames[43]=""
badNames[44]=""
badNames[45]=""
badNames[46]=""
badNames[47]=""
badNames[48]=""
badNames[49]=""
badNames[50]=""
badNames[51]=""
badNames[52]=""
badNames[53]=""
badNames[54]=""
badNames[55]=""
badNames[56]=""
badNames[57]=""
badNames[58]=""
badNames[59]=""
badNames[60]=""
badNames[61]=""
badNames[62]=""
badNames[63]=""
badNames[64]=""
badNames[65]=""
badNames[66]=""
badNames[67]=""
badNames[68]=""
badNames[69]=""
badNames[70]=""
badNames[71]=""
badNames[72]=""
badNames[73]=""
badNames[74]=""
badNames[75]=""
badNames[76]=""
badNames[77]=""
badNames[78]=""
badNames[79]=""
badNames[80]=""
badNames[81]=""
badNames[82]=""
badNames[83]=""
badNames[84]=""
badNames[85]=""
badNames[86]=""
badNames[87]=""
badNames[88]=""
badNames[89]=""
badNames[90]=""
badNames[91]=""
badNames[92]=""
badNames[93]=""
badNames[94]=""
badNames[95]=""
badNames[96]=""
badNames[97]=""
badNames[98]=""
badNames[99]=""
badNames[100]=""
badNames[101]=""
badNames[102]=""
badNames[103]=""
badNames[104]=""
badNames[105]=""
badNames[106]=""
badNames[107]=""
badNames[108]=""
badNames[109]=""
badNames[110]=""
badNames[111]=""
badNames[112]=""
badNames[113]=""
badNames[114]=""
badNames[115]=""
badNames[116]=""
badNames[117]=""
badNames[118]=""
badNames[119]=""
badNames[120]=""
badNames[121]=""
badNames[122]=""
badNames[123]=""
badNames[124]=""
badNames[125]=""
badNames[126]=""
badNames[127]=""
badNames[128]=""
badNames[129]=""
badNames[130]=""
badNames[131]=""
badNames[132]=""
badNames[133]=""
badNames[134]=""
badNames[135]=""
badNames[136]=""
badNames[137]=""
badNames[138]=""
badNames[139]=""
badNames[140]=""
badNames[141]=""
badNames[142]=""
badNames[143]=""
badNames[144]=""
badNames[145]=""
badNames[146]=""
badNames[147]=""
badNames[148]=""
badNames[149]=""
badNames[150]=""
badNames[151]=""
badNames[152]=""
badNames[153]=""
badNames[154]=""
badNames[155]=""
badNames[156]=""
badNames[157]=""
badNames[158]=""
badNames[159]=""
badNames[160]=""
badNames[161]=""
badNames[162]=""
badNames[163]=""
badNames[164]=""
badNames[165]=""
badNames[166]=""
badNames[167]=""
badNames[168]=""
badNames[169]=""
badNames[170]=""
badNames[171]=""
badNames[172]=""
badNames[173]=""
badNames[174]=""
badNames[175]=""
badNames[176]=""
badNames[177]=""
badNames[178]=""
badNames[179]=""
badNames[180]=""
badNames[181]=""
badNames[182]=""
badNames[183]=""
badNames[184]=""
badNames[185]=""
badNames[186]=""
badNames[187]=""
badNames[188]=""
badNames[189]=""
badNames[190]=""
badNames[191]=""
badNames[192]=""
badNames[193]=""
badNames[194]=""
badNames[195]=""
badNames[196]=""
badNames[197]=""
badNames[198]=""
badNames[199]=""
badNames[200]=""
badNames[201]=""
badNames[202]=""
badNames[203]=""
badNames[204]=""
badNames[205]=""
badNames[206]=""
badNames[207]=""
badNames[208]=""
badNames[209]=""
badNames[210]=""
badNames[211]=""
badNames[212]=""
badNames[213]=""
badNames[214]=""
badNames[215]=""
badNames[216]=""
badNames[217]=""
badNames[218]=""
badNames[219]=""
badNames[220]=""
badNames[221]=""
badNames[222]=""
badNames[223]=""
badNames[224]=""
badNames[225]=""
badNames[226]=""
badNames[227]=""
badNames[228]=""
badNames[229]=""
badNames[230]=""
badNames[231]=""
badNames[232]=""
badNames[233]=""
badNames[234]=""
badNames[235]=""
badNames[236]=""
badNames[237]=""
badNames[238]=""
badNames[239]=""
badNames[240]=""
badNames[241]=""
badNames[242]=""
badNames[243]=""
badNames[244]=""
badNames[245]=""
badNames[246]=""
badNames[247]=""
badNames[248]=""
badNames[249]=""
badNames[250]=""
badNames[251]=""
badNames[252]=""
badNames[253]=""
badNames[254]=""

Re: Problem kicking certain names

Posted: Sat Jan 25, 2020 2:41 pm
by Chamberly
I'm wondering if you can make the mutator to kick all names of Player to... Player500 without using the search for bad name list.

If playername is in between Player0 - Player500, kick. Or any name with #player#?

Just a thought.

Re: Problem kicking certain names

Posted: Sat Jan 25, 2020 3:23 pm
by UT Sniper (SJA94)
Chamberly wrote: Sat Jan 25, 2020 2:41 pm I'm wondering if you can make the mutator to kick all names of Player to... Player500 without using the search for bad name list.

If playername is in between Player0 - Player500, kick. Or any name with #player#?

Just a thought.
I added wildcards yesterday to NoNameKick: viewtopic.php?f=3&t=13728

Re: Problem kicking certain names

Posted: Sat Jan 25, 2020 11:35 pm
by Chamberly
Ah ok, nice!

Re: Problem kicking certain names

Posted: Sun Jan 26, 2020 1:50 am
by Que
so in theory if WildCard[x]~="player" then there would be no need for BadNames[x]~="player1~player999"

Re: Problem kicking certain names

Posted: Sun Jan 26, 2020 9:51 am
by UT Sniper (SJA94)
Can a moderator lock this topic please?

The topic for this mutator is here: viewtopic.php?f=3&t=13728

Re: Problem kicking certain names

Posted: Sun Jan 26, 2020 7:50 pm
by papercoffee
UT Sniper (SJA94) wrote: Sun Jan 26, 2020 9:51 am Can a moderator lock this topic please?

The topic for this mutator is here: viewtopic.php?f=3&t=13728
Done.