mirror of
https://github.com/etlegacy/etlegacy-lua-scripts.git
synced 2025-02-17 01:11:41 +00:00
lua: (noq) added NOQ svn 199
This commit is contained in:
parent
fa6564bdd1
commit
560a2c8b88
15 changed files with 4565 additions and 0 deletions
2917
noq/noq.lua
Normal file
2917
noq/noq.lua
Normal file
File diff suppressed because it is too large
Load diff
136
noq/noq_commands.cfg
Normal file
136
noq/noq_commands.cfg
Normal file
|
@ -0,0 +1,136 @@
|
|||
# <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)
|
||||
# parallel: all attributes for the second player(specified via part of name or slotnumber):
|
||||
#<PART2_CLASS> = class
|
||||
#<PART2_TEAM> = team
|
||||
#<PART2CNAME> = colored name
|
||||
#<PART2ID> = id
|
||||
#<PART2PBID> = punkbuster slotnumber
|
||||
#<PART2GUID> = guid
|
||||
#<PART2LEVEL> = adminlevel
|
||||
#<PART2NAME> = name without color
|
||||
|
||||
0 - help =
|
||||
|
||||
#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.
|
||||
# PLEASE NOTE: PARAMETER IS UNSAFE
|
||||
|
||||
# Rcon Shortcuts (Work with all mods / etmain)
|
||||
2 - start = start_match
|
||||
help = Starts the match
|
||||
syntax = !start
|
||||
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 <PART2ID>
|
||||
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 <PART2ID>
|
||||
#2 - putspec = ref remove <PART2ID>
|
||||
#2 - putaxis = ref putaxis <PART2ID>
|
||||
#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 <PART2PBID> 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!
|
||||
help = Gives the target a beer
|
||||
syntax = !beer playername/slot
|
||||
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! ; playsound -1 sound/misc/bye.wav
|
||||
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!
|
||||
1 - holyshit = playsound sound/misc/holyshit.wav
|
||||
1 - denied = playsound sound/misc/Denied.wav
|
||||
1 - headshot1 = playsound sound/misc/boomheadshot.wav
|
||||
1 - headshot2 = playsound sound/misc/Headshot.wav
|
||||
1 - prick = playsound sound/misc/prick.wav
|
||||
2 - respect = playsound sound/misc/respect_x.wav
|
||||
1 - victory = playsound sound/misc/victory.wav
|
||||
1 - jackass = playsound sound/misc/DONKEY.wav
|
||||
1 - looser = playsound sound/misc/ae821.wav
|
||||
1 - goodnews = playsound sound/misc/goodnews.wav
|
||||
1 - nogodno = playsound sound/misc/nogodno.wav
|
||||
#0 - random = qsay <RANDOM_CNAME> ^3is on the <RANDOM_TEAM> team as a <RANDOM_CLASS>!
|
||||
|
||||
#for spamming
|
||||
0 - owned = qsay ^1Ha^3ha^5ha^3, I owned ^7<PLAYER_LAST_VICTIM_CNAME>^3 with my ^7<PLAYER_LAST_VICTIM_WEAPON>^3!!!
|
||||
0 - pants = qsay ^1No^3no^5noooo^3, I was killed by ^7<PLAYER_LAST_KILLER_CNAME>^3 with a ^7<PLAYER_LAST_KILLER_WEAPON>^3!!!
|
||||
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>
|
||||
#3 - bluerespawn = forcecvar g_bluelimbotime <PARAMETER>
|
||||
#3 - redrespawn = forcecvar g_redlimbotime <PARAMETER>
|
||||
|
||||
#2 - showtk = $LUA$ showTkTable(<CLIENT_ID>)
|
42
noq/noq_config.cfg.sample
Normal file
42
noq/noq_config.cfg.sample
Normal file
|
@ -0,0 +1,42 @@
|
|||
-- Make this file your own ...
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
["dbms"]="mySQL",
|
||||
["dbname"]="dbname",
|
||||
["dbuser"]="dbuser",
|
||||
["dbpassword"]="dbpass",
|
||||
["dbhostname"]="dbhost",
|
||||
["dbport"]="3306",
|
||||
["useDB"]="1",
|
||||
["mail"] = "0",
|
||||
["mailserv"] = "XXX",
|
||||
["mailport"] = "25",
|
||||
["mailfrom"] = "<XXX>",
|
||||
["recordbots"] = "0",
|
||||
["color"] = "^3",
|
||||
["commandprefix"] = "!",
|
||||
["debug"] = "0",
|
||||
["debugquerries"] = "0",
|
||||
["persgamestartmessage"] = "Welcome to the server",
|
||||
["persgamestartmessagelocation"] = "cpm",
|
||||
["xprestore"] = "1",
|
||||
["pussyfactor"] = "1",
|
||||
["usecommands"] = "0",
|
||||
["polldistance"] = "120",
|
||||
["maxSelfKills"] = "3",
|
||||
["evenerCheckallSec"] = "40",
|
||||
["nextmapVoteSec"] = "0",
|
||||
["lognames"]="1",
|
||||
["irchost"]="",
|
||||
["ircport"]="1337",
|
||||
["teamdamageMessage1"] = "You do love your mates!",
|
||||
["teamdamageMessage2"] = "you hit your mates from time to time!",
|
||||
["teamdamageMessage3"] = "you don't care about teambleeding very much!",
|
||||
["teamdamageMessage4"] = "your nickname is a synonym of collateral damage!",
|
||||
["teamdamageMessage5"] = "you don't care about teams - everybody is your enemy!",
|
||||
["teamdamageMessage6"] = "you are a counteragent killing more of your own team. Get paid by enemy?",
|
||||
["deleteSessionsOlderXMonths"] = "0",
|
||||
},
|
||||
}
|
||||
|
331
noq/noq_db.lua
Normal file
331
noq/noq_db.lua
Normal file
|
@ -0,0 +1,331 @@
|
|||
-- The NOQ - No Quarter Lua next generation game manager
|
||||
--
|
||||
-- A Shrubbot replacement and also kind of new game manager and tracking system based on mysql or sqlite3.
|
||||
-- Both are supported and in case of sqlite there is no extra sqlite installation needed.
|
||||
--
|
||||
-- NQ Lua team 2009-2011 - No warranty :)
|
||||
|
||||
-- NQ Lua team is:
|
||||
-- ailmanki
|
||||
-- BubbaG1
|
||||
-- Hose
|
||||
-- IlDuca
|
||||
-- IRATA [*]
|
||||
-- Luborg
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- DBMS
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- We could allocate this each time, but since are used lot of times is better to make them global
|
||||
-- TODO: cur and res are exactly the same things, so we could save memory using only one of them
|
||||
-- cur = {} -- Will handle the SQL commands returning informations ( es: SELECT )
|
||||
-- res = {} -- Will handle SQL commands without outputs ( es: INSERT )
|
||||
-- row = {} -- To manipulate the outputs of SQL command
|
||||
-- --row1 = {} -- To manipulate the outputs of SQL command in case we need more than one request
|
||||
-- TODO: does this apply here also? how to do then? ['cur'] and reference it each time?
|
||||
--
|
||||
-- TODO: Check for various injections possibilities, create a function to sanitize input!
|
||||
-- TODO: Merge double code..
|
||||
|
||||
DBCon = {
|
||||
-- Database managment system to use
|
||||
['dbms'] = getConfig("dbms"), -- possible values mySQL, SQLite
|
||||
['dbname'] = getConfig("dbname"),
|
||||
['debugquerries'] = tonumber(getConfig("debugquerries")),
|
||||
['con'] = nil,
|
||||
['env'] = nil,
|
||||
['cur'] = {},
|
||||
['row'] = {},
|
||||
|
||||
['DoConnect'] = function( self )
|
||||
-- Handle different dbms
|
||||
if self.dbms == "mySQL" then
|
||||
require "luasql.mysql"
|
||||
self.env = assert( luasql.mysql() )
|
||||
self.con = assert( self.env:connect(self.dbname, getConfig("dbuser"), getConfig("dbpassword"), getConfig("dbhostname"), getConfig("dbport")) )
|
||||
elseif self.dbms == "SQLite" then
|
||||
require "luasql.sqlite3"
|
||||
self.env = assert( luasql.sqlite3() )
|
||||
-- this opens OR creates a sqlite db - if this file is loaded db is created -fix this?
|
||||
self.con = assert( self.env:connect( self.dbname ) )
|
||||
elseif self.dbms == "postgreSQL" then
|
||||
require "luasql.postgresql"
|
||||
self.env = assert( luasql.postgresql() )
|
||||
self.con = assert( self.env:connect(self.dbname, getConfig("dbuser"), getConfig("dbpassword"), getConfig("dbhostname"), getConfig("dbport")) )
|
||||
else
|
||||
-- stop script
|
||||
error("DBMS not supported.")
|
||||
end
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- DoDisconnect
|
||||
-- Does close connection to the DBMS
|
||||
-------------------------------------------------------------------------------
|
||||
['DoDisconnect'] = function ( self )
|
||||
self.con:close()
|
||||
self.env:close()
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- GetVersion
|
||||
-- Returns DB Version
|
||||
-------------------------------------------------------------------------------
|
||||
['GetVersion'] = function( self )
|
||||
-- Check the database version
|
||||
self.cur = assert( self.con:execute("SELECT version FROM version ORDER BY id DESC LIMIT 1") )
|
||||
self.row = self.cur:fetch ({}, "a")
|
||||
self.cur:close()
|
||||
return self.row.version -- FIXME: tonumber(self.row.version)
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- SetPlayerAlias
|
||||
-- Adds an Alias if not existing
|
||||
-------------------------------------------------------------------------------
|
||||
['SetPlayerAlias'] = function( self, thisName, thisGuid )
|
||||
-- search alias based on guid and name
|
||||
local thisName = string.gsub(thisName,"\'", "\\\'")
|
||||
self.cur = assert (self.con:execute("SELECT * FROM log WHERE guid1='".. thisGuid .."' AND type='3' AND textxml='<name>".. thisName .."</name>' LIMIT 1"))
|
||||
self.row = self.cur:fetch ({}, "a")
|
||||
self.cur:close()
|
||||
if self.row then
|
||||
--nothing to do, player name (alias) exists
|
||||
else
|
||||
self.cur = assert (self.con:execute("INSERT INTO log (guid1, type, textxml) \
|
||||
VALUES ('".. thisGuid .."', 3, '<name>".. thisName .."</name>')"))
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- GetLogTypefor
|
||||
-- Searches your type to guid out of the DB
|
||||
-------------------------------------------------------------------------------
|
||||
['GetLogTypefor'] = function( self, thisType, thisGuid , thisGuid2 )
|
||||
local query = "SELECT * FROM log WHERE type='" .. thisType .. "'"
|
||||
|
||||
if thisGuid ~= nil then
|
||||
query = query .. " AND guid1='" .. thisGuid .. "'"
|
||||
end
|
||||
if thisGuid2 ~= nil then
|
||||
query = query .. " AND guid2='" .. thisGuid2 .. "'"
|
||||
end
|
||||
|
||||
--Search the in the database
|
||||
self.cur = assert (self.con:execute(query))
|
||||
local numrows = self.cur:numrows()
|
||||
local pms = {}
|
||||
if numrows ~= 0 then
|
||||
for i=1, numrows +1, 1 do
|
||||
pms[i] = self.cur:fetch ({}, "a")
|
||||
end
|
||||
self.cur:close()
|
||||
return pms
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- SetLogEntry
|
||||
-- Searches your type to guid out of the DB
|
||||
-------------------------------------------------------------------------------
|
||||
['SetLogEntry'] = function( self, thisType, thisGuid , thisGuid2, thisXmltext )
|
||||
|
||||
self.cur = assert (self.con:execute("INSERT INTO log (guid1, guid2, type, textxml) \
|
||||
VALUES ('".. thisGuid .."','".. thisGuid2 .."', '".. thisType .."', '".. thisXmltext .."')"))
|
||||
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- GetPlayerAliases
|
||||
-- Gives back a table with all aliases know from this player
|
||||
-------------------------------------------------------------------------------
|
||||
['GetPlayerAliases'] = function( self, _guid)
|
||||
|
||||
local db = self:GetLogTypefor(3,_guid)
|
||||
aliases = {}
|
||||
if db ~= nil then
|
||||
for i,v in ipairs(db) do
|
||||
v = string.sub(v.textxml, 7, -8) -- <name>FOOBAR</name> cut the tag
|
||||
aliases[v] = v
|
||||
end
|
||||
return aliases
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end,
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- DelOM
|
||||
-- Deletes a entry by its id and guid2(used for offlinemsgs)
|
||||
-------------------------------------------------------------------------------
|
||||
['DelOM'] = function( self, thisid, thisguid)
|
||||
|
||||
self.cur = assert (self.con:execute("DELETE FROM log WHERE id='"..thisid.."' AND guid1='"..thisguid.."'"))
|
||||
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- DelMail
|
||||
-- Deletes all entrys for guid with id 5(used for offlinemsgs)
|
||||
-------------------------------------------------------------------------------
|
||||
['DelMail'] = function( self, thisguid)
|
||||
|
||||
self.cur = assert (self.con:execute("DELETE FROM log WHERE type=5 and guid1='"..thisguid.."'"))
|
||||
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- GetPlayerbyReg
|
||||
-- Searches Player by registered Name
|
||||
-------------------------------------------------------------------------------
|
||||
['GetPlayerbyReg'] = function( self, name )
|
||||
self.cur = assert (self.con:execute("SELECT * FROM player WHERE user='".. name .."' LIMIT 1"))
|
||||
player = self.cur:fetch ({}, "a")
|
||||
self.cur:close()
|
||||
return player
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- DoCreateNewPlayer
|
||||
-- Create a new Player: write to Database, set Xp 0
|
||||
-- maybe could also be used to reset Player, as pkey is unique
|
||||
-------------------------------------------------------------------------------
|
||||
['DoCreateNewPlayer'] = function( self, pkey, isBot, netname, updatedate, createdate, conname )
|
||||
self.cur = assert( self.con:execute("INSERT INTO player (pkey, isBot, netname, cleanname, updatedate, createdate, conname) VALUES ('"
|
||||
..pkey.."', "
|
||||
..isBot..", '"
|
||||
..netname.."', '"
|
||||
..et.Q_CleanStr(netname).."', '"
|
||||
..updatedate .."', '"
|
||||
..createdate .."', '"
|
||||
..conname.."')"))
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- SetPlayerSession
|
||||
-- This is the regular sessions ave of a player
|
||||
-------------------------------------------------------------------------------
|
||||
['SetPlayerSession'] = function ( self, player, map, slot)
|
||||
-- TODO: Think about using this earlier, is this the injection check ?
|
||||
-- Yes, its an escape function for ' (wich should be the only character allowed by et and with a special meaning for SQL)
|
||||
-- TODO: What about ET clients which are modified?
|
||||
|
||||
local name = string.gsub(player["netname"],"\'", "\\\'")
|
||||
|
||||
local sessquery = "INSERT INTO session (pkey, slot, map, ip, netname, cleanname, valid, start, end, sstime, axtime, altime, sptime, xp0, xp1, xp2, xp3, xp4, xp5, xp6, xptot, acc, kills, tkills, death) VALUES ('"
|
||||
..player["pkey"].."', '"
|
||||
..slot.."', '"
|
||||
..map.."', '"
|
||||
..player["ip"].."', '"
|
||||
..name.."', '"
|
||||
..et.Q_CleanStr(name).."', "
|
||||
.."1"..", '"
|
||||
..player["start"].."','"
|
||||
..timehandle('N').. "', '"
|
||||
-- TODO : check if this works. Is the output from 'D' option in the needed format for the database?
|
||||
..timehandle('D','N',player["start"]).."' , '"
|
||||
..player["axtime"].."', '"
|
||||
..player["altime"].."', '"
|
||||
..player["sptime"].."', '"
|
||||
..player["xp0"].."', '"
|
||||
..player["xp1"].."', '"
|
||||
..player["xp2"].."', '"
|
||||
..player["xp3"].."', '"
|
||||
..player["xp4"].."', '"
|
||||
..player["xp5"].."', '"
|
||||
..player["xp6"].."', '"
|
||||
..player["xptot"].."', '"
|
||||
.."0".."', '"
|
||||
..player["kills"].."', '"
|
||||
..player["tkills"].."', '"
|
||||
..player["death"].. "')"
|
||||
|
||||
if self.debugquerries == 1 then
|
||||
et.G_LogPrint( "\n\n".. sessquery .. "\n\n" )
|
||||
end
|
||||
self.cur = assert (self.con:execute(sessquery))
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- SetPlayerSession_WCD
|
||||
-- This is called when a player disconnects while connecting
|
||||
-------------------------------------------------------------------------------
|
||||
['SetPlayerSessionWCD'] = function ( self, pkey, slot, map, ip, valid, start, ende, sstime, uci )
|
||||
local query = "INSERT INTO session (pkey, slot, map, ip, valid, start, end, sstime, uci) VALUES ('"
|
||||
..pkey.."', '"
|
||||
..slot.."', '"
|
||||
..map.."', '"
|
||||
..ip.."', '"
|
||||
..valid.."', '"
|
||||
..start.."', '"
|
||||
..ende.."' , '"
|
||||
-- TODO : check if this works. Is the output from 'D' option in the needed format for the database?
|
||||
..sstime.."' , '"
|
||||
..uci.."')"
|
||||
|
||||
if self.debugquerries == 1 then
|
||||
et.G_LogPrint( "\n\n".. query .. "\n\n" )
|
||||
end
|
||||
self.cur = assert (self.con:execute( query ))
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- SetPlayerInfo
|
||||
-- Sets PlayerInfos
|
||||
-------------------------------------------------------------------------------
|
||||
['SetPlayerInfo'] = function (self, player)
|
||||
local name = string.gsub(player["netname"],"\'", "\\\'")
|
||||
self.cur = assert (self.con:execute("UPDATE player SET clan='".. player["clan"] .."', \
|
||||
netname='".. name .."',\
|
||||
cleanname='"..et.Q_CleanStr(name).."',\
|
||||
xp0='".. player["xp0"] .."', \
|
||||
xp1='".. player["xp1"] .."', \
|
||||
xp2='".. player["xp2"] .."', \
|
||||
xp3='".. player["xp3"] .."', \
|
||||
xp4='".. player["xp4"] .."', \
|
||||
xp5='".. player["xp5"] .."', \
|
||||
xp6='".. player["xp6"] .."', \
|
||||
xptot='"..player["xptot"] .. "',\
|
||||
level='".. player["level"] .."', \
|
||||
banreason='".. player["banreason"] .."', \
|
||||
bannedby='".. player["bannedby"] .."', \
|
||||
banexpire='".. player["banexpire"] .."', \
|
||||
mutedreason='".. player["mutedreason"] .."', \
|
||||
mutedby='".. player["mutedby"] .."', \
|
||||
muteexpire='".. player["muteexpire"] .."', \
|
||||
warnings='".. player["warnings"] .."', \
|
||||
suspect='".. player["suspect"] .."' \
|
||||
WHERE pkey='".. player["pkey"] .."'"))
|
||||
end,
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- GetPlayerInfo
|
||||
-- Returns PlayerInfo table
|
||||
-------------------------------------------------------------------------------
|
||||
['GetPlayerInfo'] = function( self, thisGuid )
|
||||
--Search the GUID in the database ( GUID is UNIQUE, so we just have 1 result, stop searching when we have it )
|
||||
self.cur = assert (self.con:execute("SELECT * FROM player WHERE pkey='".. thisGuid .."' LIMIT 1"))
|
||||
self.row = self.cur:fetch ({}, "a")
|
||||
self.cur:close()
|
||||
return self.row
|
||||
end,
|
||||
|
||||
['DoRegisterUser'] = function ( self, user, password, pkey )
|
||||
self.cur = assert (self.con:execute("UPDATE player SET user='"..user.."', password=MD5('"..password.."') WHERE pkey='"..pkey.."'"))
|
||||
end,
|
||||
|
||||
-- TODO delete old session if (based on config setting), used in function et_ShutdownGame and cleanSessionCMD
|
||||
['DoDeleteOldSessions'] = function ( self, months )
|
||||
-- TODO @luborg this DATE_SUB() is mysql only
|
||||
self.cur = assert (self.con:execute("DELETE FROM session WHERE `end` < DATE_SUB(CURDATE(), INTERVAL "..months.." MONTH)"))
|
||||
end
|
||||
|
||||
}
|
||||
return 1
|
409
noq/noq_i.lua
Normal file
409
noq/noq_i.lua
Normal file
|
@ -0,0 +1,409 @@
|
|||
--
|
||||
-- NOQ installer noq_i.lua - as part of the NOQ
|
||||
--
|
||||
|
||||
--
|
||||
-- Remove this script from game server path after installation
|
||||
--
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
color = "^5"
|
||||
version = "1"
|
||||
commandprefix = "!"
|
||||
debug = 1 -- debug 0/1
|
||||
tablespacer = " " -- use something like " " or "|"
|
||||
--------------------------------------------------------------------------------
|
||||
env = nil
|
||||
con = nil
|
||||
|
||||
res = {}
|
||||
|
||||
fs_game = et.trap_Cvar_Get("fs_game")
|
||||
homepath = et.trap_Cvar_Get("fs_homepath")
|
||||
scriptpath = homepath .. "/" .. fs_game .. "/noq/" -- full qualified path for the NOQ scripts
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- table functions - don't move down or edit!
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-- TODO: we use same functions in the noq.lua
|
||||
-- Find a way to use more centralized
|
||||
|
||||
-- The table load
|
||||
function table.load( sfile )
|
||||
-- catch marker for stringtable
|
||||
if string.sub( sfile,-3,-1 ) == "--|" then
|
||||
tables,err = loadstring( sfile )
|
||||
else
|
||||
tables,err = loadfile( sfile )
|
||||
end
|
||||
if err then return _,err
|
||||
end
|
||||
tables = tables()
|
||||
for idx = 1,#tables do
|
||||
local tolinkv,tolinki = {},{}
|
||||
for i,v in pairs( tables[idx] ) do
|
||||
if type( v ) == "table" and tables[v[1]] then
|
||||
table.insert( tolinkv,{ i,tables[v[1]] } )
|
||||
end
|
||||
if type( i ) == "table" and tables[i[1]] then
|
||||
table.insert( tolinki,{ i,tables[i[1]] } )
|
||||
end
|
||||
end
|
||||
-- link values, first due to possible changes of indices
|
||||
for _,v in ipairs( tolinkv ) do
|
||||
tables[idx][v[1]] = v[2]
|
||||
end
|
||||
-- link indices
|
||||
for _,v in ipairs( tolinki ) do
|
||||
tables[idx][v[2]],tables[idx][v[1]] = tables[idx][v[1]],nil
|
||||
end
|
||||
end
|
||||
return tables[1]
|
||||
end
|
||||
|
||||
-- Gets varvalue else null
|
||||
function getConfig( varname )
|
||||
local value = noqvartable[varname]
|
||||
|
||||
if value then
|
||||
return value
|
||||
else
|
||||
et.G_Print("warning, invalid config value for " .. varname .. "\n")
|
||||
return "null"
|
||||
end
|
||||
end
|
||||
|
||||
et.G_LogPrint("Loading NOQ config from ".. scriptpath.."\n")
|
||||
noqvartable = assert(table.load( scriptpath .. "noq_config.cfg"))
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- Handle different dbms
|
||||
if getConfig("dbms") == "mySQL" then
|
||||
require "luasql.mysql"
|
||||
env = assert( luasql.mysql() )
|
||||
con = assert( env:connect(getConfig("dbname"), getConfig("dbuser"), getConfig("dbpassword"), getConfig("dbhostname"), getConfig("dbport")) )
|
||||
elseif getConfig("dbms") == "SQLite" then
|
||||
require "luasql.sqlite3"
|
||||
env = assert( luasql.sqlite3() )
|
||||
-- this opens OR creates a sqlite db - if this file is loaded db is created -fix this?
|
||||
con = assert( env:connect( getConfig("dbname") ) )
|
||||
else
|
||||
-- stop script
|
||||
error("DBMS not supported.")
|
||||
end
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
function et_InitGame( levelTime, randomSeed, restart )
|
||||
et.trap_SendServerCommand( -1 ,"chat \"" .. color .. "NOQ install " .. version ) -- keep this message so admins know the script is up & running
|
||||
et.RegisterModname( "NOQ install " .. version .. " " .. et.FindSelf() )
|
||||
end
|
||||
|
||||
function et_ConsoleCommand( command )
|
||||
if debug == 1 then
|
||||
et.trap_SendServerCommand( -1 ,"chat \"" .. color .. "ConsoleCommand - command: " .. command )
|
||||
end
|
||||
|
||||
if string.lower(et.trap_Argv(0)) == commandprefix.."sqlcreate" then
|
||||
createTablesDBMS()
|
||||
elseif string.lower(et.trap_Argv(0)) == commandprefix.."sqlupdate" then
|
||||
updateTablesDBMS()
|
||||
elseif string.lower(et.trap_Argv(0)) == commandprefix.."sqldrop" then
|
||||
dropTablesDBMS()
|
||||
elseif string.lower(et.trap_Argv(0)) == commandprefix.."sqlclean" then
|
||||
-- drop all tables
|
||||
cleanTablesDBMS()
|
||||
end
|
||||
-- add more cmds here ...
|
||||
end
|
||||
|
||||
--
|
||||
function cleanTablesDBMS()
|
||||
res = assert(con:execute"delete from player")
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"delete from session")
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"delete from log")
|
||||
et.G_Print(res .. "\n")
|
||||
end
|
||||
|
||||
-- For future versions if the db structure does exist
|
||||
function updateTablesDBMS()
|
||||
-- alter tables ...
|
||||
end
|
||||
|
||||
function dropTablesDBMS()
|
||||
res = assert(con:execute"DROP TABLE session")
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"DROP TABLE player")
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"DROP TABLE log")
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"DROP TABLE level")
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"DROP TABLE version")
|
||||
et.G_Print(res .. "\n")
|
||||
end
|
||||
|
||||
function createTablesDBMS()
|
||||
-- IMPORTANT NOTES for default field values:
|
||||
-- Mandatory fields to create a table are set as NOT NULL
|
||||
-- A non existing time is NULL
|
||||
-- If you add more fields create usefull default values ...
|
||||
|
||||
et.G_Print(color .. commandprefix.."sqlcreate for ".. getConfig("dbms") .." started\n")
|
||||
|
||||
-- SQLite
|
||||
if getConfig("dbms") == "SQLite" then
|
||||
|
||||
-- Notes:
|
||||
-- We store timestamps as INTEGER - Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
|
||||
|
||||
res = assert(con:execute"CREATE TABLE IF NOT EXISTS player ( \
|
||||
id INTEGER PRIMARY KEY, \
|
||||
pkey TEXT UNIQUE NOT NULL, \
|
||||
conname TEXT NOT NULL, \
|
||||
regname TEXT DEFAULT '', \
|
||||
netname TEXT DEFAULT '', \
|
||||
cleanname TEXT DEFAULT '', \
|
||||
isBot INTEGER DEFAULT 0, \
|
||||
clan TEXT DEFAULT '', \
|
||||
level INTEGER DEFAULT 0, \
|
||||
flags TEXT DEFAULT '', \
|
||||
user TEXT DEFAULT '', \
|
||||
password TEXT DEFAULT '', \
|
||||
email TEXT DEFAULT '', \
|
||||
xp0 INTEGER DEFAULT 0, \
|
||||
xp1 INTEGER DEFAULT 0, \
|
||||
xp2 INTEGER DEFAULT 0, \
|
||||
xp3 INTEGER DEFAULT 0, \
|
||||
xp4 INTEGER DEFAULT 0, \
|
||||
xp5 INTEGER DEFAULT 0, \
|
||||
xp6 INTEGER DEFAULT 0, \
|
||||
xptot INTEGER DEFAULT 0, \
|
||||
banreason TEXT DEFAULT '', \
|
||||
bannedby TEXT DEFAULT '', \
|
||||
banexpire DATE DEFAULT '1000-01-01 00:00:00', \
|
||||
mutedreason TEXT DEFAULT '', \
|
||||
mutedby TEXT DEFAULT '', \
|
||||
muteexpire DATE DEFAULT '1000-01-01 00:00:00', \
|
||||
warnings INTEGER DEFAULT 0, \
|
||||
suspect INTEGER DEFAULT 0, \
|
||||
regdate DATE DEFAULT NULL, \
|
||||
updatedate DATE DEFAULT CURRENT_DATE, \
|
||||
createdate DATE DEFAULT CURRENT_DATE)" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE IF NOT EXISTS log ( \
|
||||
id INTEGER PRIMARY KEY, \
|
||||
guid1 TEXT NOT NULL, \
|
||||
guid2 TEXT DEFAULT NULL, \
|
||||
type INTEGER DEFAULT NULL, \
|
||||
textxml TEXT DEFAULT NULL, \
|
||||
createdate DATE DEFAULT CURRENT_DATE)")
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE IF NOT EXISTS session ( \
|
||||
id INTEGER PRIMARY KEY, \
|
||||
pkey INTEGER NOT NULL, \
|
||||
slot INTEGER NOT NULL, \
|
||||
map TEXT NOT NULL, \
|
||||
ip TEXT DEFAULT '', \
|
||||
netname TEXT DEFAULT '', \
|
||||
cleanname TEXT DEFAULT '', \
|
||||
valid INTEGER DEFAULT NULL, \
|
||||
start DATE DEFAULT CURRENT_DATE, \
|
||||
end DATE DEFAULT NULL, \
|
||||
sptime INTEGER DEFAULT NULL, \
|
||||
axtime INTEGER DEFAULT NULL, \
|
||||
altime INTEGER DEFAULT NULL, \
|
||||
lctime INTEGER DEFAULT NULL, \
|
||||
sstime INTEGER DEFAULT NULL, \
|
||||
xp0 INTEGER DEFAULT 0, \
|
||||
xp1 INTEGER DEFAULT 0, \
|
||||
xp2 INTEGER DEFAULT 0, \
|
||||
xp3 INTEGER DEFAULT 0, \
|
||||
xp4 INTEGER DEFAULT 0, \
|
||||
xp5 INTEGER DEFAULT 0, \
|
||||
xp6 INTEGER DEFAULT 0, \
|
||||
xptot INTEGER DEFAULT 0, \
|
||||
acc REAL DEFAULT 0.0, \
|
||||
kills INTEGER DEFAULT 0, \
|
||||
tkills INTEGER DEFAULT 0, \
|
||||
death INTEGER DEFAULT 0, \
|
||||
revives INTEGER DEFAULT 0, \
|
||||
uci INTEGER DEFAULT 0)" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE IF NOT EXISTS level ( \
|
||||
id INTEGER PRIMARY KEY, \
|
||||
pseudo TEXT UNIQUE NOT NULL, \
|
||||
name TEXT NOT NULL, \
|
||||
greetings TEXT DEFAULT '', \
|
||||
flags TEXT NOT NULL)" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE IF NOT EXISTS version ( \
|
||||
id INTEGER PRIMARY KEY, \
|
||||
version INTEGER NOT NULL UNIQUE )" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
-- SQLite needs exra cmds for setting up an index (anybody knows syntax for create table stmd?)
|
||||
-- player
|
||||
res = assert(con:execute"CREATE INDEX p_regname ON player( regname )" )
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"CREATE INDEX p_netname ON player( netname )" )
|
||||
et.G_Print(res .. "\n")
|
||||
--log
|
||||
res = assert(con:execute"CREATE INDEX l_guid ON log (guid1, guid2)" )
|
||||
et.G_Print(res .. "\n")
|
||||
-- session
|
||||
res = assert(con:execute"CREATE INDEX s_pkey ON session ( pkey )" )
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"CREATE INDEX s_ip ON session ( ip )" )
|
||||
et.G_Print(res .. "\n")
|
||||
res = assert(con:execute"CREATE INDEX s_end ON session ( end )" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
-- insert data
|
||||
res = assert(con:execute("INSERT INTO version VALUES ( '1', '" .. version .. "' )"))
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
-- TODO: create level entries
|
||||
|
||||
-- mySQL
|
||||
elseif getConfig("dbms") == "mySQL" then
|
||||
|
||||
res = assert(con:execute"CREATE TABLE player ( \
|
||||
id INT PRIMARY KEY AUTO_INCREMENT, \
|
||||
pkey VARCHAR(32) UNIQUE NOT NULL, \
|
||||
conname VARCHAR(36) NOT NULL, \
|
||||
regname VARCHAR(36) DEFAULT '', \
|
||||
netname VARCHAR(36) DEFAULT '', \
|
||||
cleanname VARCHAR(36) DEFAULT '', \
|
||||
isBot BOOLEAN DEFAULT 0, \
|
||||
clan VARCHAR(20) DEFAULT '', \
|
||||
level INT DEFAULT 0, \
|
||||
flags VARCHAR(50) DEFAULT '', \
|
||||
user VARCHAR(20) DEFAULT '', \
|
||||
password VARCHAR(32) DEFAULT '', \
|
||||
email VARCHAR(50) DEFAULT '', \
|
||||
xp0 INT DEFAULT 0, \
|
||||
xp1 INT DEFAULT 0, \
|
||||
xp2 INT DEFAULT 0, \
|
||||
xp3 INT DEFAULT 0, \
|
||||
xp4 INT DEFAULT 0, \
|
||||
xp5 INT DEFAULT 0, \
|
||||
xp6 INT DEFAULT 0, \
|
||||
xptot INT DEFAULT 0, \
|
||||
banreason VARCHAR(1024) DEFAULT '', \
|
||||
bannedby VARCHAR(36) DEFAULT '', \
|
||||
banexpire DATETIME DEFAULT '1000-01-01 00:00:00', \
|
||||
mutedreason VARCHAR(1024) DEFAULT '', \
|
||||
mutedby VARCHAR(36) DEFAULT '', \
|
||||
muteexpire DATETIME DEFAULT '1000-01-01 00:00:00', \
|
||||
warnings SMALLINT DEFAULT 0, \
|
||||
suspect TINYINT DEFAULT 0, \
|
||||
regdate DATETIME DEFAULT NULL, \
|
||||
updatedate TIMESTAMP DEFAULT '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP, \
|
||||
createdate DATETIME NOT NULL, \
|
||||
INDEX(`regname`), \
|
||||
INDEX(`netname`) \
|
||||
) ENGINE=InnoDB" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE IF NOT EXISTS log ( \
|
||||
id INT PRIMARY KEY AUTO_INCREMENT, \
|
||||
guid1 VARCHAR(32) NOT NULL, \
|
||||
guid2 VARCHAR(32) DEFAULT NULL, \
|
||||
type INT DEFAULT NULL, \
|
||||
textxml VARCHAR(2056) DEFAULT NULL, \
|
||||
createdate DATETIME NOT NULL, \
|
||||
INDEX(`guid1`), \
|
||||
INDEX(`guid2`) \
|
||||
) ENGINE=InnoDB" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE session ( \
|
||||
id INT PRIMARY KEY AUTO_INCREMENT, \
|
||||
pkey VARCHAR(32) NOT NULL, \
|
||||
slot SMALLINT NOT NULL, \
|
||||
map VARCHAR(36) NOT NULL, \
|
||||
ip VARCHAR(25) DEFAULT '', \
|
||||
netname VARCHAR(36) DEFAULT '', \
|
||||
cleanname VARCHAR(36) DEFAULT '', \
|
||||
valid BOOLEAN DEFAULT NULL, \
|
||||
start DATETIME NOT NULL, \
|
||||
end DATETIME DEFAULT NULL, \
|
||||
sptime TIME DEFAULT NULL, \
|
||||
axtime TIME DEFAULT NULL, \
|
||||
altime TIME DEFAULT NULL, \
|
||||
lctime TIME DEFAULT NULL, \
|
||||
sstime TIME DEFAULT NULL, \
|
||||
xp0 INT DEFAULT 0, \
|
||||
xp1 INT DEFAULT 0, \
|
||||
xp2 INT DEFAULT 0, \
|
||||
xp3 INT DEFAULT 0, \
|
||||
xp4 INT DEFAULT 0, \
|
||||
xp5 INT DEFAULT 0, \
|
||||
xp6 INT DEFAULT 0, \
|
||||
xptot INT DEFAULT 0, \
|
||||
acc DOUBLE (10,2) DEFAULT 0.0, \
|
||||
kills SMALLINT DEFAULT 0, \
|
||||
tkills SMALLINT DEFAULT 0, \
|
||||
death SMALLINT DEFAULT 0, \
|
||||
revives SMALLINT DEFAULT 0, \
|
||||
uci TINYINT DEFAULT 0, \
|
||||
INDEX(`pkey`), \
|
||||
INDEX(`ip`), \
|
||||
INDEX(`end`) \
|
||||
) ENGINE=InnoDB" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE IF NOT EXISTS level ( \
|
||||
id INT PRIMARY KEY AUTO_INCREMENT, \
|
||||
pseudo VARCHAR(15) UNIQUE NOT NULL, \
|
||||
name VARCHAR(36) NOT NULL, \
|
||||
greetings VARCHAR(150) DEFAULT '', \
|
||||
flags VARCHAR(50) NOT NULL)" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TABLE version ( \
|
||||
id INT PRIMARY KEY AUTO_INCREMENT, \
|
||||
version INT NOT NULL UNIQUE \
|
||||
) ENGINE=InnoDB" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
-- mySQL needs a trigger to add the current date/time to a datetime field
|
||||
res = assert(con:execute"CREATE TRIGGER trigger_player_insert \
|
||||
BEFORE INSERT ON `player` FOR EACH ROW SET NEW.createdate = NOW();" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
res = assert(con:execute"CREATE TRIGGER trigger_log_insert \
|
||||
BEFORE INSERT ON `log` FOR EACH ROW SET NEW.createdate = NOW();" )
|
||||
et.G_Print(res .. "\n")
|
||||
|
||||
-- insert data
|
||||
res = assert(con:execute(string.format("INSERT INTO version VALUES ( 1, %s )",version)))
|
||||
et.G_Print(res .. "\n")
|
||||
end
|
||||
|
||||
et.G_Print(color .. commandprefix.."sqlcreate database created version: "..version .."\n")
|
||||
end
|
||||
|
||||
function shuttdownDBMS()
|
||||
if getConfig("dbms") == "mySQL" or getConfig("dbms") == "SQLite" then
|
||||
con:close()
|
||||
env:close()
|
||||
else
|
||||
-- should never happen
|
||||
error("DBMS not supported.")
|
||||
end
|
||||
end
|
||||
|
||||
function et_ShutdownGame( restart )
|
||||
shuttdownDBMS()
|
||||
end
|
83
noq/noq_mods.cfg
Normal file
83
noq/noq_mods.cfg
Normal file
|
@ -0,0 +1,83 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
[0]="MOD_UNKNOWN",
|
||||
"MOD_MACHINEGUN",
|
||||
"MOD_BROWNING",
|
||||
"MOD_MG42",
|
||||
"MOD_GRENADE",
|
||||
"MOD_KNIFE",
|
||||
"MOD_LUGER",
|
||||
"MOD_COLT",
|
||||
"MOD_MP40",
|
||||
"MOD_THOMPSON",
|
||||
"MOD_STEN",
|
||||
"MOD_GARAND",
|
||||
"MOD_SILENCER",
|
||||
"MOD_FG42",
|
||||
"MOD_FG42_SCOPE",
|
||||
"MOD_PANZERFAUST",
|
||||
"MOD_GRENADE_LAUNCHER",
|
||||
"MOD_FLAMETHROWER",
|
||||
"MOD_GRENADE_PINEAPPLE",
|
||||
"MOD_MAPMORTAR",
|
||||
"MOD_MAPMORTAR_SPLASH",
|
||||
"MOD_KICKED",
|
||||
"MOD_DYNAMITE",
|
||||
"MOD_AIRSTRIKE",
|
||||
"MOD_SYRINGE",
|
||||
"MOD_AMMO",
|
||||
"MOD_ARTY",
|
||||
"MOD_WATER",
|
||||
"MOD_SLIME",
|
||||
"MOD_LAVA",
|
||||
"MOD_CRUSH",
|
||||
"MOD_TELEFRAG",
|
||||
"MOD_FALLING",
|
||||
"MOD_SUICIDE",
|
||||
"MOD_TARGET_LASER",
|
||||
"MOD_TRIGGER_HURT",
|
||||
"MOD_EXPLOSIVE",
|
||||
"MOD_CARBINE",
|
||||
"MOD_KAR98",
|
||||
"MOD_GPG40",
|
||||
"MOD_M7",
|
||||
"MOD_LANDMINE",
|
||||
"MOD_SATCHEL",
|
||||
"MOD_SMOKEBOMB",
|
||||
"MOD_MOBILE_MG42",
|
||||
"MOD_SILENCED_COLT",
|
||||
"MOD_GARAND_SCOPE",
|
||||
"MOD_CRUSH_CONSTRUCTION",
|
||||
"MOD_CRUSH_CONSTRUCTIONDEATH",
|
||||
"MOD_CRUSH_CONSTRUCTIONDEATH_NOATTACKER",
|
||||
"MOD_K43",
|
||||
"MOD_K43_SCOPE",
|
||||
"MOD_MORTAR",
|
||||
"MOD_AKIMBO_COLT",
|
||||
"MOD_AKIMBO_LUGER",
|
||||
"MOD_AKIMBO_SILENCEDCOLT",
|
||||
"MOD_AKIMBO_SILENCEDLUGER",
|
||||
"MOD_SMOKEGRENADE",
|
||||
"MOD_SWAP_PLACES",
|
||||
"MOD_SWITCHTEAM",
|
||||
"MOD_GOOMBA",
|
||||
"MOD_POISON",
|
||||
"MOD_FEAR",
|
||||
"MOD_CENSORED",
|
||||
"MOD_SHOTGUN",
|
||||
"MOD_BACKSTAB",
|
||||
"MOD_MOBILE_BROWNING",
|
||||
"MOD_BAR",
|
||||
"MOD_STG44",
|
||||
"MOD_BAZOOKA",
|
||||
"MOD_STEN_MKII",
|
||||
"MOD_MP34",
|
||||
"MOD_VENOM",
|
||||
"MOD_SHOVE",
|
||||
"MOD_THROWKNIFE",
|
||||
"MOD_NUM_MODS",
|
||||
},
|
||||
}
|
84
noq/noq_mods_130.cfg
Normal file
84
noq/noq_mods_130.cfg
Normal file
|
@ -0,0 +1,84 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
[0]="MOD_UNKNOWN",
|
||||
"MOD_MACHINEGUN",
|
||||
"MOD_BROWNING",
|
||||
"MOD_MG42",
|
||||
"MOD_GRENADE",
|
||||
"MOD_KNIFE",
|
||||
"MOD_LUGER",
|
||||
"MOD_COLT",
|
||||
"MOD_MP40",
|
||||
"MOD_THOMPSON",
|
||||
"MOD_STEN",
|
||||
"MOD_GARAND",
|
||||
"MOD_SILENCER",
|
||||
"MOD_FG42",
|
||||
"MOD_FG42_SCOPE",
|
||||
"MOD_PANZERFAUST",
|
||||
"MOD_GRENADE_LAUNCHER",
|
||||
"MOD_FLAMETHROWER",
|
||||
"MOD_GRENADE_PINEAPPLE",
|
||||
"MOD_MAPMORTAR",
|
||||
"MOD_MAPMORTAR_SPLASH",
|
||||
"MOD_KICKED",
|
||||
"MOD_DYNAMITE",
|
||||
"MOD_AIRSTRIKE",
|
||||
"MOD_SYRINGE",
|
||||
"MOD_AMMO",
|
||||
"MOD_ARTY",
|
||||
"MOD_WATER",
|
||||
"MOD_SLIME",
|
||||
"MOD_LAVA",
|
||||
"MOD_CRUSH",
|
||||
"MOD_TELEFRAG",
|
||||
"MOD_FALLING",
|
||||
"MOD_SUICIDE",
|
||||
"MOD_TARGET_LASER",
|
||||
"MOD_TRIGGER_HURT",
|
||||
"MOD_EXPLOSIVE",
|
||||
"MOD_CARBINE",
|
||||
"MOD_KAR98",
|
||||
"MOD_GPG40",
|
||||
"MOD_M7",
|
||||
"MOD_LANDMINE",
|
||||
"MOD_SATCHEL",
|
||||
"MOD_SMOKEBOMB",
|
||||
"MOD_MOBILE_MG42",
|
||||
"MOD_SILENCED_COLT",
|
||||
"MOD_GARAND_SCOPE",
|
||||
"MOD_CRUSH_CONSTRUCTION",
|
||||
"MOD_CRUSH_CONSTRUCTIONDEATH",
|
||||
"MOD_CRUSH_CONSTRUCTIONDEATH_NOATTACKER",
|
||||
"MOD_K43",
|
||||
"MOD_K43_SCOPE",
|
||||
"MOD_MORTAR",
|
||||
"MOD_AKIMBO_COLT",
|
||||
"MOD_AKIMBO_LUGER",
|
||||
"MOD_AKIMBO_SILENCEDCOLT",
|
||||
"MOD_AKIMBO_SILENCEDLUGER",
|
||||
"MOD_SMOKEGRENADE",
|
||||
"MOD_SWAP_PLACES",
|
||||
"MOD_SWITCHTEAM",
|
||||
"MOD_GOOMBA",
|
||||
"MOD_POISON",
|
||||
"MOD_FEAR",
|
||||
"MOD_CENSORED",
|
||||
"MOD_SHOTGUN",
|
||||
"MOD_BACKSTAB",
|
||||
"MOD_MOBILE_BROWNING",
|
||||
"MOD_BAR",
|
||||
"MOD_STG44",
|
||||
"MOD_BAZOOKA",
|
||||
"MOD_JOHNSON",
|
||||
"MOD_MP34",
|
||||
"MOD_VENOM",
|
||||
"MOD_SHOVE",
|
||||
"MOD_THROWKNIFE",
|
||||
"MOD_JOHNSON_SCOPE",
|
||||
"MOD_NUM_MODS",
|
||||
},
|
||||
}
|
83
noq/noq_mods_names.cfg
Normal file
83
noq/noq_mods_names.cfg
Normal file
|
@ -0,0 +1,83 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
MOD_UNKNOWN=0,
|
||||
MOD_MACHINEGUN=1,
|
||||
MOD_BROWNING=2,
|
||||
MOD_MG42=3,
|
||||
MOD_GRENADE=4,
|
||||
MOD_KNIFE=5,
|
||||
MOD_LUGER=6,
|
||||
MOD_COLT=7,
|
||||
MOD_MP40=8,
|
||||
MOD_THOMPSON=9,
|
||||
MOD_STEN=10,
|
||||
MOD_GARAND=11,
|
||||
MOD_SILENCER=12,
|
||||
MOD_FG42=13,
|
||||
MOD_FG42_SCOPE=14,
|
||||
MOD_PANZERFAUST=15,
|
||||
MOD_GRENADE_LAUNCHER=16,
|
||||
MOD_FLAMETHROWER=17,
|
||||
MOD_GRENADE_PINEAPPLE=18,
|
||||
MOD_MAPMORTAR=19,
|
||||
MOD_MAPMORTAR_SPLASH=20,
|
||||
MOD_KICKED=21,
|
||||
MOD_DYNAMITE=22,
|
||||
MOD_AIRSTRIKE=23,
|
||||
MOD_SYRINGE=24,
|
||||
MOD_AMMO=25,
|
||||
MOD_ARTY=26,
|
||||
MOD_WATER=27,
|
||||
MOD_SLIME=28,
|
||||
MOD_LAVA=29,
|
||||
MOD_CRUSH=30,
|
||||
MOD_TELEFRAG=31,
|
||||
MOD_FALLING=32,
|
||||
MOD_SUICIDE=33,
|
||||
MOD_TARGET_LASER=34,
|
||||
MOD_TRIGGER_HURT=35,
|
||||
MOD_EXPLOSIVE=36,
|
||||
MOD_CARBINE=37,
|
||||
MOD_KAR98=38,
|
||||
MOD_GPG40=39,
|
||||
MOD_M7=40,
|
||||
MOD_LANDMINE=41,
|
||||
MOD_SATCHEL=42,
|
||||
MOD_SMOKEBOMB=43,
|
||||
MOD_MOBILE_MG42=44,
|
||||
MOD_SILENCED_COLT=45,
|
||||
MOD_GARAND_SCOPE=46,
|
||||
MOD_CRUSH_CONSTRUCTION=47,
|
||||
MOD_CRUSH_CONSTRUCTIONDEATH=48,
|
||||
MOD_CRUSH_CONSTRUCTIONDEATH_NOATTACKER=49,
|
||||
MOD_K43=50,
|
||||
MOD_K43_SCOPE=51,
|
||||
MOD_MORTAR=52,
|
||||
MOD_AKIMBO_COLT=53,
|
||||
MOD_AKIMBO_LUGER=54,
|
||||
MOD_AKIMBO_SILENCEDCOLT=55,
|
||||
MOD_AKIMBO_SILENCEDLUGER=56,
|
||||
MOD_SMOKEGRENADE=57,
|
||||
MOD_SWAP_PLACES=58,
|
||||
MOD_SWITCHTEAM=59,
|
||||
MOD_GOOMBA=60,
|
||||
MOD_POISON=61,
|
||||
MOD_FEAR=62,
|
||||
MOD_CENSORED=63,
|
||||
MOD_SHOTGUN=64,
|
||||
MOD_BACKSTAB=65,
|
||||
MOD_MOBILE_BROWNING=66,
|
||||
MOD_BAR=67,
|
||||
MOD_STG44=68,
|
||||
MOD_BAZOOKA=69,
|
||||
MOD_STEN_MKII=70,
|
||||
MOD_MP34=71,
|
||||
MOD_VENOM=72,
|
||||
MOD_SHOVE=73,
|
||||
MOD_THROWKNIFE=74,
|
||||
MOD_NUM_MODS=75,
|
||||
},
|
||||
}
|
84
noq/noq_mods_names_130.cfg
Normal file
84
noq/noq_mods_names_130.cfg
Normal file
|
@ -0,0 +1,84 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
MOD_UNKNOWN=0,
|
||||
MOD_MACHINEGUN=1,
|
||||
MOD_BROWNING=2,
|
||||
MOD_MG42=3,
|
||||
MOD_GRENADE=4,
|
||||
MOD_KNIFE=5,
|
||||
MOD_LUGER=6,
|
||||
MOD_COLT=7,
|
||||
MOD_MP40=8,
|
||||
MOD_THOMPSON=9,
|
||||
MOD_STEN=10,
|
||||
MOD_GARAND=11,
|
||||
MOD_SILENCER=12,
|
||||
MOD_FG42=13,
|
||||
MOD_FG42_SCOPE=14,
|
||||
MOD_PANZERFAUST=15,
|
||||
MOD_GRENADE_LAUNCHER=16,
|
||||
MOD_FLAMETHROWER=17,
|
||||
MOD_GRENADE_PINEAPPLE=18,
|
||||
MOD_MAPMORTAR=19,
|
||||
MOD_MAPMORTAR_SPLASH=20,
|
||||
MOD_KICKED=21,
|
||||
MOD_DYNAMITE=22,
|
||||
MOD_AIRSTRIKE=23,
|
||||
MOD_SYRINGE=24,
|
||||
MOD_AMMO=25,
|
||||
MOD_ARTY=26,
|
||||
MOD_WATER=27,
|
||||
MOD_SLIME=28,
|
||||
MOD_LAVA=29,
|
||||
MOD_CRUSH=30,
|
||||
MOD_TELEFRAG=31,
|
||||
MOD_FALLING=32,
|
||||
MOD_SUICIDE=33,
|
||||
MOD_TARGET_LASER=34,
|
||||
MOD_TRIGGER_HURT=35,
|
||||
MOD_EXPLOSIVE=36,
|
||||
MOD_CARBINE=37,
|
||||
MOD_KAR98=38,
|
||||
MOD_GPG40=39,
|
||||
MOD_M7=40,
|
||||
MOD_LANDMINE=41,
|
||||
MOD_SATCHEL=42,
|
||||
MOD_SMOKEBOMB=43,
|
||||
MOD_MOBILE_MG42=44,
|
||||
MOD_SILENCED_COLT=45,
|
||||
MOD_GARAND_SCOPE=46,
|
||||
MOD_CRUSH_CONSTRUCTION=47,
|
||||
MOD_CRUSH_CONSTRUCTIONDEATH=48,
|
||||
MOD_CRUSH_CONSTRUCTIONDEATH_NOATTACKER=49,
|
||||
MOD_K43=50,
|
||||
MOD_K43_SCOPE=51,
|
||||
MOD_MORTAR=52,
|
||||
MOD_AKIMBO_COLT=53,
|
||||
MOD_AKIMBO_LUGER=54,
|
||||
MOD_AKIMBO_SILENCEDCOLT=55,
|
||||
MOD_AKIMBO_SILENCEDLUGER=56,
|
||||
MOD_SMOKEGRENADE=57,
|
||||
MOD_SWAP_PLACES=58,
|
||||
MOD_SWITCHTEAM=59,
|
||||
MOD_GOOMBA=60,
|
||||
MOD_POISON=61,
|
||||
MOD_FEAR=62,
|
||||
MOD_CENSORED=63,
|
||||
MOD_SHOTGUN=64,
|
||||
MOD_BACKSTAB=65,
|
||||
MOD_MOBILE_BROWNING=66,
|
||||
MOD_BAR=67,
|
||||
MOD_STG44=68,
|
||||
MOD_BAZOOKA=69,
|
||||
MOD_JOHNSON=70,
|
||||
MOD_MP34=71,
|
||||
MOD_VENOM=72,
|
||||
MOD_SHOVE=73,
|
||||
MOD_THROWKNIFE=74,
|
||||
MOD_JOHNSON_SCOPE=75
|
||||
MOD_NUM_MODS=76,
|
||||
},
|
||||
}
|
74
noq/noq_weapons.cfg
Normal file
74
noq/noq_weapons.cfg
Normal file
|
@ -0,0 +1,74 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
|
||||
-- TODO: We can use better names here
|
||||
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
[0]="WP_NONE",
|
||||
"WP_KNIFE",
|
||||
"WP_LUGER",
|
||||
"WP_MP40",
|
||||
"WP_GRENADE_LAUNCHER",
|
||||
"WP_PANZERFAUST",
|
||||
"WP_FLAMETHROWER",
|
||||
"WP_COLT",
|
||||
"WP_THOMPSON",
|
||||
"WP_GRENADE_PINEAPPLE",
|
||||
"WP_STEN",
|
||||
"WP_MEDIC_SYRINGE",
|
||||
"WP_AMMO",
|
||||
"WP_ARTY",
|
||||
"WP_SILENCER",
|
||||
"WP_DYNAMITE",
|
||||
"WP_SMOKETRAIL",
|
||||
"VERYBIGEXPLOSION",
|
||||
"WP_MEDKIT",
|
||||
"WP_BINOCULARS",
|
||||
"WP_PLIERS",
|
||||
"WP_SMOKE_MARKER",
|
||||
"WP_KAR98",
|
||||
"WP_CARBINE",
|
||||
"WP_GARAND",
|
||||
"WP_LANDMINE",
|
||||
"WP_SATCHEL",
|
||||
"WP_SATCHEL_DET",
|
||||
"WP_SMOKE_BOMB",
|
||||
"WP_MOBILE_MG42",
|
||||
"WP_K43",
|
||||
"WP_FG42",
|
||||
"WP_DUMMY_MG42",
|
||||
"WP_MORTAR",
|
||||
"WP_AKIMBO_COLT",
|
||||
"WP_AKIMBO_LUGER",
|
||||
"WP_GPG40",
|
||||
"WP_M7",
|
||||
"WP_SILENCED_COLT",
|
||||
"WP_GARAND_SCOPE",
|
||||
"WP_K43_SCOPE",
|
||||
"WP_FG42SCOPE",
|
||||
"WP_MORTAR_SET",
|
||||
"WP_MEDIC_ADRENALINE",
|
||||
"WP_AKIMBO_SILENCEDCOLT",
|
||||
"WP_AKIMBO_SILENCEDLUGER",
|
||||
"WP_MOBILE_MG42_SET",
|
||||
"WP_SHOTGUN",
|
||||
"WP_KNIFE_KABAR",
|
||||
"WP_MOBILE_BROWNING",
|
||||
"WP_MOBILE_BROWNING_SET",
|
||||
"WP_BAR",
|
||||
"WP_BAR_SET",
|
||||
"WP_STG44",
|
||||
"WP_STEN_MKII",
|
||||
"WP_BAZOOKA",
|
||||
"WP_MP34",
|
||||
"WP_MORTAR2",
|
||||
"WP_MORTAR2_SET",
|
||||
"WP_VENOM",
|
||||
"WP_POISON_SYRINGE",
|
||||
"WP_FOOTKICK",
|
||||
"WP_NUM_WEAPONS",
|
||||
|
||||
},
|
||||
}
|
75
noq/noq_weapons_130.cfg
Normal file
75
noq/noq_weapons_130.cfg
Normal file
|
@ -0,0 +1,75 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
|
||||
-- TODO: We can use better names here
|
||||
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
[0]="WP_NONE",
|
||||
"WP_KNIFE",
|
||||
"WP_LUGER",
|
||||
"WP_MP40",
|
||||
"WP_GRENADE_LAUNCHER",
|
||||
"WP_PANZERFAUST",
|
||||
"WP_FLAMETHROWER",
|
||||
"WP_COLT",
|
||||
"WP_THOMPSON",
|
||||
"WP_GRENADE_PINEAPPLE",
|
||||
"WP_STEN",
|
||||
"WP_MEDIC_SYRINGE",
|
||||
"WP_AMMO",
|
||||
"WP_ARTY",
|
||||
"WP_SILENCER",
|
||||
"WP_DYNAMITE",
|
||||
"WP_SMOKETRAIL",
|
||||
"VERYBIGEXPLOSION",
|
||||
"WP_MEDKIT",
|
||||
"WP_BINOCULARS",
|
||||
"WP_PLIERS",
|
||||
"WP_SMOKE_MARKER",
|
||||
"WP_KAR98",
|
||||
"WP_CARBINE",
|
||||
"WP_GARAND",
|
||||
"WP_LANDMINE",
|
||||
"WP_SATCHEL",
|
||||
"WP_SATCHEL_DET",
|
||||
"WP_SMOKE_BOMB",
|
||||
"WP_MOBILE_MG42",
|
||||
"WP_K43",
|
||||
"WP_FG42",
|
||||
"WP_DUMMY_MG42",
|
||||
"WP_MORTAR",
|
||||
"WP_AKIMBO_COLT",
|
||||
"WP_AKIMBO_LUGER",
|
||||
"WP_GPG40",
|
||||
"WP_M7",
|
||||
"WP_SILENCED_COLT",
|
||||
"WP_GARAND_SCOPE",
|
||||
"WP_K43_SCOPE",
|
||||
"WP_FG42SCOPE",
|
||||
"WP_MORTAR_SET",
|
||||
"WP_MEDIC_ADRENALINE",
|
||||
"WP_AKIMBO_SILENCEDCOLT",
|
||||
"WP_AKIMBO_SILENCEDLUGER",
|
||||
"WP_MOBILE_MG42_SET",
|
||||
"WP_SHOTGUN",
|
||||
"WP_KNIFE_KABAR",
|
||||
"WP_MOBILE_BROWNING",
|
||||
"WP_MOBILE_BROWNING_SET",
|
||||
"WP_BAR",
|
||||
"WP_BAR_SET",
|
||||
"WP_STG44",
|
||||
"WP_JOHNSON",
|
||||
"WP_BAZOOKA",
|
||||
"WP_MP34",
|
||||
"WP_MORTAR2",
|
||||
"WP_MORTAR2_SET",
|
||||
"WP_VENOM",
|
||||
"WP_POISON_SYRINGE",
|
||||
"WP_FOOTKICK",
|
||||
"WP_JOHNSON_SCOPE",
|
||||
"WP_NUM_WEAPONS",
|
||||
|
||||
},
|
||||
}
|
71
noq/noq_weapons_names.cfg
Normal file
71
noq/noq_weapons_names.cfg
Normal file
|
@ -0,0 +1,71 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
WP_NONE=0,
|
||||
WP_KNIFE=1,
|
||||
WP_LUGER=2,
|
||||
WP_MP40=3,
|
||||
WP_GRENADE_LAUNCHER=4,
|
||||
WP_PANZERFAUST=5,
|
||||
WP_FLAMETHROWER=6,
|
||||
WP_COLT=7,
|
||||
WP_THOMPSON=8,
|
||||
WP_GRENADE_PINEAPPLE=9,
|
||||
WP_STEN=10,
|
||||
WP_MEDIC_SYRINGE=11,
|
||||
WP_AMMO=12,
|
||||
WP_ARTY=13,
|
||||
WP_SILENCER=14,
|
||||
WP_DYNAMITE=15,
|
||||
WP_SMOKETRAIL=16,
|
||||
VERYBIGEXPLOSION=17,
|
||||
WP_MEDKIT=18,
|
||||
WP_BINOCULARS=19,
|
||||
WP_PLIERS=20,
|
||||
WP_SMOKE_MARKER=21,
|
||||
WP_KAR98=22,
|
||||
WP_CARBINE=23,
|
||||
WP_GARAND=24,
|
||||
WP_LANDMINE=25,
|
||||
WP_SATCHEL=26,
|
||||
WP_SATCHEL_DET=27,
|
||||
WP_SMOKE_BOMB=28,
|
||||
WP_MOBILE_MG42=29,
|
||||
WP_K43=30,
|
||||
WP_FG42=31,
|
||||
WP_DUMMY_MG42=32,
|
||||
WP_MORTAR=33,
|
||||
WP_AKIMBO_COLT=34,
|
||||
WP_AKIMBO_LUGER=35,
|
||||
WP_GPG40=36,
|
||||
WP_M7=37,
|
||||
WP_SILENCED_COLT=38,
|
||||
WP_GARAND_SCOPE=39,
|
||||
WP_K43_SCOPE=40,
|
||||
WP_FG42SCOPE=41,
|
||||
WP_MORTAR_SET=42,
|
||||
WP_MEDIC_ADRENALINE=43,
|
||||
WP_AKIMBO_SILENCEDCOLT=44,
|
||||
WP_AKIMBO_SILENCEDLUGER=45,
|
||||
WP_MOBILE_MG42_SET=46,
|
||||
WP_SHOTGUN=47,
|
||||
WP_KNIFE_KABAR=48,
|
||||
WP_MOBILE_BROWNING=49,
|
||||
WP_MOBILE_BROWNING_SET=50,
|
||||
WP_BAR=51,
|
||||
WP_BAR_SET=52,
|
||||
WP_STG44=53,
|
||||
WP_STEN_MKII=54,
|
||||
WP_BAZOOKA=55,
|
||||
WP_MP34=56,
|
||||
WP_MORTAR2=57,
|
||||
WP_MORTAR2_SET=58,
|
||||
WP_VENOM=59,
|
||||
WP_POISON_SYRINGE=60,
|
||||
WP_FOOTKICK=61,
|
||||
WP_NUM_WEAPONS=62,
|
||||
|
||||
},
|
||||
}
|
72
noq/noq_weapons_names_130.cfg
Normal file
72
noq/noq_weapons_names_130.cfg
Normal file
|
@ -0,0 +1,72 @@
|
|||
-- put this file into your noquarter path (fs_homepath)
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
return {
|
||||
-- Table: {1}
|
||||
{
|
||||
WP_NONE=0,
|
||||
WP_KNIFE=1,
|
||||
WP_LUGER=2,
|
||||
WP_MP40=3,
|
||||
WP_GRENADE_LAUNCHER=4,
|
||||
WP_PANZERFAUST=5,
|
||||
WP_FLAMETHROWER=6,
|
||||
WP_COLT=7,
|
||||
WP_THOMPSON=8,
|
||||
WP_GRENADE_PINEAPPLE=9,
|
||||
WP_STEN=10,
|
||||
WP_MEDIC_SYRINGE=11,
|
||||
WP_AMMO=12,
|
||||
WP_ARTY=13,
|
||||
WP_SILENCER=14,
|
||||
WP_DYNAMITE=15,
|
||||
WP_SMOKETRAIL=16,
|
||||
VERYBIGEXPLOSION=17,
|
||||
WP_MEDKIT=18,
|
||||
WP_BINOCULARS=19,
|
||||
WP_PLIERS=20,
|
||||
WP_SMOKE_MARKER=21,
|
||||
WP_KAR98=22,
|
||||
WP_CARBINE=23,
|
||||
WP_GARAND=24,
|
||||
WP_LANDMINE=25,
|
||||
WP_SATCHEL=26,
|
||||
WP_SATCHEL_DET=27,
|
||||
WP_SMOKE_BOMB=28,
|
||||
WP_MOBILE_MG42=29,
|
||||
WP_K43=30,
|
||||
WP_FG42=31,
|
||||
WP_DUMMY_MG42=32,
|
||||
WP_MORTAR=33,
|
||||
WP_AKIMBO_COLT=34,
|
||||
WP_AKIMBO_LUGER=35,
|
||||
WP_GPG40=36,
|
||||
WP_M7=37,
|
||||
WP_SILENCED_COLT=38,
|
||||
WP_GARAND_SCOPE=39,
|
||||
WP_K43_SCOPE=40,
|
||||
WP_FG42SCOPE=41,
|
||||
WP_MORTAR_SET=42,
|
||||
WP_MEDIC_ADRENALINE=43,
|
||||
WP_AKIMBO_SILENCEDCOLT=44,
|
||||
WP_AKIMBO_SILENCEDLUGER=45,
|
||||
WP_MOBILE_MG42_SET=46,
|
||||
WP_SHOTGUN=47,
|
||||
WP_KNIFE_KABAR=48,
|
||||
WP_MOBILE_BROWNING=49,
|
||||
WP_MOBILE_BROWNING_SET=50,
|
||||
WP_BAR=51,
|
||||
WP_BAR_SET=52,
|
||||
WP_STG44=53,
|
||||
WP_JOHNSON=54,
|
||||
WP_BAZOOKA=55,
|
||||
WP_MP34=56,
|
||||
WP_MORTAR2=57,
|
||||
WP_MORTAR2_SET=58,
|
||||
WP_VENOM=59,
|
||||
WP_POISON_SYRINGE=60,
|
||||
WP_FOOTKICK=61,
|
||||
WP_JOHNSON_SCOPE=62,
|
||||
WP_NUM_WEAPONS=63,
|
||||
|
||||
},
|
||||
}
|
86
noq/nqconst.lua
Normal file
86
noq/nqconst.lua
Normal file
|
@ -0,0 +1,86 @@
|
|||
-- IRATA [*] - based on etconst.lua from ETPro but slightly modified to fit for NQ
|
||||
-- never change values here unless you exactly know what you are doing
|
||||
|
||||
-- misc q_shared.h
|
||||
et.MAX_CLIENTS = 64
|
||||
et.MAX_MODELS = 256
|
||||
et.MAX_SOUNDS = 256
|
||||
et.MAX_CS_SKINS = 64
|
||||
et.MAX_CSSTRINGS = 32
|
||||
et.MAX_CS_SHADERS = 32
|
||||
et.MAX_SERVER_TAGS = 256
|
||||
et.MAX_TAG_FILES = 64
|
||||
et.MAX_MULTI_SPAWNTARGETS = 16
|
||||
et.MAX_DLIGHT_CONFIGSTRINGS = 16
|
||||
et.MAX_SPLINE_CONFIGSTRINGS = 8
|
||||
-- misc bg_public.h
|
||||
et.MAX_OID_TRIGGERS = 18
|
||||
et.MAX_CHARACTERS = 16
|
||||
et.MAX_TAGCONNECTS = 64
|
||||
et.MAX_FIRETEAMS = 12
|
||||
et.MAX_MOTDLINES = 6
|
||||
|
||||
-- Config string:
|
||||
-- q_shared.h
|
||||
et.CS_SERVERINFO = 0 -- an info string with all the serverinfo cvars
|
||||
et.CS_SYSTEMINFO = 1 -- an info string for server system to client system configuration (timescale, etc)
|
||||
-- bg_public.h
|
||||
et.CS_MUSIC = 2
|
||||
et.CS_WARMUP = 5 -- server time when the match will be restarted
|
||||
et.CS_VOTE_TIME = 6
|
||||
et.CS_VOTE_STRING = 7
|
||||
et.CS_VOTE_YES = 8
|
||||
et.CS_VOTE_NO = 9
|
||||
et.CS_GAME_VERSION = 10
|
||||
et.CS_LEVEL_START_TIME = 11 -- so the timer only shows the current level
|
||||
et.CS_INTERMISSION = 12 -- when 1, intermission will start in a second or two
|
||||
et.CS_MULTI_INFO = 13
|
||||
et.CS_MULTI_MAPWINNER = 14
|
||||
et.CS_MULTI_OBJECTIVE = 15
|
||||
|
||||
et.CS_SCREENFADE = 17 -- Ridah, used to tell clients to fade their screen to black/normal
|
||||
et.CS_FOGVARS = 18 -- (SA) used for saving the current state/settings of the fog
|
||||
et.CS_SKYBOXORG = 19 -- this is where we should view the skybox from
|
||||
et.CS_TARGETEFFECT = 20
|
||||
et.CS_WOLFINFO = 21
|
||||
et.CS_FIRSTBLOOD = 22 -- Team that has first blood
|
||||
et.CS_ROUNDSCORES1 = 23 -- Axis round wins
|
||||
et.CS_ROUNDSCORES2 = 24 -- Allied round wins
|
||||
et.CS_MUSIC_QUEUE = 25
|
||||
et.CS_SCRIPT_MOVER_NAMES = 26
|
||||
et.CS_CONSTRUCTION_NAMES = 27
|
||||
et.CS_REINFSEEDS = 28 -- Reinforcement seeds
|
||||
et.CS_SERVERTOGGLES = 29 -- Shows current enable/disabled settings (for voting UI)
|
||||
et.CS_GLOBALFOGVARS = 30
|
||||
et.CS_AXIS_MAPS_XP = 31
|
||||
et.CS_ALLIED_MAPS_XP = 32
|
||||
et.CS_INTERMISSION_START_TIME = 33
|
||||
et.CS_ENDGAME_STATS = 34
|
||||
et.CS_CHARGETIMES = 35
|
||||
et.CS_FILTERCAMS = 36
|
||||
et.CS_NOQUARTERINFO = 37
|
||||
et.CS_SKILLLEVELS = 38
|
||||
et.CS_FORCECVAR = 39
|
||||
et.CS_SVCVAR = 40
|
||||
et.CS_CONFIGNAME = 41
|
||||
et.CS_CSMETHODINFO = 42
|
||||
|
||||
et.CS_MODELS = 64
|
||||
et.CS_SOUNDS = ( et.CS_MODELS + et.MAX_MODELS )
|
||||
et.CS_SHADERS = ( et.CS_SOUNDS + et.MAX_SOUNDS )
|
||||
et.CS_SHADERSTATE = ( et.CS_SHADERS + et.MAX_CS_SHADERS )
|
||||
et.CS_SKINS = ( et.CS_SHADERSTATE + 1 )
|
||||
et.CS_CHARACTERS = ( et.CS_SKINS + et.MAX_CS_SKINS )
|
||||
et.CS_PLAYERS = ( et.CS_CHARACTERS + et.MAX_CHARACTERS )
|
||||
et.CS_MULTI_SPAWNTARGETS = ( et.CS_PLAYERS + et.MAX_CLIENTS )
|
||||
et.CS_OID_TRIGGERS = ( et.CS_MULTI_SPAWNTARGETS + et.MAX_MULTI_SPAWNTARGETS )
|
||||
et.CS_OID_DATA = ( et.CS_OID_TRIGGERS + et.MAX_OID_TRIGGERS )
|
||||
et.CS_DLIGHTS = ( et.CS_OID_DATA + et.MAX_OID_TRIGGERS )
|
||||
et.CS_SPLINES = ( et.CS_DLIGHTS + et.MAX_DLIGHT_CONFIGSTRINGS )
|
||||
et.CS_TAGCONNECTS = ( et.CS_SPLINES + et.MAX_SPLINE_CONFIGSTRINGS )
|
||||
et.CS_FIRETEAMS = ( et.CS_TAGCONNECTS + et.MAX_TAGCONNECTS )
|
||||
et.CS_CUSTMOTD = ( et.CS_FIRETEAMS + et.MAX_FIRETEAMS )
|
||||
et.CS_STRINGS = ( et.CS_CUSTMOTD + et.MAX_MOTDLINES )
|
||||
et.CS_MAX = ( et.CS_STRINGS + et.MAX_CSSTRINGS )
|
||||
|
||||
return 1
|
18
noq/readme.txt
Normal file
18
noq/readme.txt
Normal file
|
@ -0,0 +1,18 @@
|
|||
The NOQ - No Quarter Lua next generation game manager
|
||||
A Shrubbot replacement and also kind of new game manager and tracking system based on mysql or sqlite3.
|
||||
Both are supported and in case of sqlite there is no extra sqlite installation needed.
|
||||
NQ Lua team 2009-2011 - No warranty :)
|
||||
|
||||
NQ Lua team is:
|
||||
ailmanki
|
||||
BubbaG1
|
||||
Hose
|
||||
IlDuca
|
||||
IRATA [*]
|
||||
Luborg
|
||||
|
||||
For Information about install/config look in the noq.lua file, or get fresh info at:
|
||||
http://dev.kernwaffe.de/projects/noq/wiki
|
||||
|
||||
The NOQ Team - have fun!
|
||||
|
Loading…
Reference in a new issue