IPBIPB

Witaj Gościu ( Zaloguj | Rejestruj )

 
Reply to this topicStart new topic
> KMOD 1.0, !spec999 nie działa
admin-ewro
post 12:13, 8 10 2007
Post #1


Feldwebel
Ikona Grupy

Grupa: Użytkownicy
Postów: 58
Dołączył: 28-05-2006
Skąd: Wrocław
Nr użytkownika: 6469



WItam.
Uruchomiłem komd'a 1.0 na serwerze z etpro- działa wszystko oprócz komendy:
!spec999 (kiedyś miałem tego kmoda i działała ta komenda, teraz po ponownym stawianiu serwera ta komenda niedziała)
Nawet jeśli po użyciu !spec999 powinno na czacie gry pojawić sie że nie przeniosło nikogo na specta a mi sie nawet ten komunikat nie pojawia confused.gif

Nic w kmod.lua nie zmianiałem tak samo jak w commands.cfg

Oto skrypty z kmoda w code bo zalacznik mi nie zadziałał


commands.cfg

KOD
# <PARAMETER>                        = text followed by the command. (Can be used to enter multiple values.  
#                                  For example: pb_sv_kick <PARAMETER> can be used to enter slot number, length of kick, and reason.)
# <CLIENT_ID>                        = the client id of the calling player.
# <PLAYER_LAST_VICTIM_(ID|NAME|CNAME|WEAPON)>     = last player, you killed
# <PLAYER_LAST_KILLER_(ID|NAME|CNAME|WEAPON)>     = last player, that killed you
# <PLAYER_CLASS>                         = class of calling player
# <PLAYER_TEAM>                         = side / team of calling player
# <PLAYER>                            = Name of the calling player (without color codes)
# <COLOR_PLAYER>                        = Name of the calling player (with color codes)
# <GUID>                            = Guid of the calling player (without color codes)
# <ADMINLEVEL>                        = Adminlevel of the calling player
# <PNAME2ID>                        = Get client ID using partial name or client ID directly
# <PBPNAME2ID>                        = Same as <PNAME_ID> accept it gets their punkbuster slot number.


#Level - command = rcon command
#command Examples:
#0 - ref     = ref referee <CLIENT_ID>
#2 - vkick     = clientkick <PLAYER_LAST_KILLER_ID>


#A bad example would be
#0 - kick player = clientkick <PARAMETER>
#This is a bad example because you cannot have spaces in your command.  But you can have underscores.

# Rcon Shortcuts (Work with all mods / etmain)
2 - start                       = start_match
2 - swap                        = swap_teams
2 - reset                       = reset_match
2 - ref                   = ref referee <CLIENT_ID>
2 - unref                       = ref unReferee <CLIENT_ID>
2 - shuffle                     = shuffle_teams
2 - map_restart               = map_restart
2 - pbkick                = pb_sv_kick <PARAMETER>
3 - cancelvote            = cancelvote
3 - passvote            = passvote
3 - cp                = cp <PARAMETER>
3 - qsay                = qsay <PARAMETER>
3 - devmap                    = devmap <PARAMETER>
3 - exec                = exec <PARAMETER>

# Referee Commands (only ETPRO)
2 - putallies                   = ref putallies <PNAME2ID>
2 - putspec                     = ref remove <PNAME2ID>
2 - putaxis                     = ref putaxis <PNAME2ID>
3 - pause                       = ref pause
3 - unpause                     = ref unpause
2 - allready                    = ref allready
2 - lock                        = ref lock
2 - unlock                      = ref unlock
2 - speclock                    = ref speclock
2 - specunlock                  = ref specunlock
2 - nextmap                     = ref nextmap
2 - mutespecs                   = ref mutespecs
2 - unmutespecs                 = ref unmutespecs
3 - map                         = ref map <PARAMETER>
3 - campaign                    = ref campaign <PARAMETER>
3 - gametype                    = ref gametype <PARAMETER>
3 - config                = ref config <PARAMETER>
3 - pub                         = ref pub
3 - comp                        = ref comp
1 - cointoss            = ref cointoss

# Shuffle without restart
2 - shuffle_norestart           = ref shuffleteamsxp_norestart
2 - shuffleteamsxp_norestart    = ref shuffleteamsxp_norestart

# campaign functions
3 - campaign                    = campaign <PARAMETER>

# To kick a player without temporary ban. Change the message, if you like.
2 - fkick                    = pb_sv_kick <PBPNAME2ID> 0 Come back in, if you want

# Shortcut to make the called a shoutcaster / remove his statua
3 - ms                          = makeShoutcaster <CLIENT_ID>
0 - rs                          = removeShoutcaster <CLIENT_ID>

# Moves the calling person into the specific team
2 - putmeaxis                   = ref putaxis <CLIENT_ID>
2 - putmeallies                 = ref putallies <CLIENT_ID>
2 - putmespec                   = ref remove <CLIENT_ID>

#FUN
#0 - moo                = qsay ^1MOO!!!!!!!!!!!!!!; qsay ^2MOO 2!!!!!!!!!!!!!!!!
0 - drunk                = qsay ^3DONT TELL ME ^1WHEN I'VE HAD ENOUGH!
0 - stup                = qsay ^2It's better to lose than to win
0 - croyt                = qsay ^2HOW DO YOU NOT DIE!!!!
0 - aim                = qsay ^2*Get some glasses for pete's sake*
0 - beer                        = qsay A nice sexy waitress brings ^7<COLOR_PLAYER>^7 a nice cup of beer!
0 - pizza                       = qsay Someone calls Mario, and he brings ^7<COLOR_PLAYER>^7 a hot pepperoni pizza!
0 - coke                        = qsay ^3Ah... A delicious glass of cold Coca Cola[tm] (*thinks ^7<COLOR_PLAYER>^3 while he drinks*)
0 - pfstinkt                    = qsay ^3Uh, that smell of the panzer is pretty strong today ... ^3(^7<COLOR_PLAYER>^3's opinion)
0 - bye                         = qsay ^7<COLOR_PLAYER>^3 waves his hand to say ^1GOOD BYE^3. We surely meet later!
0 - backrage              = qsay ^3Wow, <PLAYER_LAST_KILLER_CNAME> ^3has backrage skills with his uber ^1<PLAYER_LAST_KILLER_WEAPON>
0 - porn                  = qsay ^3Press F7 to download!
0 - aimbot                = qsay ^3!execute aimbot.cfg
0 - dean                  = qsay ^1Warning, med pile sited!
0 - pack                  = qsay ^3Run and heal! Come back when you're ready to get pwnd!
0 - tk                          = qsay Wait! Don't shoot! My teammates will kill me for you!

#Password
3 - password                    = g_password <PARAMETER>

#for spamming
0 - owned                       = qsay ^1Ha^3ha^5ha^3, i owned ^7<PLAYER_LAST_VICTIM_CNAME>^3 with my ^7<PLAYER_LAST_VICTIM_WEAPON>^7!!!
0 - pants                       = qsay ^1No^3no^5noooo^7, i was killed by ^3<PLAYER_LAST_KILLER_CNAME>^7 with a ^3<PLAYER_LAST_KILLER_WEAPON>^7!!!
0 - whoami                      = qsay I am <COLOR_PLAYER>^7. I play ^3<PLAYER_CLASS>^7 on the ^3<PLAYER_TEAM>^7 side.
0 - victimized              = qsay <PLAYER_LAST_VICTIM_CNAME>^1, You've just been victimized by <COLOR_PLAYER>^1's <PLAYER_LAST_VICTIM_WEAPON>!!!

#other
2 - vkick                       = clientkick <PLAYER_LAST_KILLER_ID>
2 - vmute                       = ref mute <PLAYER_LAST_KILLER_ID>


kmod.cfg

KOD
//Kmod version 1.1 beta
//By Clutch152
//This file is required for use!!! Otherwise all values will default blank and nothing will work!

////////////////////////////////////////////////////////////////////////////////////////////////
//k_sprees - This cvar enables or disables killingsprees
//Includes sounds when disabled.
//Valid values are 1 or 0
//Default value = 1
set k_sprees "1"

//spree Misc
set k_spree1_amount "5"
set k_spree2_amount "10"
set k_spree3_amount "15"
set k_spree4_amount "20"
set k_spree5_amount "25"
set k_spree6_amount "30"

//1 = chat area
//2 = center screen area
//3 = top of screen
set k_ks_location "3"

//Custom Deathspree messages
//Aliases:
//  #killer#  - killer's name
//  #kills#  - number of kills
set k_ks_message1 "^7#killer# ^1is on a killingspree! ^2(^1#kills#^2)"
set k_ks_message2 "^7#killer# ^1is on a rampage! ^2(^1#kills#^2)"
set k_ks_message3 "^7#killer# ^1is dominating! ^2(^1#kills#^2)"
set k_ks_message4 "^7#killer# ^1is unstopable! ^2(^1#kills#^2)"
set k_ks_message5 "^7#killer# ^1is godlike! ^2(^1#kills#^2)"
set k_ks_message6 "^7#killer# ^1is wicked sick! ^2(^1#kills#^2)"

//---------------------------------------
//Spree ending messages
//Aliases:
//  #killer#  - killer's name
//  #kills#  - number of kills
//  #victim#  - victim's name

//Death by player
set k_end_message1 "^7#killer# ^1ended ^7#victim#^1's Killingspree! ^2(^7#kills#^2)"

//Death by selfkill
set k_end_message2 "^7#killer# ^1ended ^1his own Killingspree by killing himself! ^2(^7#kills#^2)"

//Death by world
set k_end_message3 "^7The world ^1ended ^7#victim#^1's Killingspree! ^2(^7#kills#^2)"

//Teamkill
set k_end_message4 "^7#killer# ^1ended ^1his own Killingspree! ^2(^7#kills#^2)"
//---------------------------------------

//k_spreesounds - This cvar enables or disables killingspree sounds
//Valid values are 1 or 0
//Default value = 1
set k_spreesounds "1"


////////////////////////////////////////////////////////////////////////////////////////////////
//k_deathsprees - This cvar enables or disables deathsprees
//Includes sounds when disabled.
//Valid values are 1 or 0
//Default value = 1
set k_deathsprees "1"

//Deathspree Misc
set k_deathspree1_amount "10"
set k_deathspree2_amount "15"
set k_deathspree3_amount "20"

//1 = chat area
//2 = center screen area
//3 = top of screen
set k_ds_location "3"

//Custom Deathspree messages
//Aliases:
//  #victim#  - victim's name
//  #deaths#  - number of deaths
set k_ds_message1 "^7#victim# ^7seems to be having a bad day! (^1#deaths#^7)"
set k_ds_message2 "^7#victim# ^7is on the way to getting ^3victim^7 of the day! (^1#deaths#^7)"
set k_ds_message3 "^7#victim# ^7is getting his ass kicked! (^1#deaths#^7)"

//k_deathspreesounds - This cvar enables or disables deathspree sounds
//Valid values are 1 or 0
//Default value = 1
set k_deathspreesounds "1"


////////////////////////////////////////////////////////////////////////////////////////////////
//k_multikills - This cvar enables or disables multikills
//Includes sounds when disabled.
//Valid values are 1 or 0
//Default value = 1
set k_multikills "1"

//1 = chat area
//2 = center screen area
//3 = top of screen
set k_mk_location "1"

//Multikill Misc
//k_multikill_time - Time in seconds between multikills
set k_multikill_time "6.5"

//Custom Multikill messages
//Aliases:
// #killer# - killer's name
set k_mk_message1 "^7!!!^1DOUBLEKILL!^7 > #killer#^7 < ^1DOUBLEKILL^7!!!"
set k_mk_message2 "^7!!!^1MULTIKILL!^7 > #killer#^7 < ^1MULTIKILL^7!!!"
set k_mk_message3 "^7!!!^1MEGAKILL!^7 > #killer#^7 < ^1MEGAKILL^7!!!"
set k_mk_message4 "^7!!!^1ULTRAKILL!^7 > #killer#^7 < ^1ULTRAKILL^7!!!"
set k_mk_message5 "^7!!!^1MONSTERKILL!^7 > #killer#^7 < ^1MONSTERKILL^7!!!"
set k_mk_message6 "^7!!!^1LUDICOUSKILL!^7 > #killer#^7 < ^1LUDICROUSKILL^7!!!"
set k_mk_message7 "^7!!!^1HOLYSHIT!^7 > #killer#^7 < ^1HOLYSHIT^7!!!"

//k_multikillsounds - This cvar enables or disables multikill sounds
//Valid values are 1 or 0
//Default value = 1
set k_multikillsounds "1"

////////////////////////////////////////////////////////////////////////////////////////////////
//k_flakmonkey - This cvar enables or disables flakmonkey
//Includes sounds when disabled.
//Valid values are 1 or 0
//Default value = 1
set k_flakmonkey "1"

//1 = chat area
//2 = center screen area
//3 = top of screen
set k_fm_location "1"

//Custom Flak Monkey message
//Alias:
// #killer# - killer's name
set k_fm_message "^7#killer# ^1got a flakmonkey!"

//k_flakmonkeysound - This cvar enables or disables flakmonkey sound
//Valid values are 1 or 0
//Default value = 1
set k_flakmonkeysound "1"

////////////////////////////////////////////////////////////////////////////////////////////////
//k_firstblood - This cvar enables or disables firstblood
//Includes sounds when disabled.
//Valid values are 1 or 0
//Default value = 1
set k_firstblood "1"

//firstblood Misc
//1 = chat area
//2 = center screen area
//3 = top of screen
set k_fb_location "2"

//Custom Firstblood message
//Alias:
// #killer# - killer's name
set k_fb_message "^7#killer# ^1drew ^1first ^1BLOOD ^1!^7"

//k_firstbloodsound - This cvar enables or disables the firstblood sound
//Valid values are 1 or 0
//Default value = 1
set k_firstbloodsound "1"

////////////////////////////////////////////////////////////////////////////////////////////////
//k_lastblood - Displays a global message in chat
//displaying who got the last kill of the match.
//Valid values are 1 or 0
//Default value = 1
set k_lastblood "1"

//Lastblood Misc
//1 = chat area
//2 = center screen area
//3 = top of screen
set k_lb_location "1"

//Custom Lastblood message
//Alias:
// #killer# - killer's name
set k_lb_message "^2Last kill of the match goes to ^7#killer#^7"

////////////////////////////////////////////////////////////////////////////////////////////////
//k_killerhpdisplay - When you are killed this feature will
//display a message telling you your killer's remaining HP.
//Valid values are 1 or 0
//Default value = 1
set k_killerhpdisplay "1"

//k_spreerecord - Saves the longest spree record to a file
//and displays message at end of each round that displays
//the current spree record
//Valid values are 1 or 0
//Default value = 1
set k_spreerecord "1"

//k_advancedpms - Slightly enhanced private messaging.
//Can use partial name (3+ characters required) or slot #
//Seperate sound for private messages. (etpro 3.2.6 required)
//Can now send Pm's to all admins at or above level 2
//Valid values are 1 or 0
//Default value = 1
set k_advancedpms "1"

//k_disablevotes - Disables votes after a specified length of time
//Valid values are 1 or 0
//Default value = 1
set k_disablevotes "1"

//k_dvmode - Mode at witch the specified disable time will
//be selected
// 1 = Number of minutes before game ends
// 2 = Percent of game time passed before votes are disabled
// 3 = Number of minutes after game has started
//Valid values are 1 - 3
//Default value = 2
set k_dvmode "2"

//k_dvtime - See k_dvmode above
//Default value = 90
set k_dvtime "90"

//k_advancedadrenaline - Sound is played near a player using
//Adrenaline and the user also has a counter displaying time
//left of the adrenaline effect.
//Valid values are 1 or 0
//Default value = 1
set k_advancedadrenaline "1"

//k_adrensound - Enables or Disables the sound from the
//Advanced adrenaline feature.
//Valid values are 1 or 0
//Default value = 1
set k_adrensound "1"

//k_antiunmute - Cannot call votes to unmute a muted player
//Valid values are 1 or 0
//Default value = 1
set k_antiunmute "1"

//k_advplayers - Disables timenudge and maxpackets from
//the players list and adds a new command (/admins) to
//display all current admins
//New command only availible to admin levels 2 and 3
//Valid values are 1 or 0
//Default value = 1
set k_advplayers "1"

//k_logchat - Logs most* chat messages into "chat_log.log"
//*Currently excludes private messages
//Valid values are 1 or 0
//Default value = 1
set k_logchat "1"

//k_crazygravityinterval - The interval between
//crazygravity gravity changes (in seconds)
//Default value = 30
set k_crazygravityinterval "30"

//k_teamkillrestriction - kickes excessive teamkillers
//Everyone start with a tk index of 0 and will increase
//or decrease by a certain number of points depending
//on the type of weapon used.
//Airstrike or Artillery                 = -0.65
//grenade, panzer, mg42, riflenade, or mortar    = -0.75
//Mines = -0
//All other weapons = -1
//Non teamkills or Revives = +1
//Offenders will be warned prior to being kicked via
//private message
//Valid values are 1 or 0
//Default value = 1
set k_teamkillrestriction "1"

//k_tklimit_high - Upper most limit for teamkill restriction
//Default value = 3 (recomended)
set k_tklimit_high "3"

//k_tklimit_low - Lower most limit for teamkill restriction
//Default value = -3 (recomended)
set k_tklimit_low "-3"

//k_tk_protect - admin levels at or above specified
//value will be immune to the teamkill restriction
//Default value = 3
set k_tk_protect "3"

//k_slashkilllimit - Enabled/Disables /kill limit
//Valid values are 1 or 0
//Default value = 1
set k_slashkilllimit "1"

//k_slashkills - Maximum slash kills allowed per player per map
//Default value = 3
set k_slashkills "3"

//k_color - Changes the color of killer's HP and spree record
//Valid values are any color code character
//Default value = 2
set k_color "2"

//k_endroundshuffle - Auto shuffles teams by xp at the end of each round.
//Valid values are 1 or 0
//Default value = 0
set k_endroundshuffle "1"

//k_noisereduction - Plays killingspree, flakmonkey, firstblood,
//deathspree, and multikill sounds to the killer/victim only
//Requires Etpro 3.2.6 or higher!!!!!!!!!!!!!!!!!!!!
//Valid values are 1 or 0
//Default value = 0
set k_noisereduction "0"

//k_advancedspawn - Gives a freshly spawned player
//infinite spawnshield until they move or shoot.
//SERVER CVAR REQUIRED: g_inactivity must be above 0
//or this feature will not work!
//Valid values are 1 or 0
//Default value = 0
set k_advancedspawn "1"

//Below are the file locations for all the sounds used
set flakmonkeysound "sound/misc/flakmonkey.wav"
set firstbloodsound "sound/misc/firstblood.wav"
set doublekillsound "sound/misc/doublekill.wav"
set multikillsound "sound/misc/multikill.wav"
set megakillsound "sound/misc/megakill.wav"
set ultrakillsound "sound/misc/ultrakill.wav"
set monsterkillsound "sound/misc/monsterkill.wav"
set ludicrouskillsound "sound/misc/ludicrouskill.wav"
set holyshitsound "sound/misc/holyshit.wav"
set deathspreesound1 "sound/misc/humiliation.wav"
set deathspreesound2 "sound/misc/humiliation.wav"
set deathspreesound3 "sound/misc/humiliation.wav"
set killingspreesound "sound/misc/killingspree.wav"
set rampagesound "sound/misc/rampage.wav"
set dominatingsound "sound/misc/dominating.wav"
set unstopablesound "sound/misc/unstoppable.wav"
set godlikesound "sound/misc/godlike.wav"
set wickedsicksound "sound/misc/wickedsick.wav"


i kmod.lua

KOD
KMODversion = "Beta 1.0"
KMODversion2 = "1.0"
k_commandprefix = "!" -- change this to your desired prefix

--[[
This lua was created to replace most features of etadmin mod
and is much faster in response time and includes some features
that etadmin mod does not have and vice versa.

FEATURES:
    *** Killingsprees plus all the other killingspree type stuff (Sounds Included)
    *** Doublekills, Multikills, Ultrakills, Monsterkills, and Ludicrouskills (Sounds Included)
    *** Flakmonkey's - When you get 3 kills with either panzer or a riflenade.
        Flakmonkey is reset if you get any other type of kill/teamkill/or if you die (Sound included)
    *** Firstblood (Sound Included)
    *** Lastblood
    *** Spreerecord (not including records for individual maps)
    *** Enhanced Private Messaging - The sender can use partial name of repipiant
        or can now use the repipiants slot number.  When using ETPro 3.2.6 or higher,
        a new sound will be played letting you know that you have a private message.
        Players can now private message all 2+ level admins currently on the server using
        /ma or /pma then your message.
    *** Vote disable was taken directly from ETAdmin mod and is slightly enhanced such that
        it will detect changes to the timelimit.  (see config for details)
    *** Antiunmute - When a player is muted he may not be unmuted via vote
    *** Advanced Adrenaline - Players using adrenaline now have a timer in their cp area
        displaying the amount of adrenaline time they have left.
        A sound will also be played in their general location letting everyone else
        know that they are using adrenaline (disableable) (sound included)
    *** Killer's HP - Killer's HP is displayed to their victims.  When you kill somone
        and are killed in return within a certain amount of time no message will be displayed.
        When a killer is using adrenaline the victim will see a message displaying so.
    *** Advanced players - Time nudge and max packets are removed from players list
        and admins may see which admins (level 2+) are on the server using /admins
    *** Chat log - All chats are logged along with player renames/connects/disconnects/and map restarts
    *** Crazygravity - The exact same crazy gravity you've come to know and love
    *** Team kill restriction - Taken from Etadmin mod and uses punkbuster to kick (see config)
    *** /kill limit - After the max amount of slash kills is reached they are no longer
        able to /kill.
    *** Endround shuffle - At the end of each round teams are shuffled automatically
        I recomend using this on servers with alot of people.
    *** Noise reduction - ETPRO 3.2.6 OR HIGHER IS REQUIRED!!!  Plays all killingsprees
        multikills/deathsprees/and firstblood to the killer or victim depending on which one
    *** Color codes can be changed for lastblood and killer HP display in config
    *** Spawn kill protection - A newly spawned player will keep his spawn shield
        Until he either moves or fires his weapon.  (see config)
    *** Paths to sounds can be changed to fit server admins needs.

CREDITS:
    Special to
        Noobology
        Armymen
        Rikku
        Monkey Spawn
        Brunout
        Dominator
        James
        Pantsless Victims
    For helping with testing

SOURCES:
    Some code and ideas dirived from G073nks which can be found here
        http://wolfwiki.anime.net/index.php/User:Gotenks
    Code to get slot number from name was from the slap command I found on the ETPro forum here
        http://bani.anime.net/banimod/forums/viewtopic.php?t=6579&highlight=slap
    Infty's NoKill lua code was used and edited for the slashkill limit which can be found here
        http://wolfwiki.anime.net/index.php/User:Infty
    Ideas dirived from ETAdmin_mod found here
        http://et.d1p.de/etadmin_mod/wiki/index.php/Main_Page

    If you see your code in here let me know and I'll add you to the credits for future releases

    The rest of the code is mine :D
--]]

killingspree = {}
flakmonkey = {}
deathspree = {}
multikill = {}
playerwhokilled = {}
killedwithweapk = {}
killedwithweapv = {}
playerlastkilled = {}
muted = {}
antiloopadr1 = {}
antiloopadr2 = {}
adrenaline = {}
adrnum = {}
adrnum2 = {}
adrtime = {}
adrtime2 = {}
adrendummy = {}
clientrespawn = {}
invincStart = {}
invincDummy = {}
switchteam = {}

timecounter = 1

kill1 = {}
kill2 = {}
kill3 = {}
kill4 = {}
kill5 = {}
kill6 = {}
kill7 = {}
kill8 = {}
killr = {}
selfkills = {}
teamkillr = {}
khp = {}
PlayerName = {}
Bname = {}

EV_GLOBAL_CLIENT_SOUND = 54
et.CS_PLAYERS = 689

team = { "AXIS" , "ALLIES" , "SPECTATOR" }
class = { [0]="SOLDIER" , "MEDIC" , "ENGINEER" , "FIELD OPS" , "COVERT OPS" }

AdminLV0 = {}
AdminLV1 = {}
AdminLV2 = {}
AdminLV3 = {}
chkGUID = {}
AdminName = {}
originalclass = {}
originalweap = {}

et.MAX_WEAPONS = 50
GAMEPAUSED = 0

pweapons = {
    nil,    --// 1
    false,    --WP_LUGER,                // 2
    false,    --WP_MP40,                // 3
    false,    --WP_GRENADE_LAUNCHER,    // 4
    true,    --WP_PANZERFAUST,        // 5
    false,    --WP_FLAMETHROWER,        // 6
    false,    --WP_COLT,                // 7    // equivalent american weapon to german luger
    false,    --WP_THOMPSON,            // 8    // equivalent american weapon to german mp40
    false,    --WP_GRENADE_PINEAPPLE,    // 9
    false,    --WP_STEN,                // 10    // silenced sten sub-machinegun
    false,    --WP_MEDIC_SYRINGE,        // 11    // JPW NERVE -- broken out from CLASS_SPECIAL per Id request
    false,    --WP_AMMO,                // 12    // JPW NERVE likewise
    false,    --WP_ARTY,                // 13
    false,    --WP_SILENCER,            // 14    // used to be sp5
    false,    --WP_DYNAMITE,            // 15
    nil,    --// 16
    nil,    --// 17
    nil,        --// 18
    false,    --WP_MEDKIT,            // 19
    false,    --WP_BINOCULARS,        // 20
    nil,    --// 21
    nil,    --// 22
    false,    --WP_KAR98,                // 23    // WolfXP weapons
    false,    --WP_CARBINE,            // 24
    false,    --WP_GARAND,            // 25
    false,    --WP_LANDMINE,            // 26
    false,    --WP_SATCHEL,            // 27
    false,    --WP_SATCHEL_DET,        // 28
    nil,    --// 29
    false,    --WP_SMOKE_BOMB,        // 30
    false,    --WP_MOBILE_MG42,        // 31
    false,    --WP_K43,                // 32
    false,    --WP_FG42,                // 33
    nil,    --// 34
    false,    --WP_MORTAR,            // 35
    nil,    --// 36
    false,    --WP_AKIMBO_COLT,        // 37
    false,    --WP_AKIMBO_LUGER,        // 38
    nil,    --// 39
    nil,    --// 40
    false,    --WP_SILENCED_COLT,        // 41
    false,    --WP_GARAND_SCOPE,        // 42
    false,    --WP_K43_SCOPE,            // 43
    false,    --WP_FG42SCOPE,            // 44
    false,    --WP_MORTAR_SET,        // 45
    false,    --WP_MEDIC_ADRENALINE,    // 46
    false,    --WP_AKIMBO_SILENCEDCOLT,// 47
    false    --WP_AKIMBO_SILENCEDLUGER,// 48
}

fweapons = {
    nil,    --// 1
    true,    --WP_LUGER,                // 2
    true,    --WP_MP40,                // 3
    true,    --WP_GRENADE_LAUNCHER,    // 4
    true,    --WP_PANZERFAUST,        // 5
    true,    --WP_FLAMETHROWER,        // 6
    true,    --WP_COLT,                // 7    // equivalent american weapon to german luger
    true,    --WP_THOMPSON,            // 8    // equivalent american weapon to german mp40
    true,    --WP_GRENADE_PINEAPPLE,    // 9
    true,    --WP_STEN,                // 10    // silenced sten sub-machinegun
    true,    --WP_MEDIC_SYRINGE,        // 11    // JPW NERVE -- broken out from CLASS_SPECIAL per Id request
    true,    --WP_AMMO,                // 12    // JPW NERVE likewise
    true,    --WP_ARTY,                // 13
    true,    --WP_SILENCER,            // 14    // used to be sp5
    true,    --WP_DYNAMITE,            // 15
    nil,    --// 16
    nil,    --// 17
    nil,        --// 18
    true,    --WP_MEDKIT,            // 19
    true,    --WP_BINOCULARS,        // 20
    nil,    --// 21
    nil,    --// 22
    true,    --WP_KAR98,                // 23    // WolfXP weapons
    true,    --WP_CARBINE,            // 24
    true,    --WP_GARAND,            // 25
    true,    --WP_LANDMINE,            // 26
    true,    --WP_SATCHEL,            // 27
    true,    --WP_SATCHEL_DET,        // 28
    nil,    --// 29
    true,    --WP_SMOKE_BOMB,        // 30
    true,    --WP_MOBILE_MG42,        // 31
    true,    --WP_K43,                // 32
    true,    --WP_FG42,                // 33
    nil,    --// 34
    true,    --WP_MORTAR,            // 35
    nil,    --// 36
    true,    --WP_AKIMBO_COLT,        // 37
    true,    --WP_AKIMBO_LUGER,        // 38
    nil,    --// 39
    nil,    --// 40
    true,    --WP_SILENCED_COLT,        // 41
    true,    --WP_GARAND_SCOPE,        // 42
    true,    --WP_K43_SCOPE,            // 43
    true,    --WP_FG42SCOPE,            // 44
    true,    --WP_MORTAR_SET,        // 45
    false,    --WP_MEDIC_ADRENALINE,    // 46
    true,    --WP_AKIMBO_SILENCEDCOLT,// 47
    true    --WP_AKIMBO_SILENCEDLUGER,// 48
}

aweapons = {
    nil,    --// 1
    true,    --WP_LUGER,                // 2
    true,    --WP_MP40,                // 3
    true,    --WP_GRENADE_LAUNCHER,    // 4
    true,    --WP_PANZERFAUST,        // 5
    true,    --WP_FLAMETHROWER,        // 6
    true,    --WP_COLT,                // 7    // equivalent american weapon to german luger
    true,    --WP_THOMPSON,            // 8    // equivalent american weapon to german mp40
    true,    --WP_GRENADE_PINEAPPLE,    // 9
    true,    --WP_STEN,                // 10    // silenced sten sub-machinegun
    true,    --WP_MEDIC_SYRINGE,        // 11    // JPW NERVE -- broken out from CLASS_SPECIAL per Id request
    true,    --WP_AMMO,                // 12    // JPW NERVE likewise
    true,    --WP_ARTY,                // 13
    true,    --WP_SILENCER,            // 14    // used to be sp5
    true,    --WP_DYNAMITE,            // 15
    nil,    --// 16
    nil,    --// 17
    nil,        --// 18
    true,    --WP_MEDKIT,            // 19
    true,    --WP_BINOCULARS,        // 20
    nil,    --// 21
    nil,    --// 22
    true,    --WP_KAR98,                // 23    // WolfXP weapons
    true,    --WP_CARBINE,            // 24
    true,    --WP_GARAND,            // 25
    true,    --WP_LANDMINE,            // 26
    true,    --WP_SATCHEL,            // 27
    true,    --WP_SATCHEL_DET,        // 28
    nil,    --// 29
    true,    --WP_SMOKE_BOMB,        // 30
    true,    --WP_MOBILE_MG42,        // 31
    true,    --WP_K43,                // 32
    true,    --WP_FG42,                // 33
    nil,    --// 34
    true,    --WP_MORTAR,            // 35
    nil,    --// 36
    true,    --WP_AKIMBO_COLT,        // 37
    true,    --WP_AKIMBO_LUGER,        // 38
    nil,    --// 39
    nil,    --// 40
    true,    --WP_SILENCED_COLT,        // 41
    true,    --WP_GARAND_SCOPE,        // 42
    true,    --WP_K43_SCOPE,            // 43
    true,    --WP_FG42SCOPE,            // 44
    true,    --WP_MORTAR_SET,        // 45
    false,    --WP_MEDIC_ADRENALINE,    // 46
    true,    --WP_AKIMBO_SILENCEDCOLT,// 47
    true    --WP_AKIMBO_SILENCEDLUGER,// 48
}

gweapons = {
    nil,    --// 1
    false,    --WP_LUGER,                // 2
    false,    --WP_MP40,                // 3
    true,    --WP_GRENADE_LAUNCHER,    // 4
    false,    --WP_PANZERFAUST,        // 5
    false,    --WP_FLAMETHROWER,        // 6
    false,    --WP_COLT,                // 7    // equivalent american weapon to german luger
    false,    --WP_THOMPSON,            // 8    // equivalent american weapon to german mp40
    true,    --WP_GRENADE_PINEAPPLE,    // 9
    false,    --WP_STEN,                // 10    // silenced sten sub-machinegun
    false,    --WP_MEDIC_SYRINGE,        // 11    // JPW NERVE -- broken out from CLASS_SPECIAL per Id request
    false,    --WP_AMMO,                // 12    // JPW NERVE likewise
    false,    --WP_ARTY,                // 13
    false,    --WP_SILENCER,            // 14    // used to be sp5
    false,    --WP_DYNAMITE,            // 15
    nil,    --// 16
    nil,    --// 17
    nil,        --// 18
    false,    --WP_MEDKIT,            // 19
    false,    --WP_BINOCULARS,        // 20
    nil,    --// 21
    nil,    --// 22
    false,    --WP_KAR98,                // 23    // WolfXP weapons
    false,    --WP_CARBINE,            // 24
    false,    --WP_GARAND,            // 25
    false,    --WP_LANDMINE,            // 26
    false,    --WP_SATCHEL,            // 27
    false,    --WP_SATCHEL_DET,        // 28
    nil,    --// 29
    false,    --WP_SMOKE_BOMB,        // 30
    false,    --WP_MOBILE_MG42,        // 31
    false,    --WP_K43,                // 32
    false,    --WP_FG42,                // 33
    nil,    --// 34
    false,    --WP_MORTAR,            // 35
    nil,    --// 36
    false,    --WP_AKIMBO_COLT,        // 37
    false,    --WP_AKIMBO_LUGER,        // 38
    nil,    --// 39
    nil,    --// 40
    false,    --WP_SILENCED_COLT,        // 41
    false,    --WP_GARAND_SCOPE,        // 42
    false,    --WP_K43_SCOPE,            // 43
    false,    --WP_FG42SCOPE,            // 44
    false,    --WP_MORTAR_SET,        // 45
    false,    --WP_MEDIC_ADRENALINE,    // 46
    false,    --WP_AKIMBO_SILENCEDCOLT,// 47
    false    --WP_AKIMBO_SILENCEDLUGER,// 48
}

sweapons = {
    nil,    --// 1
    false,    --WP_LUGER,                // 2
    false,    --WP_MP40,                // 3
    false,    --WP_GRENADE_LAUNCHER,    // 4
    false,    --WP_PANZERFAUST,        // 5
    false,    --WP_FLAMETHROWER,        // 6
    false,    --WP_COLT,                // 7    // equivalent american weapon to german luger
    false,    --WP_THOMPSON,            // 8    // equivalent american weapon to german mp40
    false,    --WP_GRENADE_PINEAPPLE,    // 9
    false,    --WP_STEN,                // 10    // silenced sten sub-machinegun
    false,    --WP_MEDIC_SYRINGE,        // 11    // JPW NERVE -- broken out from CLASS_SPECIAL per Id request
    false,    --WP_AMMO,                // 12    // JPW NERVE likewise
    false,    --WP_ARTY,                // 13
    false,    --WP_SILENCER,            // 14    // used to be sp5
    false,    --WP_DYNAMITE,            // 15
    nil,    --// 16
    nil,    --// 17
    nil,        --// 18
    false,    --WP_MEDKIT,            // 19
    false,    --WP_BINOCULARS,        // 20
    nil,    --// 21
    nil,    --// 22
    false,    --WP_KAR98,                // 23    // WolfXP weapons
    false,    --WP_CARBINE,            // 24
    true,    --WP_GARAND,            // 25
    false,    --WP_LANDMINE,            // 26
    false,    --WP_SATCHEL,            // 27
    nil,    --WP_SATCHEL_DET,        // 28
    nil,    --// 29
    false,    --WP_SMOKE_BOMB,        // 30
    false,    --WP_MOBILE_MG42,        // 31
    true,    --WP_K43,                // 32
    true,    --WP_FG42,                // 33
    nil,    --// 34
    false,    --WP_MORTAR,            // 35
    nil,    --// 36
    false,    --WP_AKIMBO_COLT,        // 37
    false,    --WP_AKIMBO_LUGER,        // 38
    nil,    --// 39
    nil,    --// 40
    false,    --WP_SILENCED_COLT,        // 41
    true,    --WP_GARAND_SCOPE,        // 42
    true,    --WP_K43_SCOPE,            // 43
    true,    --WP_FG42SCOPE,            // 44
    false,    --WP_MORTAR_SET,        // 45
    false,    --WP_MEDIC_ADRENALINE,    // 46
    false,    --WP_AKIMBO_SILENCEDCOLT,// 47
    false    --WP_AKIMBO_SILENCEDLUGER,// 48
}

lvl0c = 5
lvl0 = {
    k_commandprefix.."admintest",
    k_commandprefix.."time",
    k_commandprefix.."date",
    k_commandprefix.."spree_record",
    k_commandprefix.."tk_index",
}

lvl1c = 1
lvl1 = {
    k_commandprefix.."spec999",
}

lvl2c = 1
lvl2 = {
    k_commandprefix.."finger",
}

lvl3c = 13
lvl3 = {
    k_commandprefix.."ban",
    k_commandprefix.."readconfig",
    k_commandprefix.."spree_restart",
    k_commandprefix.."getip",
    k_commandprefix.."crazygravity",
    k_commandprefix.."getguid",
    k_commandprefix.."setlevel",
    k_commandprefix.."gib",
    k_commandprefix.."slap",
    k_commandprefix.."panzerwar",
    k_commandprefix.."frenzy",
    k_commandprefix.."grenadewar",
    k_commandprefix.."sniperwar",
}

firstblood = 0
lastblood = ""
oldspree = ""
oldspree2 = ""
intmrecord = ""

panzers = ""
medics = ""
cvops = ""
fops = ""
engie = ""
flamers = ""
mortars = ""
mg42s = ""
soldcharge = ""
speed = ""
redlimbo = ""
bluelimbo = ""

floodprotect = 0
commandSaid = false
kick = false
fullcom = ""
finger = false
removereferee = false
makereferee = false
removeshoutcaster = false
makeshoutcaster = false
putspec = false
putallies = false
putaxis = false
unmute = false
mute = false
warn = false
ban = false
crazygravity = false
crazytime = 0

--[[
--Defaults

killingspreesound="sound/misc/killingspree.wav"
rampagesound="sound/misc/rampage.wav"
dominatingsound="sound/misc/dominating.wav"
unstopablesound="sound/misc/unstoppable.wav"
godlikesound="sound/misc/godlike.wav"
wickedsicksound="sound/misc/wickedsick.wav"
flakmonkeysound="sound/misc/flakmonkey.wav"
firstbloodsound="sound/misc/firstblood.wav"

deathspreesound1="sound/misc/humiliation.wav"
deathspreesound2="sound/misc/you_suck.wav"
deathspreesound3="sound/misc/ae821.wav"

doublekillsound="sound/misc/doublekill.wav"
multikillsound="sound/misc/multikill.wav"
ultrakillsound="sound/misc/ultrakill.wav"
monsterkillsound="sound/misc/monsterkill.wav"
ludicrouskillsound="sound/misc/ludicrouskill.wav"

k_spreesounds = 1
k_sprees = 1 -- includes sounds
k_multikillsounds = 1
k_multikills = 1 --includes sounds
k_flakmonkeysound = 1
k_flakmonkey = 1 --includes sounds
k_firstbloodsound = 1
k_firstblood = 1 --includes sound
k_lastblood = 1
k_killerhpdisplay = 1

k_spreerecord = 1
k_advplayers = 1
k_crazygravityinterval = 30
k_slashkilllimit = 1
k_slashkills = 3
k_teamkillrestriction = 1
k_tklimit_high = 3
k_tklimit_low = -3
k_color = "^2"
k_advancedpms = 1
k_playdead = 0
k_logchat = 1
k_disablevotes = 1
k_dvmode = 2
k_dvpercent = 90
k_adrensound = 1
k_advancedadrenaline = 1
k_noisereduction = 0
k_endroundshuffle = 0
k_deathsprees = 1
k_deathspreesounds = 1
k_antiunmute = 1
k_advancedspawn = 0
--]]

pmsound = "sound/misc/NewBeep.wav"

antiloop = 0
antiloop2 = 0
antiloop3 = 0
antiloop4 = 0
antiloopes = 0
antilooppw = 0
confirm = 0
spreerecordkills = 0
crazydv = 1
CGactive = 0
panzdv = 0
sldv = 0
frenzdv = 0
grendv = 0
snipdv = 0
antiloopm = 0
pausedv = 0
pausedv2 = 0
pausetime = 0
timedv = 0
timedvs = 0
refreshrate = 0
timedelay_antiloop = 0
egamemodes = 0
onetime = 0

for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
    antiloopadr1[i] = 0
    antiloopadr2[i] = 0
    adrenaline[i] = 0
    adrnum[i] = 0
    adrnum2[i] = 0
    adrtime[i] = 0
    adrtime2[i] = 0
end

function et_RunFrame( levelTime )
    mtime=tonumber(levelTime) -- still cannot remember why i made this but its used in alot of stuff so i'll leave it

    if timedvs == 0 then
        local ktime = (((mtime - initTime)/1000))
        timecounter = ktime
        timedvs = 1
    end

    timelimit=tonumber(et.trap_Cvar_Get("timelimit"))

    Gamestate=tonumber(et.trap_Cvar_Get("gamestate"))

    if GAMEPAUSED == 1 then
        if pausedv == 0 then
            pausetime = mtime
            pausedv = 1
        end

        if ((mtime - pausetime)/1000) >= 180 then    -- Server is paused for 3 minutes (180 seconds)
            GAMEPAUSED = 0
        end
    elseif GAMEPAUSED == 0 and pausedv == 1 then
        if pausedv2 == 0 then
            pausetime = mtime
            pausedv2 = 1
        end
        if ((mtime - pausetime)/1000) >= 10 then     -- when unpaused before 3 minutes is up it counts down from 10 seconds
            pausedv = 0
            pausedv2 = 0
            timedv1 = nil
            timedv2 = nil
        end
    else
        if timedv == 0 then
            timedv1 = mtime
            timedv = 1
            timecounter=timecounter+((timedv1 - timedv2)/1000)
            s,e,thous = string.find(timecounter, "%d*%.%d%d(%d*)")
--            s,e = string.find(thous, "9")
            if thous == 9999999 then
                timecounter=timecounter+0.000000001
            end
        else
            timedv2 = mtime
            timedv = 0
            timecounter=timecounter+((timedv2 - timedv1)/1000)
            s,e,thous = string.find(timecounter, "%d*%.%d%d(%d*)")
--            s,e = string.find(thous, "9")
            if thous == 9999999 then
                timecounter=timecounter+0.000000001
            end
        end

--        timecounter=timecounter+0.05
    end

    killingspreesound = tostring(et.trap_Cvar_Get("killingspreesound"))
    k_color = tostring(et.trap_Cvar_Get("k_color"))
    rampagesound = tostring(et.trap_Cvar_Get("rampagesound"))
    dominatingsound = tostring(et.trap_Cvar_Get("dominatingsound"))
    unstopablesound = tostring(et.trap_Cvar_Get("unstopablesound"))
    godlikesound = tostring(et.trap_Cvar_Get("godlikesound"))
    wickedsicksound = tostring(et.trap_Cvar_Get("wickedsicksound"))
    flakmonkeysound = tostring(et.trap_Cvar_Get("flakmonkeysound"))
    firstbloodsound = tostring(et.trap_Cvar_Get("firstbloodsound"))
    deathspreesound1 = tostring(et.trap_Cvar_Get("deathspreesound1"))
    deathspreesound2 = tostring(et.trap_Cvar_Get("deathspreesound2"))
    deathspreesound3 = tostring(et.trap_Cvar_Get("deathspreesound3"))
    doublekillsound = tostring(et.trap_Cvar_Get("doublekillsound"))
    multikillsound = tostring(et.trap_Cvar_Get("multikillsound"))
    megakillsound = tostring(et.trap_Cvar_Get("megakillsound"))
    ultrakillsound = tostring(et.trap_Cvar_Get("ultrakillsound"))
    monsterkillsound = tostring(et.trap_Cvar_Get("monsterkillsound"))
    ludicrouskillsound = tostring(et.trap_Cvar_Get("ludicrouskillsound"))
    holyshitsound = tostring(et.trap_Cvar_Get("holyshitsound"))
    k_ds_message1 = tostring(et.trap_Cvar_Get("k_ds_message1"))
    k_ds_message2 = tostring(et.trap_Cvar_Get("k_ds_message2"))
    k_ds_message3 = tostring(et.trap_Cvar_Get("k_ds_message3"))
    k_ks_message1 = tostring(et.trap_Cvar_Get("k_ks_message1"))
    k_ks_message2 = tostring(et.trap_Cvar_Get("k_ks_message2"))
    k_ks_message3 = tostring(et.trap_Cvar_Get("k_ks_message3"))
    k_ks_message4 = tostring(et.trap_Cvar_Get("k_ks_message4"))
    k_ks_message5 = tostring(et.trap_Cvar_Get("k_ks_message5"))
    k_ks_message6 = tostring(et.trap_Cvar_Get("k_ks_message6"))
    k_mk_message1 = tostring(et.trap_Cvar_Get("k_mk_message1"))
    k_mk_message2 = tostring(et.trap_Cvar_Get("k_mk_message2"))
    k_mk_message3 = tostring(et.trap_Cvar_Get("k_mk_message3"))
    k_mk_message4 = tostring(et.trap_Cvar_Get("k_mk_message4"))
    k_mk_message5 = tostring(et.trap_Cvar_Get("k_mk_message5"))
    k_mk_message6 = tostring(et.trap_Cvar_Get("k_mk_message6"))
    k_mk_message7 = tostring(et.trap_Cvar_Get("k_mk_message7"))
    k_fm_message = tostring(et.trap_Cvar_Get("k_fm_message"))
    k_end_message1 = tostring(et.trap_Cvar_Get("k_end_message1"))
    k_end_message2 = tostring(et.trap_Cvar_Get("k_end_message2"))
    k_end_message3 = tostring(et.trap_Cvar_Get("k_end_message3"))
    k_end_message4 = tostring(et.trap_Cvar_Get("k_end_message4"))
    k_fb_message = tostring(et.trap_Cvar_Get("k_fb_message"))
    k_lb_message = tostring(et.trap_Cvar_Get("k_lb_message"))
    k_spreesounds = tonumber(et.trap_Cvar_Get("k_spreesounds"))
    k_sprees = tonumber(et.trap_Cvar_Get("k_sprees"))
    k_multikillsounds = tonumber(et.trap_Cvar_Get("k_multikillsounds"))
    k_multikills = tonumber(et.trap_Cvar_Get("k_multikills"))
    k_flakmonkeysound = tonumber(et.trap_Cvar_Get("k_flakmonkeysound"))
    k_flakmonkey = tonumber(et.trap_Cvar_Get("k_flakmonkey"))
    k_firstbloodsound = tonumber(et.trap_Cvar_Get("k_firstbloodsound"))
    k_firstblood = tonumber(et.trap_Cvar_Get("k_firstblood"))
    k_lastblood = tonumber(et.trap_Cvar_Get("k_lastblood"))
    k_killerhpdisplay = tonumber(et.trap_Cvar_Get("k_killerhpdisplay"))
    k_deathsprees = tonumber(et.trap_Cvar_Get("k_deathsprees"))
    k_deathspreesounds = tonumber(et.trap_Cvar_Get("k_deathspreesounds"))
    k_spreerecord = tonumber(et.trap_Cvar_Get("k_spreerecord"))
    k_advplayers = tonumber(et.trap_Cvar_Get("k_advplayers"))
    k_crazygravityinterval = tonumber(et.trap_Cvar_Get("k_crazygravityinterval"))
    k_teamkillrestriction = tonumber(et.trap_Cvar_Get("k_teamkillrestriction"))
    k_tklimit_high = tonumber(et.trap_Cvar_Get("k_tklimit_high"))
    k_tklimit_low = tonumber(et.trap_Cvar_Get("k_tklimit_low"))
    k_tk_protect = tonumber(et.trap_Cvar_Get("k_tk_protect"))
    k_slashkilllimit = tonumber(et.trap_Cvar_Get("k_slashkilllimit"))
    k_slashkills = tonumber(et.trap_Cvar_Get("k_slashkills"))
    k_endroundshuffle = tonumber(et.trap_Cvar_Get("k_endroundshuffle"))
    k_noisereduction = tonumber(et.trap_Cvar_Get("k_noisereduction"))
    k_advancedpms = tonumber(et.trap_Cvar_Get("k_advancedpms"))
    k_logchat = tonumber(et.trap_Cvar_Get("k_logchat"))
    k_disablevotes = tonumber(et.trap_Cvar_Get("k_disablevotes"))
    k_dvmode = tonumber(et.trap_Cvar_Get("k_dvmode"))
    k_dvtime = tonumber(et.trap_Cvar_Get("k_dvtime"))
    k_adrensound = tonumber(et.trap_Cvar_Get("k_adrensound"))
    k_advancedadrenaline = tonumber(et.trap_Cvar_Get("k_advancedadrenaline"))
    k_antiunmute = tonumber(et.trap_Cvar_Get("k_antiunmute"))
    k_advancedspawn = tonumber(et.trap_Cvar_Get("k_advancedspawn"))
    k_deathspree1_amount = tonumber(et.trap_Cvar_Get("k_deathspree1_amount"))
    k_deathspree2_amount = tonumber(et.trap_Cvar_Get("k_deathspree2_amount"))
    k_deathspree3_amount = tonumber(et.trap_Cvar_Get("k_deathspree3_amount"))
    k_spree1_amount = tonumber(et.trap_Cvar_Get("k_spree1_amount"))
    k_spree2_amount = tonumber(et.trap_Cvar_Get("k_spree2_amount"))
    k_spree3_amount = tonumber(et.trap_Cvar_Get("k_spree3_amount"))
    k_spree4_amount = tonumber(et.trap_Cvar_Get("k_spree4_amount"))
    k_spree5_amount = tonumber(et.trap_Cvar_Get("k_spree5_amount"))
    k_spree6_amount = tonumber(et.trap_Cvar_Get("k_spree6_amount"))
    k_multikill_time = tonumber(et.trap_Cvar_Get("k_multikill_time"))
    k_ds_location = tonumber(et.trap_Cvar_Get("k_ds_location"))
    k_ks_location = tonumber(et.trap_Cvar_Get("k_ks_location"))
    k_mk_location = tonumber(et.trap_Cvar_Get("k_mk_location"))
    k_fm_location = tonumber(et.trap_Cvar_Get("k_fm_location"))
    k_fb_location = tonumber(et.trap_Cvar_Get("k_fb_location"))
    k_lb_location = tonumber(et.trap_Cvar_Get("k_lb_location"))

    if k_ds_location == 2 then
        ds_location = "cp"
    elseif k_ds_location == 3 then
        ds_location = "bp"
    else
        ds_location = "qsay"
    end

    if k_ks_location == 2 then
        ks_location = "cp"
    elseif k_ks_location == 3 then
        ks_location = "bp"
    else
        ks_location = "qsay"
    end

    if k_mk_location == 2 then
        mk_location = "cp"
    elseif k_mk_location == 3 then
        mk_location = "bp"
    else
        mk_location = "qsay"
    end

    if k_fm_location == 2 then
        fm_location = "cp"
    elseif k_fm_location == 3 then
        fm_location = "bp"
    else
        fm_location = "qsay"
    end

    if k_fb_location == 2 then
        fb_location = "cp"
    elseif k_fb_location == 3 then
        fb_location = "bp"
    else
        fb_location = "qsay"
    end

    if k_lb_location == 2 then
        lb_location = "cp"
    elseif k_lb_location == 3 then
        lb_location = "bp"
    else
        lb_location = "qsay"
    end

    if onetime == 0 then
        readconfig()
        onetime = 1
    end

    if k_advancedspawn == 1 and tonumber(et.trap_Cvar_Get("g_inactivity")) > 0 then -- g_inactivity is required or this will not work
        for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
            if switchteam[i] == 1 then et.gentity_set(i,"ps.powerups", 1, 0) end
            switchteam[i] = 0
        end

        for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
            if clientrespawn[i] == 1 then
                if (switchteam[i] == 0 and et.gentity_get(i,"ps.powerups", 1) > 0) then
                    if invincDummy[i] == 0 then
                        invincStart[i] = tonumber(et.gentity_get(i,"client.inactivityTime"))
                        invincDummy[i] = 1
                    end
                    local inactivity = tonumber(et.gentity_get(i,"client.inactivityTime"))
                    if inactivity == invincStart[i] then
                        local timer = mtime + 3000
                        et.gentity_set(i,"ps.powerups", 1, timer)
                    else
                        clientrespawn[i] = 0
                        invincDummy[i] = 0
                    end
                else
                    clientrespawn[i] = 0
                    invincDummy[i] = 0
                end
            end
        end
    end

    if panzdv == 1 or frenzdv == 1 or grendv == 1 or snipdv == 1 then
        if timedelay_antiloop == 0 then
            refreshrate = mtime
            timedelay_antiloop = 1
        end

        if ((mtime-refreshrate)/1000) >= 0.25 then -- reset ammo and stuff every 0.25 of a second rather than 0.05 of a second (which caused lag)
            egamemodes = 1
            timedelay_antiloop = 0
        else
            egamemodes = 0
        end
    else
        egamemodes = 0
    end

    if panzdv == 1 then
        if egamemodes == 1 then
        for q=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
            et.gentity_set(q,"sess.latchPlayerWeapon",5)
            for i=1,(et.MAX_WEAPONS-1),1 do
                if not pweapons[i] then
                    et.gentity_set(q,"ps.ammoclip",i,0)
                    et.gentity_set(q,"ps.ammo",i,0)
                else
                    et.gentity_set(q,"ps.ammoclip",i,999)
                    et.gentity_set(q,"ps.ammo",i,999)
                end
            end
        end
        end
    elseif frenzdv == 1 then
        if egamemodes == 1 then
        for w=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
            for i=1,(et.MAX_WEAPONS-1),1 do
                if not fweapons[i] then
                    et.gentity_set(w,"ps.ammoclip",i,0)
                    et.gentity_set(w,"ps.ammo",i,0)
                else
                    et.gentity_set(w,"ps.ammoclip",i,999)
                    et.gentity_set(w,"ps.ammo",i,999)
                end
            end
        end
        end
    elseif grendv == 1 then
        if egamemodes == 1 then
        for e=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
            for i=1,(et.MAX_WEAPONS-1),1 do
                if not gweapons[i] then
                    et.gentity_set(e,"ps.ammoclip",i,0)
                    et.gentity_set(e,"ps.ammo",i,0)
                else
                    et.gentity_set(e,"ps.ammoclip",i,999)
                    et.gentity_set(e,"ps.ammo",i,999)
                end
            end
        end
        end
    elseif snipdv == 1 then
        if egamemodes == 1 then
        for r=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
            if tonumber(et.gentity_get(r,"sess.latchPlayerType")) ~= 4 then
                et.gentity_set(r,"sess.latchPlayerType",4)
            end
            if tonumber(et.gentity_get(r,"sess.latchPlayerWeapon")) ~= 32 or tonumber(et.gentity_get(r,"sess.latchPlayerWeapon")) ~= 25 or tonumber(et.gentity_get(r,"sess.latchPlayerWeapon")) ~= 42 or tonumber(et.gentity_get(r,"sess.latchPlayerWeapon")) ~= 43 then
                if tonumber(et.gentity_get(r,"sess.latchPlayerWeapon")) ~= 33 then
                    if tonumber(et.gentity_get(r,"sess.sessionTeam")) == 1 then
                        et.gentity_set(r,"sess.latchPlayerWeapon", 32)
                    elseif tonumber(et.gentity_get(r,"sess.sessionTeam")) == 2 then
                        et.gentity_set(r,"sess.latchPlayerWeapon", 25)
                    end
                end
            end
            for i=1,(et.MAX_WEAPONS-1),1 do
                if not sweapons[i] then
                    et.gentity_set(r,"ps.ammoclip",i,0)
                    et.gentity_set(r,"ps.ammo",i,0)
                else
                    et.gentity_set(r,"ps.ammoclip",i,999)
                    et.gentity_set(r,"ps.ammo",i,999)
                end
            end
        end
        end
    else
        panzers = tonumber(et.trap_Cvar_Get("team_maxpanzers"))
        medics = tonumber(et.trap_Cvar_Get("team_maxmedics"))
        cvops = tonumber(et.trap_Cvar_Get("team_maxcovertops"))
        fops = tonumber(et.trap_Cvar_Get("team_maxfieldops"))
        engie = tonumber(et.trap_Cvar_Get("team_maxengineers"))
        flamers = tonumber(et.trap_Cvar_Get("team_maxflamers"))
        mortars = tonumber(et.trap_Cvar_Get("team_maxmortars"))
        mg42s = tonumber(et.trap_Cvar_Get("team_maxmg42s"))
        soldcharge = tonumber(et.trap_Cvar_Get("g_soldierchargetime"))
        speed = tonumber(et.trap_Cvar_Get("g_speed"))
    end

    if crazygravity then
        CGactive = 1
        crazygravity_gravity = math.random(10, 1200)


        if crazydv == 1 then
            crazytime = mtime + (k_crazygravityinterval*1000)
            crazydv = 0
        end



        if (crazytime-mtime)/1000 == 0 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3Crazygravity: ^7The gravity has been changed to ^1" .. crazygravity_gravity .. "^7!\n" )
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "g_gravity " .. crazygravity_gravity .. "\n" )
            crazydv = 1
        elseif (crazytime-mtime)/1000 == 5 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3Crazygravity: ^7The gravity will be changed in ^15^7 seconds!\n" )
        end
    end

    local ftime = ((mtime-initTime)/1000)

    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        PlayerName[i] = et.gentity_get(i,"pers.netname")
        if not PlayerName[i] then
            PlayerName[i] = ""
        end
        if et.gentity_get(i,"pers.connected") ~= 2 then
            PlayerName[i] = ""
        end
    end

    if Gamestate == 3 then
        if k_lastblood == 1 then
            if antiloop == 0 then
                if lastblood then
                    local str = string.gsub(k_lb_message, "#killer#", lastblood)

                    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..lb_location.." "..str.."\n" )
                end
                if k_spreerecord == 1 then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^" .. k_color .. "" .. tostring(intmrecord) .. "\n" )
                end
            antiloop = 1
            end
        end
        if k_endroundshuffle == 1 then
            if antiloopes == 0 then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref shuffleteamsxp_norestart\n" )
                antiloopes = 1
            end
        end
        if panzdv == 1 or snipdv == 1 then
            if antilooppw == 0 then
                for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                    if et.gentity_get(p,"sess.sessionTeam") == 1 or et.gentity_get(p,"sess.sessionTeam") == 2 then
                            et.gentity_set(p,"sess.latchPlayerType",originalclass[p])
                            et.gentity_set(p,"sess.latchPlayerWeapon",originalweap[p])
                    end
                end
                antilooppw = 1
            end
        end
    end

    if k_advancedpms == 1 then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "b_privatemessages 0\n" )
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "b_privatemessages 2\n" )
    end

    if k_sprees == 0 then
        if antiloop2 == 0 then
            killingspreereset()
        end
        antiloop2 = 1
    elseif k_sprees == 1 then
        antiloop2 = 0
    end

    if k_deathsprees == 0 then
        if antiloop3 == 0 then
            dspreereset()
        end
        antiloop3 = 1
    elseif k_deathsprees == 1 then
        antiloop3 = 0
    end

    if k_flakmonkey == 0 then
        if antiloop4 == 0 then
            flakreset()
        end
        antiloop4 = 1
    elseif k_flakmonkey == 1 then
        antiloop4 = 0
    end

    if floodprotect == 1 then
        fpPtime = (mtime-fpProt)/1000
        if fpPtime >= 2 then
            floodprotect = 0
        end
    end

    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        if et.gentity_get(i,"pers.connected") == 2 then
            if PlayerName[i] ~= Bname[i] then
                log_chat( Bname[i], "NAME_CHANGE", PlayerName[i] )
                Bname[i] = PlayerName[i]
            end
        end
    end

    if k_advancedadrenaline == 1 then
    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        local adrentlimit = 10
        local adrensound = "sound/misc/regen.wav"
        if pausedv == 1 then
            adrendummy[i] = 1
        end

        if adrendummy[i] == 1 and tonumber(et.gentity_get(i,"ps.powerups", 12)) == 0 then
            adrendummy[i] = 0
        end
    
        if adrendummy[i] == 0 then
            if tonumber(et.gentity_get(i,"ps.powerups", 12)) > 0 then
    
                adrnum[i] = tonumber(et.gentity_get(i,"ps.powerups", 12))
                soundindex = et.G_SoundIndex(adrensound)
                local name = et.gentity_get(i,"pers.netname")
                if antiloopadr1[i] == 0 then
                    adrtime[i] = mtime
                    if k_adrensound == 1 then
                        et.G_Sound( i,  soundindex)
                    end
                    antiloopadr1[i] = 1
                end
                if antiloopadr2[i] == 0 then
                    adrtime2[i] = mtime
                    adrnum2[i] = tonumber(et.gentity_get(i,"ps.powerups", 12))
                    antiloopadr2[i] = 1
                end
                adrenaline[i] = 1
                local tottime = math.floor((((mtime - adrtime[i])/1000)+0.05))
                local tottime2 = math.floor((((mtime - adrtime2[i])/1000)+0.05))

                if tottime >= 1 then
                    antiloopadr1[i] = 0
                end
                if adrnum[i] ~= adrnum2[i] then
                    adrnum2[i] = tonumber(et.gentity_get(i,"ps.powerups", 12))
                    if k_adrensound == 1 then
                        et.G_Sound( i,  soundindex)
                    end
                    adrtime[i] = mtime
                    adrtime2[i] = mtime
                end
                local atime = (adrentlimit - tottime2)

                et.trap_SendServerCommand(i, string.format("cp \"^3Adrenaline ^1".. atime .."\n\""))
            else
                adrenaline[i] = 0
                antiloopadr1[i] = 0
                antiloopadr2[i] = 0
                adrnum[i] = 0
                adrnum2[i] = 0
            end
        end
    end
    end


--[[
    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
--        if muted[i] > 0 then
--            et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3"..mtime.."\n" )
--        end

--        if muted[i] > mtime then
--            if antiloopm == 0 then
--                et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3CurseFilter: ^7Countdown initated\n" )
--                antiloopm = 1
--            end
--        end
        if muted[i] ~= 0 then
            if mtime > muted[i] then
                local cs = et.trap_GetConfigstring(et.CS_PLAYERS + i)
                local mute = et.Info_ValueForKey(cs, "mu")
                if mute == 1 then
                    local name = et.gentity_get(i,"pers.netname")
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref unmute "..i.."\n" )
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3CurseFilter: ^7"..name.." has been unmuted.  Please watch your language!\n" )
                end
                muted[i] = 0
            end
        end
    end
--]]

    if k_disablevotes == 1 then
        local timelimit = tonumber(et.trap_Cvar_Get("timelimit"))
        if k_dvmode == 1 then
            local cancel_time = ( timelimit - k_dvtime )
            if timecounter >= (cancel_time * 60) then
                if votedis == 0 then
                    votedis = 1
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay XP-Shuffle / Map Restart / Swap Teams  / Match Reset and New Campaign votings are now DISABLED\n")
                end
            else
                if votedis == 1 then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay XP-Shuffle / Map Restart / Swap Teams  / Match Reset and New Campaign votings have been reenabled due to timelimit change\n")
                end
                votedis = 0
            end
        elseif k_dvmode == 3 then
            if timecounter >= (k_dvtime * 60) then
                if votedis == 0 then
                    votedis = 1
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay XP-Shuffle / Map Restart / Swap Teams  / Match Reset and New Campaign votings are now DISABLED\n")
                end
            else
                if votedis == 1 then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay XP-Shuffle / Map Restart / Swap Teams  / Match Reset and New Campaign votings have been reenabled due to timelimit change\n")
                end
                votedis = 0
            end
        else
            local cancel_percent = ( timelimit * ( k_dvtime / 100 ) )
            if timecounter >= (cancel_percent * 60) then
                if votedis == 0 then
                    votedis = 1
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay XP-Shuffle / Map Restart / Swap Teams  / Match Reset and New Campaign votings are now DISABLED\n")
                end
            else
                if votedis == 1 then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay XP-Shuffle / Map Restart / Swap Teams  / Match Reset and New Campaign votings have been reenabled due to timelimit change\n")
                end
                votedis = 0
            end
        end
    end
        

end

function et_Print( text )
    local t = ParseString(text)

    if t[1] == "saneClientCommand:" and t[3] == "callvote" then
        local caller = tonumber(t[2])
        local vote = t[4]
        local target = tonumber(t[5])

        if vote == "kick" or vote == "mute" then
            if AdminUserLevel(caller) < AdminUserLevel(target) then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "cancelvote; qsay Admins cannot be vote kicked or vote muted!\n")
            end
        end
    end

    if t[1] == "Medic_Revive:" then
        local reviver = tonumber(t[2])
        teamkillr[reviver] = teamkillr[reviver] + 1
        if teamkillr[reviver] > k_tklimit_high then
            teamkillr[reviver] = k_tklimit_high
        end
    end
end

function ParseString(inputString)
    local i = 1
    local t = {}
    for w in string.gfind(inputString, "([^%s]+)%s*") do
        t[i]=w
        i=i+1
    end
    return t
end

function et_ShutdownGame ( restart )
    if panzdv == 1 then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; g_speed " .. speed .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
    elseif frenzdv == 1 then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
    elseif grendv == 1 then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
    elseif snipdv == 1 then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
    end

    if panzdv == 1 then
        for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
            if et.gentity_get(p,"sess.sessionTeam") == 1 or et.gentity_get(p,"sess.sessionTeam") == 2 then
                    et.gentity_set(p,"sess.latchPlayerType",originalclass[p])
                    et.gentity_set(p,"sess.latchPlayerWeapon",originalweap[p])
            end
        end
    end

    if k_logchat == 1 then
        log_chat( "DV", "START", "DV" )
    end
end

function panzerwar_reset()
    et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; g_speed " .. speed .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
end

function frenzy_reset()
    et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
end

function grenadewar_reset()
    et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
end

function sniperwar_reset()
    et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics " .. medics .. "; team_maxcovertops " .. cvops .. "; team_maxfieldops " .. fops .. "; team_maxengineers " .. engie .. "; team_maxflamers " .. flamers .. "; team_maxmortars " .. mortars .. "; team_maxmg42s " .. mg42s .. "; team_maxpanzers " .. panzers .. "; forcecvar g_soldierchargetime " .. soldcharge .. "\n" )
end

function et_ClientSpawn(clientNum,revived)
    if panzdv == 1 then
        local doublehealth = tonumber(et.gentity_get(clientNum,"health"))*2
        if et.gentity_get(clientNum,"sess.sessionTeam") >= 1 and et.gentity_get(clientNum,"sess.sessionTeam") < 3 then
            et.gentity_set(clientNum,"health", doublehealth)
        end
    end

    if revived == 0 then
        if et.gentity_get(clientNum,"sess.sessionTeam") >= 1 and et.gentity_get(clientNum,"sess.sessionTeam") < 3 then
            clientrespawn[clientNum] = 1
        end
    end
end

function killingspreereset()
    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        local name = et.gentity_get(i,"pers.netname")
        if killingspree[i] >= 5 then
--            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." ^7" ..name.. "^1's Killing spree was ended! Sprees Disabled!\n" )
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^1Killingspree's disabled.  All sprees reset.\n" )
        end

        killingspree[i] = 0
    end
end

function dspreereset()
    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        deathspree[i] = 0
    end
end

function flakreset()
    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        flakmonkey[i] = 0
    end
end

function floodprotector()
    floodprotect = 1
    fpProt = tonumber(mtime)
end

function et_InitGame( levelTime, randomSeed, restart )
    initTime = levelTime
    loadAdmins()
    loadspreerecord()
    loadcommands()

    local currentver = et.trap_Cvar_Get("mod_version")
    et.RegisterModname( "KMOD version " .. KMODversion .. " " .. et.FindSelf() )
    et.trap_SendConsoleCommand(et.EXEC_APPEND, "forcecvar mod_version \"" .. currentver .. " - KMOD" .. KMODversion2 .. "\"" .. "\n" )

    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        killingspree[i] = 0
        flakmonkey[i] = 0
        deathspree[i] = 0
        multikill[i] = 0
        muted[i] = 0
        antiloopadr1[i] = 0
        antiloopadr2[i] = 0
        adrenaline[i] = 0
        adrnum[i] = 0
        adrnum2[i] = 0
        adrtime[i] = 0
        adrtime2[i] = 0
        adrendummy[i] = 0
        clientrespawn[i] = 0
        invincDummy[i] = 0
        switchteam[i] = 0

        playerwhokilled[i] = 1022
        killedwithweapk[i] = ""
        killedwithweapv[i] = ""
        playerlastkilled[i] = 1022
        selfkills[i] = 0
        teamkillr[i] = 0
        khp[i] = 0
        AdminName[i] = ""
        originalclass[i] = ""
        originalweap[i] = ""

        killr[i] = 0
    end

    et.G_Print( "KMOD version " .. KMODversion .. " has been initialized...\n" )
end

function et_ClientDisconnect( clientNum)
        killingspree[clientNum] = 0
        flakmonkey[clientNum] = 0
        deathspree[clientNum] = 0
        multikill[clientNum] = 0
        muted[clientNum] = 0
        antiloopadr1[clientNum] = 0
        antiloopadr2[clientNum] = 0
        adrenaline[clientNum] = 0
        adrnum[clientNum] = 0
        adrnum2[clientNum] = 0
        adrtime[clientNum] = 0
        adrtime2[clientNum] = 0
        adrendummy[clientNum] = 0
        clientrespawn[clientNum] = 0
        invincDummy[clientNum] = 0
        switchteam[clientNum] = 0

        playerwhokilled[clientNum] = 1022
        killedwithweapk[clientNum] = ""
        killedwithweapv[clientNum] = ""
        playerlastkilled[clientNum] = 1022
        selfkills[clientNum] = 0
        teamkillr[clientNum] = 0
        khp[clientNum] = 0
        AdminName[clientNum] = ""
        originalclass[clientNum] = ""
        originalweap[clientNum] = ""

        killr[clientNum] = 0

    kill1[clientNum] = ""
    kill2[clientNum] = ""
    kill3[clientNum] = ""
    kill4[clientNum] = ""
    kill5[clientNum] = ""
    kill6[clientNum] = ""

    PlayerName[clientNum] = ""

    if k_logchat == 1 then
        log_chat(clientNum, "DISCONNECT", "DV2")
    end
end

function spreerecord(PlayerID, kills2)
    local fdadm,len = et.trap_FS_FOpenFile( "spree_record.dat", et.FS_WRITE )
    local Name = et.Q_CleanStr(et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "name" ))
    local date = os.date("%x %I:%M:%S%p")
    local kills = tonumber(kills2)

    SPREE = kills .. "@" .. date .. "@" .. Name

    et.trap_FS_Write( SPREE, string.len(SPREE) ,fdadm )
    et.trap_FS_FCloseFile( fdadm )
    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^1New spree record: ^7" ..Name.. " ^7with^3 " ..kills.. "^7 kills  ^7" ..tostring(oldspree).. "\n" )
    loadspreerecord()
end

function spreerecord_reset()
    local fdadm,len = et.trap_FS_FOpenFile( "spree_record.dat", et.FS_WRITE )

    SPREE = ""

    et.trap_FS_Write( SPREE, string.len(SPREE) ,fdadm )
    et.trap_FS_FCloseFile( fdadm )
    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3Spree record: ^7Spree record has been reset!\n" )
    loadspreerecord()
end

function loadspreerecord()
    local fd,len = et.trap_FS_FOpenFile( "spree_record.dat", et.FS_READ )
    local kills = 0
    local date = ""
    local name = ""

    if len <= 0 then
        et.G_Print("WARNING: No spree record found! \n")
        oldspree = "^3[Old: ^7N/A^3]"
        oldspree2 = "^3Spree Record: ^7There is no current spree record"
        spreerecordkills = 0
    else
        local filestr = et.trap_FS_Read( fd, len )

        s,e,kills,date,name = string.find(filestr, "(%d+)%@(%d+%/%d+%/%d+%s%d+%:%d+%:%d+%a+)%@([^%\n]*)")
        
        spreerecordkills = tonumber(kills)
        oldspree = "^3[Old: ^7" ..name.. "^3 " .. kills .. "^7 @ " ..date.. "^3]"
        oldspree2 = "^3Spree Record: ^7" ..name.. "^7 with ^3" .. kills .. "^7 kills at " ..date
        intmrecord = "Current spree record: ^7" ..name.. "^7 with ^3" .. kills .. "^7 kills at " ..date

    end

    et.trap_FS_FCloseFile( fd )
end

function et_ConsoleCommand()
        if string.lower(et.trap_Argv(0)) == k_commandprefix.."setlevel" then  
            if (et.trap_Argc() < 2) then
                et.G_Print("Setlevel is used to set admin status to a player.\n")
                et.G_Print("useage: !setlevel \[name/PID\] \[level 0-3\]\n")
            return 1
            end
            commandSaid = false
            sldv = 1
            setlevel(et.trap_Argv(1), 0)
            sldv = 0
            setlevel(et.trap_Argv(1), et.trap_Argv(2))
        return 1
        elseif string.lower(et.trap_Argv(0)) == k_commandprefix.."showadmins" then  
            showAdmins()
        return 1
        elseif string.lower(et.trap_Argv(0)) == k_commandprefix.."gib" then  
            if (et.trap_Argc() < 2) then
                et.G_Print("Gib is used to instantly kill a player\n")
                et.G_Print("useage: gib \[name/PID\]\n")
            return 1
            end
            Gib(et.trap_Argv(1))
        return 1
        elseif string.lower(et.trap_Argv(0)) == k_commandprefix.."slap" then
            if (et.trap_Argc() < 2) then
                et.G_Print("Slap is used to slap a player\n")
                et.G_Print("useage: slap \[name/PID\]\n")
            return 1
            end  
            burn(et.trap_Argv(1)) -- the command was originally !burn
        return 1
        elseif string.lower(et.trap_Argv(0)) == "k_commandprefix" then
            et.G_Print("Unknown command in line k_commandprefix\n")
        return 1
        elseif string.lower(et.trap_Argv(0)) == "m2" then  -- used when advancedpms is enabled
            if k_advancedpms == 1 then
                if (et.trap_Argc() < 2) then
                    et.G_Print("Useage:  /m \[pname/ID\] \[message\]\n")
                    return 1
                else
                    private_message(1022, et.trap_Argv(1), et.ConcatArgs(2))
                end

                if k_logchat == 1 then
                    log_chat( 1022, "PMESSAGE", et.ConcatArgs(2), et.trap_Argv(1) )
                end
            end
        return 1
        elseif string.lower(et.trap_Argv(0)) == "m" or string.lower(et.trap_Argv(0)) == "pm" or string.lower(et.trap_Argv(0)) == "msg" then
            if k_advancedpms == 0 then
                if k_logchat == 1 then
                    log_chat( 1022, "PMESSAGE", et.ConcatArgs(2),  et.trap_Argv(1) )
                end
            end
        return 1
        elseif string.lower(et.trap_Argv(0)) == "ma" or string.lower(et.trap_Argv(0)) == "pma" then
                for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
                    if AdminUserLevel(i) >= 2 then
                        et.trap_SendServerCommand(i, ("b 8 \"^dPm to admins from ^1SERVER^d --> ^3" .. et.ConcatArgs(1) .. "^7"))
                        et.G_ClientSound(i, pmsound)
                    end
                end
                if k_logchat == 1 then
                    log_chat( 1022, "PMADMINS", et.ConcatArgs(1))
                end
                et.G_Print("Private message sent to admins\n")
                return 1
        elseif string.lower(et.trap_Argv(0)) == "ref" and string.lower(et.trap_Argv(1)) == "pause" and pausedv == 0 then
            GAMEPAUSED = 1
            dummypause = mtime
            return 0
        elseif string.lower(et.trap_Argv(0)) == "ref" and string.lower(et.trap_Argv(1)) == "unpause" and pausedv == 1 then
            GAMEPAUSED = 0
            return 0
        else
              return 0
          end
end

function setlevel(client, level2)
   local clientnum = tonumber(client)
   local level = tonumber(level2)
   if clientnum then
      if (clientnum >= 0) and (clientnum < 64) then
         if et.gentity_get(clientnum,"pers.connected") ~= 2 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^Setlevel: ^7There is no client associated with this slot number\n" )
            commandSaid = false
        else
                et.G_Print("There is no client associated with this slot number\n")
        end
         return
         end

      else              
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel: ^7Please enter a slot number between 0 and 63\n" )
            commandSaid = false
        else
                 et.G_Print("Please enter a slot number between 0 and 63\n")
        end
      return
      end
   else
      if client then
       s,e=string.find(client, client)
       if e <= 2 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel: ^7Player name requires more than 2 characters\n" )
            commandSaid = false
        else
            et.G_Print("Player name requires more than 2 characters\n")
        end
       return
       else
             clientnum = getsetlvlidfname(client)
       end
      end
         if not clientnum then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel: ^7Try name again or use slot number\n" )
            commandSaid = false
        else
                 et.G_Print("Try name again or use slot number\n")
        end
         return
         end
   end
   if level < 0 or level > 3 then
    if commandSaid then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel: ^7Admin level does not exist! \[0-3\]\n" )
        commandSaid = false
    else
            et.G_Print("Admin level does not exist! \[0-3\]\n")
    end
   return
   end

    setAdmin(clientnum, level)

end

function getsetlvlidfname(name)
   local i = 0
   local slot = nil
   local matchcount = 0
   local cleanname = string.lower(et.Q_CleanStr( name ))
   local playerp = ""
   for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
    if PlayerName[i] then
       playerp = string.lower(et.Q_CleanStr( PlayerName[i] ))
       s,e=string.find(playerp, cleanname)
        if s and e then
        matchcount = matchcount + 1
            slot = i
          end
      end
   end
   if matchcount >= 2 then
    if commandSaid then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7There are currently ^1" .. matchcount .. "^7 client\[s\] that match \"" ..name.. "\"\n" )
        commandSaid = false
    else
              et.G_Print("There are currently ^1" .. matchcount .. "^7 client\[s\] that match \"" ..name.. "\"\n")
    end
    return nil
   else
    return slot
   end
end

function setAdmin(PlayerID, levelv)
    local level = tonumber(levelv)
    local fdadm,len = et.trap_FS_FOpenFile( "shrubbot.cfg", et.FS_APPEND )
    local Name = et.Q_CleanStr(et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "name" ))
    local GUID = string.upper(et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "cl_guid" ))
    local dv = 0
    local dvi = 0

    if len == -1 then
        confirm = 1
    else
        for i=0, 64, 1 do
            if chkGUID[i] == GUID then
                et.trap_FS_FCloseFile( fdadm )
                dv = 1

                if dv == 1 then
                    adminchange(PlayerID, level)
                end
                break
            end
                dvi = i
        end
        if dvi == 64 then
            confirm = 1
        end
    end
if confirm == 1 then
    if level == 0 then
        if sldv == 0 then
            if commandSaid then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel: ^7" .. Name .. "^7 is now a regular ^7user!\n" )
                  commandSaid = false
            else
                et.G_Print( Name .. "^7 is now a regular ^7user!\n" )
                confirm = 0
            end
        end
        loadAdmins()
        return
    elseif level == 1 then
        AdminLV0[GUID] = true
        AdminLV1[GUID] = true
        ADMIN = level .. " - " .. GUID .. " - " .. Name .. "\n"
        confirm = 0
    elseif level == 2 then
        AdminLV0[GUID] = true
        AdminLV1[GUID] = true
        AdminLV2[GUID] = true
        ADMIN = level .. " - " .. GUID .. " - " .. Name .. "\n"
        confirm = 0
    elseif level == 3 then
        AdminLV0[GUID] = true
        AdminLV1[GUID] = true
        AdminLV2[GUID] = true
        AdminLV3[GUID] = true
        ADMIN = level .. " - " .. GUID .. " - " .. Name .. "\n"
        confirm = 0
    end
    et.trap_FS_Write( ADMIN, string.len(ADMIN) ,fdadm )
    et.trap_FS_FCloseFile( fdadm )
    if commandSaid then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel: ^7" .. Name .. "^7 is now a level ^1" .. level .. " ^7user!\n" )
          commandSaid = false
    else
        et.G_Print( Name .. "^7 is now a level ^1" .. level .. " ^7user!\n" )
    end
    loadAdmins()
    return 1
else
    et.trap_FS_FCloseFile( fdadm )
    return 1
end
end

function addAdmin(GUID)
    s,e,level,GUID = string.find(GUID, "(%d)%s%-%s(%x+)")
    level=tonumber(level)
    if level == 1 then
        AdminLV1[GUID] = true
    elseif level == 2 then
        AdminLV1[GUID] = true
        AdminLV2[GUID] = true
    elseif level == 3 then
        AdminLV1[GUID] = true
        AdminLV2[GUID] = true
        AdminLV3[GUID] = true
    end
end

function adminStatus(PlayerID)
    local IP   = et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "ip" )
    local GUID = string.upper(et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "cl_guid" ))
    if finger then
        local name = et.gentity_get(PlayerID,"pers.netname")
        if ( AdminLV3[GUID] ) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Finger: ^7" .. name .. " ^7is an admin \[lvl 3\]\n" )
        elseif ( AdminLV2[GUID] ) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Finger: ^7" .. name .. " ^7is an admin \[lvl 2\]\n" )
        elseif ( AdminLV1[GUID] ) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Finger: ^7" .. name .. " ^7is an admin \[lvl 1\]\n" )
        else
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Finger: ^7" .. name .. " ^7is a guest \[lvl 0\]\n" )
        end
        finger = false
        commandSaid = false
    else
        if ( AdminLV3[GUID] ) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Admintest: ^7You are an admin \[lvl 3\]\n" )
        elseif ( AdminLV2[GUID] ) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Admintest: ^7You are an admin \[lvl 2\]\n" )
        elseif ( AdminLV1[GUID] ) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Admintest: ^7You are an admin \[lvl 1\]\n" )
        else
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Admintest: ^7You are a guest \[lvl 0\]\n" )
        end
    end
end

function adminchange(PlayerID, level)
    local fdin,lenin = et.trap_FS_FOpenFile( "shrubbot.cfg", et.FS_READ )
    local fdout,lenout = et.trap_FS_FOpenFile( "shrubbottmp.cfg", et.FS_WRITE )
    local GUID2 = string.upper(et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "cl_guid" ))
    local i = 0
    local IPRemove = ""
    local fname = ""
    local dv = 1
    if lenin == -1 then
        et.G_Print("There is no Power User IP to remove \n")
    else
        local filestr = et.trap_FS_Read( fdin, lenin )
        for lvl,guid,name in string.gfind(filestr, "(%d)%s%-%s(%x+)%s%-%s*([^%\n]*)") do
            if (guid==GUID2) then
                guid = string.upper(guid)
                fname = name
                AdminLV0[GUID2] = false
                AdminLV1[GUID2] = false
                AdminLV2[GUID2] = false
                AdminLV3[GUID2] = false
            else
                guid = lvl .. " - " .. guid .. " - " .. name .. "\n"
                et.trap_FS_Write( guid, string.len(guid) ,fdout )
            end
            i=i+1

        end
    end
    confirm = 1
    et.trap_FS_FCloseFile( fdin )
    et.trap_FS_FCloseFile( fdout )
    et.trap_FS_Rename( "shrubbottmp.cfg", "shrubbot.cfg" )
    if dv == 1 then
        loadAdmins()
    end
end

function AdminUserLevel(PlayerID)
    local guid = ""
    if(PlayerID~=-1) then
        guid = et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "cl_guid" )
    else
        guid=-1
    end
    if ( AdminLV3[guid] ) then
        return 3
    elseif ( AdminLV2[guid] ) then
        return 2
    elseif ( AdminLV1[guid] ) then
        return 1
    end
    return 0
end

function showAdmins()
    local fd,len = et.trap_FS_FOpenFile( "shrubbot.cfg", et.FS_READ )
    if len <= 0 then
        et.G_Print("WARNING: No Admins's Defined! \n")
    else
        local filestr = et.trap_FS_Read( fd, len )

        for level,guid,Name in string.gfind(filestr, "(%d)%s%-%s(%x+)%s%-%s*([^%\n]*)") do
            -- upcase for exact matches
            GUID = string.upper(guid)
            et.G_Print( "Name  = " ..Name.. "\nLevel = " ..level.. "\n\n")
        end
    end
    et.trap_FS_FCloseFile( fd )
end

function loadAdmins()
    local i = 0
    local i2 = 0
    local dv = 1
    local dv2 = 1
    local fd,len = et.trap_FS_FOpenFile( "shrubbot.cfg", et.FS_READ )

    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        chkGUID[i] = 0
        AdminName[i] = ""
    end
    if len <= 0 then
        et.G_Print("WARNING: No Admins's Defined! \n")
    else
        local filestr = et.trap_FS_Read( fd, len )
        local i = 0

        for guid in string.gfind(filestr, "%d%s%-%s(%x+)%s%-%s*") do
            -- upcase for exact matches
            chkGUID[i] = string.upper(guid)
            if dv == 1 then
                i=i+1
            end
        end
        for guid2 in string.gfind(filestr, "(%d%s%-%s%x+)%s%-%s*") do
            -- upcase for exact matches
            guid2 = string.upper(guid2)
            addAdmin(guid2)
        end

        for guid3,Name in string.gfind(filestr, "%d%s%-%s(%x+)%s%-%s*([^%\n]*)") do
            AdminName[guid3] = Name
        end
    end
    et.trap_FS_FCloseFile( fd )
end

function burn(client)
   local clientnum = tonumber(client)
   if clientnum then
      if (clientnum >= 0) and (clientnum < 64) then
         if et.gentity_get(clientnum,"pers.connected") ~= 2 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7There is no client associated with this slot number\n" )
            commandSaid = false
        else
                et.G_Print("There is no client associated with this slot number\n")
        end
         return
         end
         if et.gentity_get(clientnum,"sess.sessionTeam") >= 3 or et.gentity_get(clientnum,"sess.sessionTeam") < 1 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7Client is not activly playing\n" )
            commandSaid = false
        else
                et.G_Print("Client is not activly playing\n")
        end
         return
         end
       if et.gentity_get(clientnum,"health") <= 0 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7Client is currently dead\n" )
            commandSaid = false
        else
                  et.G_Print("Client is currently dead\n")
        end
       return
       end
      else              
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7Please enter a slot number between 0 and 63\n" )
            commandSaid = false
        else
                 et.G_Print("Please enter a slot number between 0 and 63\n")
        end
      return
      end
   else
      if client then
       s,e=string.find(client, client)
       if e <= 2 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7Player name requires more than 2 characters\n" )
            commandSaid = false
        else
            et.G_Print("Player name requires more than 2 characters\n")
        end
       return
       else
             clientnum = getPlayernameToIdburn(client)
       end
      end
         if not clientnum then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7Try name again or use slot number\n" )
            commandSaid = false
        else
                 et.G_Print("Try name again or use slot number\n")
        end
         return
         end
   end
         if et.gentity_get(clientnum,"sess.sessionTeam") >= 3 or et.gentity_get(clientnum,"sess.sessionTeam") < 1 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7Client is not activly playing\n" )
            commandSaid = false
        else
                et.G_Print("Client is not activly playing\n")
        end
         return
         end
       if et.gentity_get(clientnum,"health") <= 0 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap: ^7Client is currently dead\n" )
            commandSaid = false
        else
                  et.G_Print("Client is currently dead\n")
        end
       return
       end
        et.gentity_set(clientnum,"health",(et.gentity_get(clientnum,"health")-5))
        local    slapsound = "sound/player/hurt_barbwire.wav"
        soundindex = et.G_SoundIndex(slapsound)
        et.G_Sound( clientnum,  soundindex)

       et.trap_SendServerCommand(-1, ("b 16 \"^7" .. et.gentity_get(clientnum,"pers.netname") .. " ^7was Slapped^7"))
end

function getPlayernameToIdburn(name)
   local i = 0
   local slot = nil
   local matchcount = 0
   local cleanname = string.lower(et.Q_CleanStr( name ))
   local playerp = ""
   for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
    if PlayerName[i] then
       playerp = string.lower(et.Q_CleanStr( PlayerName[i] ))
       s,e=string.find(playerp, cleanname)
              if s and e then
            matchcount = matchcount + 1
                slot = i
             end
      end
   end
   if matchcount >= 2 then
    return nil
   else
    return slot
   end
end

function Gib(client)
   local clientnum = tonumber(client)
   if clientnum then
      if (clientnum >= 0) and (clientnum < 64) then
         if et.gentity_get(clientnum,"pers.connected") ~= 2 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7There is no client associated with this slot number\n" )
            commandSaid = false
        else
                et.G_Print("There is no client associated with this slot number\n")
        end
         return
         end
         if et.gentity_get(clientnum,"sess.sessionTeam") >= 3 or et.gentity_get(clientnum,"sess.sessionTeam") < 1 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7Client is not activly playing\n" )
            commandSaid = false
        else
                et.G_Print("Client is not activly playing\n")
        end
         return
         end
       if et.gentity_get(clientnum,"health") <= 0 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7Client is currently dead\n" )
            commandSaid = false
        else
                  et.G_Print("Client is currently dead\n")
        end
       return
       end
      else              
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7Please enter a slot number between 0 and 63\n" )
            commandSaid = false
        else
                 et.G_Print("Please enter a slot number between 0 and 63\n")
        end
      return
      end
   else
      if client then
       s,e=string.find(client, client)
       if e <= 2 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7Player name requires more than 2 characters\n" )
            commandSaid = false
        else
            et.G_Print("Player name requires more than 2 characters\n")
        end
       return
       else
             clientnum = getPlayernameToId(client)
       end
      end
         if not clientnum then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7Try name again or use slot number\n" )
            commandSaid = false
        else
                 et.G_Print("Try name again or use slot number\n")
        end
         return
         end
   end
         if et.gentity_get(clientnum,"sess.sessionTeam") >= 3 or et.gentity_get(clientnum,"sess.sessionTeam") < 1 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7Client is not activly playing\n" )
            commandSaid = false
        else
                et.G_Print("Client is not activly playing\n")
        end
         return
         end
       if et.gentity_get(clientnum,"health") <= 0 then
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib: ^7Client is currently dead\n" )
            commandSaid = false
        else
                  et.G_Print("Client is currently dead\n")
        end
       return
       end
       et.G_Damage(clientnum, clientnum, 1022, 400, 24, 0)

       et.trap_SendServerCommand(-1, ("b 16 \"^7" .. et.gentity_get(clientnum,"pers.netname") .. " ^7was Gibbed^7"))
end

function getPlayernameToId(name)
   local i = 0
   local slot = nil
   local matchcount = 0
   local cleanname = string.lower(et.Q_CleanStr( name ))
   local playerp = ""
   for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
    if PlayerName[i] then
       playerp = string.lower(et.Q_CleanStr( PlayerName[i] ))
       s,e=string.find(playerp, cleanname)
              if s and e then
            matchcount = matchcount + 1
                slot = i
             end
      end
   end
   if matchcount >= 2 then
    return nil
   else
    return slot
   end
end

function spec999()
    local matches = 0
    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        local team = tonumber(et.gentity_get(i,"sess.sessionTeam"))
        local ping = tonumber(et.gentity_get(i,"ps.ping"))
        if team ~= 3 and team ~= 0 then
            if ping >= 999 then
                matches = matches + 1
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref remove " .. i .. "\n" )
            end
        end
    end
    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Spec999: ^7Moving ^1" ..matches.. " ^7players to spectator\n" )
end

function et_ClientBegin( clientNum )
    local name=et.Info_ValueForKey( et.trap_GetUserinfo( clientNum ), "name" )

    ModInfo(clientNum)
    loadAdmins()
    AdminUserLevel(clientNum)

    teamkillr[clientNum] = 0
    selfkills[clientNum] = 0
    muted[clientNum] = 0

    Bname[clientNum] = name

    if k_logchat == 1 then
        log_chat(clientNum, "CONN", "DV")
    end
end

function ModInfo(PlayerID)
    et.trap_SendServerCommand( PlayerID,"cpm \"This server is running the new KMOD version " .. KMODversion .. "\n\"")
    et.trap_SendServerCommand( PlayerID,"cpm \"Created by Clutch152.\n\"")
end

function advPlayers(PlayerID)
    et.trap_SendServerCommand(PlayerID, string.format("print \"^3 ID ^1: ^3Player                     Rate  Snaps\n"))
    et.trap_SendServerCommand(PlayerID, string.format("print \"^1--------------------------------------------\n"))
    local team = { "^1X" , "^4L" , " " }
    local playercount = 0
    local spa = 24

    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        local teamnumber = tonumber(et.gentity_get(i,"sess.sessionTeam"))
        local cname = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "name" )
        local rate = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "rate" )
        local snaps = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "snaps" )
        local name = string.lower(et.Q_CleanStr( cname ))
        local namel = tonumber(string.len(name))-1
        local namespa = spa - namel
        local space = string.rep( " ", namespa)
        local ref = tonumber(et.gentity_get(PlayerID,"sess.referee"))
        if ref == 0 then
            ref = ""
        else
            ref = "^3REF"
        end

        if et.gentity_get(i,"pers.connected") ~= 2 then
        else
            et.trap_SendServerCommand(PlayerID, string.format('print "%s^7%2s ^1:^7 %s%s %5s  %5s %s\n"',team[teamnumber], i, name, space, rate, snaps, ref))
            playercount = playercount + 1
        end
    end

        et.trap_SendServerCommand(PlayerID, string.format("print \"\n^3 " ..playercount.. " ^7total players\n"))
end

function admins(PlayerID)
    et.trap_SendServerCommand(PlayerID, string.format("print \"^3 ID ^1:^3 Player                   ^1: ^3 Level ^1 : ^3 AdminName\n"))
    et.trap_SendServerCommand(PlayerID, string.format("print \"^1----------------------------------------------------------------\n"))
    local team = { "^1X" , "^4L" , " " }
    local playercount = 0
    local spa = 23
    local adname = ""

    for i=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
        guis = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "cl_guid" )
        GUID = string.upper( guis )
        local teamnumber = tonumber(et.gentity_get(i,"sess.sessionTeam"))
        local cname = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "name" )
        local nudge = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "cl_timenudge" )
        local pitch = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "m_pitch" )
        local name = string.lower(et.Q_CleanStr( cname ))
        local namel = tonumber(string.len(name))-1
        local namespa = spa - namel
        local space = string.rep( " ", namespa)
        local fps = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "com_maxfps" )
        local sens = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "sensitivity" )
        local fov = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "cg_fov" )
        local pmove = et.Info_ValueForKey( et.trap_GetUserinfo( i ), "pmove_fixed" )
        local level = AdminUserLevel(i)

        adname = AdminName[GUID]

        if AdminUserLevel(i) == nil or AdminUserLevel(i) == " " or AdminUserLevel(i) < 1 then
        else
            if et.gentity_get(i,"pers.connected") ~= 2 then
            else
            et.trap_SendServerCommand(PlayerID, string.format('print "%s^7%2s ^1:^7 %s%s ^1:  %5s  ^1:^7  ^7%s\n"',team[teamnumber], i, name, space, level, adname))
            playercount = playercount + 1

--string.format('print "%2d : %6s : %s\n"',i, team, et.gentity_get(i,'pers.netname')))
            end

        end
    end

        et.trap_SendServerCommand(PlayerID, string.format("print \"\n^3 " ..playercount.. " ^7total admins\n"))
return 1
end

function private_message(PlayerID,client,message)
   local clientnum = ""
   local clientnum = tonumber(client)
   if clientnum then
      if (clientnum >= 0) and (clientnum < 64) then
         if et.gentity_get(clientnum,"pers.connected") ~= 2 then
            if commandSaid then
                et.trap_SendServerCommand(PlayerID, string.format("print \"There is no client associated with this slot number\n"))
                commandSaid = false
            else
                et.G_Print("There is no client associated with this slot number\n")
            end
         return
         end
      else    
        if commandSaid then          
            et.trap_SendServerCommand(PlayerID, string.format("print \"Please enter a slot number between 0 and 63\n"))
            commandSaid = false
        else
            et.G_Print("Please enter a slot number between 0 and 63\n")
        end
      return
      end
   else
      if client then
       s,e=string.find(client, client)
       if e <= 2 then
            if commandSaid then
                et.trap_SendServerCommand(PlayerID, string.format("print \"Player name requires more than 2 characters\n"))
                commandSaid = false
            else
                et.G_Print("Player name requires more than 2 characters\n")
            end
       return
       else
             clientnum = name2IDPM(client)
       end
      end
         if not clientnum then
        if commandSaid then
            et.trap_SendServerCommand(PlayerID, string.format("print \"Try name again or use slot number\n"))
            commandSaid = false
        else
            et.G_Print("Try name again or use slot number\n")
        end
         return
         end
   end
        local name = et.gentity_get(PlayerID,"pers.netname")
        local rname = et.gentity_get(clientnum,"pers.netname")
        if PlayerID == 1022 then
            name = "^1SERVER"
        end
       if commandSaid then
        et.trap_SendServerCommand(PlayerID, ("b 8 \"^dPrivate message sent to "..rname.."^d --> ^3" .. message .. "^7"))
           et.G_ClientSound(PlayerID, pmsound)
          commandSaid = false
       else
          et.G_Print("Private message sent to "..rname.."^d --> ^3" .. message .. "^7\n")
       end
       et.trap_SendServerCommand(clientnum, ("b 8 \"^dPrivate message from "..name.."^d --> ^3" .. message .. "^7"))
       et.G_ClientSound(clientnum, pmsound)
end

function name2IDPM(name)
   local i = 0
   local slot = nil
   local matchcount = 0
   local cleanname = string.lower(et.Q_CleanStr( name ))
   local playerp = ""
   for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
    if PlayerName[i] then
       playerp = string.lower(et.Q_CleanStr( PlayerName[i] ))
       s,e=string.find(playerp, cleanname)
              if s and e then
            matchcount = matchcount + 1
                slot = i
             end
      end
   end
   if matchcount >= 2 then
    return nil
   else
    return slot
   end
end

--[[
function curse_filter( PlayerID )
    local k_cursemode = 1
    local name = et.gentity_get(PlayerID,"pers.netname")
    if k_cursemode == 1 then
        muted[PlayerID] = mtime + 30000         --5 minutes in milliseconds
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref mute "..PlayerID.."\n" )
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3CurseFilter: ^7"..name.." ^7has been auto muted for ^15^7 minutes!\n" )
--        et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3"..muted[PlayerID].."\n" )
    end
end
--]]

function log_chat( PlayerID, mode, text, PMID )
    local text = et.Q_CleanStr(text)
    local fdadm,len = et.trap_FS_FOpenFile( "chat_log.log", et.FS_APPEND )
    local time = os.date("%x %I:%M:%S%p")
    if mode == et.SAY_ALL then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "("..time..") "..name.. ": " .. text.. "\n"
    elseif mode == et.SAY_TEAM then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "("..time..") "..name.." (TEAM): " ..text.. "\n"
    elseif mode == et.SAY_BUDDY then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "("..time..") "..name.. " (BUDDY): " ..text.. "\n"
    elseif mode == et.SAY_TEAMNL then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "("..time..") "..name.. " (TEAM): " ..text.. "\n"
    elseif mode == "VSAY_TEAM" then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "("..time..") "..name.. " (VSAY_TEAM): " ..text.. "\n"
    elseif mode == "VSAY_BUDDY" then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "("..time..") "..name.. " (VSAY_BUDDY): " ..text.. "\n"
    elseif mode == "VSAY_ALL" then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "("..time..") "..name.. " (VSAY): " ..text.. "\n"
    elseif mode == "PMESSAGE" then
        local from = "SERVER"
        if PlayerID ~= 1022 then
            from = et.gentity_get(PlayerID,"pers.netname")
        end
        local rec1 = part2id(PMID)
        if rec1 then
            local repipiant = et.gentity_get(rec1,"pers.netname")
            LOG = "("..time..") "..from.." to "..repipiant.." (PRIVATE): " ..text.. "\n"
        end
    elseif mode == "PMADMINS" then
        local from = "SERVER"
        if PlayerID ~= 1022 then
            from = et.gentity_get(PlayerID,"pers.netname")
        end
        local repipiant = "ADMINS"
        LOG = "("..time..") "..from.." to "..repipiant.." (PRIVATE): " ..text.. "\n"
    elseif mode == "CONN" then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "*** " ..name.. " HAS ENTERED THE GAME ***\n"
    elseif mode == "NAME_CHANGE" then
        LOG = "*** " ..PlayerID.. " HAS RENAMED TO "..text.." ***\n"
    elseif mode == "DISCONNECT" then
        local name = et.gentity_get(PlayerID,"pers.netname")
        local name = et.Q_CleanStr( name )
        LOG = "*** " ..name.. " HAS DISCONNECTED ***\n"
    elseif mode == "START" then
        LOG = "\n    ***SERVER RESTART OR MAP CHANGE***\n\n"
    end

    et.trap_FS_Write( LOG, string.len(LOG) ,fdadm )
    et.trap_FS_FCloseFile( fdadm )
end

function et_ClientCommand( clientNum, command )
    local name2 = et.gentity_get(clientNum,"pers.netname")
    local name2 = et.Q_CleanStr( name2 )
    local arg0 = string.lower(et.trap_Argv(0))
    local arg1 = string.lower(et.trap_Argv(1))
    local muted = et.gentity_get(clientNum, "sess.muted")
    if muted == 0 then
    if arg0 == "say" then
        if k_logchat == 1 then
            log_chat( clientNum, et.SAY_ALL, et.ConcatArgs(1))
        end

        say_parms = "qsay"

        et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))
    elseif arg0 == "say_team" then
        if k_logchat == 1 then
            log_chat( clientNum, et.SAY_TEAM, et.ConcatArgs(1))
        end

        say_parms = "qsay"

        et_ClientSay( clientNum, et.SAY_TEAM, et.ConcatArgs(1))
    elseif arg0 == "say_buddy" then
        if k_logchat == 1 then
            log_chat( clientNum, et.SAY_BUDDY, et.ConcatArgs(1))
        end

        say_parms = "qsay"

        et_ClientSay( clientNum, et.SAY_BUDDY, et.ConcatArgs(1))
    elseif arg0 == "say_teamnl" then
        if k_logchat == 1 then
            log_chat( clientNum, et.SAY_TEAMNL, et.ConcatArgs(1))
        end

        say_parms = "qsay"

        et_ClientSay( clientNum, et.SAY_TEAMNL, et.ConcatArgs(1))
    elseif arg0 == "sc" then
        if AdminUserLevel(clientNum) == 3 then
            local name = et.gentity_get(clientNum,"pers.netname")

            if k_advancedpms == 1 then
                say_parms = "m2 ".. clientNum
            else
                say_parms = "m "..name
            end

            et_ClientSay( clientNum, SC, et.ConcatArgs(1))
            return 1
        end

    elseif arg0 == "vsay" then
        if k_logchat == 1 then
            log_chat( clientNum, "VSAY_ALL", et.ConcatArgs(1))
        end
    elseif arg0 == "vsay_team" then
        if k_logchat == 1 then
            log_chat( clientNum, "VSAY_TEAM", et.ConcatArgs(1))
        end
    elseif arg0 == "vsay_buddy" then
        if k_logchat == 1 then
            log_chat( clientNum, "VSAY_BUDDY", et.ConcatArgs(1))
        end
    end
    end

    if arg0 == "m" or arg0 == "pm"  then
        if k_logchat == 1 then
            log_chat( clientNum, "PMESSAGE", et.ConcatArgs(2), et.trap_Argv(1) )
        end
    elseif arg0 == "ma" or arg0 == "pma" or arg0 == "msg" then
        if k_logchat == 1 then
            log_chat( clientNum, "PMADMINS", et.ConcatArgs(1))
        end
    end

    if k_advplayers == 1 then
        if string.lower(command) == "players" then
               advPlayers(clientNum)
        return 1
        end
        if AdminUserLevel(clientNum) >= 2 then
            if string.lower(command) == "admins" then
                   admins(clientNum)
            return 1
              end
        end
    end

        local ref = tonumber(et.gentity_get(clientNum,"sess.referee"))

    if tonumber(et.gentity_get(clientNum,"sess.sessionTeam")) == 3 then
        if et.trap_Argv(0) == "team" and et.trap_Argv(1) then
            switchteam[clientNum] = 1
        end
    end

    if votedis == 1 then
        local vote = et.trap_Argv(1)

        if AdminUserLevel(clientNum) < 3 then
            if et.trap_Argv(0) == "callvote" then
                if vote == "shuffleteamsxp" or vote == "shuffleteamsxp_norestart" or vote == "nextmap" or vote == "swapteams" or vote == "matchreset" or vote == "maprestart" or vote == "map" then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "cancelvote; qsay Voting has been disabled!\n")
                end
            end
        end

    end

    local vote = et.trap_Argv(1)
    if k_antiunmute == 1 then
        if vote == "unmute" then
            local client = et.trap_Argv(2)
            local clientnumber = part2id(client)
            local targetmuted = et.gentity_get(clientnumber, "sess.muted")
            if targetmuted == 1 then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "cancelvote; qsay Cannot vote to unmute a muted person!\n")
            end
        end
    end

    if arg0 == "ref" and arg1 == "pause" and pausedv == 0 then
        GAMEPAUSED = 1
        dummypause = mtime
    elseif arg0 == "ref" and arg1 == "unpause" and pausedv == 1 then
        if ((mtime - dummypause)/1000) >= 5 then
            GAMEPAUSED = 0
        end
    end

    if k_advancedpms == 1 then
        if string.lower(command) == "m" or string.lower(command) == "msg" or string.lower(command) == "pm" then
            if et.trap_Argv(1) == nil or et.trap_Argv(1) == "" or et.trap_Argv(1) == " " then
                et.trap_SendServerCommand(clientNum, string.format("print \"Useage:  /m \[pname/ID\] \[message\]\n"))
            else
                commandSaid = true
                private_message(clientNum, et.trap_Argv(1), et.ConcatArgs(2))
                return 1
            end
        end
    end

    if string.lower(command) == "ma" or string.lower(command) == "pma" then
        for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
            if AdminUserLevel(i) >= 2 then
                local name = et.gentity_get(clientNum,"pers.netname")
                et.trap_SendServerCommand(i, ("b 8 \"^dPm to admins from "..name.."^d --> ^3" .. et.ConcatArgs(1) .. "^7"))
                if k_advancedpms == 1 then
                    et.G_ClientSound(i, pmsound)
                end
            end
        end
        if AdminUserLevel(clientNum) < 2 then
            et.trap_SendServerCommand(clientNum, ("b 8 \"^dPm to admins has been sent^d --> ^3" .. et.ConcatArgs(1) .. "^7"))
            if k_advancedpms == 1 then
                et.G_ClientSound(clientNum, pmsound)
            end
        end
        return 1
    end

    if k_slashkilllimit == 1 then
        local name = et.gentity_get(clientNum,"pers.netname")
        local teamnumber = tonumber(et.gentity_get(clientNum,"sess.sessionTeam"))
        if string.lower(command) == "kill" then
            if teamnumber ~= 3 then
                if et.gentity_get(clientNum,"health") > 0 then
                    if selfkills[clientNum] < k_slashkills then
                        selfkills[clientNum] = selfkills[clientNum] + 1
                        if selfkills[clientNum] == k_slashkills then
                            if k_advancedpms == 1 then
                                et.trap_SendConsoleCommand( et.EXEC_APPEND, "m2 " .. name .. " ^7You have reached your /kill limit!  You can no longer /kill for the rest of this map.\n" )
                                et.G_ClientSound(clientNum, pmsound)
                            else
                                et.trap_SendConsoleCommand( et.EXEC_APPEND, "m " .. name .. " ^7You have reached your /kill limit!  You can no longer /kill for the rest of this map.\n" )
                            end
                        elseif selfkills[clientNum] == (k_slashkills - 1) then
                            if k_advancedpms == 1 then
                                et.trap_SendConsoleCommand( et.EXEC_APPEND, "m2 " .. name .. " ^7You have ^11^7 /kill left for this map.\n" )
                                et.G_ClientSound(clientNum, pmsound)
                            else
                                et.trap_SendConsoleCommand( et.EXEC_APPEND, "m " .. name .. " ^7You have ^11^7 /kill left for this map.\n" )
                            end
                        end
                    else
                        if k_advancedpms == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, "m2 " .. name .. " ^7You may no longer /kill for the rest of this map!\n" )
                            et.G_ClientSound(clientNum, pmsound)
                        else
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, "m " .. name .. " ^7You may no longer /kill for the rest of this map!\n" )
                        end
                        return 1
                    end
                end
            end
        end
    end

    return 0
end

function et_ClientSay(clientNum,mode,text)
    local command1=""
    local commands = 0
    local first = ""
    local second = ""
    local third = ""
    local returnVal = 0
    s,e,first,second,third = string.find(text,"%s*([%p]?[.%S]*)%s+([.%S]*)%s+(.*)")


    if(mode==et.SAY_ALL) then
        command1="say"
    elseif (mode==et.SAY_TEAM or mode==et.SAY_TEAMNL) then
        command1="say_team"
    elseif (mode==et.SAY_BUDDY) then
        command1="say_buddy"
    elseif (mode==SC) then
        command1="SC"
    end
    if(third~=nil) then
        commands=4
    else
        s,e,first,second = string.find(text,"%s*([^%s+]+)%s+(.+)%s*")
            third=""
            if(second~=nil) then
                commands = 3
            else
                second=""
                first = et.ConcatArgs(1)
                commands = 2
            end
    end
    return ClientUserCommand(clientNum, command1, first, second, third, commands)
end

function comds(client, cvar1, caller)
    local clientnum = tonumber(client)
    if clientnum then
    local wname = ""
      if (clientnum >= 0) and (clientnum < 64) then
          if et.gentity_get(clientnum,"pers.connected") ~= 2 then
            if commandSaid then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3" .. fullcom .. ": ^7There is no client associated with this slot number\n" )
                commandSaid = false
            else
                    et.G_Print("There is no client associated with this slot number\n")
            end
          return
             end

      else              
        if commandSaid then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3" .. fullcom .. ": ^7Please enter a slot number between 0 and 63\n" )
            commandSaid = false
        else
                 et.G_Print("Please enter a slot number between 0 and 63\n")
        end
      return
      end
    else
          if client then
            s,e=string.find(client, client)
                if e <= 2 then
                    if commandSaid then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3" .. fullcom .. ": ^7Player name requires more than 2 characters\n" )
                        commandSaid = false
                    else
                        et.G_Print("Player name requires more than 2 characters\n")
                    end
                   return
                else
                         clientnum = getsetlvlidfpname(client)
                    wname = clientnum
                end
          end
             if not clientnum then
            if commandSaid then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3" .. fullcom .. ": ^7Try name again or use slot number\n" )
                commandSaid = false
            else
                     et.G_Print("Try name again or use slot number\n")
            end
             return
             end
       end

    if kick then
        local client2 = clientnum+1
        if AdminUserLevel(caller) > AdminUserLevel(clientnum) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "pb_sv_kick " .. client2 .. " " .. cvar1 .. "\n" )
        else
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3" .. fullcom .. ":^7 Cannot kick a higher admin\n" )
        end
        kick = false
        commandSaid = false
    elseif ban then
        local client2 = clientnum+1
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "pb_sv_ban " .. client2 .. " " .. cvar1 .. "\n" )
        ban = false
        commandSaid = false
    elseif warn then
        local name = et.gentity_get(clientnum,"pers.netname")
        wname = string.lower(et.Q_CleanStr( name ))
        local cvar1 = tostring( cvar1 )
        if AdminUserLevel(caller) > AdminUserLevel(clientnum) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref warn \"" .. wname .. "\" \"" .. cvar1 .. "\"\n" )
        else
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3" .. fullcom .. ":^7 Cannot warn a higher admin\n" )
        end
        warn = false
        commandSaid = false
    elseif mute then
        local name = et.gentity_get(clientnum,"pers.netname")
        if AdminUserLevel(caller) > AdminUserLevel(clientnum) then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref mute " .. clientnum .. "\n" )
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Mute: ^7" ..name.. " ^7has been muted\n" )
        else
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3" .. fullcom .. ":^7 Cannot mute a higher admin\n" )
        end
        mute = false
        commandSaid = false
    elseif unmute then
        local name = et.gentity_get(clientnum,"pers.netname")
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref unmute " .. clientnum .. "\n" )
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3Unmute: ^7" ..name.. " ^7has been unmuted\n" )
        unmute = false
        commandSaid = false
    elseif putaxis then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref putaxis " .. clientnum .. "\n" )
        putaxis = false
        commandSaid = false
    elseif putallies then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref putallies " .. clientnum .. "\n" )
        putallies = false
        commandSaid = false
    elseif putspec then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref remove " .. clientnum .. "\n" )
        putspec = false
        commandSaid = false
    elseif makeshoutcaster then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref makeshoutcaster " .. clientnum .. "\n" )
        makeshoutcaster = false
        commandSaid = false
    elseif removeshoutcaster then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref removeshoutcaster " .. clientnum .. "\n" )
        removeshoutcaster = false
        commandSaid = false
    elseif makereferee then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref referee " .. clientnum .. "\n" )
        makereferee = false
        commandSaid = false
    elseif removereferee then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "ref unreferee " .. clientnum .. "\n" )
        removereferee = false
        commandSaid = false
    elseif finger then
        adminStatus(clientnum)
    elseif getip then
        local IP   = et.Info_ValueForKey( et.trap_GetUserinfo( clientnum ), "ip" )
        local cvar1 = tonumber(cvar1)
        local name = et.gentity_get(clientnum,"pers.netname")
        et.trap_SendServerCommand(cvar1, string.format("b 8 \"^3Getip: " .. name .. "^7's IP is " .. IP .. ""))
        getip = false
        commandSaid = false
    elseif getguid then
        local GUID   = et.Info_ValueForKey( et.trap_GetUserinfo( clientnum ), "cl_guid" )
        local cvar1 = tonumber(cvar1)
        local name = et.gentity_get(clientnum,"pers.netname")
        et.trap_SendServerCommand(cvar1, string.format("b 8 \"^3Getguid: " .. name .. "^7's GUID is " .. GUID .. ""))
        getguid = false
        commandSaid = false
    end


end

--[[
function getsetlvlidfpname(name)
       local i
       local matchcount = 0
       local cleanname = string.lower(et.Q_CleanStr( name ))
       for i=0,63,1 do
       playeri = et.gentity_get(i,"pers.netname")
          if playeri then
           playerp = string.lower(et.Q_CleanStr( playeri ))
           s,e=string.find(playerp, cleanname)
             if s and e then
                matchcount = matchcount + 1
                if matchcount == 1 then
                    slot = i
                else
                    slot = nil
                end
                 end
          end
       end
       if matchcount >= 2 then
        return nil
       else
        return slot
       end
end
--]]

function getsetlvlidfpname(name)
   local i = 0
   local slot = nil
   local matchcount = 0
   local cleanname = string.lower(et.Q_CleanStr( name ))
   local playerp = ""
   for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
    if PlayerName[i] then
       playerp = string.lower(et.Q_CleanStr( PlayerName[i] ))
       s,e=string.find(playerp, cleanname)
              if s and e then
            matchcount = matchcount + 1
                slot = i
             end
      end
   end
   if matchcount >= 2 then
    return nil
   else
    return slot
   end
end

function part2id(client)
    local clientnum = tonumber(client)
    if clientnum then
        if (clientnum >= 0) and (clientnum < 64) then
              if et.gentity_get(clientnum,"pers.connected") ~= 2 then
                  return nil
                 end
              return clientnum
          end
    else
        local client = string.lower(et.Q_CleanStr( client ))
          if client then
            s,e=string.find(client, client)
                if e <= 2 then
                       return nil
                else
                         clientnum = nameforID(client)
                end
          end
             if not clientnum then
                 return nil
             end
       end

    return clientnum

end

--[[
function nameforID(name)
       local i
       local matchcount = 0
       local cleanname = string.lower(et.Q_CleanStr( name ))
       for i=0,63,1 do
       playeri = et.gentity_get(i,"pers.netname")
          if playeri then
           playerp = string.lower(et.Q_CleanStr( playeri ))
           s,e=string.find(playerp, cleanname)
             if s and e then
                matchcount = matchcount + 1
                if matchcount == 1 then
                    slot = i
                else
                    slot = nil
                end
                 end
          end
       end
       if matchcount >= 2 then
        return nil
       else
        return slot
       end
end
--]]

function nameforID(name)
   local i = 0
   local slot = nil
   local matchcount = 0
   local cleanname = string.lower(et.Q_CleanStr( name ))
   local playerp = ""
   for i=0,tonumber(et.trap_Cvar_Get("sv_maxclients"))-1,1 do
    if PlayerName[i] then
       playerp = string.lower(et.Q_CleanStr( PlayerName[i] ))
       s,e=string.find(playerp, cleanname)
              if s and e then
            matchcount = matchcount + 1
                slot = i
             end
      end
   end
   if matchcount >= 2 then
    return nil
   else
    return slot
   end
end

function loadcommands()
    local fd,len = et.trap_FS_FOpenFile( "commands.cfg", et.FS_READ )
    if len > 0 then
        local filestr = et.trap_FS_Read( fd, len )
        local counter0 = 0
        local counter1 = 0
        local counter2 = 0
        local counter3 = 0
        for level,comm in string.gfind(filestr, "[^%#](%d)%s*%-%s*(%w+)%s*%=%s*[^%\n]*") do
            d0 = 5
            d1 = 1
            d2 = 6
            d3 = 23
            local comm2 = k_commandprefix..comm
            if tonumber(level) == 0 then
                counter0 = counter0 + 1
                lvl0c = d0 + counter0
                lvl0[lvl0c] = comm2
            elseif tonumber(level) == 1 then
                counter1 = counter1 + 1
                lvl1c = d1 + counter1
                lvl1[lvl1c] = comm2
            elseif tonumber(level) == 2 then
                counter2 = counter2 + 1
                lvl2c = d2 + counter2
                lvl2[lvl2c] = comm2
            elseif tonumber(level) == 3 then
                counter3 = counter3 + 1
                lvl3c = d3 + counter3
                lvl3[lvl3c] = comm2
            end
        end
    end
    et.trap_FS_FCloseFile( fd )
end

function readconfig()

    loadAdmins()
    loadspreerecord()

    lvl0c = 5
    lvl0 = {
        k_commandprefix.."admintest",
        k_commandprefix.."time",
        k_commandprefix.."date",
        k_commandprefix.."spree_record",
        k_commandprefix.."tk_index",
    }

    lvl1c = 1
    lvl1 = {
        k_commandprefix.."spec999",
    }

    lvl2c = 6
    lvl2 = {
        k_commandprefix.."finger",
        k_commandprefix.."kick",
        k_commandprefix.."warn",
        k_commandprefix.."mute",
        k_commandprefix.."unmute",
        k_commandprefix.."timelimit",
    }

    lvl3c = 23
    lvl3 = {
        k_commandprefix.."ban",
        k_commandprefix.."readconfig",
        k_commandprefix.."makeshoutcaster",
        k_commandprefix.."makereferee",
        k_commandprefix.."removeshoutcaster",
        k_commandprefix.."removereferee",
        k_commandprefix.."gravity",
        k_commandprefix.."speed",
        k_commandprefix.."knifeonly",
        k_commandprefix.."knockback",
        k_commandprefix.."cheats",
        k_commandprefix.."laser",
        k_commandprefix.."spree_restart",
        k_commandprefix.."getip",
        k_commandprefix.."crazygravity",
        k_commandprefix.."getguid",
        k_commandprefix.."setlevel",
        k_commandprefix.."gib",
        k_commandprefix.."slap",
        k_commandprefix.."panzerwar",
        k_commandprefix.."frenzy",
        k_commandprefix.."grenadewar",
        k_commandprefix.."sniperwar",
    }

    loadcommands()
end

function ClientUserCommand(PlayerID, Command, BangCommand, Cvar1, Cvar2, Cvarct)

    local fd,len = et.trap_FS_FOpenFile( "commands.cfg", et.FS_READ )
    if len > 0 then
        local filestr = et.trap_FS_Read( fd, len )
        for level,comm,str in string.gfind(filestr, "[^%#](%d)%s*%-%s*([%w%_]*)%s*%=%s*([^%\n]*)") do
            local strnumber = {}
            local strnumber = ParseString(str)

            local comm2 = k_commandprefix..comm
            local t = tonumber(et.gentity_get(PlayerID,"sess.sessionTeam"))
            local c = tonumber(et.gentity_get(PlayerID,"sess.latchPlayerType"))
            local player_last_victim_name = ""
            local player_last_killer_name = ""
            local player_last_victim_cname = ""
            local player_last_killer_cname = ""
            if playerlastkilled[PlayerID] == 1022 then
                player_last_victim_name = "NO ONE"
                player_last_victim_cname = "NO ONE"
            else
                player_last_victim_name = et.Q_CleanStr(et.gentity_get(playerlastkilled[PlayerID],"pers.netname"))
                player_last_victim_cname = et.gentity_get(playerlastkilled[PlayerID],"pers.netname")
            end
            if playerwhokilled[PlayerID] == 1022 then
                player_last_killer_name = "NO ONE"
                player_last_killer_cname = "NO ONE"
            else
                player_last_killer_name = et.Q_CleanStr(et.gentity_get(playerwhokilled[PlayerID],"pers.netname"))
                player_last_killer_cname = et.gentity_get(playerwhokilled[PlayerID],"pers.netname")
            end

            local pnameID = part2id(Cvar1)
            if not pnameID then
                pnameID = 1021
            end
            local PBpnameID = pnameID + 1

            local str = string.gsub(str, "<CLIENT_ID>", PlayerID)
            local str = string.gsub(str, "<GUID>", et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "cl_guid" ))
            local str = string.gsub(str, "<COLOR_PLAYER>", et.gentity_get(PlayerID,"pers.netname"))
            local str = string.gsub(str, "<ADMINLEVEL>", AdminUserLevel(PlayerID))
            local str = string.gsub(str, "<PLAYER>", et.Q_CleanStr(et.gentity_get(PlayerID,"pers.netname")))
            local str = string.gsub(str, "<PLAYER_CLASS>", class[c])
            local str = string.gsub(str, "<PLAYER_TEAM>", team[t])
            local str = string.gsub(str, "<PARAMETER>", Cvar1..Cvar2)
            local str = string.gsub(str, "<PLAYER_LAST_KILLER_ID>", playerwhokilled[PlayerID])
            local str = string.gsub(str, "<PLAYER_LAST_KILLER_NAME>", player_last_killer_name)
            local str = string.gsub(str, "<PLAYER_LAST_KILLER_CNAME>", player_last_killer_cname)
            local str = string.gsub(str, "<PLAYER_LAST_KILLER_WEAPON>", killedwithweapv[PlayerID])
            local str = string.gsub(str, "<PLAYER_LAST_VICTIM_ID>", playerlastkilled[PlayerID])
            local str = string.gsub(str, "<PLAYER_LAST_VICTIM_NAME>", player_last_victim_name)
            local str = string.gsub(str, "<PLAYER_LAST_VICTIM_CNAME>", player_last_victim_cname)
            local str = string.gsub(str, "<PLAYER_LAST_VICTIM_WEAPON>", killedwithweapk[PlayerID])
            local str = string.gsub(str, "<PNAME2ID>", pnameID)
            local str = string.gsub(str, "<PBPNAME2ID>", PBpnameID)

            local teamnumber = tonumber(et.gentity_get(PlayerID,"sess.sessionTeam"))
            local classnumber = tonumber(et.gentity_get(PlayerID,"sess.latchPlayerType"))


            if (string.lower(BangCommand) == comm2 ) then
                if tonumber(level) <= AdminUserLevel(PlayerID) then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "".. str .. "\n" )
                    if strnumber[1] == "forcecvar" then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3etpro svcmd: ^7forcing client cvar ["..strnumber[2].."] to [".. Cvar1 .."]\n" )
                    end                        
                else
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "qsay ^3"..comm..":^7 Insufficient Admin status\n" )
                end
            end
        end
    end
    et.trap_FS_FCloseFile( fd )




  if (string.lower(BangCommand) == k_commandprefix.."admintest") then
    adminStatus(PlayerID)
  elseif (string.lower(BangCommand) == k_commandprefix.."time" ) then
    local time = os.date("%I:%M:%S%p")
    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." The server time is " ..time.. "\n" )
  elseif (string.lower(BangCommand) == k_commandprefix.."date" ) then
    local date = os.date("%x %I:%M:%S%p")
    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." The server date is " ..date.. "\n" )
  elseif (string.lower(BangCommand) == k_commandprefix.."spree_record" ) then
    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ".. tostring(oldspree2) .."\n" )
  elseif (string.lower(BangCommand) == k_commandprefix.."tk_index" ) then
    local status = ""
    local name = et.Info_ValueForKey( et.trap_GetUserinfo( PlayerID ), "name" )
    if teamkillr[PlayerID] < -1 then
        status = "^1NOT OK"
    else
        status = "^2OK"
    end

    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Tk_index: ^7" .. name .. "^7 has a tk index of ^3" ..teamkillr[PlayerID] .. "^7 \[" .. status .. "^7\] \n" )
  elseif (string.lower(BangCommand) == k_commandprefix.."listcmds" ) then
    lstcomds( PlayerID )
  end

--Admin commands
    --level 3
  if (string.lower(BangCommand) == k_commandprefix.."gib" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            Gib(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gib:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."slap" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            burn(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Slap:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."setlevel" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel:^7 \[partname/id#\] \[level\]\n" )
        else
            commandSaid = true
            sldv = 1
            setlevel(Cvar1, 0)
            sldv = 0
            setlevel(Cvar1, Cvar2)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Setlevel:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."readconfig" ) then
    if AdminUserLevel(PlayerID) == 3 then
        et.trap_SendConsoleCommand( et.EXEC_APPEND, "exec kmod.cfg; qsay ^3ReadConfig:^7 Config reloaded\n" )
        readconfig()
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3ReadConfig:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."spree_restart" ) then
    if AdminUserLevel(PlayerID) == 3 then
        spreerecord_reset()
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Spree reset:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."ban" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Ban:^7 \[partname/id#\] \[reason\]\n" )
        else
            commandSaid = true
            ban = true
            fullcom = "Ban"
            comds(Cvar1, Cvar2)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Ban:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."getip" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Getip:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            getip = true
            fullcom = "Getip"
            comds(Cvar1, PlayerID)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Getip:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."getguid" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Getguid:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            getguid = true
            fullcom = "Getguid"
            comds(Cvar1, PlayerID)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Getguid:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!makeshoutcaster" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Makeshoutcaster:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            makeshoutcaster = true
            fullcom = "Makeshoutcaster"
            comds(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Makeshoutcaster:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!removeshoutcaster" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Removeshoutcaster:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            removeshoutcaster = true
            fullcom = "Removeshoutcaster"
            comds(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Removeshoutcaster:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!makereferee" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Makereferee:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            makereferee = true
            fullcom = "Makereferee"
            comds(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Makereferee:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!removereferee" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Removereferee:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            removereferee = true
            fullcom = "Removereferee"
            comds(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Removereferee:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!gravity" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gravity:^7 Changes the gravity \[default = 800\]\n" )
        else
            local grav = tonumber(Cvar1)
            if grav then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "g_gravity " .. grav .. "\n" )
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gravity:^7 Gravity has been changed to " .. grav .. "\n" )
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gravity:^7 Please enter in only numbers\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Gravity:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!knifeonly" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knifeonly:^7 Disable or enable g_knifeonly \[0-1\]\n" )
        else
            local knife = tonumber(Cvar1)
            if knife >= 0 and knife <= 1 then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "g_knifeonly " .. knife .. "\n" )
                if knife == 1 then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knifeonly:^7Knifeonly has been Enabled\n" )
                else
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knifeonly:^7Knifeonly has been Disabled\n" )
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knifeonly:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knifeonly:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!speed" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Speed:^7 Changes game speed \[default = 320\]\n" )
        else
            local speed2 = tonumber(Cvar1)
            if speed then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "g_speed " .. speed2 .. "\n" )
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Speed:^7 Game speed has been changed to " .. speed2 .. "\n" )
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Speed:^7 Please enter in only numbers\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Speed:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!knockback" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knockback:^7 Changes knockback \[default = 1000\]\n" )
        else
            local knock = tonumber(Cvar1)
            if knock then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "g_knockback " .. knock .. "\n" )
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knockback:^7 Knockback has been changed to " .. knock .. "\n" )
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knockback:^7 Please enter in only numbers\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Knockback:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!cheats" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Cheats:^7 Disable or enable cheats \[0-1\]\n" )
        else
            local cheat = tonumber(Cvar1)
            if cheat >= 0 and cheat <= 1 then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "forcecvar sv_cheats " .. cheat .. "\n" )
                if cheat == 1 then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Cheats:^7Cheats have been Enabled\n" )
                else
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Cheats:^7Cheats have been Disabled\n" )
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Cheats:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Cheats:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!laser" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Laser:^7 Disable or enable g_debugbullets \[0-1\]\n" )
        else
            local laser = tonumber(Cvar1)
            if laser >= 0 and laser <= 1 then
                et.trap_SendConsoleCommand( et.EXEC_APPEND, "forcecvar g_debugbullets " .. laser .. "\n" )
                if laser == 1 then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Laser:^7Laser has been Enabled\n" )
                else
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Laser:^7Laser has been Disabled\n" )
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Laser:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Laser:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."crazygravity" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Crazygravity:^7 Disable or enable crazygravity \[0-1\]\n" )
        else
            local crazy = tonumber(Cvar1)
            if crazy >= 0 and crazy <= 1 then
                if crazy == 1 then
                    if CGactive == 0 then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Crazygravity:^7 Crazygravity has been Enabled\n" )
                        crazygravity = true
                        crazydv = 1
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Crazygravity:^7 Crazygravity is already active\n" )
                    end
                else
                    if CGactive == 1 then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Crazygravity:^7 Crazygravity has been Disabled.  Resetting gravity\n" )
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, "g_gravity 800\n" )
                        crazygravity = false
                        crazydv = 0
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Crazygravity:^7 Crazygravity has already been disabled\n" )
                    end
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Crazygravity:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Crazygravity:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."panzerwar" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Disable or enable panzerwar \[0-1\]\n" )
        else
            local panz = tonumber(Cvar1)
            local dspeed = (speed*2)
            if panz >= 0 and panz <= 1 then
                if panz == 1 then
                    if panzdv == 0 then
                        if frenzdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Frenzy mode must be disabled first\n" )
                        elseif grendv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Grenadewar must be disabled first\n" )
                        elseif snipdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Sniperwar must be disabled first\n" )
                        else
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Panzerwar has been Enabled\n" )
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics 0; team_maxcovertops 0; team_maxfieldops 0; team_maxengineers 0; team_maxflamers 0; team_maxmortars 0; team_maxmg42s 0; team_maxpanzers -1; g_speed " .. dspeed .. "; forcecvar g_soldierchargetime 0\n" )
                            panzdv = 1
                            for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                                if et.gentity_get(p,"sess.sessionTeam") >= 1 and et.gentity_get(p,"sess.sessionTeam") < 3 then
                                    originalclass[p] = tonumber(et.gentity_get(p,"sess.latchPlayerType"))
                                    originalweap[p] = tonumber(et.gentity_get(p,"sess.latchPlayerWeapon"))
                                    if et.gentity_get(p,"health") > 0 then
                                        et.G_Damage(p, p, 1022, 400, 24, 0)
                                        et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                    end
                                end
                                et.gentity_set(p,"sess.latchPlayerType",0)
                                et.gentity_set(p,"sess.latchPlayerWeapon",5)
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Panzerwar is already active\n" )
                    end
                else
                    if panzdv == 1 then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Panzerwar has been Disabled.\n" )
                        panzerwar_reset()
                        panzdv = 0
                        for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                            if et.gentity_get(p,"sess.sessionTeam") == 1 or et.gentity_get(p,"sess.sessionTeam") == 2 then
                                if et.gentity_get(p,"health") >= 0 then
                                    et.G_Damage(p, p, 1022, 400, 24, 0)
                                    et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                    et.gentity_set(p,"sess.latchPlayerType",originalclass[p])
                                    et.gentity_set(p,"sess.latchPlayerWeapon",originalweap[p])
                                end
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Panzerwar has already been disabled\n" )
                    end
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Panzerwar:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."frenzy" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Disable or enable frenzy \[0-1\]\n" )
        else
            local frenz = tonumber(Cvar1)
            if frenz >= 0 and frenz <= 1 then
                if frenz == 1 then
                    if frenzdv == 0 then
                        if panzdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Panzerwar must be disabled first\n" )
                        elseif grendv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Grenadewar must be disabled first\n" )
                        elseif snipdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Sniperwar must be disabled first\n" )
                        else
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Frenzy has been Enabled\n" )
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics -1; team_maxcovertops -1; team_maxfieldops -1; team_maxengineers -1; team_maxflamers 0; team_maxmortars 0; team_maxmg42s 0; team_maxpanzers 0\n" )
                            frenzdv = 1
                            for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                                if et.gentity_get(p,"sess.sessionTeam") >= 1 and et.gentity_get(p,"sess.sessionTeam") < 3 then
                                    if et.gentity_get(p,"health") > 0 then
                                        et.G_Damage(p, p, 1022, 400, 24, 0)
                                        et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                    end
                                end
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Frenzy is already active\n" )
                    end
                else
                    if frenzdv == 1 then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Frenzy has been Disabled.\n" )
                        frenzdv = 0
                        frenzy_reset()
                        for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                            if et.gentity_get(p,"sess.sessionTeam") >= 1 and et.gentity_get(p,"sess.sessionTeam") < 3 then
                                if et.gentity_get(p,"health") > 0 then
                                    et.G_Damage(p, p, 1022, 400, 24, 0)
                                    et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                end
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Frenzy has already been disabled\n" )
                    end
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Frenzy:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."grenadewar" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Disable or enable Grenadewar \[0-1\]\n" )
        else
            local gren = tonumber(Cvar1)
            if gren >= 0 and gren <= 1 then
                if gren == 1 then
                    if grendv == 0 then
                        if panzdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Panzerwar must be disabled first\n" )
                        elseif frenzdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Frenzy must be disabled first\n" )
                        elseif snipdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Sniperwar must be disabled first\n" )
                        else
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Grenadewar has been Enabled\n" )
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics -1; team_maxcovertops -1; team_maxfieldops -1; team_maxengineers -1; team_maxflamers 0; team_maxmortars 0; team_maxmg42s 0; team_maxpanzers 0\n" )
                            grendv = 1
                            for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                                if et.gentity_get(p,"sess.sessionTeam") >= 1 and et.gentity_get(p,"sess.sessionTeam") < 3 then
                                    if et.gentity_get(p,"health") > 0 then
                                        et.G_Damage(p, p, 1022, 400, 24, 0)
                                        et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                    end
                                end
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Grenadewar is already active\n" )
                    end
                else
                    if grendv == 1 then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Grenadewar has been Disabled.\n" )
                        grendv = 0
                        grenadewar_reset()
                        for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                            if et.gentity_get(p,"sess.sessionTeam") >= 1 and et.gentity_get(p,"sess.sessionTeam") < 3 then
                                if et.gentity_get(p,"health") > 0 then
                                    et.G_Damage(p, p, 1022, 400, 24, 0)
                                    et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                end
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Grenadewar has already been disabled\n" )
                    end
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Grenadewar:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."sniperwar" ) then
    if AdminUserLevel(PlayerID) == 3 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Disable or enable Sniperwar \[0-1\]\n" )
        else
            local snip = tonumber(Cvar1)
            if snip >= 0 and snip <= 1 then
                if snip == 1 then
                    if snipdv == 0 then
                        if panzdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Panzerwar must be disabled first\n" )
                        elseif frenzdv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Frenzy must be disabled first\n" )
                        elseif grendv == 1 then
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Grenadewar must be disabled first\n" )
                        else
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Sniperwar has been Enabled\n" )
                            et.trap_SendConsoleCommand( et.EXEC_APPEND, "team_maxmedics -1; team_maxcovertops -1; team_maxfieldops -1; team_maxengineers -1; team_maxflamers 0; team_maxmortars 0; team_maxmg42s 0; team_maxpanzers 0\n" )
                            snipdv = 1
                            for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                                    originalclass[p] = tonumber(et.gentity_get(p,"sess.latchPlayerType"))
                                    originalweap[p] = tonumber(et.gentity_get(p,"sess.latchPlayerWeapon"))
                                if et.gentity_get(p,"sess.sessionTeam") >= 1 and et.gentity_get(p,"sess.sessionTeam") < 3 then
                                    if et.gentity_get(p,"health") > 0 then
                                        et.G_Damage(p, p, 1022, 400, 24, 0)
                                        et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                    end
                                end
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Sniperwar is already active\n" )
                    end
                else
                    if snipdv == 1 then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Sniperwar has been Disabled.\n" )
                        snipdv = 0
                        sniperwar_reset()
                        for p=0, tonumber(et.trap_Cvar_Get("sv_maxclients"))-1, 1 do
                            if et.gentity_get(p,"sess.sessionTeam") >= 1 and et.gentity_get(p,"sess.sessionTeam") < 3 then
                                if et.gentity_get(p,"health") > 0 then
                                    et.G_Damage(p, p, 1022, 400, 24, 0)
                                    et.gentity_set(p,"health",(et.gentity_get(p,"health")-400)) -- in case they recently spawned and are protected by spawn shield
                                end
                                    et.gentity_set(p,"sess.latchPlayerType",originalclass[p])
                                    et.gentity_set(p,"sess.latchPlayerWeapon",originalweap[p])
                            end
                        end
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Sniperwar has already been disabled\n" )
                    end
                end
            else
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 Valid values are \[0-1\]\n" )
            end
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Sniperwar:^7 command unavailible due to lack of required admin status!\n" )
    end
  end





    --level 2
  if (string.lower(BangCommand) == "!kick" ) then
    if AdminUserLevel(PlayerID) >= 2 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Kick:^7 \[partname/id#\] \[time\] \[reason\]\n" )
        else
            commandSaid = true
            kick = true
            fullcom = "Kick"
            comds(Cvar1, Cvar2, PlayerID)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Kick:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!warn" ) then
    if AdminUserLevel(PlayerID) >= 2 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Warn:^7 \[partname/id#\] \[reason\]\n" )
        else
            commandSaid = true
            warn = true
            fullcom = "Warn"
            comds(Cvar1, Cvar2, PlayerID)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Warn:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!mute" ) then
    if AdminUserLevel(PlayerID) >= 2 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Mute:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            mute = true
            fullcom = "Mute"
            comds(Cvar1, "dv", PlayerID)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Mute:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!timelimit" ) then
    if AdminUserLevel(PlayerID) >= 2 then
        local timel = tonumber(Cvar1)
        if timel then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, "timelimit " .. timel .. "\n" )
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Timelimit:^7 Timelimit has been changed to " .. timel .. "\n" )
        else
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Timelimit:^7 Please enter in only numbers\n" )
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Unlock:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == "!unmute" ) then
    if AdminUserLevel(PlayerID) >= 2 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Unmute:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            unmute = true
            fullcom = "Unmute"
            comds(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Unmute:^7 command unavailible due to lack of required admin status!\n" )
    end
  elseif (string.lower(BangCommand) == k_commandprefix.."finger" ) then
    if AdminUserLevel(PlayerID) >= 2 then
        if Cvarct < 3 then
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Finger:^7 \[partname/id#\]\n" )
        else
            commandSaid = true
            finger = true
            fullcom = "Finger"
            comds(Cvar1)
        end
    else
        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..say_parms.." ^3Map_restart:^7 command unavailible due to lack of required admin status!\n" )
    end
  end
end

function lstcomds( PlayerID )
    if AdminUserLevel(PlayerID) >= 0 then
        et.trap_SendServerCommand(PlayerID, string.format("print \"Level 0 Commands\n"))
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n"))
        for q=1, tonumber(lvl0c), 3 do
            local b = q
            local m = q + 1
            local e = q + 2
            if lvl0[b] == nil then
                lvl0[b] = " "
            end
            if lvl0[m] == nil then
                lvl0[m] = " "
            end
            if lvl0[e] == nil then
                lvl0[e] = " "
            end
            et.trap_SendServerCommand(PlayerID, string.format('print \"%21s^1|^7 %21s^1|^7 %21s^1|^7\n"', lvl0[b], lvl0[m], lvl0[e]))
        end
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n\n"))
    end
    if AdminUserLevel(PlayerID) >= 1 then
        et.trap_SendServerCommand(PlayerID, string.format("print \"Level 1 Commands \[PROTECTED USER\]\n"))
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n"))
        for w=1, tonumber(lvl1c), 3 do
            local b = w
            local m = w + 1
            local e = w + 2
            if lvl1[b] == nil then
                lvl1[b] = " "
            end
            if lvl1[m] == nil then
                lvl1[m] = " "
            end
            if lvl1[e] == nil then
                lvl1[e] = " "
            end
            et.trap_SendServerCommand(PlayerID, string.format('print \"%21s^1|^7 %21s^1|^7 %21s^1|^7\n"', lvl1[b], lvl1[m], lvl1[e]))
        end
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n\n"))
    end
    if AdminUserLevel(PlayerID) >= 2 then
        et.trap_SendServerCommand(PlayerID, string.format("print \"Level 2 Commands\n"))
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n"))
        for r=1, tonumber(lvl2c), 3 do
            local b = r
            local m = r + 1
            local e = r + 2
            if lvl2[b] == nil then
                lvl2[b] = " "
            end
            if lvl2[m] == nil then
                lvl2[m] = " "
            end
            if lvl2[e] == nil then
                lvl2[e] = " "
            end
            et.trap_SendServerCommand(PlayerID, string.format('print \"%21s^1|^7 %21s^1|^7 %21s^1|^7\n"', lvl2[b], lvl2[m], lvl2[e]))
        end
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n\n"))
    end
    if AdminUserLevel(PlayerID) == 3 then
        et.trap_SendServerCommand(PlayerID, string.format("print \"Level 3 Commands \[SILENT COMMANDS WITH /sc \(command\)\]\n"))
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n"))
        for t=1, tonumber(lvl3c), 3 do
            local b = t
            local m = t + 1
            local e = t + 2
            if lvl3[b] == nil then
                lvl3[b] = " "
            end
            if lvl3[m] == nil then
                lvl3[m] = " "
            end
            if lvl3[e] == nil then
                lvl3[e] = " "
            end
            et.trap_SendServerCommand(PlayerID, string.format('print \"%21s^1|^7 %21s^1|^7 %21s^1|^7\n"', lvl3[b], lvl3[m], lvl3[e]))
        end
        et.trap_SendServerCommand(PlayerID, string.format("print \"^1-------------------------------------------------------------------\n\n"))
    end
end

function et_Obituary( victim, killer, meansOfDeath )
    local killername= ""

    local killedname=et.Info_ValueForKey( et.trap_GetUserinfo( victim ), "name" )
      local victimteam = tonumber(et.gentity_get(victim, "sess.sessionTeam"))
      local killerteam = tonumber(et.gentity_get(killer, "sess.sessionTeam"))
    weapon = ""

    if victimteam ~= killerteam and killer ~= 1022 and killer ~= victim then
        killername=et.Info_ValueForKey( et.trap_GetUserinfo( killer ), "name" )
        lastblood = killername
        khp[killer] = (mtime + 5000)
        if khp[victim] == nil then
            khp[victim] = 0
        end
    end

    if victimteam ~= killerteam and killer ~= 1022 and killer ~= victim then
        if killer ~= victim then
            if firstblood == 0 then
                firstblood = 1
                    if k_firstblood == 1 then
                        local str = string.gsub(k_fb_message, "#killer#", killername)

                        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..fb_location.." "..str.."\n" )
                        if k_firstbloodsound == 1 then
                            if k_noisereduction == 1 then
                                et.G_ClientSound(killer, firstbloodsound)
                            else
                                et.G_globalSound(firstbloodsound)
                            end
                        end
                    end
            end
        end

          local killerhp = et.gentity_get(killer, "health")
        if k_killerhpdisplay == 1 then
            if khp[victim] < mtime then
                if (killerhp>=75) then
--                         et.trap_SendServerCommand(victim, ("b 8 \"^" .. k_color .. "You got owned!"))
                    et.trap_SendServerCommand(victim, ("b 8 \"^7" .. killername .. "^" .. k_color .. "'s hp (^o" ..killerhp .. "^" .. k_color .. ")"))
                    if adrenaline[killer] == 1 then
                        et.trap_SendServerCommand(victim, ("b 8 \"^7" .. killername .. "^" .. k_color .. " is an adrenaline junkie!\""))
                    end
                   elseif (killerhp>=50 and killerhp<=74) then
--                    et.trap_SendServerCommand(victim, string.format("b 8 \"^" .. k_color .. "You're not a total newb."))
                    et.trap_SendServerCommand(victim, string.format("b 8 \"^7" ..killername .. "^" .. k_color .. "'s hp (^o" ..killerhp.. "^" .. k_color .. ")"))
                    if adrenaline[killer] == 1 then
                        et.trap_SendServerCommand(victim, ("b 8 \"^7" .. killername .. "^" .. k_color .. " is an adrenaline junkie!\""))
                    end
                elseif (killerhp>=25 and killerhp<=49) then
--                    et.trap_SendServerCommand(victim, string.format("b 8 \"^" .. k_color .. "Try Harder!"))
                    et.trap_SendServerCommand(victim, string.format("b 8 \"^7" ..killername.. "^" .. k_color .. "'s hp (^o" ..killerhp.. "^" .. k_color .. ")"))
                    if adrenaline[killer] == 1 then
                        et.trap_SendServerCommand(victim, ("b 8 \"^7" .. killername .. "^" .. k_color .. " is an adrenaline junkie!\""))
                    end
                elseif (killerhp>0 and killerhp<=24) then
--                    et.trap_SendServerCommand(victim, string.format("b 8 \"^" .. k_color .. "Almost!"))
                    et.trap_SendServerCommand(victim, string.format("b 8 \"^7" ..killername.. "^" .. k_color .. "'s hp (^o" ..killerhp.. "^" .. k_color .. ")"))
                    if adrenaline[killer] == 1 then
                        et.trap_SendServerCommand(victim, ("b 8 \"^7" .. killername .. "^" .. k_color .. " is an adrenaline junkie!\""))
                    end
                end
            end
                if (killerhp<=0) then
                    if meansOfDeath == 4 or meansOfDeath == 18 or meansOfDeath == 18 or meansOfDeath == 26 or meansOfDeath == 27 or meansOfDeath == 30 or meansOfDeath == 44 or meansOfDeath == 43 then
                        et.trap_SendServerCommand(victim, string.format("b 8 \"^" .. k_color .. "You were owned by ^7" .. killername .. "^" .. k_color .. "'s explosive inheritance"))
                    end
                end
        end
    end

    kills(victim, killer, meansOfDeath, weapon)
    deaths(victim, killer, meansOfDeath, weapon)

    if meansOfDeath == 64 or meansOfDeath == 63 then
        switchteam[victim] = 1
    else
        switchteam[victim] = 0
    end

--Weapons used!

    if (meansOfDeath==0) then
        weapon="UNKNOWN"
    elseif (meansOfDeath==1) then
        weapon="MACHINEGUN"
    elseif (meansOfDeath==2) then
        weapon="BROWNING"
    elseif (meansOfDeath==3) then
        weapon="MG42"
    elseif (meansOfDeath==4) then
        weapon="GRENADE"
    elseif (meansOfDeath==5) then
        weapon="ROCKET"
    elseif (meansOfDeath==6) then
        weapon="KNIFE"
    elseif (meansOfDeath==7) then
        weapon="LUGER"
    elseif (meansOfDeath==8) then
        weapon="COLT"
    elseif (meansOfDeath==9) then
        weapon="MP40"
    elseif (meansOfDeath==10) then
        weapon="THOMPSON"
    elseif (meansOfDeath==11) then
        weapon="STEN"
    elseif (meansOfDeath==12) then
        weapon="GARAND"
    elseif (meansOfDeath==13) then
        weapon="SNOOPERSCOPE"
    elseif (meansOfDeath==14) then
        weapon="SILENCER"
    elseif (meansOfDeath==15) then
        weapon="FG42"
    elseif (meansOfDeath==16) then
        weapon="FG42SCOPE"
    elseif (meansOfDeath==17) then
        weapon="PANZERFAUST"
    elseif (meansOfDeath==18) then
        weapon="GRENADE_LAUNCHER"
    elseif (meansOfDeath==19) then
        weapon="FLAMETHROWER"
    elseif (meansOfDeath==20) then
        weapon="GRENADE_PINEAPPLE"
    elseif (meansOfDeath==21) then
        weapon="CROSS"
    elseif (meansOfDeath==22) then
        weapon="MAPMORTAR"
    elseif (meansOfDeath==23) then
        weapon="MAPMORTAR_SPLASH"
    elseif (meansOfDeath==24) then
        weapon="KICKED"
    elseif (meansOfDeath==25) then
        weapon="GRABBER"
    elseif (meansOfDeath==26) then
        weapon="DYNAMITE"
    elseif (meansOfDeath==27) then
        weapon="AIRSTRIKE"
    elseif (meansOfDeath==28) then
        weapon="SYRINGE"
    elseif (meansOfDeath==29) then
        weapon="AMMO"
    elseif (meansOfDeath==30) then
        weapon="ARTY"
    elseif (meansOfDeath==31) then
        weapon="WATER"
    elseif (meansOfDeath==32) then
        weapon="SLIME"
    elseif (meansOfDeath==33) then
        weapon="LAVA"
    elseif (meansOfDeath==34) then
        weapon="CRUSH"
    elseif (meansOfDeath==35) then
        weapon="TELEFRAG"
    elseif (meansOfDeath==36) then
        weapon="FALLING"
    elseif (meansOfDeath==37) then
        weapon = "SUICIDE"
    elseif (meansOfDeath==38) then
        weapon="TARGET_LASER"
    elseif (meansOfDeath==39) then
        weapon="TRIGGER_HURT"
    elseif (meansOfDeath==40) then
        weapon="EXPLOSIVE"
    elseif (meansOfDeath==41) then
        weapon="CARBINE"
    elseif (meansOfDeath==42) then
        weapon="KAR98"
    elseif (meansOfDeath==43) then
        weapon="GPG40"
    elseif (meansOfDeath==44) then
        weapon="M7"
    elseif (meansOfDeath==45) then
        weapon="LANDMINE"
    elseif (meansOfDeath==46) then
        weapon="SATCHEL"
    elseif (meansOfDeath==47) then
        weapon="TRIPMINE"
    elseif (meansOfDeath==48) then
        weapon="SMOKEBOMB"
    elseif (meansOfDeath==49) then
        weapon="MOBILE_MG42"
    elseif (meansOfDeath==50) then
        weapon="SILENCED_COLT"
    elseif (meansOfDeath==51) then
        weapon="GARAND_SCOPE"
    elseif (meansOfDeath==52) then
        weapon="CRUSH_CONSTRUCTION"
    elseif (meansOfDeath==53) then
        weapon="CRUSH_CONSTRUCTIONDEATH"
    elseif (meansOfDeath==54) then
        weapon="CRUSH_CONSTRUCTIONDEATH_NOATTACKER"
    elseif (meansOfDeath==55) then
        weapon="K43"
    elseif (meansOfDeath==56) then
        weapon="K43_SCOPE"
    elseif (meansOfDeath==57) then
        weapon="MORTAR"
    elseif (meansOfDeath==58) then
        weapon="AKIMBO_COLT"
    elseif (meansOfDeath==59) then
        weapon="AKIMBO_LUGER"
    elseif (meansOfDeath==60) then
        weapon="AKIMBO_SILENCEDCOLT"
    elseif (meansOfDeath==61) then
        weapon="AKIMBO_SILENCEDLUGER"
    elseif (meansOfDeath==62) then
        weapon="SMOKEGRENADE"
    elseif (meansOfDeath==63) then
        weapon="SWAP_SPACES"
    elseif (meansOfDeath==64) then
        weapon="SWITCH_TEAM"
    end
end

function kills(victim, killer, meansOfDeath, weapon)

    if (meansOfDeath==0) then
        weapon="UNKNOWN"
    elseif (meansOfDeath==1) then
        weapon="MACHINEGUN"
    elseif (meansOfDeath==2) then
        weapon="BROWNING"
    elseif (meansOfDeath==3) then
        weapon="MG42"
    elseif (meansOfDeath==4) then
        weapon="GRENADE"
    elseif (meansOfDeath==5) then
        weapon="ROCKET"
    elseif (meansOfDeath==6) then
        weapon="KNIFE"
    elseif (meansOfDeath==7) then
        weapon="LUGER"
    elseif (meansOfDeath==8) then
        weapon="COLT"
    elseif (meansOfDeath==9) then
        weapon="MP40"
    elseif (meansOfDeath==10) then
        weapon="THOMPSON"
    elseif (meansOfDeath==11) then
        weapon="STEN"
    elseif (meansOfDeath==12) then
        weapon="GARAND"
    elseif (meansOfDeath==13) then
        weapon="SNOOPERSCOPE"
    elseif (meansOfDeath==14) then
        weapon="SILENCER"
    elseif (meansOfDeath==15) then
        weapon="FG42"
    elseif (meansOfDeath==16) then
        weapon="FG42SCOPE"
    elseif (meansOfDeath==17) then
        weapon="PANZERFAUST"
    elseif (meansOfDeath==18) then
        weapon="GRENADE_LAUNCHER"
    elseif (meansOfDeath==19) then
        weapon="FLAMETHROWER"
    elseif (meansOfDeath==20) then
        weapon="GRENADE_PINEAPPLE"
    elseif (meansOfDeath==21) then
        weapon="CROSS"
    elseif (meansOfDeath==22) then
        weapon="MAPMORTAR"
    elseif (meansOfDeath==23) then
        weapon="MAPMORTAR_SPLASH"
    elseif (meansOfDeath==24) then
        weapon="KICKED"
    elseif (meansOfDeath==25) then
        weapon="GRABBER"
    elseif (meansOfDeath==26) then
        weapon="DYNAMITE"
    elseif (meansOfDeath==27) then
        weapon="AIRSTRIKE"
    elseif (meansOfDeath==28) then
        weapon="SYRINGE"
    elseif (meansOfDeath==29) then
        weapon="AMMO"
    elseif (meansOfDeath==30) then
        weapon="ARTY"
    elseif (meansOfDeath==31) then
        weapon="WATER"
    elseif (meansOfDeath==32) then
        weapon="SLIME"
    elseif (meansOfDeath==33) then
        weapon="LAVA"
    elseif (meansOfDeath==34) then
        weapon="CRUSH"
    elseif (meansOfDeath==35) then
        weapon="TELEFRAG"
    elseif (meansOfDeath==36) then
        weapon="FALLING"
    elseif (meansOfDeath==37) then
        weapon = "SUICIDE"
    elseif (meansOfDeath==38) then
        weapon="TARGET_LASER"
    elseif (meansOfDeath==39) then
        weapon="TRIGGER_HURT"
    elseif (meansOfDeath==40) then
        weapon="EXPLOSIVE"
    elseif (meansOfDeath==41) then
        weapon="CARBINE"
    elseif (meansOfDeath==42) then
        weapon="KAR98"
    elseif (meansOfDeath==43) then
        weapon="GPG40"
    elseif (meansOfDeath==44) then
        weapon="M7"
    elseif (meansOfDeath==45) then
        weapon="LANDMINE"
    elseif (meansOfDeath==46) then
        weapon="SATCHEL"
    elseif (meansOfDeath==47) then
        weapon="TRIPMINE"
    elseif (meansOfDeath==48) then
        weapon="SMOKEBOMB"
    elseif (meansOfDeath==49) then
        weapon="MOBILE_MG42"
    elseif (meansOfDeath==50) then
        weapon="SILENCED_COLT"
    elseif (meansOfDeath==51) then
        weapon="GARAND_SCOPE"
    elseif (meansOfDeath==52) then
        weapon="CRUSH_CONSTRUCTION"
    elseif (meansOfDeath==53) then
        weapon="CRUSH_CONSTRUCTIONDEATH"
    elseif (meansOfDeath==54) then
        weapon="CRUSH_CONSTRUCTIONDEATH_NOATTACKER"
    elseif (meansOfDeath==55) then
        weapon="K43"
    elseif (meansOfDeath==56) then
        weapon="K43_SCOPE"
    elseif (meansOfDeath==57) then
        weapon="MORTAR"
    elseif (meansOfDeath==58) then
        weapon="AKIMBO_COLT"
    elseif (meansOfDeath==59) then
        weapon="AKIMBO_LUGER"
    elseif (meansOfDeath==60) then
        weapon="AKIMBO_SILENCEDCOLT"
    elseif (meansOfDeath==61) then
        weapon="AKIMBO_SILENCEDLUGER"
    elseif (meansOfDeath==62) then
        weapon="SMOKEGRENADE"
    elseif (meansOfDeath==63) then
        weapon="SWAP_SPACES"
    elseif (meansOfDeath==64) then
        weapon="SWITCH_TEAM"
    end

    local kil = tonumber(killer)
    local killername = ""

    victimname=et.Info_ValueForKey( et.trap_GetUserinfo( victim ), "name" )
    playerlastkilled[killer] = victim
    killedwithweapk[killer] = tostring(weapon)
    local victimteam = tonumber(et.gentity_get(victim, "sess.sessionTeam"))
    local killerteam = tonumber(et.gentity_get(killer, "sess.sessionTeam"))

    if killer == 1022 then
        killername="The World"
        if k_sprees == 1 then
            if (killingspree[victim]>=5) then
                local str = string.gsub(k_end_message3, "#victim#", victimname)
                local str = string.gsub(str, "#kills#", killingspree[victim])
                local str = string.gsub(str, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
                killingspree[victim]=0
            else
                killingspree[victim]=0
            end
        end

        if k_spreerecord == 1 then
            if killr[victim] > spreerecordkills then
                spreerecord(victim, killr[victim])
                killr[victim] = 0
            else
                killr[victim] = 0
            end
        end

--        multikill[victim]=0
        flakmonkey[victim]=0
    else
        killername=et.Info_ValueForKey( et.trap_GetUserinfo( killer ), "name" )
    end

    if (killer~=victim) then
        if k_sprees == 1 then
            deathspree[killer]=0
        end
    else
    end

if Gamestate == 0 then
    if k_teamkillrestriction == 1 then
        if victimteam == killerteam and killer ~= victim and killer ~= 1022 then
            if AdminUserLevel(killer) < k_tk_protect then

                local warning = (k_tklimit_low + 1)
                local pbkiller = killer + 1
                if meansOfDeath == 17 or meansOfDeath == 43 or meansOfDeath == 44 or meansOfDeath == 4 or meansOfDeath == 18 or meansOfDeath == 57 or meansOfDeath == 30  or meansOfDeath == 27 or meansOfDeath == 49 or meansOfDeath == 3 then
                    teamkillr[killer] = teamkillr[killer] - 0.75
                elseif meansOfDeath == 30  or meansOfDeath == 27 then
                    teamkillr[killer] = teamkillr[killer] - 0.65
                elseif meansOfDeath == 45 then    -- Mines do nothing!
                else
                    teamkillr[killer] = teamkillr[killer] - 1
                end
                if warning > teamkillr[killer] and k_tklimit_low < teamkillr[killer] then
                    if k_advancedpms == 1 then
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, "m2 " .. killername .. " ^1You are making to many teamkills please be more careful or you will be kicked!\n" )
                        et.G_ClientSound(killer, pmsound)
                    else
                        et.trap_SendConsoleCommand( et.EXEC_APPEND, "m " .. killername .. " ^1You are making to many teamkills please be more careful or you will be kicked!\n" )
                    end
                elseif teamkillr[killer] <= k_tklimit_low then
                    et.trap_SendConsoleCommand( et.EXEC_APPEND, "pb_sv_kick " .. pbkiller .. " 10 Too many teamkills\n" )
                end
            end
        else
            if killer ~= victim then
                if killer ~= 1022 then
                    teamkillr[killer] = teamkillr[killer] + 1
                    if teamkillr[killer] > k_tklimit_high then
                        teamkillr[killer] = k_tklimit_high
                    end
                end
            end
        end
    end
end


    
if k_multikills == 1 then
    if killer ~= victim and victimteam ~= killerteam and killer ~= 1022 then
        local dvtime = (k_multikill_time * 1000)

        multikill[killer]=multikill[killer]+1

        if (multikill[killer]==1) then
            kill1[killer]=mtime

        elseif (multikill[killer]==2) then
            kill2[killer]=mtime
            local mktime=((kill2[killer]-kill1[killer])/1000)

            if ((kill2[killer]-kill1[killer])<=dvtime) then
                local str = string.gsub(k_mk_message1, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..mk_location.." "..str.."\n")
                if k_multikillsounds == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, doublekillsound)
                    else
                        et.G_globalSound(doublekillsound)
                    end
                end
            else
                multikill[killer]=0
                multikill[killer]=multikill[killer]+1
                kill1[killer]=mtime
            end
        elseif (multikill[killer]==3) then
            kill3[killer]=tonumber(mtime)
            local mktime=((kill3[killer]-kill2[killer])/1000)

            if ((kill3[killer]-kill2[killer])<=dvtime) then
                local str = string.gsub(k_mk_message2, "#killer#", killername)
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..mk_location.." "..str.."\n")
                if k_multikillsounds == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, multikillsound)
                    else
                        et.G_globalSound(multikillsound)
                    end
                end
            else
                multikill[killer]=0
                multikill[killer]=multikill[killer]+1
                kill1[killer]=mtime
            end
        elseif (multikill[killer]==4) then
            kill4[killer]=tonumber(mtime)
            local mktime=((kill4[killer]-kill3[killer])/1000)

            if ((kill4[killer]-kill3[killer])<=dvtime) then
                local str = string.gsub(k_mk_message3, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..mk_location.." "..str.."\n")
                if k_multikillsounds == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, megakillsound)
                    else
                        et.G_globalSound(megakillsound)
                    end
                end
            else
                multikill[killer]=0
                multikill[killer]=multikill[killer]+1
                kill1[killer]=mtime
            end
        elseif (multikill[killer]==5) then
            kill5[killer]=tonumber(mtime)
            local mktime=((kill5[killer]-kill4[killer])/1000)

            if ((kill5[killer]-kill4[killer])<=dvtime) then
                local str = string.gsub(k_mk_message4, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..mk_location.." "..str.."\n")
                if k_multikillsounds == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, ultrakillsound)
                    else
                        et.G_globalSound(ultrakillsound)
                    end
                end
            else
                multikill[killer]=0
                multikill[killer]=multikill[killer]+1
                kill1[killer]=mtime
            end
        elseif (multikill[killer]==6) then
            kill6[killer]=tonumber(mtime)
            local mktime=((kill6[killer]-kill5[killer])/1000)

            if ((kill6[killer]-kill5[killer])<=dvtime) then
                local str = string.gsub(k_mk_message5, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..mk_location.." "..str.."\n")
                if k_multikillsounds == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, monsterkillsound)
                    else
                        et.G_globalSound(monsterkillsound)
                    end
                end
            else
                multikill[killer]=0
                multikill[killer]=multikill[killer]+1
                kill1[killer]=mtime
            end
        elseif (multikill[killer]==7) then
            kill7[killer]=tonumber(mtime)
            local mktime=((kill7[killer]-kill6[killer])/1000)

            if ((kill6[killer]-kill5[killer])<=dvtime) then
                local str = string.gsub(k_mk_message6, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..mk_location.." "..str.."\n")
                if k_multikillsounds == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, ludicrouskillsound)
                    else
                        et.G_globalSound(ludicrouskillsound)
                    end
                end
            else
                multikill[killer]=0
                multikill[killer]=multikill[killer]+1
                kill1[killer]=mtime
            end
        elseif (multikill[killer]==8) then
            kill8[killer]=tonumber(mtime)
            local mktime=((kill8[killer]-kill7[killer])/1000)

            if ((kill6[killer]-kill5[killer])<=dvtime) then
                local str = string.gsub(k_mk_message7, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..mk_location.." "..str.."\n")
                if k_multikillsounds == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, holyshitsound)
                    else
                        et.G_globalSound(holyshitsound)
                    end
                end

                multikill[killer]=0
            else
                multikill[killer]=0
                multikill[killer]=multikill[killer]+1
                kill1[killer]=mtime
            end
        end
    else
        multikill[killer]=0
    end
end


if killer ~= victim and victimteam ~= killerteam and killer ~= 1022 then
    if k_spreerecord == 1 then
        killr[killer] = killr[killer] + 1
    end

    if k_sprees == 1 then
        killingspree[killer]=killingspree[killer]+1

        if (killingspree[killer]==k_spree1_amount) then
            local str = string.gsub(k_ks_message1, "#killer#", killername)
            local str = string.gsub(str, "#kills#", killingspree[killer])

--            et.trap_SendServerCommand( killer,"cp \"^1KILLINGSPREE!\"\n")
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            if k_spreesounds == 1 then
                if k_noisereduction == 1 then
                    et.G_ClientSound(killer, killingspreesound)
                else
                    et.G_globalSound(killingspreesound)
                end
            end
        elseif (killingspree[killer]==k_spree2_amount) then
            local str = string.gsub(k_ks_message2, "#killer#", killername)
            local str = string.gsub(str, "#kills#", killingspree[killer])

--            et.trap_SendServerCommand( killer,"cp \"^1RAMPAGE!\"\n")
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            if k_spreesounds == 1 then
                if k_noisereduction == 1 then
                    et.G_ClientSound(killer, rampagesound)
                else
                    et.G_globalSound(rampagesound)
                end
            end
        elseif (killingspree[killer]==k_spree3_amount) then
            local str = string.gsub(k_ks_message3, "#killer#", killername)
            local str = string.gsub(str, "#kills#", killingspree[killer])

--            et.trap_SendServerCommand( killer,"cp \"^1DOMINATION!\"\n")
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            if k_spreesounds == 1 then
                if k_noisereduction == 1 then
                    et.G_ClientSound(killer, dominatingsound)
                else
                    et.G_globalSound(dominatingsound)
                end
            end
        elseif (killingspree[killer]==k_spree4_amount) then
            local str = string.gsub(k_ks_message4, "#killer#", killername)
            local str = string.gsub(str, "#kills#", killingspree[killer])

--            et.trap_SendServerCommand( killer,"cp \"^1UNSTOPABLE!\"\n")
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            if k_spreesounds == 1 then
                if k_noisereduction == 1 then
                    et.G_ClientSound(killer, unstopablesound)
                else
                    et.G_globalSound(unstopablesound)
                end
            end
        elseif (killingspree[killer]==k_spree5_amount) then
            local str = string.gsub(k_ks_message5, "#killer#", killername)
            local str = string.gsub(str, "#kills#", killingspree[killer])

--            et.trap_SendServerCommand( killer,"cp \"^1GODLIKE!\"\n")
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            if k_spreesounds == 1 then
                if k_noisereduction == 1 then
                    et.G_ClientSound(killer, godlikesound)
                else
                    et.G_globalSound(godlikesound)
                end
            end
        elseif (killingspree[killer]==k_spree6_amount) then
            local str = string.gsub(k_ks_message6, "#killer#", killername)
            local str = string.gsub(str, "#kills#", killingspree[killer])

--            et.trap_SendServerCommand( killer,"cp \"^1WICKED SICK!\"\n")
            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            if k_spreesounds == 1 then
                if k_noisereduction == 1 then
                    et.G_ClientSound(killer, wickedsicksound)
                else
                    et.G_globalSound(wickedsicksound)
                end
            end
        end

    end
else
    if (killingspree[killer]>=5) then
        if killer == victim then
            local str = string.gsub(k_end_message2, "#victim#", victimname)
            local str = string.gsub(str, "#kills#", killingspree[victim])
            local str = string.gsub(str, "#killer#", killername)

            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            killingspree[killer]=0
        else
            local str = string.gsub(k_end_message4, "#victim#", victimname)
            local str = string.gsub(str, "#kills#", killingspree[killer])
            local str = string.gsub(str, "#killer#", killername)

            et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
            killingspree[killer]=0
        end
    else
        killingspree[killer]=0
    end

    if k_spreerecord == 1 then
        if killr[victim] > spreerecordkills then
            spreerecord(victim, killr[victim])
            killr[victim] = 0
        else
            killr[victim] = 0
        end
    end
end

if k_flakmonkey == 1 then
    if (meansOfDeath==17 or meansOfDeath==43 or meansOfDeath==44) then
        if killer ~= victim and victimteam ~= killerteam then
            flakmonkey[killer]=flakmonkey[killer]+1

            if (flakmonkey[killer]==3) then
                local str = string.gsub(k_fm_message, "#killer#", killername)

--                et.trap_SendServerCommand( killer,"cp \"^1FLAKMONKEY!\"\n")
                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..fm_location.." "..str.."\n" )
                if k_flakmonkeysound == 1 then
                    if k_noisereduction == 1 then
                        et.G_ClientSound(killer, flakmonkeysound)
                    else
                        et.G_globalSound(flakmonkeysound)
                    end
                end

                flakmonkey[killer]=0
            end

        else
                flakmonkey[killer]=0
        end
    else
                flakmonkey[killer]=0
    end
end

end

function deaths(victim, killer, meansOfDeath, weapon)

    if (meansOfDeath==0) then
        weapon="UNKNOWN"
    elseif (meansOfDeath==1) then
        weapon="MACHINEGUN"
    elseif (meansOfDeath==2) then
        weapon="BROWNING"
    elseif (meansOfDeath==3) then
        weapon="MG42"
    elseif (meansOfDeath==4) then
        weapon="GRENADE"
    elseif (meansOfDeath==5) then
        weapon="ROCKET"
    elseif (meansOfDeath==6) then
        weapon="KNIFE"
    elseif (meansOfDeath==7) then
        weapon="LUGER"
    elseif (meansOfDeath==8) then
        weapon="COLT"
    elseif (meansOfDeath==9) then
        weapon="MP40"
    elseif (meansOfDeath==10) then
        weapon="THOMPSON"
    elseif (meansOfDeath==11) then
        weapon="STEN"
    elseif (meansOfDeath==12) then
        weapon="GARAND"
    elseif (meansOfDeath==13) then
        weapon="SNOOPERSCOPE"
    elseif (meansOfDeath==14) then
        weapon="SILENCER"
    elseif (meansOfDeath==15) then
        weapon="FG42"
    elseif (meansOfDeath==16) then
        weapon="FG42SCOPE"
    elseif (meansOfDeath==17) then
        weapon="PANZERFAUST"
    elseif (meansOfDeath==18) then
        weapon="GRENADE_LAUNCHER"
    elseif (meansOfDeath==19) then
        weapon="FLAMETHROWER"
    elseif (meansOfDeath==20) then
        weapon="GRENADE_PINEAPPLE"
    elseif (meansOfDeath==21) then
        weapon="CROSS"
    elseif (meansOfDeath==22) then
        weapon="MAPMORTAR"
    elseif (meansOfDeath==23) then
        weapon="MAPMORTAR_SPLASH"
    elseif (meansOfDeath==24) then
        weapon="KICKED"
    elseif (meansOfDeath==25) then
        weapon="GRABBER"
    elseif (meansOfDeath==26) then
        weapon="DYNAMITE"
    elseif (meansOfDeath==27) then
        weapon="AIRSTRIKE"
    elseif (meansOfDeath==28) then
        weapon="SYRINGE"
    elseif (meansOfDeath==29) then
        weapon="AMMO"
    elseif (meansOfDeath==30) then
        weapon="ARTY"
    elseif (meansOfDeath==31) then
        weapon="WATER"
    elseif (meansOfDeath==32) then
        weapon="SLIME"
    elseif (meansOfDeath==33) then
        weapon="LAVA"
    elseif (meansOfDeath==34) then
        weapon="CRUSH"
    elseif (meansOfDeath==35) then
        weapon="TELEFRAG"
    elseif (meansOfDeath==36) then
        weapon="FALLING"
    elseif (meansOfDeath==37) then
        weapon = "SUICIDE"
    elseif (meansOfDeath==38) then
        weapon="TARGET_LASER"
    elseif (meansOfDeath==39) then
        weapon="TRIGGER_HURT"
    elseif (meansOfDeath==40) then
        weapon="EXPLOSIVE"
    elseif (meansOfDeath==41) then
        weapon="CARBINE"
    elseif (meansOfDeath==42) then
        weapon="KAR98"
    elseif (meansOfDeath==43) then
        weapon="GPG40"
    elseif (meansOfDeath==44) then
        weapon="M7"
    elseif (meansOfDeath==45) then
        weapon="LANDMINE"
    elseif (meansOfDeath==46) then
        weapon="SATCHEL"
    elseif (meansOfDeath==47) then
        weapon="TRIPMINE"
    elseif (meansOfDeath==48) then
        weapon="SMOKEBOMB"
    elseif (meansOfDeath==49) then
        weapon="MOBILE_MG42"
    elseif (meansOfDeath==50) then
        weapon="SILENCED_COLT"
    elseif (meansOfDeath==51) then
        weapon="GARAND_SCOPE"
    elseif (meansOfDeath==52) then
        weapon="CRUSH_CONSTRUCTION"
    elseif (meansOfDeath==53) then
        weapon="CRUSH_CONSTRUCTIONDEATH"
    elseif (meansOfDeath==54) then
        weapon="CRUSH_CONSTRUCTIONDEATH_NOATTACKER"
    elseif (meansOfDeath==55) then
        weapon="K43"
    elseif (meansOfDeath==56) then
        weapon="K43_SCOPE"
    elseif (meansOfDeath==57) then
        weapon="MORTAR"
    elseif (meansOfDeath==58) then
        weapon="AKIMBO_COLT"
    elseif (meansOfDeath==59) then
        weapon="AKIMBO_LUGER"
    elseif (meansOfDeath==60) then
        weapon="AKIMBO_SILENCEDCOLT"
    elseif (meansOfDeath==61) then
        weapon="AKIMBO_SILENCEDLUGER"
    elseif (meansOfDeath==62) then
        weapon="SMOKEGRENADE"
    elseif (meansOfDeath==63) then
        weapon="SWAP_SPACES"
    elseif (meansOfDeath==64) then
        weapon="SWITCH_TEAM"
    end

    local kil = tonumber(killer)
    local killername = ""

    if killer == 1022 then
        killername="The World"
    else
        killername=et.Info_ValueForKey( et.trap_GetUserinfo( killer ), "name" )
    end
    playerwhokilled[victim] = killer
    killedwithweapv[victim] = tostring(weapon)

    local victimteam = tonumber(et.gentity_get(victim, "sess.sessionTeam"))
    local killerteam = tonumber(et.gentity_get(killer, "sess.sessionTeam"))
    local killedname=et.Info_ValueForKey( et.trap_GetUserinfo( victim ), "name" )

        if k_spreerecord == 1 then
            if killr[victim] > spreerecordkills then
                spreerecord(victim, killr[victim])
                killr[victim] = 0
            else
                killr[victim] = 0
            end
        end



if k_deathsprees == 1 then
    deathspree[victim]=deathspree[victim]+1
end
        if k_sprees == 1 then
            if (killingspree[victim]>=5) then
                local str = string.gsub(k_end_message1, "#victim#", killedname)
                local str = string.gsub(str, "#kills#", killingspree[victim])
                local str = string.gsub(str, "#killer#", killername)

                et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ks_location.." "..str.."\n" )
                killingspree[victim]=0
            else
                killingspree[victim]=0
            end
        end

    flakmonkey[victim]=0
--    multikill[victim]=0

if k_deathsprees == 1 then
    if (deathspree[victim]==k_deathspree1_amount) then
        local str = string.gsub(k_ds_message1, "#victim#", killedname)
        local str = string.gsub(str, "#deaths#", deathspree[victim])

        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ds_location.." "..str.."\n" )
        if k_deathspreesounds == 1 then
            if k_noisereduction == 1 then
                et.G_ClientSound(victim, deathspreesound1)
            else
                et.G_globalSound(deathspreesound1)
            end
        end
    elseif (deathspree[victim]==k_deathspree2_amount) then
        local str = string.gsub(k_ds_message2, "#victim#", killedname)
        local str = string.gsub(str, "#deaths#", deathspree[victim])

        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ds_location.." "..str.."\n" )
        if k_deathspreesounds == 1 then
            if k_noisereduction == 1 then
                et.G_ClientSound(victim, deathspreesound2)
            else
                et.G_globalSound(deathspreesound2)
            end
        end
    elseif (deathspree[victim]==k_deathspree3_amount) then
        local str = string.gsub(k_ds_message3, "#victim#", killedname)
        local str = string.gsub(str, "#deaths#", deathspree[victim])

        et.trap_SendConsoleCommand( et.EXEC_APPEND, ""..ds_location.." "..str.."\n" )
        if k_deathspreesounds == 1 then
            if k_noisereduction == 1 then
                et.G_ClientSound(victim, deathspreesound3)
            else
                et.G_globalSound(deathspreesound3)
            end
        end
    end
end

end

function et.G_ClientSound(clientnum, soundfile)
    local tempentity = et.G_TempEntity(et.gentity_get(clientnum, "r.currentOrigin"), EV_GLOBAL_CLIENT_SOUND)
    et.gentity_set(tempentity, "s.teamNum", clientnum)
    et.gentity_set(tempentity, "s.eventParm", et.G_SoundIndex(soundfile))
end
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



Wersja Lo-Fi