This for a TDM or OBJ gametype, I have a mod for an obj gametype that checks players skins against a list, then 3 warnings and they are kicked.
But i could change it to work for TDM matches aswell if you want
Anyway ,,,, This one will do both
Just add exec global/skin.scr from dmprecache.scr
NOTE: If it is an objective match, it will use the spawn event, reason it is different is because you have to respawn to change skins, so it checks every spawn and objective rounds generally arnt that long. Whereas in TDM or FFA, you can stay alive the entire map without changing skins , so it checks every 10 seconds, and if found to have a non stock skin, gives you 30 seconds to die and change skins.
Has a list at the bottom of allowed skins, just add or take away as you please.
Uses cvar pe_skinwarnings to set the number of warnings a player gets before kicking them.
Code:
main:
if(level.skinrun)
end
level.skinrun = 1
local.gametype = getcvar "g_gametype"
//If gametype is obj, register spawn event
if(local.gametype == "4"){
local.result = registerev "spawn" global/skin.scr::spawn
}
else
{
thread scan_players
}
end
spawn local.player:
if(local.scan)
end
local.scan = 1
waitthread get_settings
waitframe
//Get name
local.player.name = netname local.player
if(local.player.warned == NIL)
{
local.player.warned = 0
}
local.player.allowed = 0
//Checks player model against list of stock and/or allowed skins///
for(local.i=1;local.i<=level.allowed.size;local.i++)
{
local.allowed_skin = level.allowed[local.i][1]
if(local.player.model == local.allowed_skin)
local.player.allowed = 1
}
if(local.player.allowed != 1)
{
//Warn Player of their Skin
local.player.warned++
local.player iprint ("Your Current Skin is not allowed, Please change to a stock skin to play on this server, Warning " + local.player.warned + " of " + level.maxwarnings) 1
if(local.player.warned >= level.maxwarnings && local.player.kicking != 1)
{
thread kickplayer local.player
local.player.kicking = 1
local.player.warned = 0
local.scan = 0
waitframe
end
}
}
end
scan_players:
while(1)
{
waitthread get_settings
for(local.i = 1; local.i <= $player.size; local.i++)
{
local.player= $player[local.i]
waitframe
if(local.player != NULL && local.player.dmteam != "spectator" && isAlive(local.player))
{
//Get name
local.player.name = netname local.player
if(local.player.warned == NIL)
{
local.player.warned = 0
}
local.player.allowed = 0
//Checks player model against list of stock and/or allowed skins///
for(local.i=1;local.i<=level.allowed.size;local.i++)
{
local.allowed_skin = level.allowed[local.i][1]
if(local.player.model == local.allowed_skin)
local.player.allowed = 1
}
if(local.player.allowed != 1)
{
//Warn Player of their Skin
local.player.warned++
local.player iprint ("Your Current Skin is not allowed, Please change to a stock skin to play on this server, Warning " + local.player.warned + " of " + level.maxwarnings) 1
if(local.player.warned >= level.maxwarnings && local.player.kicking != 1)
{
thread kickplayer local.player
local.player.kicking = 1
local.player.warned = 0
local.scan = 0
waitframe
end
}
wait 30 /// Time allowed for player to change skins and die
}
}
}
wait 10 // Time between scans
}
end
kickplayer local.player:
if(local.player != NIL)
{
waitframe
//print messages to console
stuffsrv ("say Kicking " + local.player.name + " for Non Stock Skin")
//print message to log
println ("say Kicking " + local.player.name + " for Non Stock Skin")
wait 5
if (local.player != NIL)
{
local.player.kicking = 0
local.player stufftext ("set com_errormessage " + "You were Kicked for Non Stock Skin")
local.player stufftext "disconnect;pushmenu main;wait 200;pushmenu errormessage"
waitframe
}
}
end
get_settings:
level.allowed = makeArray
"models/player/allied_airborne.tik"
"models/player/allied_manon.tik"
"models/player/allied_pilot.tik"
"models/player/allied_sas.tik"
"models/player/american_army.tik"
"models/player/american_ranger.tik"
"models/player/german_afrika_officer.tik"
"models/player/german_afrika_private.tik"
"models/player/german_elite_officer.tik"
"models/player/german_elite_sentry.tik"
"models/player/german_kradshutzen.tik"
"models/player/german_panzer_grenadier.tik"
"models/player/german_panzer_obershutze.tik"
"models/player/german_panzer_shutze.tik"
"models/player/german_panzer_tankcommander.tik"
"models/player/german_scientist.tik"
"models/player/german_waffenss_officer.tik"
"models/player/german_waffenss_shutze.tik"
"models/player/german_wehrmacht_officer.tik"
"models/player/german_wehrmacht_soldier.tik"
"models/player/german_winter_1.tik"
"models/player/german_winter_2.tik"
"models/player/german_worker.tik"
"models/player/german_waffen_officer.tik"
"models/player/german_waffen_shutze.tik"
endArray
//Number of Warnings before Kicking
if(int(getcvar("pe_skinwarnings")) == NIL || (getcvar("pe_skinwarnings")) == "")
{
level.maxwarnings = 3
setcvar "pe_skinwarnings" "3" //set default
}
else
{
level.maxwarnings = int(getcvar("pe_skinwarnings"))
}
end