├── .gitignore ├── docker ├── gamedir │ ├── mapcycle.txt │ ├── stripper2.cfg │ ├── autoexec.cfg │ ├── addons │ │ ├── metamod │ │ │ ├── plugins.ini │ │ │ └── dlls │ │ │ │ └── metamod.so │ │ ├── amxmodx │ │ │ ├── data │ │ │ │ ├── GeoIP.dat │ │ │ │ └── lang │ │ │ │ │ ├── admincmd.txt │ │ │ │ │ ├── restmenu.txt │ │ │ │ │ ├── statscfg.txt │ │ │ │ │ ├── miscstats.txt │ │ │ │ │ ├── stats_dod.txt │ │ │ │ │ ├── antiflood.txt │ │ │ │ │ ├── imessage.txt │ │ │ │ │ ├── adminslots.txt │ │ │ │ │ ├── languages.txt │ │ │ │ │ ├── cmdmenu.txt │ │ │ │ │ ├── nextmap.txt │ │ │ │ │ ├── timeleft.txt │ │ │ │ │ ├── scrollmsg.txt │ │ │ │ │ └── telemenu.txt │ │ │ ├── scripting │ │ │ │ ├── amxxpc │ │ │ │ ├── amxxpc32.so │ │ │ │ ├── include │ │ │ │ │ ├── sockets.inc │ │ │ │ │ ├── svn_version.inc │ │ │ │ │ ├── svn_version.tpl │ │ │ │ │ ├── amxmod_compat │ │ │ │ │ │ ├── mysql.inc │ │ │ │ │ │ ├── VexdUM_const.inc │ │ │ │ │ │ ├── maths.inc │ │ │ │ │ │ ├── translator.inc │ │ │ │ │ │ ├── VexdUM.inc │ │ │ │ │ │ ├── xtrafun.inc │ │ │ │ │ │ ├── VexdUM_stock.inc │ │ │ │ │ │ └── Vexd_Utilities.inc │ │ │ │ │ ├── vault.inc │ │ │ │ │ ├── celltrie.inc │ │ │ │ │ ├── core.inc │ │ │ │ │ ├── esf_const.inc │ │ │ │ │ ├── message_stocks.inc │ │ │ │ │ ├── lang.inc │ │ │ │ │ ├── tfcconst.inc │ │ │ │ │ ├── nvault.inc │ │ │ │ │ ├── vector.inc │ │ │ │ │ ├── csx.inc │ │ │ │ │ ├── tfcstats.inc │ │ │ │ │ ├── tsstats.inc │ │ │ │ │ ├── csstats.inc │ │ │ │ │ ├── esf.inc │ │ │ │ │ ├── geoip.inc │ │ │ │ │ ├── dodstats.inc │ │ │ │ │ ├── tsx.inc │ │ │ │ │ ├── sorting.inc │ │ │ │ │ ├── fun.inc │ │ │ │ │ ├── dodconst.inc │ │ │ │ │ ├── tsconst.inc │ │ │ │ │ ├── messages.inc │ │ │ │ │ ├── time.inc │ │ │ │ │ ├── dodfun.inc │ │ │ │ │ ├── dbi.inc │ │ │ │ │ ├── tfcx.inc │ │ │ │ │ └── file.inc │ │ │ │ ├── testsuite │ │ │ │ │ ├── sqlxtest.sq3 │ │ │ │ │ ├── sqlxtest.sql │ │ │ │ │ ├── nvault_test.sma │ │ │ │ │ ├── fakemeta_tests.sma │ │ │ │ │ ├── fwdtest2.sma │ │ │ │ │ ├── native_test.sma │ │ │ │ │ ├── logtest.sma │ │ │ │ │ ├── fwdtest1.sma │ │ │ │ │ ├── callfunc_test.sma │ │ │ │ │ ├── fmttest.sma │ │ │ │ │ ├── admins_test.sma │ │ │ │ │ ├── trietest.sma │ │ │ │ │ └── sorttest.sma │ │ │ │ ├── compile.sh │ │ │ │ ├── amx_log copy.sma │ │ │ │ ├── amxmod_compat │ │ │ │ │ └── amxmod_compat.sma │ │ │ │ ├── amx_log.sma │ │ │ │ ├── crossfire_siren_fix.sma │ │ │ │ ├── antiflood.sma │ │ │ │ ├── adminslots.sma │ │ │ │ ├── scrollmsg.sma │ │ │ │ ├── adminhelp.sma │ │ │ │ └── imessage.sma │ │ │ ├── plugins │ │ │ │ ├── admin.amxx │ │ │ │ ├── cmdmenu.amxx │ │ │ │ ├── nextmap.amxx │ │ │ │ ├── plmenu.amxx │ │ │ │ ├── admin_sql.amxx │ │ │ │ ├── adminchat.amxx │ │ │ │ ├── admincmd.amxx │ │ │ │ ├── adminhelp.amxx │ │ │ │ ├── adminvote.amxx │ │ │ │ ├── antiflood.amxx │ │ │ │ ├── imessage.amxx │ │ │ │ ├── mapsmenu.amxx │ │ │ │ ├── menufront.amxx │ │ │ │ ├── pausecfg.amxx │ │ │ │ ├── scrollmsg.amxx │ │ │ │ ├── statscfg.amxx │ │ │ │ ├── telemenu.amxx │ │ │ │ ├── timeleft.amxx │ │ │ │ ├── adminslots.amxx │ │ │ │ ├── mapchooser.amxx │ │ │ │ ├── multilingual.amxx │ │ │ │ ├── pluginmenu.amxx │ │ │ │ └── amxmod_compat.amxx │ │ │ ├── dlls │ │ │ │ └── amxmodx_mm_i386.so │ │ │ ├── modules │ │ │ │ ├── fun_amxx_i386.so │ │ │ │ ├── engine_amxx_i386.so │ │ │ │ ├── geoip_amxx_i386.so │ │ │ │ ├── mysql_amxx_i386.so │ │ │ │ ├── nvault_amxx_i386.so │ │ │ │ ├── regex_amxx_i386.so │ │ │ │ ├── sqlite_amxx_i386.so │ │ │ │ ├── fakemeta_amxx_i386.so │ │ │ │ ├── sockets_amxx_i386.so │ │ │ │ └── hamsandwich_amxx_i386.so │ │ │ └── configs │ │ │ │ ├── maps.ini │ │ │ │ ├── cvars.ini │ │ │ │ ├── sql.cfg │ │ │ │ ├── cmds.ini │ │ │ │ ├── clcmds.ini │ │ │ │ ├── configs.ini │ │ │ │ ├── custommenuitems.cfg │ │ │ │ ├── core.ini │ │ │ │ ├── modules.ini │ │ │ │ ├── plugins.ini │ │ │ │ ├── speech.ini │ │ │ │ ├── users.ini │ │ │ │ └── amxx.cfg │ │ └── stripper2 │ │ │ └── dlls │ │ │ └── stripper2_mm.so │ ├── motd.txt │ ├── liblist.gam │ ├── default.cfg │ └── server.cfg ├── hldm.install ├── entrypoint.sh └── Dockerfile ├── .github ├── FUNDING.yml └── workflows │ ├── pages.yml │ └── ci.yml ├── docs ├── favicon.ico ├── script.js ├── style.css └── index.html ├── media ├── banner.jpg └── github-video.jpg ├── docker-compose.yml ├── .gitlab-ci.yml ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | gamedir 2 | -------------------------------------------------------------------------------- /docker/gamedir/mapcycle.txt: -------------------------------------------------------------------------------- 1 | crossfire 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [spezifanta] 2 | -------------------------------------------------------------------------------- /docker/gamedir/stripper2.cfg: -------------------------------------------------------------------------------- 1 | // Keep this file to avoid warnings on startup. 2 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docs/favicon.ico -------------------------------------------------------------------------------- /media/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/media/banner.jpg -------------------------------------------------------------------------------- /docker/gamedir/autoexec.cfg: -------------------------------------------------------------------------------- 1 | // Add server configurations to default.cfg 2 | exec default.cfg 3 | -------------------------------------------------------------------------------- /media/github-video.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/media/github-video.jpg -------------------------------------------------------------------------------- /docker/gamedir/addons/metamod/plugins.ini: -------------------------------------------------------------------------------- 1 | linux addons/stripper2/dlls/stripper2_mm.so 2 | //linux addons/amxmodx/dlls/amxmodx_mm_i386.so 3 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/GeoIP.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/data/GeoIP.dat -------------------------------------------------------------------------------- /docker/gamedir/addons/metamod/dlls/metamod.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/metamod/dlls/metamod.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/amxxpc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/scripting/amxxpc -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/admin.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/admin.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/cmdmenu.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/cmdmenu.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/nextmap.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/nextmap.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/plmenu.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/plmenu.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/admincmd.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/data/lang/admincmd.txt -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/restmenu.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/data/lang/restmenu.txt -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/statscfg.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/data/lang/statscfg.txt -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/admin_sql.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/admin_sql.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/adminchat.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/adminchat.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/admincmd.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/admincmd.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/adminhelp.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/adminhelp.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/adminvote.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/adminvote.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/antiflood.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/antiflood.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/imessage.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/imessage.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/mapsmenu.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/mapsmenu.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/menufront.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/menufront.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/pausecfg.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/pausecfg.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/scrollmsg.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/scrollmsg.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/statscfg.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/statscfg.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/telemenu.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/telemenu.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/timeleft.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/timeleft.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/amxxpc32.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/scripting/amxxpc32.so -------------------------------------------------------------------------------- /docker/gamedir/addons/stripper2/dlls/stripper2_mm.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/stripper2/dlls/stripper2_mm.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/miscstats.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/data/lang/miscstats.txt -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/stats_dod.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/data/lang/stats_dod.txt -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/dlls/amxmodx_mm_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/dlls/amxmodx_mm_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/fun_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/fun_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/adminslots.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/adminslots.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/mapchooser.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/mapchooser.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/multilingual.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/multilingual.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/pluginmenu.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/pluginmenu.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/engine_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/engine_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/geoip_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/geoip_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/mysql_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/mysql_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/nvault_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/nvault_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/regex_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/regex_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/sqlite_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/sqlite_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/plugins/amxmod_compat.amxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/plugins/amxmod_compat.amxx -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/fakemeta_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/fakemeta_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/sockets_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/sockets_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/sockets.inc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/scripting/include/sockets.inc -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/modules/hamsandwich_amxx_i386.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/modules/hamsandwich_amxx_i386.so -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/sqlxtest.sq3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spezifanta/hldm-docker/HEAD/docker/gamedir/addons/amxmodx/scripting/testsuite/sqlxtest.sq3 -------------------------------------------------------------------------------- /docker/hldm.install: -------------------------------------------------------------------------------- 1 | @ShutdownOnFailedCommand 0 2 | @NoPromptForPassword 1 3 | login anonymous 4 | force_install_dir ./hldm 5 | app_set_config 90 mod valve 6 | app_update 90 7 | app_update 90 validate 8 | app_update 90 validate 9 | quit 10 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/maps.ini: -------------------------------------------------------------------------------- 1 | ; Maps configuration file 2 | ; File location: $moddir/addons/amxmodx/configs/maps.ini 3 | ; To use with Maps Menu plugin 4 | 5 | ; Add in your mod's maps here 6 | ; Delete this file to use mapcycle.txt 7 | 8 | -------------------------------------------------------------------------------- /docker/gamedir/motd.txt: -------------------------------------------------------------------------------- 1 | Welcome to HLDM Docker 2 | 3 | 4 | This server uses Docker. 5 | For more information visit 6 | https://github.com/spezifanta/hldm-docker 7 | 8 | 9 | 10 | 11 | Love old-school Half-Life? 12 | Join us on Discord: discord.steamcalculator.com 13 | -------------------------------------------------------------------------------- /docker/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | if [ -d /tmp/gamedir ] 4 | then 5 | rsync --chown=steam:steam /tmp/gamedir/* /opt/steam/hldm/valve 6 | fi 7 | 8 | export LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH" 9 | 10 | echo "Starting HLDS Docker ${VERSION} (${RELEASE_DATE})..." 11 | ./hlds_linux "${@}" 12 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/sqlxtest.sql: -------------------------------------------------------------------------------- 1 | 2 | 3 | CREATE TABLE gaben (gaben int primary key, fat varchar(32)); 4 | 5 | INSERT INTO gaben VALUES(1, 'what the'); 6 | INSERT INTO gaben VALUES(2, 'Bee''s Knees!'); 7 | INSERT INTO gaben VALUES(3, 'newell'); 8 | INSERT INTO gaben VALUES(4, 'CRAB CAKE.'); 9 | -------------------------------------------------------------------------------- /docker/gamedir/liblist.gam: -------------------------------------------------------------------------------- 1 | // Valve Game Info file 2 | // These are key/value pairs. Certain mods will use different settings. 3 | // 4 | game "Half-Life" 5 | startmap "c0a0" 6 | trainmap "t0a0" 7 | mpentity "info_player_deathmatch" 8 | gamedll "dlls/mp.dll" 9 | gamedll_linux "addons/metamod/dlls/metamod.so" 10 | gamedll_osx "dlls/hl.dylib" 11 | secure "1" 12 | type "singleplayer_only" 13 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/cvars.ini: -------------------------------------------------------------------------------- 1 | ; Menu configuration file 2 | ; File location: $moddir/addons/amxmodx/configs/cvars.ini 3 | ; To use with Commands Menu plugin 4 | 5 | ; Cvars Menu: 6 | ; < cvar > < values > ... < access level > 7 | 8 | "mp_timelimit" "0" "30" "45" "u" 9 | "sv_password" "" "mypw" "clanwar" "u" 10 | "pausable" "0" "1" "u" 11 | "sv_voiceenable" "0" "1" "u" 12 | "mp_chattime" "0" "1" "3" "u" 13 | "mp_logmessages" "0" "1" "u" 14 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/svn_version.inc: -------------------------------------------------------------------------------- 1 | /* AMX Mod X constants 2 | * 3 | * by the AMX Mod X Development Team 4 | * originally developed by OLO 5 | * 6 | * This file is provided as is (no warranties). 7 | */ 8 | 9 | #if defined _svnversion_included 10 | #endinput 11 | #endif 12 | #define _svnversion_included 13 | 14 | #define AMXX_VERSION 1.82 15 | #define AMXX_VERSION_NUM 182 16 | stock const AMXX_VERSION_STR[] = "1.8.2"; 17 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/nvault_test.sma: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | public plugin_init() 5 | { 6 | register_plugin("nVault Test", "1.0", "BAILOPAN") 7 | 8 | register_srvcmd("test_nvault", "Command_TestNvault") 9 | } 10 | 11 | public Command_TestNvault() 12 | { 13 | new v = nvault_open("://:/1/R!?#@41345$%:$") 14 | server_print("Vault value: %d (expected: %d)", v, -1) 15 | 16 | if (v != -1) 17 | { 18 | nvault_close(v) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/svn_version.tpl: -------------------------------------------------------------------------------- 1 | /* AMX Mod X constants 2 | * 3 | * by the AMX Mod X Development Team 4 | * originally developed by OLO 5 | * 6 | * This file is provided as is (no warranties). 7 | */ 8 | 9 | #if defined _svnversion_included 10 | #endinput 11 | #endif 12 | #define _svnversion_included 13 | 14 | #define AMXX_VERSION $PMAJOR$.$PMINOR$$PREVISION$ 15 | #define AMXX_VERSION_NUM $PMAJOR$$PMINOR$$PREVISION$ 16 | stock const AMXX_VERSION_STR[] = "$PMAJOR$.$PMINOR$.$PREVISION$"; 17 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/fakemeta_tests.sma: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | public plugin_init() 5 | { 6 | register_plugin("Fakemeta Tests", "1.0", "BAILOPAN") 7 | register_forward(FM_ServerDeactivate, "Hook_ServerDeactivate") 8 | } 9 | 10 | public Hook_ServerDeactivate() 11 | { 12 | server_print("[FAKEMETA TEST] ServerDeactivate() at %f", get_gametime()) 13 | } 14 | 15 | public plugin_end() 16 | { 17 | server_print("[FAKEMETA TEST] plugin_end() at %f", get_gametime()) 18 | } 19 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.7' 2 | 3 | services: 4 | hldm: 5 | build: docker 6 | image: spezifanta/hldm 7 | # ports: 8 | # default port for player connection. 9 | # - '27015:27015' 10 | # - '27015:27015/udp' 11 | # Port for VAC and master server queries. 12 | # - '26900:26900/udp' 13 | volumes: 14 | - './gamedir:/tmp/gamedir' 15 | command: +maxplayers 12 +map crossfire +rcon_password "supersecret" +log on +logaddress 0.0.0.0 27500 +sys_ticrate 1000 -pingboost 2 16 | network_mode: 'host' 17 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/sql.cfg: -------------------------------------------------------------------------------- 1 | // SQL configuration file 2 | // File location: $moddir/addons/amxmodx/configs/sql.cfg 3 | 4 | // *NOTE* Linux users may encounter problems if they specify "localhost" instead of "127.0.0.1" 5 | // We recommend using your server IP address instead of its name 6 | 7 | // *NOTE* amx_sql_type specifies the DEFAULT database type which admin.sma will use. 8 | 9 | amx_sql_host "127.0.0.1" 10 | amx_sql_user "root" 11 | amx_sql_pass "" 12 | amx_sql_db "amx" 13 | amx_sql_table "admins" 14 | amx_sql_type "mysql" 15 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/cmds.ini: -------------------------------------------------------------------------------- 1 | ; Menu configuration file 2 | ; File location: $moddir/addons/amxmodx/configs/cmds.ini 3 | ; To use with Commands Menu plugin 4 | 5 | ; NOTE: By default in all settings the access level is set to "u". 6 | ; However you can change that, to limit the access to some settings. 7 | 8 | ; Commands Menu: ; < description > < command > < flags > < access level > 9 | ; "a" - execute from server console 10 | ; "b" - execute from admin console 11 | ; "c" - execute on all clients 12 | ; "d" - back to menu when executed 13 | 14 | "Pause" "amx_pause" "ad" "u" 15 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/fwdtest2.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | new g_id 4 | 5 | native test_createforward(function[]) 6 | native test_executeforward() 7 | 8 | public plugin_init() 9 | { 10 | g_id = register_plugin("Forward Test (Client)", "1.0", "Belsebub") 11 | 12 | register_srvcmd("fwd_test1", "Test_Forward1") 13 | } 14 | 15 | public Test_Forward1() 16 | { 17 | server_print("Executing forward ^"gaben^" (I'm %d)", g_id) 18 | test_createforward("gaben") 19 | test_executeforward() 20 | } 21 | 22 | public gaben() 23 | { 24 | server_print("gaben executed (I'm %d)", g_id) 25 | } 26 | -------------------------------------------------------------------------------- /docs/script.js: -------------------------------------------------------------------------------- 1 | function generateRandomPassword(length) { 2 | const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 3 | let result = ''; 4 | for (let i = 0; i < length; i++) { 5 | result += chars.charAt(Math.floor(Math.random() * chars.length)); 6 | } 7 | return result; 8 | } 9 | 10 | // Generate random rcon password on page load 11 | document.addEventListener('DOMContentLoaded', function() { 12 | const rconElement = document.getElementById('rcon-password'); 13 | if (rconElement) { 14 | rconElement.textContent = generateRandomPassword(16); 15 | } 16 | }); -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/native_test.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | native Factorial(num) 4 | 5 | public __Factorial(id, num) 6 | { 7 | new num = get_param(1) 8 | if (num == 0) 9 | { 10 | return 1 11 | } 12 | 13 | return num * Factorial(num - 1) 14 | } 15 | 16 | public plugin_natives() 17 | { 18 | register_native("Factorial", "__Factorial") 19 | } 20 | 21 | public plugin_init() 22 | { 23 | register_plugin("Native Test", "1.0", "BAILOPAN") 24 | register_srvcmd("test_native1", "Command_TestNative1") 25 | } 26 | 27 | public Command_TestNative1() 28 | { 29 | new num = Factorial(6) 30 | server_print("Factorial of 6 is: %d", num) 31 | } 32 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # AMX Mod X 4 | # 5 | # by the AMX Mod X Development Team 6 | # originally developed by OLO 7 | # 8 | # This file is part of AMX Mod X. 9 | 10 | # new code contributed by \malex\ 11 | 12 | test -e compiled || mkdir compiled 13 | rm -f temp.txt 14 | 15 | # Choose compiler binary 16 | if test `uname` = "Darwin"; then 17 | pc=./amxxpc_osx 18 | else 19 | pc=./amxxpc 20 | fi 21 | 22 | for sourcefile in *.sma 23 | do 24 | amxxfile="`echo $sourcefile | sed -e 's/\.sma$/.amxx/'`" 25 | echo -n "Compiling $sourcefile ..." 26 | $pc $sourcefile -ocompiled/$amxxfile >> temp.txt 27 | echo "done" 28 | done 29 | 30 | less temp.txt 31 | rm temp.txt 32 | -------------------------------------------------------------------------------- /docker/gamedir/default.cfg: -------------------------------------------------------------------------------- 1 | // For almost full list of server comamnds visit: 2 | // http://sr-team.clan.su/K_stat/hlcommandsfull.html 3 | 4 | // This sets the config file which is loaded at each map change. 5 | hostname "HLDM Docker" 6 | 7 | mp_autocrosshair "0" 8 | mp_falldamage "0" 9 | mp_logdetail "1" 10 | mp_logfile "0" 11 | mp_timelimit "120" 12 | pausable "0" 13 | secure "1" 14 | sv_aim "0" 15 | sv_allowupload "0" 16 | sv_contact "steamcalculator.com" 17 | sv_proxies "0" 18 | sv_region "3" 19 | sv_minrate "1000" 20 | sv_maxrate "100000" 21 | sv_minupaterate "60" 22 | sv_maxupaterate "101" 23 | 24 | // voice 25 | sv_alltalk "1" 26 | sv_voicecodec voice_speex 27 | sv_voiceenable "1" 28 | sv_voicequality "3" 29 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/mysql.inc: -------------------------------------------------------------------------------- 1 | 2 | #if defined _mysql_included 3 | #endinput 4 | #endif 5 | #define _mysql_included 6 | 7 | #include 8 | 9 | native mysql_connect(host[], user[], pass[], dbname[], error[], maxlength); 10 | native mysql_query(sql, query[], {Float,_}:... ); 11 | native mysql_error(sql, dest[], maxlength); 12 | native mysql_close(sql); 13 | native mysql_nextrow(sql); 14 | native mysql_getfield(sql, fieldnum, {Float,_}:... ); 15 | native mysql_getresult(sql, field[], {Float,_}:... ); 16 | native mysql_affected_rows(sql); 17 | native mysql_num_fields(sql); 18 | native mysql_num_rows(sql); 19 | native mysql_field_name(sql, field, name[], length); 20 | native mysql_insert_id(sql); 21 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/vault.inc: -------------------------------------------------------------------------------- 1 | /* Vault functions 2 | * 3 | * by the AMX Mod X Development Team 4 | * originally developed by OLO 5 | * 6 | * This file is provided as is (no warranties). 7 | */ 8 | 9 | #if defined _vault_included 10 | #endinput 11 | #endif 12 | #define _vault_included 13 | 14 | /* Reads a data from given key. 15 | * If len is set to zero then get_vaultdata 16 | * returns value as an number. */ 17 | native get_vaultdata(const key[], data[] = "", len = 0); 18 | 19 | /* Sets a data under given key. */ 20 | native set_vaultdata(const key[], const data[] = ""); 21 | 22 | /* Removes a key from vault.*/ 23 | native remove_vaultdata(const key[]); 24 | 25 | /* Checks if a key exists in the vault.*/ 26 | native vaultdata_exists(const key[]); 27 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: docker:20.10.6 2 | 3 | variables: 4 | VERSION: $CI_JOB_ID 5 | 6 | stages: 7 | - build 8 | - test 9 | 10 | before_script: 11 | - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY 12 | - export RELEASE_DATE=$(date -u +%Y-%m-%d) 13 | 14 | Build Image: 15 | stage: build 16 | script: 17 | - cd docker 18 | - docker build --cache-from --pull --build-arg RELEASE_DATE="$RELEASE_DATE" -t "$CI_REGISTRY_IMAGE" . | tee stdout.log 19 | - docker push "$CI_REGISTRY_IMAGE" 20 | retry: 2 21 | 22 | Launch HLDM: 23 | stage: test 24 | script: 25 | - docker run -t "$CI_REGISTRY_IMAGE" > stdout.log & 26 | - sleep 100 27 | - cat stdout.log 28 | - grep -m 1 "Connection to Steam servers successful" stdout.log 29 | retry: 2 30 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/clcmds.ini: -------------------------------------------------------------------------------- 1 | ; Menu configuration file 2 | ; Default File location: $moddir/addons/amxmodx/configs/clcmds.ini 3 | ; To use with Players Menu plugin 4 | 5 | ; NOTE: By default in all settings the access level is set to "u". 6 | ; However you can change that, to limit the access to some settings. 7 | 8 | ; Client Commands Menu: ; < description > < command > < flags > < access level > 9 | ; "a" - execute from server console 10 | ; "b" - execute from admin console 11 | ; "c" - execute on selected player 12 | ; "d" - back to menu when executed 13 | 14 | "Kick player" "amx_kick #%userid%" "b" "u" 15 | "Slay player" "amx_slay #%userid%" "bd" "u" 16 | "Slap with 1 dmg." "amx_slap #%userid% 1" "bd" "u" 17 | "Ban for 5 minutes" "amx_ban #%userid% 5" "b" "u" 18 | -------------------------------------------------------------------------------- /.github/workflows/pages.yml: -------------------------------------------------------------------------------- 1 | name: Deploy GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | contents: read 10 | pages: write 11 | id-token: write 12 | 13 | concurrency: 14 | group: "pages" 15 | cancel-in-progress: false 16 | 17 | jobs: 18 | deploy: 19 | environment: 20 | name: github-pages 21 | url: ${{ steps.deployment.outputs.page_url }} 22 | runs-on: ubuntu-latest 23 | steps: 24 | - name: Checkout 25 | uses: actions/checkout@v4 26 | 27 | - name: Setup Pages 28 | uses: actions/configure-pages@v4 29 | 30 | - name: Upload artifact 31 | uses: actions/upload-pages-artifact@v3 32 | with: 33 | path: './docs' 34 | 35 | - name: Deploy to GitHub Pages 36 | id: deployment 37 | uses: actions/deploy-pages@v4 -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/celltrie.inc: -------------------------------------------------------------------------------- 1 | #if defined _celltrie_included 2 | #endinput 3 | #endif 4 | #define _celltrie_included 5 | 6 | enum Trie 7 | { 8 | Invalid_Trie = 0 9 | }; 10 | 11 | 12 | native Trie:TrieCreate(); 13 | native TrieClear(Trie:handle); 14 | 15 | native TrieSetCell(Trie:handle, const key[], any:value); 16 | native TrieSetString(Trie:handle, const key[], const value[]); 17 | native TrieSetArray(Trie:handle, const key[], const any:buffer[], size); 18 | 19 | native bool:TrieGetCell(Trie:handle, const key[], &any:value); 20 | native bool:TrieGetString(Trie:handle, const key[], output[], outputsize); 21 | native bool:TrieGetArray(Trie:handle, const key[], any:output[], outputsize); 22 | 23 | native bool:TrieDeleteKey(Trie:handle, const key[]); 24 | native bool:TrieKeyExists(Trie:handle, const key[]); 25 | native TrieDestroy(&Trie:handle); 26 | 27 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_const.inc: -------------------------------------------------------------------------------- 1 | #if defined _vexdum_const_included 2 | #endinput 3 | #endif 4 | #define _vexdum_const_included 5 | 6 | // TraceLine Integer 7 | enum { 8 | TR_INT_fAllSolid, // if true, plane is not valid 9 | TR_INT_fStartSolid, // if true, the initial point was in a solid area 10 | TR_INT_fInOpen, 11 | TR_INT_fInWater, 12 | TR_INT_iHitgroup, // 0 == generic, non zero is specific body part 13 | }; 14 | 15 | // TraceLine Float 16 | enum { 17 | TR_FL_flFraction, // time completed, 1.0 = didn't hit anything 18 | TR_FL_flPlaneDist, 19 | }; 20 | 21 | // TraceLine Vector 22 | enum { 23 | TR_VEC_vecEndPos, // final position 24 | TR_VEC_vecPlaneNormal, // surface normal at impact 25 | }; 26 | 27 | // TraceLine Edict 28 | enum { 29 | TR_ENT_pHit, // entity the surface is on 30 | }; 31 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/core.inc: -------------------------------------------------------------------------------- 1 | /* Core functions 2 | * 3 | * (c) Copyright 1998-2003, ITB CompuPhase 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _core_included 9 | #endinput 10 | #endif 11 | #define _core_included 12 | 13 | native heapspace(); 14 | 15 | native funcidx(const name[]); 16 | 17 | native numargs(); 18 | native getarg(arg, index=0); 19 | native setarg(arg, index=0, value); 20 | 21 | native strlen(const string[]); 22 | 23 | native tolower(c); 24 | native toupper(c); 25 | native swapchars(c); 26 | 27 | native random(max); 28 | 29 | native min(value1, value2); 30 | native max(value1, value2); 31 | native clamp(value, min=cellmin, max=cellmax); 32 | 33 | native power(value, exponent); 34 | native sqroot(value); 35 | 36 | native time(&hour=0,&minute=0,&second=0); 37 | native date(&year=0,&month=0,&day=0); 38 | 39 | native tickcount(&granularity=0); 40 | 41 | stock abs(x) 42 | { 43 | return x > 0 ? x : -x; 44 | } 45 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/logtest.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | new g_BlockLog 4 | 5 | public plugin_init() 6 | { 7 | register_plugin("Log Tester", "1.0", "BAILOPAN") 8 | register_srvcmd("log_addlogevent", "Command_AddLogEvent") 9 | register_srvcmd("log_setblock", "Command_LogSetBlock") 10 | } 11 | 12 | public event_round_start() 13 | { 14 | 15 | } 16 | 17 | public Command_LogSetBlock() 18 | { 19 | if (read_argc() < 2) 20 | { 21 | server_print("Specify 1 or 0.") 22 | return PLUGIN_HANDLED 23 | } 24 | 25 | new temp[12] 26 | read_argv(1, temp, 11) 27 | 28 | g_BlockLog = str_to_num(temp) ? true : false 29 | 30 | return PLUGIN_HANDLED 31 | } 32 | 33 | public plugin_log() 34 | { 35 | server_print("Got log event! Blocking: %d", g_BlockLog) 36 | 37 | return g_BlockLog ? PLUGIN_HANDLED : PLUGIN_CONTINUE 38 | } 39 | 40 | public Command_AddLogEvent(id) 41 | { 42 | register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start") 43 | 44 | return PLUGIN_HANDLED 45 | } 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Alex Kuhrt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/configs.ini: -------------------------------------------------------------------------------- 1 | ; Menu configuration file 2 | ; File location: $moddir/addons/amxmodx/configs/configs.ini 3 | ; To use with Commands Menu plugin 4 | 5 | ; NOTE: By default in all settings the access level is set to "u". 6 | ; However you can change that, to limit the access to some settings. 7 | 8 | ; Commands Menu: 9 | ; < description > < command > < flags > < access level > 10 | ; "a" - execute from server console 11 | ; "b" - execute from admin console 12 | ; "c" - execute on all clients 13 | ; "d" - back to menu when executed 14 | 15 | ;"PUBLIC Settings" "servercfgfile server.cfg;exec server.cfg" "a" "u" 16 | ;"Clanbase" "exec clanbase.cfg;servercfgfile \'\'" "a" "u" 17 | ;"Clanbase Charges Only" "exec clanbase_co.cfg;servercfgfile \'\'" "a" "u" 18 | ;"Official CAL Match" "exec cal.cfg;servercfgfile \'\'" "a" "u" 19 | ;"ProvingGrounds Server Config" "exec leagues/pg.cfg;servercfgfile \'\'" "a" "u" 20 | ;"OGL CS Server Config" "exec ogl.cfg;servercfgfile \'\'" "a" "u" 21 | ;"OGL CS FF Server Config" "exec ogl_ff.cfg;servercfgfile \'\'" "a" "u" 22 | ;"OGL CS Advanced Server Config" "exec ogl_adv.cfg;servercfgfile \'\'" "a" "u" 23 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/custommenuitems.cfg: -------------------------------------------------------------------------------- 1 | // Here you can add menu items from any plugin to Menus Front-End plugin, aka "amxmodmenu". 2 | // You can also add menu items to the normal non-admin client menu "amx_menu". 3 | // 4 | // Adding to "amxmodmenu": 5 | // Usage: "amx_addmenuitem " 6 | // 7 | // Adding to "amx_menu": 8 | // Usage: "amx_addclientmenuitem " 9 | // 10 | // : This is the text displayed in the menu itself for this item. 11 | // : This is the client command used to access the menu. 12 | // : Specify what access flags admins must have to use this menu item. (Check users.ini for access flags.) 13 | // : This must be the _exact_ (though case insensitive) name of the plugin which holds the menu command. (Use "amxx plugins" in server console, plugin names are listed in Name column.) 14 | // 15 | // Example: (be sure to use quotes around parameters with spaces!) 16 | // 17 | // amx_addmenuitem "Weapon Arena" "weaponarena_menu" "hu" "Weapon Arena" 18 | // amx_addclientmenuitem "Warcraft 3" "war3menu" "" "Warcraft 3 XP" 19 | 20 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/antiflood.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | STOP_FLOOD = Stop flooding the server! 3 | 4 | [de] 5 | STOP_FLOOD = Bitte nicht zu viele Eingaben auf einmal! 6 | 7 | [sr] 8 | STOP_FLOOD = Prestani da opterecujes server porukama! 9 | 10 | [tr] 11 | STOP_FLOOD = Serveri yazi ile doldurmayin! 12 | 13 | [fr] 14 | STOP_FLOOD = Arrete de flooder le serveur! 15 | 16 | [sv] 17 | STOP_FLOOD = Sluta flooda servern! 18 | 19 | [da] 20 | STOP_FLOOD = Stop med at oversvoemme serveren! 21 | 22 | [pl] 23 | STOP_FLOOD = Przestan zapychac serwer! 24 | 25 | [nl] 26 | STOP_FLOOD = Stop met de server vol te spammen! 27 | 28 | [es] 29 | STOP_FLOOD = Para de saturar el servidor! 30 | 31 | [bp] 32 | STOP_FLOOD = Parem com o flood no servidor! 33 | 34 | [cz] 35 | STOP_FLOOD = Prestan floodovat! 36 | 37 | [fi] 38 | STOP_FLOOD = Lopeta floodiminen! 39 | 40 | [ls] 41 | STOP_FLOOD = nu m0|2 fl00d, | 2 | 3 | new g_forward 4 | new g_id 5 | 6 | public plugin_init() 7 | { 8 | g_id = register_plugin("Foward Test (Master)", "1.0", "Belsebub") 9 | } 10 | 11 | public plugin_natives() 12 | { 13 | register_native("test_createforward", "test_createforward_handler") 14 | register_native("test_executeforward", "test_executeforward_handler") 15 | } 16 | 17 | //test_createforward(function[]) 18 | public test_createforward_handler(pluginid, numparams) 19 | { 20 | server_print("(test_createforward_handler: %d,%d)", pluginid, numparams) 21 | 22 | new function[32] 23 | get_string(1, function, 31) 24 | 25 | if (g_forward > 0) 26 | { 27 | DestroyForward(g_forward) 28 | } 29 | 30 | g_forward = CreateOneForward(pluginid, function) 31 | if (g_forward < 0) 32 | { 33 | server_print("Failed to create forward!") 34 | } 35 | } 36 | 37 | //test_executeforward() 38 | public test_executeforward_handler(pluginid, numparams) 39 | { 40 | new retval 41 | 42 | server_print("(test_executeforward_handler: %d,%d)", pluginid, numparams) 43 | 44 | if (!ExecuteForward(g_forward, retval)) 45 | { 46 | server_print("failed to execute forward (I'm %d)", g_id) 47 | } 48 | 49 | if (g_forward > 0) 50 | { 51 | DestroyForward(g_forward) 52 | g_forward = -1 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/imessage.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | INF_REACH = Information Messages limit reached! 3 | 4 | [de] 5 | INF_REACH = Nachrichtenlimit erreicht! 6 | 7 | [sr] 8 | INF_REACH = Dostignut limit Informacione Poruke! 9 | 10 | [tr] 11 | INF_REACH = Informasyon mesajlari sinirina ulasildi! 12 | 13 | [fr] 14 | INF_REACH = Limite de Messages d'Information atteinte! 15 | 16 | [sv] 17 | INF_REACH = Maximalt antal informationsmeddelanden! 18 | 19 | [da] 20 | INF_REACH = Informations beskeder graense naaet! 21 | 22 | [pl] 23 | INF_REACH = Osiagniety limit wiadomosci informacyjnych! 24 | 25 | [nl] 26 | INF_REACH = Informatieve Berichtenlimiet bereikt! 27 | 28 | [es] 29 | INF_REACH = Se ha alcanzado el limite maximo de Mensajes de Informacion! 30 | 31 | [bp] 32 | INF_REACH = Limite de mensagens de informacao obtido! 33 | 34 | [cz] 35 | INF_REACH = Limit informacnich zprav presazen! 36 | 37 | [fi] 38 | INF_REACH = Information Message -raja ylitetty! 39 | 40 | [ls] 41 | INF_REACH = l!m!tz r34ch3d 42 | 43 | [bg] 44 | INF_REACH = Informacionnoto saob6tenie dostigna limita! 45 | 46 | [ro] 47 | INF_REACH = Limita mesajelor informative a fost atinsa! 48 | 49 | [hu] 50 | INF_REACH = Informacio uzenetek limit elerve! 51 | 52 | [lt] 53 | INF_REACH = Informacijos zinuciu limitas pasiektas 54 | 55 | [sk] 56 | INF_REACH = Limit informacnych sprav prekroceny! 57 | 58 | [mk] 59 | INF_REACH = Dostignat e limitot za Informacioni Poraki! 60 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/amx_log copy.sma: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #define PLUGIN "AMX Log" 7 | #define VERSION "0.0.1" 8 | #define AUTHOR "spezifanta" 9 | 10 | public plugin_init() 11 | { 12 | register_plugin( PLUGIN, VERSION, AUTHOR ) 13 | 14 | register_concmd( "amx_log", "log_user", ADMIN_KICK, "" ) 15 | 16 | RegisterHam(Ham_Touch,"trigger_multiple","block_door_fix3",0) 17 | 18 | 19 | 20 | register_cvar( "amx_log_version", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY ) 21 | } 22 | 23 | 24 | 25 | public block_door_fix3(ent,other){ 26 | new class[32] 27 | new name2[32] 28 | pev(ent,pev_target,class,31) 29 | pev(other,pev_classname,name2,31) 30 | 31 | 32 | 33 | static szLogData[ 200 ] 34 | formatex( szLogData, sizeof szLogData - 1, "button event touched %s by: %s", class, name2 ) 35 | 36 | console_print( 0, szLogData ) 37 | 38 | if (equal(name2, "player")) { 39 | if (equal(class, "strike_mm")) { 40 | console_print(0, "A nuklear air strike was called") 41 | } 42 | } 43 | 44 | 45 | 46 | } 47 | 48 | public log_user( id, level, cid ) 49 | { 50 | static szLogData[ 200 ] 51 | formatex( szLogData, sizeof szLogData - 1, "weeee! custom log entry" ) 52 | console_print( 0, szLogData ) 53 | log_message(szLogData) 54 | 55 | return PLUGIN_HANDLED 56 | } 57 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/adminslots.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | DROPPED_RES = Dropped due to slot reservation 3 | 4 | [de] 5 | DROPPED_RES = Sorry, dieser Slot ist reserviert. 6 | 7 | [sr] 8 | DROPPED_RES = Server je pun, nemate pristup rezervisanim mestima 9 | 10 | [tr] 11 | DROPPED_RES = Reservasyon nedeniyle atildiniz 12 | 13 | [fr] 14 | DROPPED_RES = Desole, un admin vient de prendre sa place reservee, tu as ete ejecte du serveur. 15 | 16 | [sv] 17 | DROPPED_RES = Nerkopplad pga platsreservation 18 | 19 | [da] 20 | DROPPED_RES = Frakoblet pga. plads reservation 21 | 22 | [pl] 23 | DROPPED_RES = Wyrzucony z powodu rezerwacji slotow 24 | 25 | [bp] 26 | DROPPED_RES = Desconectado pois o slot esta reservado 27 | 28 | [nl] 29 | DROPPED_RES = Sorry, deze plaats is gereserveerd 30 | 31 | [es] 32 | DROPPED_RES = Desconectado por reserva de plazas 33 | 34 | [cz] 35 | DROPPED_RES = Vyhozen, slot je rezervovan 36 | 37 | [fi] 38 | DROPPED_RES = Pudotettiin palvelimelta slotvarauksen takia (adminslot) 39 | 40 | [ls] 41 | DROPPED_RES = j00 r n0t l33t 3uff, s0z 42 | 43 | [bg] 44 | DROPPED_RES = Izklu4en poneje mqstoto e rezervirano 45 | 46 | [ro] 47 | DROPPED_RES = Ai primit kick pentru rezervare slot. 48 | 49 | [hu] 50 | DROPPED_RES = Nincs szabad hely. 51 | 52 | [lt] 53 | DROPPED_RES = Atjungtas, nes nera laisvos vietos 54 | 55 | [sk] 56 | DROPPED_RES = Prepac,ale slot je rezervovany 57 | 58 | [mk] 59 | DROPPED_RES = Serverot e poln, nemate pristap vo rezerviranite mesta 60 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/languages.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | LANG_NAME = English 3 | LANG_NAME_NATIVE = English 4 | 5 | [de] 6 | LANG_NAME = German 7 | LANG_NAME_NATIVE = Deutsch 8 | 9 | [sr] 10 | LANG_NAME = Serbian 11 | LANG_NAME_NATIVE = Srpski 12 | 13 | [tr] 14 | LANG_NAME = Turkish 15 | LANG_NAME_NATIVE = Turkce 16 | 17 | [fr] 18 | LANG_NAME = French 19 | LANG_NAME_NATIVE = Francais 20 | 21 | [sv] 22 | LANG_NAME = Swedish 23 | LANG_NAME_NATIVE = Svenska 24 | 25 | [da] 26 | LANG_NAME = Danish 27 | LANG_NAME_NATIVE = Dansk 28 | 29 | [pl] 30 | LANG_NAME = Polish 31 | LANG_NAME_NATIVE = Polski 32 | 33 | [nl] 34 | LANG_NAME = Dutch 35 | LANG_NAME_NATIVE = Nederlands 36 | 37 | [es] 38 | LANG_NAME = Spanish 39 | LANG_NAME_NATIVE = Espanyol 40 | 41 | [bp] 42 | LANG_NAME = Brazil Portuguese 43 | LANG_NAME_NATIVE = Portugues Brasil 44 | 45 | [cz] 46 | LANG_NAME = Czech 47 | LANG_NAME_NATIVE = Cestina 48 | 49 | [fi] 50 | LANG_NAME = Finnish 51 | LANG_NAME_NATIVE = Suomi 52 | 53 | [ls] 54 | LANG_NAME = l33t 55 | LANG_NAME_NATIVE = l33t 56 | 57 | [bg] 58 | LANG_NAME = Bulgarian 59 | LANG_NAME_NATIVE = Bulgarski 60 | 61 | [ro] 62 | LANG_NAME = Romanian 63 | LANG_NAME_NATIVE = Romana 64 | 65 | [hu] 66 | LANG_NAME = Hungarian 67 | LANG_NAME_NATIVE = Magyar 68 | 69 | [lt] 70 | LANG_NAME = Lithuania 71 | LANG_NAME_NATIVE = Lithuania 72 | 73 | [sk] 74 | LANG_NAME = Slovak 75 | LANG_NAME_NATIVE = Slovencina 76 | 77 | [mk] 78 | LANG_NAME = Macedonian 79 | LANG_NAME_NATIVE = Makedonski 80 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/esf_const.inc: -------------------------------------------------------------------------------- 1 | /** 2 | * (C)2004-2005 AMX Mod X Development Team 3 | * based on the stocks and information provided by LynX 4 | * organized and released by BAILOPAN 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _esfconst_included 9 | #endinput 10 | #endif 11 | #define _esfconst_included 12 | 13 | enum 14 | { 15 | Character_Buu = 1, 16 | Character_Goku = 2, 17 | Character_Gohan = 3, //my favorite :) 18 | Character_Krillin = 4, 19 | Character_Frieza = 5, 20 | Character_Piccolo = 6, 21 | Character_Trunks = 7, 22 | Character_Vegeta = 8, 23 | Character_Cell = 9, 24 | }; 25 | 26 | enum 27 | { 28 | Explosion_Blue = 0, 29 | Explosion_Green, 30 | Explosion_Orange, 31 | Explosion_Purple, 32 | Explosion_Yellow, 33 | Explosion_Red, 34 | Explosion_White, 35 | Explosions_Total, 36 | }; 37 | 38 | enum 39 | { 40 | Attack_Kamehameha=1, 41 | Attack_SpiritBomb, 42 | Attack_GalletGun, 43 | Attack_FinalFlash, 44 | Attack_Renzoku, 45 | Attack_Kametorpedo, 46 | Attack_GenericBeam, 47 | Attack_Throw, 48 | }; 49 | 50 | enum 51 | { 52 | Direction_Left=1, 53 | Direction_Right, 54 | Direction_Up, 55 | Direction_Down, 56 | Direction_Forward, 57 | Direction_Backward, 58 | }; 59 | 60 | enum 61 | { 62 | Recovery_Kicked=1, 63 | Recovery_Tumbled, 64 | Recovery_Lying, 65 | Recovery_Thrown, 66 | }; 67 | 68 | #define ESF_CHARGING 1 69 | #define ESF_CONTROLLING 2 70 | #define ESF_SHOOTING 3 71 | #define ESF_SHOT 4 72 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/message_stocks.inc: -------------------------------------------------------------------------------- 1 | /* Message Stocks 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | * 7 | */ 8 | 9 | #if defined _message_stocks_included 10 | #endinput 11 | #endif 12 | #define _message_stocks_included 13 | 14 | /* Creates a death message. */ 15 | stock dod_make_deathmsg(killer, victim, weaponNUM) 16 | { 17 | message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0); 18 | write_byte(killer); 19 | write_byte(victim); 20 | write_byte(weaponNUM); 21 | message_end(); 22 | 23 | return 1; 24 | } 25 | 26 | /* Kills a user without a message. */ 27 | stock user_silentkill(index) 28 | { 29 | static msgid = 0; 30 | new msgblock; 31 | if (!msgid) 32 | { 33 | msgid = get_user_msgid("DeathMsg"); 34 | } 35 | msgblock = get_msg_block(msgid); 36 | set_msg_block(msgid, BLOCK_ONCE); 37 | user_kill(index, 1); 38 | set_msg_block(msgid, msgblock); 39 | 40 | return 1; 41 | } 42 | 43 | /* Creates a death message. */ 44 | stock make_deathmsg(killer, victim, headshot, const weapon[]) 45 | { 46 | message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0); 47 | write_byte(killer); 48 | write_byte(victim); 49 | 50 | new mod_name[32]; 51 | get_modname(mod_name, 31); 52 | if (equal(mod_name, "cstrike") || equal(mod_name, "czero") || equal(mod_name, "csv15") || equal(mod_name, "cs13")) 53 | write_byte(headshot); 54 | write_string(weapon); 55 | message_end(); 56 | 57 | return 1; 58 | } 59 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/plugins.ini: -------------------------------------------------------------------------------- 1 | ; AMX Mod X plugins 2 | 3 | ; Admin Base - Always one has to be activated 4 | admin.amxx ; admin base (required for any admin-related) 5 | ;admin_sql.amxx ; admin base - SQL version (comment admin.amxx) 6 | 7 | ; Basic 8 | admincmd.amxx ; basic admin console commands 9 | adminhelp.amxx ; help command for admin console commands 10 | adminslots.amxx ; slot reservation 11 | multilingual.amxx ; Multi-Lingual management 12 | 13 | ; Menus 14 | menufront.amxx ; front-end for admin menus 15 | cmdmenu.amxx ; command menu (speech, settings) 16 | plmenu.amxx ; players menu (kick, ban, client cmds.) 17 | ;telemenu.amxx ; teleport menu (Fun Module required!) 18 | mapsmenu.amxx ; maps menu (vote, changelevel) 19 | pluginmenu.amxx ; Menus for commands/cvars organized by plugin 20 | 21 | ; Chat / Messages 22 | adminchat.amxx ; console chat commands 23 | antiflood.amxx ; prevent clients from chat-flooding the server 24 | scrollmsg.amxx ; displays a scrolling message 25 | imessage.amxx ; displays information messages 26 | adminvote.amxx ; vote commands 27 | 28 | ; Map related 29 | nextmap.amxx ; displays next map in mapcycle 30 | mapchooser.amxx ; allows to vote for next map 31 | timeleft.amxx ; displays time left on map 32 | 33 | ; Configuration 34 | pausecfg.amxx ; allows to pause and unpause some plugins 35 | statscfg.amxx ; allows to manage stats plugins via menu and commands 36 | 37 | ; Enable to use AMX Mod plugins 38 | ;amxmod_compat.amxx ; AMX Mod backwards compatibility layer 39 | 40 | 41 | ; Custom - Add 3rd party plugins here 42 | log.amxx 43 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/lang.inc: -------------------------------------------------------------------------------- 1 | /* Language functions 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _lang_included 9 | #endinput 10 | #endif 11 | #define _lang_included 12 | 13 | //return the number of languages loaded 14 | native get_langsnum(); 15 | 16 | //sets name to the two-letter name of a language returned by get_langsnum 17 | //index starts at 0 18 | native get_lang(id, name[3]); 19 | 20 | //registers a dictionary file, making sure the words are in the dictionary 21 | // the file should be in "addons/amxx/data/lang/", but only the name needs to be 22 | // given. (e.g. register_dictionary("file.txt") will be addons/amxx/data/file.txt). 23 | native register_dictionary(const filename[]); 24 | 25 | //returns 1 if the language is loaded, 0 otherwise. 26 | native lang_exists(const name[]); 27 | 28 | enum TransKey 29 | { 30 | TransKey_Bad = -1, 31 | }; 32 | 33 | /** 34 | * Adds or finds a translation key. 35 | */ 36 | native TransKey:CreateLangKey(const key[]); 37 | 38 | /** 39 | * Finds a translation key id without adding on failure. 40 | * Returns -1 on not found. 41 | */ 42 | native TransKey:GetLangTransKey(const key[]); 43 | 44 | /** 45 | * Adds a translation. 46 | */ 47 | native AddTranslation(const lang[3], TransKey:key, const phrase[]); 48 | 49 | /** 50 | * Looks up the translation of the key for the given type 51 | * This does NOT format the output text. 52 | * eg: If the key includes %s, the outputted text will also contain %s. 53 | * NOTE: LANG_PLAYER is invalid in this, use a player index 54 | * or LANG_SERVER 55 | */ 56 | native LookupLangKey(Output[], OutputSize, const Key[], const &id); 57 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/tfcconst.inc: -------------------------------------------------------------------------------- 1 | /* TFCX const 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _tfcconst_included 8 | #endinput 9 | #endif 10 | #define _tfcconst_included 11 | 12 | 13 | #define TFCMAX_WEAPONS 37 14 | 15 | enum { 16 | TFC_AMMO_SHELLS = 0, 17 | TFC_AMMO_BULLETS, 18 | TFC_AMMO_CELLS, 19 | TFC_AMMO_ROCKETS, 20 | TFC_AMMO_NADE1, 21 | TFC_AMMO_NADE2, 22 | }; 23 | 24 | enum { 25 | TFC_WPN_NONE = 0, 26 | TFC_WPN_TIMER,//TFC_WPN_UNK1, 27 | TFC_WPN_SENTRYGUN,//TFC_WPN_UNK2, 28 | TFC_WPN_MEDIKIT, 29 | TFC_WPN_SPANNER, 30 | TFC_WPN_AXE, 31 | TFC_WPN_SNIPERRIFLE, 32 | TFC_WPN_AUTORIFLE, 33 | TFC_WPN_SHOTGUN, 34 | TFC_WPN_SUPERSHOTGUN, 35 | TFC_WPN_NG, 36 | TFC_WPN_SUPERNG, 37 | TFC_WPN_GL, 38 | TFC_WPN_FLAMETHROWER, 39 | TFC_WPN_RPG, 40 | TFC_WPN_IC, 41 | TFC_WPN_FLAMES,//TFC_WPN_UNK16, 42 | TFC_WPN_AC, 43 | TFC_WPN_UNK18, 44 | TFC_WPN_UNK19, 45 | TFC_WPN_TRANQ, 46 | TFC_WPN_RAILGUN, 47 | TFC_WPN_PL, 48 | TFC_WPN_KNIFE, 49 | TFC_WPN_CALTROP, // 24 50 | TFC_WPN_CONCUSSIONGRENADE, 51 | TFC_WPN_NORMALGRENADE, 52 | TFC_WPN_NAILGRENADE, 53 | TFC_WPN_MIRVGRENADE, 54 | TFC_WPN_NAPALMGRENADE, 55 | TFC_WPN_GASGRENADE, 56 | TFC_WPN_EMPGRENADE, 57 | }; 58 | 59 | enum { 60 | TFC_PC_SCOUT = 1, 61 | TFC_PC_SNIPER, 62 | TFC_PC_SOLDIER, 63 | TFC_PC_DEMOMAN, 64 | TFC_PC_MEDIC, 65 | TFC_PC_HWGUY, 66 | TFC_PC_PYRO, 67 | TFC_PC_SPY, 68 | TFC_PC_ENGENEER, 69 | TFC_PC_CIVILIAN, 70 | }; 71 | 72 | #define TFC_PC_ENGINEER TFC_PC_ENGENEER 73 | 74 | // Goal items 75 | #define TFC_GOALITEM_BLUE (1 << 17) 76 | #define TFC_GOALITEM_RED (1 << 18) 77 | #define TFC_GOALITEM_YELLOW (1 << 24) 78 | #define TFC_GOALITEM_GREEN (1 << 25) 79 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/amxmod_compat/amxmod_compat.sma: -------------------------------------------------------------------------------- 1 | /** 2 | * AMX Mod Compatibility engine 3 | * by the AMX Mod X Development Team 4 | */ 5 | 6 | #include 7 | #include //we want fun running for extra compatibility 8 | #include //we want engine running for extra compatibility 9 | #include 10 | #include 11 | #define AMXMODX_NOAUTOLOAD 12 | #include 13 | #include 14 | 15 | #define MOD_NORMAL 0 16 | #define MOD_CSTRIKE 1 17 | 18 | new g_ModType = MOD_NORMAL 19 | new g_MaxPlayers 20 | 21 | #include "core.sma" 22 | #include "vexdum.sma" 23 | #include "mysql.sma" 24 | 25 | public plugin_init() 26 | { 27 | register_plugin("AMX Mod Compat Engine", "1.76.rc4", "AMXX Dev Team") 28 | 29 | g_MaxPlayers = get_maxplayers() 30 | 31 | VexdUM_Register() 32 | } 33 | 34 | public plugin_natives() 35 | { 36 | set_module_filter("Plugin_ModuleFilter") 37 | set_native_filter("Plugin_NativeFilter") 38 | 39 | new modname[32] 40 | get_modname(modname, 31) 41 | if (equali(modname, "cstrike") || equali(modname, "czero")) 42 | { 43 | g_ModType = MOD_CSTRIKE 44 | } 45 | 46 | Core_Natives() 47 | VexdUM_Natives() 48 | MySQL_Natives() 49 | } 50 | 51 | public Plugin_ModuleFilter(const module[]) 52 | { 53 | if (equali(module, "sqlx") || equali(module, "cstrike")) 54 | { 55 | return PLUGIN_HANDLED 56 | } 57 | 58 | return PLUGIN_CONTINUE 59 | } 60 | 61 | public Plugin_NativeFilter(const name[], index, trap) 62 | { 63 | if (!trap) 64 | { 65 | return PLUGIN_HANDLED 66 | } 67 | 68 | return PLUGIN_CONTINUE 69 | } 70 | 71 | public client_connect(id) 72 | { 73 | VexdUM_ClientConnect(id) 74 | } 75 | 76 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/speech.ini: -------------------------------------------------------------------------------- 1 | ; Menu configuration file 2 | ; File location: $moddir/addons/amxmodx/configs/speech.ini 3 | ; To use with Commands Menu plugin 4 | 5 | ; NOTE: By default in all settings the access level is set to "u". 6 | ; However you can change that, to limit the access to some settings. 7 | 8 | ; Commands Menu: ; < description > < command > < flags > < access level > 9 | ; "a" - execute from server console 10 | ; "b" - execute from admin console 11 | ; "c" - execute on all clients 12 | ; "d" - back to menu when executed 13 | 14 | "Hello!" "spk \'vox/hello\'" "cd" "u" 15 | "Don't think so" "spk \'barney/dontguess\'" "cd" "u" 16 | "Don't ask me" "spk \'barney/dontaskme\'" "cd" "u" 17 | "Hey! Stop that!" "spk \'barney/donthurtem\'" "cd" "u" 18 | "Yup" "spk \'barney/yup\'" "cd" "u" 19 | "Nope" "spk \'barney/nope\'" "cd" "u" 20 | "Maybe" "spk \'barney/maybe\'" "cd" "u" 21 | "Seeya" "spk \'barney/seeya\'" "cd" "u" 22 | "Man that sounded bad" "spk \'barney/soundsbad\'" "cd" "u" 23 | "Hello and die" "spk \'vox/hello and die\'" "cd" "u" 24 | "Move!" "spk \'hgrunt/move! _comma yessir!\'" "cd" "u" 25 | "You will definitely pay!" "spk \'hgrunt/c2a2_hg_chat5a\'" "cd" "u" 26 | "Laughter" "spk \'hgrunt/c2a3_hg_laugh\'" "cd" "u" 27 | "Silence!" "spk \'hgrunt/silence!\'" "cd" "u" 28 | "You talk too much" "spk \'barney/youtalkmuch\'" "cd" "u" 29 | "You thinkin?" "spk \'barney/thinking\'" "cd" "u" 30 | "Open fire Gordon!" "spk \'barney/openfire\'" "cd" "u" 31 | "Couldnt make a bigger mess" "spk \'barney/bigmess\'" "cd" "u" 32 | "I have a Bad feeling" "spk \'barney/badfeeling\'" "cd" "u" 33 | "Yes sir!" "spk \'hgrunt/yessir!\'" "cd" "u" 34 | "No sir" "spk \'barney/nosir\'" "cd" "u" 35 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/maths.inc: -------------------------------------------------------------------------------- 1 | /* AMX Mod math functions backwards compatibility 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _maths_bcompat_included 9 | #endinput 10 | #endif 11 | #define _maths_bcompat_included 12 | 13 | #if !defined _float_included 14 | #include 15 | #endif 16 | 17 | stock Float:fabs(Float:value) 18 | { 19 | return floatabs(value); 20 | } 21 | 22 | stock Float:asin(Float:value) 23 | { 24 | return floatasin(value, radian); 25 | } 26 | 27 | stock Float:sin(Float:value) 28 | { 29 | return floatsin(value, radian); 30 | } 31 | 32 | stock Float:sinh(Float:value) 33 | { 34 | return floatsinh(value, radian); 35 | } 36 | 37 | stock Float:acos(Float:value) 38 | { 39 | return floatacos(value, radian); 40 | } 41 | 42 | stock Float:cos(Float:value) 43 | { 44 | return floatcos(value, radian); 45 | } 46 | 47 | stock Float:cosh(Float:value) 48 | { 49 | return floatcosh(value, radian); 50 | } 51 | 52 | stock Float:atan(Float:value) 53 | { 54 | return floatatan(value, radian); 55 | } 56 | 57 | stock Float:atan2(Float:value1, Float:value2) 58 | { 59 | return floatatan2(value1, value2, radian); 60 | } 61 | 62 | stock Float:tan(Float:value) 63 | { 64 | return floattan(value, radian); 65 | } 66 | 67 | stock Float:tanh(Float:value) 68 | { 69 | return floattanh(value, radian); 70 | } 71 | 72 | stock Float:fsqroot(Float:value) 73 | { 74 | return floatsqroot(value); 75 | } 76 | 77 | stock Float:fpower(Float:value, Float:exponent) 78 | { 79 | return floatpower(value, exponent); 80 | } 81 | 82 | stock Float:flog(Float:value, Float:base=10.0) 83 | { 84 | return floatlog(value, base); 85 | } 86 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/callfunc_test.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | public plugin_init() 4 | { 5 | register_plugin("callfunc test", "1.0", "BAILOPAN") 6 | 7 | register_srvcmd("test_callfunc", "Command_Callfunc") 8 | } 9 | 10 | public OnCallfuncReceived(num, str[], &val, array[], array2[], size, hello2[1]) 11 | { 12 | server_print("num = %d (expected: %d)", num, 5) 13 | server_print("str[] = ^"%s^" (expected: %s)", str, "Gaben") 14 | 15 | server_print("val = %d (expected %d, setting to %d)", val, 62, 15) 16 | val = 15 17 | server_print("printing %d elements of array[] (expected: %d)", size, 6) 18 | for (new i=0; i /opt/steam/hldm/steam_appid.txt 37 | 38 | WORKDIR /opt/steam/hldm 39 | 40 | # Copy configs, Metamod, Stripper2 and AMX. 41 | COPY --chown=steam:steam gamedir valve/ 42 | COPY --chown=steam:steam ./entrypoint.sh ./entrypoint.sh 43 | 44 | # Expose ports 45 | EXPOSE 27015 27015/udp 46 | 47 | # Start server. 48 | ENTRYPOINT ["./entrypoint.sh", "-timeout 3"] 49 | 50 | # Default start parameters. 51 | CMD ["+maxplayers 12", "+map crossfire"] 52 | 53 | # Labels 54 | LABEL vendor=steamcalculator.com \ 55 | hldm.docker.version="${VERSION}" \ 56 | hldm.docker.release-date="${RELEASE_DATE}" 57 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/nvault.inc: -------------------------------------------------------------------------------- 1 | /* nVault functions 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _nvault_included 9 | #endinput 10 | #endif 11 | #define _nvault_included 12 | 13 | #if AMXX_VERSION_NUM >= 175 14 | #pragma reqlib nvault 15 | #if !defined AMXMODX_NOAUTOLOAD 16 | #pragma loadlib nvault 17 | #endif 18 | #else 19 | #pragma library nvault 20 | #endif 21 | 22 | /* All timestamps are in UNIX epoch form. */ 23 | 24 | /* Opens a vault by name (such as "myvault") 25 | * Returns a vault id, INVALID_HANDLE otherwise (-1) 26 | */ 27 | native nvault_open(const name[]); 28 | 29 | /* Gets a vault value by returning an int 30 | * setting a byref float or setting a string + maxlength 31 | */ 32 | native nvault_get(vault, const key[], {Float,_}:...); 33 | 34 | /* Looks up a vault value for full information 35 | * Returns 0 if the entry is not found 36 | */ 37 | native nvault_lookup(vault, const key[], value[], maxlen, ×tamp); 38 | 39 | /* Sets a vault value (with current timestamp) */ 40 | native nvault_set(vault, const key[], const value[]); 41 | 42 | /* Sets a permanent vault value (no timestamp) */ 43 | native nvault_pset(vault, const key[], const value[]); 44 | 45 | /* Prunes the vault for entries that are within the given timestamps. 46 | * This will not erase values set with pset 47 | */ 48 | native nvault_prune(vault, start, end); 49 | 50 | /* Closes a vault */ 51 | native nvault_close(vault); 52 | 53 | /* Removes a key from the vault */ 54 | native nvault_remove(vault, const key[]); 55 | 56 | /* "Touches" a key to update its timestamp value. 57 | * If stamp is -1 (default), it will use the current time. 58 | * Like the unix command "touch," it will create an empty key 59 | * if the value does not exist. 60 | */ 61 | native nvault_touch(vault, const key[], timestamp=-1); 62 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/vector.inc: -------------------------------------------------------------------------------- 1 | /* Vector functions (now part of Core) 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _corevector_included 9 | #endinput 10 | #endif 11 | #define _corevector_included 12 | 13 | /* Used for angle_vector() */ 14 | #define ANGLEVECTOR_FORWARD 1 15 | #define ANGLEVECTOR_RIGHT 2 16 | #define ANGLEVECTOR_UP 3 17 | 18 | /* Returns distance between two vectors. */ 19 | native get_distance(const origin1[3], const origin2[3]); 20 | 21 | /* Gets distance between two origins (float). */ 22 | native Float:get_distance_f(const Float:Origin1[3], const Float:Origin2[3]); 23 | 24 | /* Gives you a velocity in the direction a player is looking, iVelocity is the multiplier. */ 25 | native velocity_by_aim(iIndex, iVelocity, Float:vRetValue[3]); 26 | 27 | /* Changes a vector into an angle vector. */ 28 | native vector_to_angle(const Float:fVector[3], Float:vReturn[3]); 29 | 30 | /* Changes an angle vector into a vector. */ 31 | native angle_vector(const Float:vector[3], FRU, Float:ret[3]); 32 | 33 | /* Gets the length of a vector (float[3]). */ 34 | native Float:vector_length(const Float:vVector[3]); 35 | 36 | /* Gets the distance between 2 vectors (float[3]). */ 37 | native Float:vector_distance(const Float:vVector[3], const Float:vVector2[3]); 38 | 39 | /* Changes an integer vec to a floating vec 40 | * This is not a for loop because that's slower 41 | */ 42 | stock IVecFVec(const IVec[3], Float:FVec[3]) 43 | { 44 | FVec[0] = float(IVec[0]); 45 | FVec[1] = float(IVec[1]); 46 | FVec[2] = float(IVec[2]); 47 | 48 | return 1; 49 | } 50 | 51 | /* Changes a float vec to an integer vec */ 52 | stock FVecIVec(const Float:FVec[3], IVec[3]) 53 | { 54 | IVec[0] = floatround(FVec[0]); 55 | IVec[1] = floatround(FVec[1]); 56 | IVec[2] = floatround(FVec[2]); 57 | 58 | return 1; 59 | } 60 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/fmttest.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | public plugin_init() 4 | { 5 | register_plugin("Format Test", "1.0", "BAILOPAN") 6 | 7 | register_srvcmd("test_format", "Command_TestFormat") 8 | register_srvcmd("test_replace", "Command_TestReplace") 9 | } 10 | 11 | public gabprint(const fmt[], ...) 12 | { 13 | static buffer[2048] 14 | vformat(buffer, 2047, fmt, 2) 15 | 16 | server_print("%s", buffer) 17 | } 18 | 19 | public Command_TestFormat() 20 | { 21 | server_print("Printing -1 with d: %d", -1) 22 | server_print("Printing -1 with u: %u", -1) 23 | server_print("Printing (1<<31) with d: %d", (1<<31)) 24 | server_print("Printing (1<<31) with u: %u", (1<<31)) 25 | server_print("Printing 1 with d: %d", 1) 26 | server_print("Printing 1 with u: %u", 1) 27 | } 28 | 29 | public Command_TestReplace() 30 | { 31 | new message[192] = "^"@test^"" 32 | 33 | replace_all(message, 191, "^"", "") 34 | server_print("Got: %s (expected: %s)", message, "@test") 35 | 36 | copy(message, 191, "test") 37 | replace_all(message, 191, "t", "tt") 38 | server_print("Got: %s (expected: %s)", message, "ttestt") 39 | 40 | replace_all(message, 191, "tt", "") 41 | server_print("Got: %s (expected: %s)", message, "es") 42 | 43 | copy(message, 191, "good boys do fine always") 44 | replace_all(message, 191, " ", "-----") 45 | server_print("Got %s (expected: %s)", message, "good-----boys-----do-----fine-----always") 46 | 47 | copy(message, 191, "-----") 48 | replace_all(message, 191, "-", "") 49 | server_print("Got ^"%s%^" (expected: ^"%s%^")", message, "") 50 | 51 | copy(message, 191, "-----") 52 | replace_all(message, 191, "--", "") 53 | server_print("Got ^"%s%^" (expected: ^"%s%^")", message, "-") 54 | 55 | copy(message, 191, "aaaa") 56 | replace_all(message, 191, "a", "Aaa") 57 | server_print("Got %s (expected: %s)", message, "AaaAaaAaaAaa") 58 | } 59 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/users.ini: -------------------------------------------------------------------------------- 1 | ; Users configuration file 2 | ; File location: $moddir/addons/amxmodx/configs/users.ini 3 | 4 | ; Line starting with ; is a comment 5 | 6 | ; Access flags: 7 | ; a - immunity (can't be kicked/baned/slayed/slaped and affected by other commmands) 8 | ; b - reservation (can join on reserved slots) 9 | ; c - amx_kick command 10 | ; d - amx_ban and amx_unban commands 11 | ; e - amx_slay and amx_slap commands 12 | ; f - amx_map command 13 | ; g - amx_cvar command (not all cvars will be available) 14 | ; h - amx_cfg command 15 | ; i - amx_chat and other chat commands 16 | ; j - amx_vote and other vote commands 17 | ; k - access to sv_password cvar (by amx_cvar command) 18 | ; l - access to amx_rcon command and rcon_password cvar (by amx_cvar command) 19 | ; m - custom level A (for additional plugins) 20 | ; n - custom level B 21 | ; o - custom level C 22 | ; p - custom level D 23 | ; q - custom level E 24 | ; r - custom level F 25 | ; s - custom level G 26 | ; t - custom level H 27 | ; u - menu access 28 | ; z - user (no admin) 29 | 30 | ; Account flags: 31 | ; a - disconnect player on invalid password 32 | ; b - clan tag 33 | ; c - this is steamid/wonid 34 | ; d - this is ip 35 | ; e - password is not checked (only name/ip/steamid needed) 36 | ; k - name or tag is case sensitive. eg: if you set it so the name "Ham" 37 | ; is protected and case sensitive (flags "k" only), then anybody 38 | ; can use the names "haM", "HAM", "ham", etc, but not "Ham" 39 | 40 | ; Password: 41 | ; Add to your autoexec.cfg: setinfo _pw "" 42 | ; Change _pw to the value of amx_password_field 43 | 44 | ; Format of admin account: 45 | ; 46 | 47 | ; Examples of admin accounts: 48 | ; "STEAM_0:0:123456" "" "abcdefghijklmnopqrstu" "ce" 49 | ; "123.45.67.89" "" "abcdefghijklmnopqrstu" "de" 50 | ; "My Name" "my_password" "abcdefghijklmnopqrstu" "a" 51 | 52 | "loopback" "" "abcdefghijklmnopqrstu" "de" 53 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/csx.inc: -------------------------------------------------------------------------------- 1 | /* CSX functions 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _csx_included 8 | #endinput 9 | #endif 10 | #define _csx_included 11 | 12 | #include 13 | 14 | #if AMXX_VERSION_NUM >= 175 15 | #pragma reqclass xstats 16 | #if !defined AMXMODX_NOAUTOLOAD 17 | #pragma defclasslib xstats csx 18 | #endif 19 | #else 20 | #pragma library csx 21 | #endif 22 | 23 | /* 24 | * Forwards 25 | */ 26 | 27 | /* Function is called after player to player attacks , 28 | * if players were damaged by teammate TA is set to 1 */ 29 | forward client_damage(attacker,victim,damage,wpnindex,hitplace,TA); 30 | 31 | /* Function is called after player death , 32 | * if player was killed by teammate TK is set to 1 */ 33 | forward client_death(killer,victim,wpnindex,hitplace,TK); 34 | 35 | forward grenade_throw( index,greindex,wId ); 36 | 37 | forward bomb_planting(planter); 38 | forward bomb_planted(planter); 39 | forward bomb_explode(planter,defuser); 40 | forward bomb_defusing(defuser); 41 | forward bomb_defused(defuser); 42 | 43 | /************* Shared Natives Start ********************************/ 44 | 45 | /* Custom Weapon Support */ 46 | /* function will return index of new weapon */ 47 | native custom_weapon_add( const wpnname[],melee = 0,const logname[]="" ); 48 | /* Function will pass damage done by this custom weapon to stats module and other plugins */ 49 | native custom_weapon_dmg( weapon, att, vic, damage, hitplace=0 ); 50 | /* Function will pass info about custom weapon shot to stats module */ 51 | native custom_weapon_shot( weapon,index ); // weapon id , player id 52 | 53 | /* function will return 1 if true */ 54 | native xmod_is_melee_wpn(wpnindex); 55 | 56 | /* Returns weapon name. */ 57 | native xmod_get_wpnname(wpnindex,name[],len); 58 | 59 | /* Returns weapon logname. */ 60 | native xmod_get_wpnlogname(wpnindex,name[],len); 61 | 62 | /* Returns weapons array size */ 63 | native xmod_get_maxweapons(); 64 | 65 | /* Returns stats array size */ 66 | native xmod_get_stats_size(); 67 | 68 | /************* Shared Natives End ********************************/ 69 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/amx_log.sma: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #define PLUGIN "AMX Log" 8 | #define VERSION "0.0.1" 9 | #define AUTHOR "spezifanta" 10 | 11 | public plugin_init() 12 | { 13 | register_plugin( PLUGIN, VERSION, AUTHOR ) 14 | register_concmd( "amx_log", "log_user", ADMIN_KICK, "" ) 15 | 16 | //RegisterHam(Ham_Touch,"trigger_multiple","block_door_fix3", 0) 17 | register_touch( "trigger_multiple", "player", "touch_trigger" ) 18 | register_cvar( "amx_log_version", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY ) 19 | } 20 | 21 | public block_door_fix3(ent,other){ 22 | new class[32] 23 | new name2[32] 24 | pev(ent,pev_target,class,31) 25 | pev(other,pev_classname,name2,31) 26 | 27 | static szLogData[ 200 ] 28 | formatex( szLogData, sizeof szLogData - 1, "button event touched %s by: %s", class, name2 ) 29 | 30 | //console_print( 0, szLogData ) 31 | 32 | if (equal(name2, "player")) { 33 | if (equal(class, "strike_mm")) { 34 | console_print(0, "A nuklear air strike was called") 35 | return PLUGIN_HANDLED 36 | } 37 | } 38 | 39 | return PLUGIN_CONTINUE 40 | } 41 | 42 | 43 | 44 | 45 | public touch_trigger( trigger_ent, id ) 46 | { 47 | static target [ 32 ]; 48 | static nextGameTime[ 32 ]; 49 | 50 | if( !pev_valid( trigger_ent ) ) 51 | { 52 | return; 53 | } 54 | 55 | new Float:currentGameTime = get_gametime(); 56 | 57 | if( currentGameTime < nextGameTime[ id ] ) 58 | { 59 | return; 60 | } 61 | 62 | nextGameTime[ id ] = currentGameTime + 1.0; 63 | entity_get_string( trigger_ent, EV_SZ_target, target, charsmax( target ) ); 64 | 65 | client_print( id, print_chat, "ent: %d id: %d target: %s", trigger_ent, id, target ); 66 | console_print( 0, "nuke" ) 67 | } 68 | 69 | public log_user( id, level, cid ) 70 | { 71 | static szLogData[ 200 ] 72 | formatex( szLogData, sizeof szLogData - 1, "weeee! custom log entry" ) 73 | console_print( 0, szLogData ) 74 | log_message(szLogData) 75 | 76 | return PLUGIN_HANDLED 77 | } 78 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/tfcstats.inc: -------------------------------------------------------------------------------- 1 | /* TFCX Stats functions 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _tfcstats_included 8 | #endinput 9 | #endif 10 | #define _tfcstats_included 11 | 12 | /* Gets stats from given weapon index. If wpnindex is 0 13 | * then the stats are from all weapons. If weapon has not been used function 14 | * returns 0 in other case 1. Fields in stats are: 15 | * 0 - kills 16 | * 1 - deaths 17 | * 2 - headshots 18 | * 3 - teamkilling 19 | * 4 - shots 20 | * 5 - hits 21 | * 6 - damage 22 | * For body hits fields see amxconst.inc. */ 23 | native get_user_wstats(index,wpnindex,stats[8],bodyhits[8]); 24 | 25 | /* Gets round stats from given weapon index.*/ 26 | native get_user_wrstats(index,wpnindex,stats[8],bodyhits[8]); 27 | 28 | /* Gets overall stats which are stored in file on server 29 | * and updated on every respawn or user disconnect. 30 | * Function returns the position in stats by diff. kills to deaths. */ 31 | native get_user_stats(index,stats[8],bodyhits[8]); 32 | 33 | /* Gets round stats of player. */ 34 | native get_user_rstats(index,stats[8],bodyhits[8]); 35 | 36 | /* Gets stats with which user have killed/hurt his victim. If victim is 0 37 | * then stats are from all victims. If victim has not been hurt, function 38 | * returns 0 in other case 1. User stats are reset on his respawn. */ 39 | native get_user_vstats(index,victim,stats[8],bodyhits[8],wpnname[]="",len=0); 40 | 41 | /* Gets stats with which user have been killed/hurt. If killer is 0 42 | * then stats are from all attacks. If killer has not hurt user, function 43 | * returns 0 in other case 1. User stats are reset on his respawn. */ 44 | native get_user_astats(index,wpnindex,stats[8],bodyhits[8],wpnname[]="",len=0); 45 | 46 | /* Resets life, weapon, victims and attackers user stats. */ 47 | native reset_user_wstats(index); 48 | 49 | /* Gets overall stats which stored in stats.dat file in amx folder 50 | * and updated on every mapchange or user disconnect. 51 | * Function returns next index of stats entry or 0 if no more exists. */ 52 | native get_stats(index,stats[8],bodyhits[8],name[],len); 53 | 54 | /* Returns number of all entries in stats. */ 55 | native get_statsnum(); 56 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/translator.inc: -------------------------------------------------------------------------------- 1 | /* AMX Mod X Backwards Compatibility 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _amxmod_translator_included 9 | #endinput 10 | #endif 11 | #define _amxmod_translator_included 12 | 13 | #define _translator_included 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | //From AMX Mod. This is implemented in Core due to the nature of the 20 | // translation engine and what AMX Mod did. 21 | /* Translation backend, used by _T (since natives can't return arrays). */ 22 | native translate(const string[], destid=-1, forcelang=-1); 23 | 24 | stock _T(const string[], destid=-1, forcelang=-1) 25 | { 26 | new TranslationResult[2] = {0, 0}; 27 | TranslationResult[0] = translate(string, destid, forcelang); 28 | return TranslationResult; 29 | } 30 | 31 | stock load_translations(const file[]) 32 | { 33 | static dir[255], path[255]; 34 | get_datadir(dir, 254); 35 | 36 | format(path, 254, "%s/amxmod-lang/%s.txt", dir, file); 37 | new fp 38 | if (!(fp=fopen(path, "r"))) 39 | { 40 | abort(AMX_ERR_NATIVE, "Could not find file: %s", path); 41 | return 0; 42 | } 43 | 44 | static buffer[1024]; 45 | new lang[3]; 46 | new TransKey:bad_key = TransKey:-1; 47 | new TransKey:cur_key = bad_key; 48 | new len; 49 | while (!feof(fp)) 50 | { 51 | buffer[0] = 0; 52 | fgets(fp, buffer, 1023); 53 | len = strlen(buffer); 54 | if (len == 0) 55 | { 56 | continue; 57 | } 58 | if (isspace(buffer[len-1])) 59 | { 60 | buffer[--len] = 0; 61 | } 62 | if (buffer[0] == '"') 63 | { 64 | remove_quotes(buffer); 65 | cur_key = CreateLangKey(buffer); 66 | AddTranslation("en", cur_key, buffer); 67 | continue; 68 | } 69 | if (isspace(buffer[0])) 70 | { 71 | continue; 72 | } 73 | if ((cur_key != bad_key) && (buffer[2] == ':' && buffer[3] == '"')) 74 | { 75 | lang[0] = buffer[0]; 76 | lang[1] = buffer[1]; 77 | lang[2] = 0; 78 | remove_quotes(buffer[3]); 79 | AddTranslation(lang, cur_key, buffer[3]); 80 | } 81 | } 82 | 83 | fclose(fp); 84 | 85 | return 1; 86 | } 87 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/cmdmenu.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | CMD_MENU = Commands Menu 3 | CONF_MENU = Configs Menu 4 | SPE_MENU = Speech Menu 5 | 6 | [de] 7 | CMD_MENU = Menu > Befehle 8 | CONF_MENU = Menu > Konfiguration 9 | SPE_MENU = Menu > Sprechen 10 | 11 | [sr] 12 | CMD_MENU = Komandne 13 | CONF_MENU = Podesavanja 14 | SPE_MENU = Govorne Komande 15 | 16 | [tr] 17 | CMD_MENU = Emir Menusu 18 | CONF_MENU = Configler Menusu 19 | SPE_MENU = Konusma Menusu 20 | 21 | [fr] 22 | CMD_MENU = Menu Commandes 23 | CONF_MENU = Menu Configurations 24 | SPE_MENU = Menu Voix/Paroles 25 | 26 | [sv] 27 | CMD_MENU = Kommandomeny 28 | CONF_MENU = Konfigurationsmeny 29 | SPE_MENU = Talmeny 30 | 31 | [da] 32 | CMD_MENU = Kommando Menu 33 | CONF_MENU = Konfigurations Menu 34 | SPE_MENU = Tale Menu 35 | 36 | [pl] 37 | CMD_MENU = Menu komend 38 | CONF_MENU = Menu konfiguracji 39 | SPE_MENU = Menu rozmowy 40 | 41 | [nl] 42 | CMD_MENU = Commandomenu 43 | CONF_MENU = Configuratiemenu 44 | SPE_MENU = Spraakmenu 45 | 46 | [es] 47 | CMD_MENU = Menu de Comandos 48 | CONF_MENU = Menu de Configuracion 49 | SPE_MENU = Menu de Voz 50 | 51 | [bp] 52 | CMD_MENU = Menu de Comandos 53 | CONF_MENU = Menu de Configs 54 | SPE_MENU = Menu de Vozes 55 | 56 | [cz] 57 | CMD_MENU = Menu prikazu 58 | CONF_MENU = Menu nastaveni 59 | SPE_MENU = Nastaveni reci 60 | 61 | [fi] 62 | CMD_MENU = Komentovalikko 63 | CONF_MENU = Saatovalikko 64 | SPE_MENU = Puhevalikko 65 | 66 | [ls] 67 | CMD_MENU = l33t cmdz M3nu 68 | CONF_MENU = l33t c0nf!gz M3nu 69 | SPE_MENU = l33t $p33ch M3nu 70 | 71 | [bg] 72 | CMD_MENU = Comandnoto Menu 73 | CONF_MENU = Configuracionno Menu 74 | SPE_MENU = Menu za Govorene 75 | 76 | [ro] 77 | CMD_MENU = Menu Comenzi 78 | CONF_MENU = Menu Configuratie 79 | SPE_MENU = Menu Speech 80 | 81 | [hu] 82 | CMD_MENU = Parancs Menu 83 | CONF_MENU = Beallitas Menu 84 | SPE_MENU = Beszed Menu 85 | 86 | [lt] 87 | CMD_MENU = Komandu meniu 88 | CONF_MENU = Konfigu meniu 89 | SPE_MENU = Kalbos meniu 90 | 91 | [sk] 92 | CMD_MENU = Menu prikazov 93 | CONF_MENU = Menu nastaveni 94 | SPE_MENU = Nastavenie reci 95 | 96 | [mk] 97 | CMD_MENU = Meni so komandi 98 | CONF_MENU = Meni so konfiguracii 99 | SPE_MENU = Meni so glasovni komandi 100 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/nextmap.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | NEXT_MAP = Next Map: 3 | PLAYED_MAP = Played map 4 | FRIEND_FIRE = Friendly fire 5 | 6 | [de] 7 | NEXT_MAP = Naechste Map: 8 | PLAYED_MAP = Gespielte Maps 9 | FRIEND_FIRE = Friendly fire 10 | 11 | [sr] 12 | NEXT_MAP = Sledeca Mapa: 13 | PLAYED_MAP = Igrana mapa 14 | FRIEND_FIRE = Friendly fire 15 | 16 | [tr] 17 | NEXT_MAP = Diger Map: 18 | PLAYED_MAP = Oynanan map 19 | FRIEND_FIRE = Dost atesi 20 | 21 | [fr] 22 | NEXT_MAP = Prochaine Carte: 23 | PLAYED_MAP = Carte jouee 24 | FRIEND_FIRE = Friendly fire 25 | 26 | [sv] 27 | NEXT_MAP = N'a'sta karta: 28 | PLAYED_MAP = Spelade karta 29 | FRIEND_FIRE = Egna laget skada. 30 | 31 | [da] 32 | NEXT_MAP = Naeste bane: 33 | PLAYED_MAP = Spillet bane 34 | FRIEND_FIRE = Venskablig ild 35 | 36 | [pl] 37 | NEXT_MAP = Nastepna Mapa: 38 | PLAYED_MAP = Mapy grane 39 | FRIEND_FIRE = Friendly fire 40 | 41 | [nl] 42 | NEXT_MAP = Volgende Map: 43 | PLAYED_MAP = Gespeelde map 44 | FRIEND_FIRE = Friendly fire 45 | 46 | [es] 47 | NEXT_MAP = Proximo Mapa: 48 | PLAYED_MAP = Mapa actual 49 | FRIEND_FIRE = Fuego amigo 50 | 51 | [bp] 52 | NEXT_MAP = Proximo Mapa: 53 | PLAYED_MAP = Mapa Jogado 54 | FRIEND_FIRE = Fogo Amigo 55 | 56 | [cz] 57 | NEXT_MAP = Dalsi mapa: 58 | PLAYED_MAP = Aktualni mapa 59 | FRIEND_FIRE = Friendly fire 60 | 61 | [fi] 62 | NEXT_MAP = Seuraava mappi: 63 | PLAYED_MAP = Pelattu map 64 | FRIEND_FIRE = Friendly fire 65 | 66 | [ls] 67 | NEXT_MAP = N3xt M4p: 68 | PLAYED_MAP = P|4y3d m4p 69 | FRIEND_FIRE = |=r!3nd|y f!r3 70 | 71 | [bg] 72 | NEXT_MAP = Sledva6tata karta: 73 | PLAYED_MAP = Igrana karta 74 | FRIEND_FIRE = Friendly fire 75 | 76 | [ro] 77 | NEXT_MAP = Urmatoarea Harta: 78 | PLAYED_MAP = Harta Actuala 79 | FRIEND_FIRE = Friendly-Fire 80 | 81 | [hu] 82 | NEXT_MAP = A kovetkezo palya: 83 | PLAYED_MAP = Jatszott Palya 84 | FRIEND_FIRE = Csapattars Sebzes 85 | 86 | [lt] 87 | NEXT_MAP = Kitas zemelapis: 88 | PLAYED_MAP = Zaide zemelapiu 89 | FRIEND_FIRE = Savu saudymas 90 | 91 | [sk] 92 | NEXT_MAP = Dalsia mapa: 93 | PLAYED_MAP = Aktualna mapa 94 | FRIEND_FIRE = Friendly fire 95 | 96 | [mk] 97 | NEXT_MAP = Slednata mapa ke bide: 98 | PLAYED_MAP = Mapata sto ja igras se vika 99 | FRIEND_FIRE = Friendly fire 100 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/crossfire_siren_fix.sma: -------------------------------------------------------------------------------- 1 | /* AMX Mod X script. 2 | 3 | Crossfire Siren Fix Plugin 4 | 5 | (c) Copyright 2007, Simon Logic (slspam@land.ru) 6 | This file is provided as is (no warranties). 7 | 8 | Info: 9 | Plugin fixes siren spontaneous activating on round restart if running 10 | Crossfire map (or any other map with similar airstrike mechanism) 11 | under CS/CZ. 12 | 13 | Requirements: 14 | * CS/CZ mod 15 | * AMX/X 1.7x or higher 16 | * Fakemeta module 17 | 18 | History: 19 | 1.0.0 [2007-02-15] 20 | * added entity filtering by classname to increase compatibility 21 | * notification if running under invalid mod 22 | 0.0.1 [2007-02-05] 23 | * first public alpha release 24 | */ 25 | 26 | #include 27 | #include 28 | #include 29 | 30 | #define MY_PLUGIN_NAME "Crossfire Siren Fix" 31 | #define MY_PLUGIN_VERSION "1.0.0" 32 | #define MY_PLUGIN_AUTHOR "Simon Logic" 33 | 34 | 35 | new const 36 | g_sTargetnameField[] = "targetname", 37 | g_sTargetName[] = "strike_siren", 38 | g_sClassType[] = "ambient_" // full: ambient_generic 39 | //----------------------------------------------------------------------------- 40 | public plugin_init() 41 | { 42 | register_plugin(MY_PLUGIN_NAME, MY_PLUGIN_VERSION, MY_PLUGIN_AUTHOR) 43 | 44 | if(cstrike_running()) 45 | register_event("HLTV", "onNewRound", "a", "1=0", "2=0") 46 | else 47 | log_amx("plugin disabled due to wrong mod detection") 48 | } 49 | //----------------------------------------------------------------------------- 50 | public onNewRound() 51 | { 52 | set_task(0.1, "task") 53 | } 54 | //----------------------------------------------------------------------------- 55 | public task() 56 | { 57 | new id, iCount, iLen = sizeof(g_sClassType) - 1 58 | new sTemp[sizeof(g_sClassType)] 59 | 60 | while((id = EF_FindEntityByString(id, g_sTargetnameField, g_sTargetName)) > 0) 61 | { 62 | pev(id, pev_classname, sTemp, iLen) 63 | if(equal(sTemp, g_sClassType)) 64 | { 65 | DF_Use(id, 0) 66 | iCount++ 67 | } 68 | } 69 | 70 | if(iCount) 71 | log_amx("Turned off %d siren source%s", iCount, iCount > 1 ? "s": "") 72 | } 73 | //----------------------------------------------------------------------------- 74 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/tsstats.inc: -------------------------------------------------------------------------------- 1 | /* TSXMod Stats functions 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _tsstats_included 8 | #endinput 9 | #endif 10 | #define _tsstats_included 11 | 12 | /* Gets stats from given weapon index. If wpnindex is 0 13 | * then the stats are from all weapons. If weapon has not been used function 14 | * returns 0 in other case 1. Fields in stats are: 15 | * 0 - kills 16 | * 1 - deaths 17 | * 2 - headshots 18 | * 3 - teamkilling 19 | * 4 - shots 20 | * 5 - hits 21 | * 6 - damage 22 | * For body hits fields see amxconst.inc. */ 23 | native get_user_wstats(index,wpnindex,stats[8],bodyhits[8]); 24 | 25 | /* Gets round stats from given weapon index.*/ 26 | native get_user_wrstats(index,wpnindex,stats[8],bodyhits[8]); 27 | 28 | /* Gets life (from spawn to spawn) stats from given weapon index.*/ 29 | native get_user_wlstats(index,wpnindex,stats[8],bodyhits[8]); 30 | 31 | /* Gets overall stats which are stored in file on server 32 | * and updated on every respawn or user disconnect. 33 | * Function returns the position in stats by diff. kills to deaths. */ 34 | native get_user_stats(index,stats[8],bodyhits[8]); 35 | 36 | /* Gets round stats of player. */ 37 | native get_user_rstats(index,stats[8],bodyhits[8]); 38 | 39 | /* Gets stats with which user have killed/hurt his victim. If victim is 0 40 | * then stats are from all victims. If victim has not been hurt, function 41 | * returns 0 in other case 1. User stats are reset on his respawn. */ 42 | native get_user_vstats(index,victim,stats[8],bodyhits[8],wpnname[]="",len=0); 43 | 44 | /* Gets stats with which user have been killed/hurt. If killer is 0 45 | * then stats are from all attacks. If killer has not hurt user, function 46 | * returns 0 in other case 1. User stats are reset on his respawn. */ 47 | native get_user_astats(index,wpnindex,stats[8],bodyhits[8],wpnname[]="",len=0); 48 | 49 | /* Resets life, weapon, victims and attackers user stats. */ 50 | native reset_user_wstats(index); 51 | 52 | /* Gets overall stats which stored in stats.dat file in amx folder 53 | * and updated on every mapchange or user disconnect. 54 | * Function returns next index of stats entry or 0 if no more exists. */ 55 | native get_stats(index,stats[8],bodyhits[8],name[],len); 56 | 57 | /* Returns number of all entries in stats. */ 58 | native get_statsnum(); 59 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/csstats.inc: -------------------------------------------------------------------------------- 1 | 2 | #if defined _csstats_included 3 | #endinput 4 | #endif 5 | #define _csstats_included 6 | 7 | /* Gets stats from given weapon index. If wpnindex is 0 8 | * then the stats are from all weapons. If weapon has not been used function 9 | * returns 0 in other case 1. Fields in stats are: 10 | * 0 - kills 11 | * 1 - deaths 12 | * 2 - headshots 13 | * 3 - teamkilling 14 | * 4 - shots 15 | * 5 - hits 16 | * 6 - damage 17 | 18 | * For body hits fields see amxconst.inc. */ 19 | native get_user_wstats(index,wpnindex,stats[8],bodyhits[8]); 20 | 21 | /* Gets round stats from given weapon index.*/ 22 | native get_user_wrstats(index,wpnindex,stats[8],bodyhits[8]); 23 | 24 | /* Gets overall stats which are stored in file on server 25 | * and updated on every respawn or user disconnect. 26 | * Function returns the position in stats by diff. kills to deaths. */ 27 | native get_user_stats(index,stats[8],bodyhits[8]); 28 | 29 | /* Gets round stats of player. */ 30 | native get_user_rstats(index,stats[8],bodyhits[8]); 31 | 32 | /* Gets stats with which user have killed/hurt his victim. If victim is 0 33 | * then stats are from all victims. If victim has not been hurt, function 34 | * returns 0 in other case 1. User stats are reset on his respawn. */ 35 | native get_user_vstats(index,victim,stats[8],bodyhits[8],wpnname[]="",len=0); 36 | 37 | /* Gets stats with which user have been killed/hurt. If killer is 0 38 | * then stats are from all attacks. If killer has not hurt user, function 39 | * returns 0 in other case 1. User stats are reset on his respawn. */ 40 | native get_user_astats(index,wpnindex,stats[8],bodyhits[8],wpnname[]="",len=0); 41 | 42 | /* Resets life, weapon, victims and attackers user stats. */ 43 | native reset_user_wstats(index); 44 | 45 | /* Gets overall stats which stored in stats.dat file in amx folder 46 | * and updated on every mapchange or user disconnect. 47 | * Function returns next index of stats entry or 0 if no more exists. */ 48 | native get_stats(index,stats[8],bodyhits[8],name[],len,authid[] = "",authidlen = 0); 49 | 50 | /* Returns number of all entries in stats. */ 51 | native get_statsnum(); 52 | 53 | /* 54 | * new stats: 55 | * 0 - total defusions 56 | * 1 - bomb defused 57 | * 2 - bomb plants 58 | * 3 - bomb explosions 59 | */ 60 | native get_user_stats2(index,stats[4]); 61 | native get_stats2(index,stats[4],authid[] = "",authidlen = 0); 62 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/esf.inc: -------------------------------------------------------------------------------- 1 | /*********************************************** 2 | 3 | [ Corona-Bytes.NET ] EvolutionX Core Plugin 4 | 5 | (c) Corona - Bytes .NET coders :: coders@corona-bytes.net 6 | 7 | > 2005 Corona Bytes :: http://www.corona-bytes.net 8 | 9 | ***********************************************/ 10 | 11 | #if defined __EVOLUTION_CORE__ 12 | #endinput 13 | #endif 14 | #define __EVOLUTION_CORE__ 15 | 16 | #pragma library EvolutionXCore 17 | 18 | native setClientPL ( Client, PowerLevel ); 19 | native getClientPL ( Client ); 20 | native setClientACPL ( Client, ActualPowerLevel ); 21 | native getClientACPL ( Client ); 22 | native setClientADPL ( Client, AfterDeathPowerLevel ); 23 | native getClientADPL ( Client ); 24 | native setClientSPL ( Client, PowerLevel ); 25 | native setClientPLtoADPL ( Client ); 26 | 27 | native setClientKI ( Client, Ki ); 28 | native getClientKI ( Client ); 29 | 30 | native setClientHP ( Client, Health ); 31 | native getClientHP ( Client ); 32 | native setClientMHP ( Client, MaximumHealth ); 33 | native getClientMHP ( Client ); 34 | 35 | native setClientSPEED ( Client, Speed ); 36 | native getClientSPEED ( Client ); 37 | native setClientSWOOPSPEED ( Client, SwoopSpeed ); 38 | native getClientSWOOPSPEED ( Client ); 39 | 40 | native setClientPROTECT ( Client, bool:Enable = true ); 41 | native getClientPROTECT ( Client ); 42 | 43 | native setClientFROZEN ( Client, bool:Enable = true ); 44 | native getClientFROZEN ( Client ); 45 | 46 | native setClientGOD ( Client, bool:Enable = true ); 47 | native getClientGOD ( Client ); 48 | 49 | native getClientFLY ( Client ); 50 | 51 | native setClientHiddenTURBO ( Client, bool:Enable = true ); 52 | native getClientTURBO ( Client ); 53 | 54 | native getClientBLOCK ( Client ); 55 | 56 | native setClientHiddenPOWERUP ( Client, bool:Enable = true ); 57 | native getClientPOWERUP ( Client ); 58 | 59 | native getClientSWOOPING ( Client ); 60 | native getClientATKSHOOT ( Client ); 61 | native getClientATKCHARGE ( Client ); 62 | native getClientMELEE ( Client ); 63 | native getClientTHROWAWAY ( Client ); 64 | native getClientTHROW ( Client ); 65 | native getClientWALLGND ( Client ); 66 | native getClientINFREEFALL ( Client ); 67 | native getClientBEAMJUMP ( Client ); 68 | 69 | // kills a player without score/death msg 70 | native silentClientKILL ( Client ); -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/geoip.inc: -------------------------------------------------------------------------------- 1 | /* GeoIP module functions for AMX Mod X 2 | by David "BAILOPAN" Anderson 3 | (C)Copyrighted under the GNU General Public License, Version 2 4 | */ 5 | 6 | #if defined geoip_included 7 | #endinput 8 | #endif 9 | #define _geoip_included 10 | 11 | #if AMXX_VERSION_NUM >= 175 12 | #pragma reqlib geoip 13 | #if !defined AMXMODX_NOAUTOLOAD 14 | #pragma loadlib geoip 15 | #endif 16 | #else 17 | #pragma library geoip 18 | #endif 19 | 20 | /// IP addresses passed to these natives can contain ports, the ports will be ignored. 21 | 22 | /** 23 | * Lookup the two character country code for a given IP address. 24 | * e.g: "US", "CA", etc. 25 | * 26 | * @param ip The IP address to lookup. 27 | * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. 28 | * @return true on a successful lookup, false on a failed lookup. 29 | */ 30 | native bool:geoip_code2_ex(const ip[], result[3]); 31 | 32 | /** 33 | * Lookup the three character country code for a given IP address. 34 | * e.g: "USA", "cAN", etc. 35 | * 36 | * @param ip The IP address to lookup. 37 | * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. 38 | * @return true on a successful lookup, false on a failed lookup. 39 | */ 40 | native bool:geoip_code3_ex(const ip[], result[4]); 41 | 42 | /** 43 | * @deprecated 44 | * Lookup the two character country code for a given IP address. 45 | * 46 | * @note This native will overflow the buffer by one cell on an unknown ip lookup! 47 | * @note Use geoip_code2_ex instead! 48 | * 49 | * @param ip The IP address to lookup. 50 | * @param result The result buffer. 51 | */ 52 | native geoip_code2(const ip[], ccode[3]); 53 | 54 | /** 55 | * @deprecated 56 | * Lookup the three character country code for a given IP address. 57 | * 58 | * @note This native will overflow the buffer by one cell on an unknown ip lookup! 59 | * @note Use geoip_code3_ex instead! 60 | * 61 | * @param ip The IP address to lookup. 62 | * @param result The result buffer. 63 | */ 64 | native geoip_code3(const ip[], result[4]); 65 | 66 | /** 67 | * Lookup the full country name for the given IP address. Sets the buffer to "error" on 68 | * an unsuccessful lookup. 69 | * 70 | * @param ip The IP address to lookup. 71 | * @param result The result of the geoip lookup. 72 | * @param len The maximum length of the result buffer. 73 | */ 74 | native geoip_country(const ip[], result[], len=45); 75 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/dodstats.inc: -------------------------------------------------------------------------------- 1 | /* DoDX Stats functions 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _dodstats_included 8 | #endinput 9 | #endif 10 | #define _dodstats_included 11 | 12 | /* Gets stats from given weapon index. If wpnindex is 0 13 | * then the stats are from all weapons. If weapon has not been used function 14 | * returns 0 in other case 1. Fields in stats are: 15 | * 0 - kills 16 | * 1 - deaths 17 | * 2 - headshots 18 | * 3 - teamkilling 19 | * 4 - shots 20 | * 5 - hits 21 | * 6 - damage 22 | * 7 - score 23 | * For body hits fields see amxconst.inc. */ 24 | native get_user_wstats(index,wpnindex,stats[9],bodyhits[8]); 25 | 26 | /* Gets round stats from given weapon index.*/ 27 | native get_user_wrstats(index,wpnindex,stats[9],bodyhits[8]); 28 | 29 | /* Gets life (from spawn to spawn) stats from given weapon index.*/ 30 | native get_user_wlstats(index,wpnindex,stats[9],bodyhits[8]); 31 | 32 | /* Gets overall stats which are stored in file on server 33 | * and updated on every respawn or user disconnect. 34 | * Function returns the position in stats by diff. kills to deaths. */ 35 | native get_user_stats(index,stats[9],bodyhits[8]); 36 | 37 | /* Gets round stats of player. */ 38 | native get_user_rstats(index,stats[9],bodyhits[8]); 39 | 40 | /* Gets life (from spawn to spawn) stats of player. */ 41 | native get_user_lstats(index,stats[9],bodyhits[8]); 42 | 43 | /* Gets stats with which user have killed/hurt his victim. If victim is 0 44 | * then stats are from all victims. If victim has not been hurt, function 45 | * returns 0 in other case 1. User stats are reset on his respawn. */ 46 | native get_user_vstats(index,victim,stats[9],bodyhits[8],wpnname[]="",len=0); 47 | 48 | /* Gets stats with which user have been killed/hurt. If killer is 0 49 | * then stats are from all attacks. If killer has not hurt user, function 50 | * returns 0 in other case 1. User stats are reset on his respawn. */ 51 | native get_user_astats(index,wpnindex,stats[9],bodyhits[8],wpnname[]="",len=0); 52 | 53 | /* Resets life, weapon, victims and attackers user stats. */ 54 | native reset_user_wstats(index); 55 | 56 | /* Gets overall stats which stored in stats.dat file in amx folder 57 | * and updated on every mapchange or user disconnect. 58 | * Function returns next index of stats entry or 0 if no more exists. */ 59 | native get_stats(index,stats[9],bodyhits[8],name[],len); 60 | 61 | /* Returns number of all entries in stats. */ 62 | native get_statsnum(); 63 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/antiflood.sma: -------------------------------------------------------------------------------- 1 | /* AMX Mod X 2 | * Anti Flood Plugin 3 | * 4 | * by the AMX Mod X Development Team 5 | * originally developed by OLO 6 | * 7 | * This file is part of AMX Mod X. 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify it 11 | * under the terms of the GNU General Public License as published by the 12 | * Free Software Foundation; either version 2 of the License, or (at 13 | * your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, but 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program; if not, write to the Free Software Foundation, 22 | * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 | * 24 | * In addition, as a special exception, the author gives permission to 25 | * link the code of this program with the Half-Life Game Engine ("HL 26 | * Engine") and Modified Game Libraries ("MODs") developed by Valve, 27 | * L.L.C ("Valve"). You must obey the GNU General Public License in all 28 | * respects for all of the code used other than the HL Engine and MODs 29 | * from Valve. If you modify this file, you may extend this exception 30 | * to your version of the file, but you are not obligated to do so. If 31 | * you do not wish to do so, delete this exception statement from your 32 | * version. 33 | */ 34 | 35 | #include 36 | 37 | new Float:g_Flooding[33] = {0.0, ...} 38 | new g_Flood[33] = {0, ...} 39 | 40 | new amx_flood_time; 41 | 42 | public plugin_init() 43 | { 44 | register_plugin("Anti Flood", AMXX_VERSION_STR, "AMXX Dev Team") 45 | register_dictionary("antiflood.txt") 46 | register_clcmd("say", "chkFlood") 47 | register_clcmd("say_team", "chkFlood") 48 | amx_flood_time=register_cvar("amx_flood_time", "0.75") 49 | } 50 | 51 | public chkFlood(id) 52 | { 53 | new Float:maxChat = get_pcvar_float(amx_flood_time) 54 | 55 | if (maxChat) 56 | { 57 | new Float:nexTime = get_gametime() 58 | 59 | if (g_Flooding[id] > nexTime) 60 | { 61 | if (g_Flood[id] >= 3) 62 | { 63 | client_print(id, print_notify, "** %L **", id, "STOP_FLOOD") 64 | g_Flooding[id] = nexTime + maxChat + 3.0 65 | return PLUGIN_HANDLED 66 | } 67 | g_Flood[id]++ 68 | } 69 | else if (g_Flood[id]) 70 | { 71 | g_Flood[id]-- 72 | } 73 | 74 | g_Flooding[id] = nexTime + maxChat 75 | } 76 | 77 | return PLUGIN_CONTINUE 78 | } 79 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/tsx.inc: -------------------------------------------------------------------------------- 1 | /* TSXMod functions 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _tsx_included 8 | #endinput 9 | #endif 10 | #define _tsx_included 11 | 12 | #include 13 | 14 | #if AMXX_VERSION_NUM >= 175 15 | #pragma reqclass xstats 16 | #if !defined AMXMODX_NOAUTOLOAD 17 | #pragma defclasslib xstats tsx 18 | #endif 19 | #else 20 | #pragma library tsx 21 | #endif 22 | 23 | /************* Shared Natives Start ********************************/ 24 | 25 | /* Forward types */ 26 | enum { 27 | XMF_DAMAGE = 0, 28 | XMF_DEATH, 29 | }; 30 | 31 | /* Use this function to register forwards 32 | * DEPRECATED 33 | */ 34 | native register_statsfwd( ftype ); 35 | 36 | /* Function is called after player to player attacks , 37 | * if players were damaged by teammate TA is set to 1 */ 38 | forward client_damage(attacker,victim,damage,wpnindex,hitplace,TA); 39 | 40 | /* Function is called after player death , 41 | * if player was killed by teammate TK is set to 1 */ 42 | forward client_death(killer,victim,wpnindex,hitplace,TK); 43 | 44 | /* Custom Weapon Support */ 45 | /* function will return index of new weapon */ 46 | native custom_weapon_add( const wpnname[],melee = 0,const logname[]="" ); 47 | /* Function will pass damage done by this custom weapon to stats module and other plugins */ 48 | native custom_weapon_dmg( weapon, att, vic, damage, hitplace=0 ); 49 | /* Function will pass info about custom weapon shot to stats module */ 50 | native custom_weapon_shot( weapon,index ); // weapon id , player id 51 | 52 | /* function will return 1 if true */ 53 | native xmod_is_melee_wpn(wpnindex); 54 | 55 | /* Returns weapon name. */ 56 | native xmod_get_wpnname(wpnindex,name[],len); 57 | 58 | /* Returns weapon logname. */ 59 | native xmod_get_wpnlogname(wpnindex,name[],len); 60 | 61 | /* Returns weapons array size */ 62 | native xmod_get_maxweapons(); 63 | 64 | /* Returns stats array size ex. 8 in TS , 9 in DoD */ 65 | native xmod_get_stats_size(); 66 | 67 | /* Returns 1 if true */ 68 | native xmod_is_custom_wpn(wpnindex); 69 | 70 | /************* Shared Natives End ********************************/ 71 | 72 | /* Spawns a Weapon */ 73 | stock ts_weaponspawn(const weaponid[], const duration[], const extraclip[], const spawnflags[], const Float:Origin[3]) 74 | { 75 | new ent = create_entity("ts_groundweapon"); 76 | 77 | DispatchKeyValue(ent, "tsweaponid", weaponid); 78 | DispatchKeyValue(ent, "wduration", duration); 79 | DispatchKeyValue(ent, "wextraclip", extraclip); 80 | DispatchKeyValue(ent, "spawnflags", spawnflags); 81 | DispatchSpawn(ent); 82 | 83 | entity_set_origin(ent, Origin); 84 | return PLUGIN_HANDLED; 85 | } 86 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/sorting.inc: -------------------------------------------------------------------------------- 1 | /* Sorting functions. 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | * 7 | * All sort functions are based off the qsort() function from the 8 | * C standard library, which uses the Quick Sort algorithm. 9 | * For more info, see: http://linux.wku.edu/~lamonml/algor/sort/sort.html 10 | */ 11 | 12 | #if defined _sorting_included 13 | #endinput 14 | #endif 15 | #define _sorting_included 16 | 17 | enum SortMethod 18 | { 19 | Sort_Ascending = 0, 20 | Sort_Descending = 1, 21 | }; 22 | 23 | /** 24 | * Basic sorting functions below. 25 | */ 26 | 27 | native SortIntegers(array[], array_size, SortMethod:order = Sort_Ascending); 28 | 29 | native SortFloats(Float:array[], array_size, SortMethod:order = Sort_Ascending); 30 | 31 | native SortStrings(array[][], num_strings, SortMethod:order = Sort_Ascending); 32 | 33 | /** 34 | * Custom sorting functions below. 35 | */ 36 | 37 | /** 38 | * Sorts a custom 1D array. You must pass in a comparison function. 39 | * The sorting algorithm then uses your comparison function to sort the data. 40 | * The function is called in the following manner: 41 | * 42 | * public MySortFunc(elem1, elem2, const array[], const data[], data_size) 43 | * 44 | * elem1, elem2 - Current element pair being compared 45 | * array[] - Array in its current mid-sorted state. 46 | * data[] - Extra data array you passed to the sort func. 47 | * data_size - Size of extra data you passed to the sort func. 48 | * 49 | * Your function should return: 50 | * -1 if elem1 should go before elem2 51 | * 0 if elem1 and elem2 are equal 52 | * 1 if elem1 should go after elem2 53 | * Note that the parameters after elem2 are all optional and you do not need to specify them. 54 | */ 55 | native SortCustom1D(array[], array_size, const comparefunc[], data[]="", data_size=0); 56 | 57 | 58 | /** 59 | * Sorts a custom 2D array. 60 | * The sorting algorithm then uses your comparison function to sort the data. 61 | * The function is called in the following manner: 62 | * 63 | * public MySortFunc(const elem1[], const elem2[], const array[], data[], data_size) 64 | * 65 | * elem1[], elem2[] - Current element array pairs being compared 66 | * array[][] - Array in its currently being sorted state. 67 | * data[] - Extra data array you passed to the sort func. 68 | * data_size - Size of extra data you passed to the sort func. 69 | * 70 | * Your function should return: 71 | * -1 if elem1[] should go before elem2[] 72 | * 0 if elem1[] and elem2 are equal[] 73 | * 1 if elem1[] should go after elem2[] 74 | * Note that the parameters after elem2[] are all optional and you do not need to specify them. 75 | */ 76 | native SortCustom2D(array[][], array_size, const comparefunc[], data[]="", data_size=0); 77 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/VexdUM.inc: -------------------------------------------------------------------------------- 1 | /* VexdUM backwards compatibility 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | 9 | #if !defined _fakemeta_included 10 | #include 11 | #endif 12 | 13 | #if !defined _engine_included 14 | #include 15 | #endif 16 | 17 | #if defined _vexd_bcompat_included 18 | #endinput 19 | #endif 20 | #define _vexd_bcompat_included 21 | 22 | #include 23 | 24 | native radius_damage(inflictor, Float:dmg, Float:orig[3], Float:rad, bit = DMG_BULLET, wpnName[]="", hs = 0); 25 | native take_damage(victim, attacker, Float:orig[3], Float:dmg, bit = DMG_BULLET, wpnName[]="", hs = 0); 26 | native set_user_model(id, const Model[]=""); 27 | native entity_use(eUsed, eOther); 28 | native get_num_ents(); 29 | 30 | native DispatchKeyValue(ent, szKey[], szValue[]); 31 | 32 | // Trace a line from Start(X, Y, Z) to End(X, Y, Z), will return the point hit in vReturn[3] 33 | // Will return an entindex if an entity is hit. 34 | native trace_line(ent, Float:vStart[3], Float:vEnd[3], Float:vReturn[3]); 35 | 36 | native traceline_get_int(iVar); 37 | native traceline_set_int(iVar, iVal); 38 | native Float:traceline_get_float(iVar); 39 | native traceline_set_float(iVar, Float:fVal); 40 | native traceline_get_vector(iVar, Float:vVal[3]); 41 | native traceline_set_vector(iVar, Float:vVal[3]); 42 | native traceline_get_edict(iVar); 43 | native traceline_set_edict(iVar, iEnt); 44 | 45 | /* Wrapper around pfn_touch */ 46 | forward entity_touch(entity1, entity2); 47 | 48 | /* Wrapper around pfn_think */ 49 | forward entity_think(entity); 50 | 51 | /* Wrapper around pfn_spawn */ 52 | forward entity_spawn(entity); 53 | 54 | /* Wrapper around client_PreThink */ 55 | forward client_prethink(id); 56 | 57 | /* Wrapper around client_PostThink */ 58 | forward client_postthink(id); 59 | 60 | //From AMX Mod: 61 | // Called when an Emitting Sound is played Server-Side 62 | forward emitsound(entity, const sample[]); 63 | 64 | //From AMX Mod: 65 | // Called when an Emitting Ambient Sound is played Server-Side 66 | forward emitambientsound(entity, const sample[]); 67 | 68 | //From AMX Mod: 69 | // Called when a model spawns 70 | forward set_model(entity, const model[]); 71 | 72 | //From AMX Mod: 73 | // Called whatever an entity looks at 74 | forward traceline(entity); 75 | 76 | //:TODO: ? 77 | // Called when a monster is hurt by VexdUM damage natives 78 | // forward monster_hurt(monster, attacker, damage); 79 | 80 | //From AMX Mod: 81 | // Called when a keyvalue is set on a player 82 | forward setclientkeyvalue(id, key[], value[]); 83 | 84 | //From AMX Mod: 85 | // Called when an entity gets a keyvalue set on it from the engine. 86 | // Use copy_keyvalue to get the keyvalue information 87 | forward keyvalue(entity); 88 | 89 | #include 90 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/fun.inc: -------------------------------------------------------------------------------- 1 | /* Fun functions 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _fun_included 9 | #endinput 10 | #endif 11 | #define _fun_included 12 | 13 | #if AMXX_VERSION_NUM >= 175 14 | #pragma reqlib fun 15 | #if !defined AMXMODX_NOAUTOLOAD 16 | #pragma loadlib fun 17 | #endif 18 | #else 19 | #pragma library fun 20 | #endif 21 | 22 | /* Returns 1 if receiver hears sender via voice communication. */ 23 | native get_client_listen(receiver, sender); 24 | 25 | /* Sets who can listen who. Function returns 0 26 | * if for some reasons this setting can't be done. */ 27 | native set_client_listen(receiver, sender, listen); 28 | 29 | /* Sets player godmode. If you want to disable godmode set only first parameter. */ 30 | native set_user_godmode(index, godmode = 0); 31 | 32 | /* Returns 1 if godmode is set. */ 33 | native get_user_godmode(index); 34 | 35 | /* Sets player armor. */ 36 | native set_user_armor(index, armor); 37 | 38 | /* Sets player health. */ 39 | native set_user_health(index, health); 40 | 41 | /* Move player to origin. */ 42 | native set_user_origin(index, const origin[3]); 43 | 44 | /* Sets player rendering mode. */ 45 | native set_user_rendering(index, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16); 46 | 47 | /* Gives item to player, name of item can start 48 | * with weapon_, ammo_ and item_. This event 49 | * is announced with proper message to all players. */ 50 | native give_item(index, const item[]); 51 | 52 | /* Sets hit zones for player. 53 | * Parts of body are as bits: 54 | * 1 - generic 55 | * 2 - head 56 | * 4 - chest 57 | * 8 - stomach 58 | * 16 - left arm 59 | * 32 - right arm 60 | * 64 - left leg 61 | * 128 - right leg */ 62 | native set_user_hitzones(index = 0, target = 0, body = 255); 63 | 64 | /* Get user hitzones. */ 65 | native get_user_hitzones(index, target); 66 | 67 | /* Sets users max. speed. */ 68 | native set_user_maxspeed(index, Float:speed = -1.0); 69 | 70 | /* Returns users max. speed. */ 71 | native Float:get_user_maxspeed(index); 72 | 73 | /* Sets users gravity. */ 74 | native set_user_gravity(index, Float:gravity = 1.0); 75 | 76 | /* Returns users gravity. */ 77 | native Float:get_user_gravity(index); 78 | 79 | /* Spawns entity. */ 80 | native spawn(index); 81 | 82 | /* Sets player noclip. If you want to disable noclip set only first parameter. */ 83 | native set_user_noclip(index, noclip = 0); 84 | 85 | /* Returns 1 if noclip is set. */ 86 | native get_user_noclip(index); 87 | 88 | /* Returns 1 if player has silent footsteps, 0 if footsteps are set to normal */ 89 | native get_user_footsteps(index); 90 | 91 | /* Gives player silent footsteps. 92 | * if set = 0 it will return footsteps to normal */ 93 | native set_user_footsteps(id, set = 1); 94 | 95 | /* Strips all weapons from user. */ 96 | native strip_user_weapons(index); 97 | 98 | /* Sets player frags. */ 99 | native set_user_frags(index, frags); 100 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/dodconst.inc: -------------------------------------------------------------------------------- 1 | /* DoDX functions 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _dodconst_included 8 | #endinput 9 | #endif 10 | #define _dodconst_included 11 | 12 | /* DoD teams */ 13 | #define ALLIES 1 14 | #define AXIS 2 15 | 16 | #define FT_NEW 1<<0 17 | #define FT_OLD 1<<1 18 | 19 | #define STAMINA_SET 0 20 | #define STAMINA_RESET 1 21 | 22 | #define FUSE_SET 0 23 | #define FUSE_RESET 1 24 | 25 | #define DODMAX_WEAPONS 46 // 5 slots for custom weapons 26 | 27 | // DoD Weapon Types 28 | enum 29 | { 30 | DODWT_PRIMARY = 0, 31 | DODWT_SECONDARY, 32 | DODWT_MELEE, 33 | DODWT_GRENADE, 34 | DODWT_OTHER 35 | }; 36 | 37 | // Ammo Channels 38 | #define AMMO_SMG 1 // thompson, greasegun, sten, mp40 39 | #define AMMO_ALTRIFLE 2 // carbine, k43, mg34 40 | #define AMMO_RIFLE 3 // garand, enfield, scoped enfield, k98, scoped k98 41 | #define AMMO_PISTOL 4 // colt, webley, luger 42 | #define AMMO_SPRING 5 // springfield 43 | #define AMMO_HEAVY 6 // bar, bren, stg44, fg42, scoped fg42 44 | #define AMMO_MG42 7 // mg42 45 | #define AMMO_30CAL 8 // 30cal 46 | #define AMMO_GREN 9 // grenades (should be all 3 types) 47 | #define AMMO_ROCKET 13 // bazooka, piat, panzerschreck 48 | enum { 49 | PS_NOPRONE =0, 50 | PS_PRONE, 51 | PS_PRONEDEPLOY, 52 | PS_DEPLOY, 53 | }; 54 | 55 | /* info types for dod_get_map_info native */ 56 | enum { 57 | MI_ALLIES_TEAM = 0, 58 | MI_ALLIES_PARAS, 59 | MI_AXIS_PARAS, 60 | }; 61 | 62 | /* DoD weapons */ 63 | enum { 64 | DODW_AMERKNIFE = 1, 65 | DODW_GERKNIFE, 66 | DODW_COLT, 67 | DODW_LUGER, 68 | DODW_GARAND, 69 | DODW_SCOPED_KAR, 70 | DODW_THOMPSON, 71 | DODW_STG44, 72 | DODW_SPRINGFIELD, 73 | DODW_KAR, 74 | DODW_BAR, 75 | DODW_MP40, 76 | DODW_HANDGRENADE, 77 | DODW_STICKGRENADE, 78 | DODW_STICKGRENADE_EX, 79 | DODW_HANDGRENADE_EX, 80 | DODW_MG42, 81 | DODW_30_CAL, 82 | DODW_SPADE, 83 | DODW_M1_CARBINE, 84 | DODW_MG34, 85 | DODW_GREASEGUN, 86 | DODW_FG42, 87 | DODW_K43, 88 | DODW_ENFIELD, 89 | DODW_STEN, 90 | DODW_BREN, 91 | DODW_WEBLEY, 92 | DODW_BAZOOKA, 93 | DODW_PANZERSCHRECK, 94 | DODW_PIAT, 95 | DODW_SCOPED_FG42, 96 | DODW_FOLDING_CARBINE, 97 | DODW_KAR_BAYONET, 98 | DODW_SCOPED_ENFIELD, 99 | DODW_MILLS_BOMB, 100 | DODW_BRITKNIFE, 101 | DODW_GARAND_BUTT, 102 | DODW_ENFIELD_BAYONET, 103 | DODW_MORTAR, 104 | DODW_K43_BUTT, 105 | }; 106 | 107 | /* DoD Classes */ 108 | enum { 109 | DODC_GARAND = 1, 110 | DODC_CARBINE, 111 | DODC_THOMPSON, 112 | DODC_GREASE, 113 | DODC_SNIPER, 114 | DODC_BAR, 115 | DODC_30CAL, 116 | DODC_BAZOOKA, 117 | //DODC_ALLIES_MORTAR, 118 | DODC_KAR = 10, 119 | DODC_K43, 120 | DODC_MP40, 121 | DODC_MP44, 122 | DODC_SCHARFSCHUTZE, 123 | DODC_FG42, 124 | DODC_SCOPED_FG42, 125 | DODC_MG34, 126 | DODC_MG42, 127 | DODC_PANZERJAGER, 128 | //DODC_AXIS_MORTAR, 129 | DODC_ENFIELD = 21, 130 | DODC_STEN, 131 | DODC_MARKSMAN, 132 | DODC_BREN, 133 | DODC_PIAT, 134 | //DODC_BRIT_MORTAR, 135 | }; 136 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/xtrafun.inc: -------------------------------------------------------------------------------- 1 | /* Xtrafun backwards compatibility 2 | * 3 | * by the AMX Mod X Development Team 4 | * These natives were originally made by SpaceDude, EJ, and JustinHoMi. 5 | * 6 | * This file is provided as is (no warranties). 7 | */ 8 | 9 | #if !defined _xtrafun_included 10 | #define _xtrafun_included 11 | 12 | #if !defined _engine_included 13 | #include 14 | #endif 15 | 16 | /* Gets the velocity of an entity */ 17 | stock get_entity_velocity(index, velocity[3]) { 18 | new Float:vector[3]; 19 | entity_get_vector(index, EV_VEC_velocity, vector); 20 | FVecIVec(vector, velocity); 21 | } 22 | 23 | /* Sets the velocity of an entity */ 24 | stock set_entity_velocity(index, velocity[3]) { 25 | new Float:vector[3]; 26 | IVecFVec(velocity, vector); 27 | entity_set_vector(index, EV_VEC_velocity, vector); 28 | } 29 | 30 | /* Gets the origin of an entity */ 31 | stock get_entity_origin(index, origin[3]) { 32 | new Float:vector[3]; 33 | entity_get_vector(index, EV_VEC_origin, vector); 34 | FVecIVec(vector, origin); 35 | } 36 | 37 | /* Sets the origin of an entity */ 38 | stock set_entity_origin(index, origin[3]) { 39 | new Float:vector[3]; 40 | IVecFVec(origin, vector); 41 | entity_set_vector(index, EV_VEC_origin, vector); 42 | } 43 | 44 | /* Get the index of the grenade belonging to index. 45 | * Model of grenade is returned in model[]. 46 | * Specify the grenadeindex to start searching from, 47 | * or leave it at 0 to search from the start. 48 | * Returns grenade index. 49 | * Paths + models of grenades in Counter-Strike: 50 | * HEGRENADE = "models/w_hegrenade.mdl" 51 | * FLASHBANG = "models/w_flashbang.mdl" 52 | * SMOKEGRENADE = "models/w_smokegrenade.mdl" */ 53 | stock get_grenade_index(index, model[], len, grenadeindex = 0) { 54 | new entfind = grenadeindex; 55 | new entowner = index; 56 | 57 | for (;;) { 58 | entfind = find_ent_by_class(entfind, "grenade"); 59 | 60 | if (entfind && is_valid_ent(entfind)) { 61 | if (entity_get_edict(entFind, EV_ENT_owner) == entowner) { 62 | entity_get_string(entfind, EV_SZ_model, model); 63 | return entfind; 64 | } 65 | } 66 | else { 67 | // Eventually comes here if loop fails to find a grenade with specified owner. 68 | return 0; 69 | } 70 | } 71 | } 72 | 73 | /* Find the number of entities in the game */ 74 | stock current_num_ents() { 75 | return entity_count(); 76 | } 77 | 78 | enum { 79 | classname = 0, 80 | target, 81 | targetname 82 | }; 83 | 84 | #if !defined _vexd_bcompat_included 85 | /* Find an entity ID from start_from_ent id (use 0 to start from 86 | * the beginning, category is either "classname", "target" or 87 | * "targetname", value is the name you are searching for */ 88 | stock find_entity(start_from_ent, category, value[]) { 89 | switch (category) { 90 | case target: return find_ent_by_target(start_from_ent, value); 91 | case targetname: return find_ent_by_tname(start_from_ent, value); 92 | } 93 | return find_ent_by_class(start_from_ent, value); 94 | } 95 | #endif 96 | 97 | #endif // _xtrafun_included -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/tsconst.inc: -------------------------------------------------------------------------------- 1 | /* TSFUN constants 2 | * 3 | * (c) 2005, Suzuka 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _tsconst_included 8 | #endinput 9 | #endif 10 | #define _tsconst_included 11 | 12 | #define TSMAX_WEAPONS 44 // 37 + throwing knife + brekable + 5 custom weapon slots 13 | 14 | #define TSPWUP_NONE 0 15 | #define TSPWUP_RANDOM 0 16 | #define TSPWUP_SLOWMO 1 17 | #define TSPWUP_INFAMMO 2 18 | #define TSPWUP_KUNGFU 4 19 | #define TSPWUP_SLOWPAUSE 8 20 | #define TSPWUP_DFIRERATE 16 21 | #define TSPWUP_GRENADE 32 22 | #define TSPWUP_HEALTH 64 23 | #define TSPWUP_ARMOR 128 24 | #define TSPWUP_SUPERJUMP 256 25 | 26 | #define TSITEM_KUNGFU 1<<0 27 | #define TSITEM_SUPERJUMP 1<<1 28 | 29 | #define TSKF_STUNTKILL 1<<0 30 | #define TSKF_SLIDINGKILL 1<<1 31 | #define TSKF_DOUBLEKILL 1<<2 32 | #define TSKF_ISSPEC 1<<3 33 | #define TSKF_KILLEDSPEC 1<<4 34 | 35 | #define TSA_SILENCER 1 36 | #define TSA_LASERSIGHT 2 37 | #define TSA_FLASHLIGHT 4 38 | #define TSA_SCOPE 8 39 | 40 | #define TSMSG_NORMAL 6 41 | #define TSMSG_WAITING 11 42 | #define TSMSG_DEAD 1 43 | #define TSMSG_KILLER 2 44 | #define TSMSG_DEMOLITION 3 45 | #define TSMSG_SPECIALIST 4 46 | #define TSMSG_UNSTOPPABLE 5 47 | #define TSMSG_THEONE 10 48 | 49 | #define STUNT_NONE 0 50 | #define STUNT_DUCK 1 51 | #define STUNT_ROLL 2 52 | #define STUNT_DIVE 3 53 | #define STUNT_GETUP 4 54 | #define STUNT_FLIP 5 55 | 56 | enum { 57 | TSW_GLOCK18 = 1, 58 | TSW_UNK1, 59 | TSW_UZI, 60 | TSW_M3, 61 | TSW_M4A1, 62 | TSW_MP5SD, 63 | TSW_MP5K, 64 | TSW_ABERETTAS, 65 | TSW_MK23, 66 | TSW_AMK23, 67 | TSW_USAS, 68 | TSW_DEAGLE, 69 | TSW_AK47, 70 | TSW_57, 71 | TSW_AUG, 72 | TSW_AUZI, 73 | TSW_TMP, 74 | TSW_M82A1, 75 | TSW_MP7, 76 | TSW_SPAS, 77 | TSW_GCOLTS, 78 | TSW_GLOCK20, 79 | TSW_UMP, 80 | TSW_M61GRENADE, 81 | TSW_CKNIFE, 82 | TSW_MOSSBERG, 83 | TSW_M16A4, 84 | TSW_MK1, 85 | TSW_C4, 86 | TSW_A57, 87 | TSW_RBULL, 88 | TSW_M60E3, 89 | TSW_SAWED_OFF, 90 | TSW_KATANA, 91 | TSW_SKNIFE, 92 | TSW_KUNG_FU, 93 | TSW_TKNIFE, 94 | }; 95 | 96 | /* 97 | valid tsweaponid in TS_GiveWeapon 98 | 99 | 1: "Glock 18" 100 | 3: "Mini Uzi" 101 | 4: "Benelli M3" 102 | 5: "M4A1" 103 | 6: "MP5SD" 104 | 7: "MP5K" 105 | 8: "Akimbo Berettas" 106 | 9: "Socom Mk23" 107 | 11: "Usas12" 108 | 12: "Desert Eagle" 109 | 13: "Ak47" 110 | 14: "FiveSeven" 111 | 15: "Steyr Aug" 112 | 17: "Steyr Tmp" 113 | 18: "Barrett M82" 114 | 19: "HK Pdw" 115 | 20: "Spas12" 116 | 21: "Akimbo colts" 117 | 22: "Glock 20" 118 | 23: "Mac10" 119 | 25: "Combat Knife" 120 | 26: "Mossberg 500" 121 | 27: "M16A4" 122 | 28: "Ruger Mk1" 123 | 24: "M61 Grenade" 124 | 29: "C4" 125 | 31: "Raging Bull" 126 | 32: "M60" 127 | 33: "Sawed off" 128 | 34: "Katana" 129 | 35: "Seal Knife" 130 | 131 | valid pwuptype in TS_GivePwUp 132 | 133 | 0: "Random" 134 | 1: "Slow Motion" 135 | 2: "Infinite Clip" 136 | 4: "Kung Fu" 137 | 8: "Slow Pause" 138 | 16: "Double Firerate" 139 | 32: "Grenade" 140 | 64: "Health" 141 | 128: "Armor" 142 | 256: "Superjump" 143 | 144 | */ 145 | 146 | 147 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/admins_test.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | new __testnumber; 4 | new errcount; 5 | 6 | enum TestType 7 | { 8 | TT_Equal = 0, 9 | TT_LessThan, 10 | TT_GreaterThan, 11 | TT_LessThanEqual, 12 | TT_GreaterThanEqual, 13 | TT_NotEqual 14 | }; 15 | 16 | new TestWords[6][] = { 17 | "==", 18 | "<", 19 | ">", 20 | "<=", 21 | ">=", 22 | "!=" 23 | }; 24 | 25 | 26 | 27 | stock test(A,B=0,TestType:Type=TT_Equal) 28 | { 29 | ++__testnumber; 30 | 31 | new passed=0; 32 | 33 | switch (Type) 34 | { 35 | case TT_Equal: if (A==B) passed=1; 36 | case TT_LessThan: if (AB) passed=1; 38 | case TT_LessThanEqual: if (A<=B) passed=1; 39 | case TT_GreaterThanEqual: if (A>=B) passed=1; 40 | case TT_NotEqual: if (A!=B) passed=1; 41 | } 42 | 43 | if (!passed) 44 | { 45 | log_amx("Failed test #%d (%d %s %d)",__testnumber,A,TestWords[_:Type],B); 46 | errcount++; 47 | } 48 | } 49 | 50 | 51 | public plugin_init() 52 | { 53 | register_srvcmd("testadmins","testadmins"); 54 | } 55 | public testadmins() 56 | { 57 | 58 | new AuthData[44]; 59 | new Password[32]; 60 | new Access; 61 | new Flags; 62 | new id; 63 | 64 | __testnumber=0; 65 | errcount=0; 66 | 67 | 68 | test(admins_num(),0); 69 | 70 | admins_push("STEAM_0:1:23456","",read_flags("abcdefghijklmnopqrstu"),read_flags("ce")); 71 | 72 | test(admins_num(),1); 73 | 74 | admins_push("ABCDEFGHIJKLMNOP","abcdefghijklmnop",read_flags("z"),read_flags("a")); 75 | 76 | test(admins_num(),2); 77 | 78 | admins_push("ZYXWVUTSRQPONMLKJIHGFEDCBA","plop",read_flags("a"),read_flags("b")); 79 | 80 | test(admins_num(),3); 81 | 82 | id=0; 83 | 84 | admins_lookup(id,AdminProp_Auth,AuthData,sizeof(AuthData)-1); 85 | admins_lookup(id,AdminProp_Password,Password,sizeof(Password)-1); 86 | Access=admins_lookup(id,AdminProp_Access); 87 | Flags=admins_lookup(id,AdminProp_Flags); 88 | 89 | test(strcmp(AuthData,"STEAM_0:1:23456"),0); 90 | test(strcmp(Password,""),0); 91 | test(Access,read_flags("abcdefghijklmnopqrstu")); 92 | test(Flags,read_flags("ce")); 93 | 94 | id++; 95 | 96 | admins_lookup(id,AdminProp_Auth,AuthData,sizeof(AuthData)-1); 97 | admins_lookup(id,AdminProp_Password,Password,sizeof(Password)-1); 98 | Access=admins_lookup(id,AdminProp_Access); 99 | Flags=admins_lookup(id,AdminProp_Flags); 100 | 101 | test(strcmp(AuthData,"ABCDEFGHIJKLMNOP"),0); 102 | test(strcmp(Password,"abcdefghijklmnop"),0); 103 | test(Access,read_flags("z")); 104 | test(Flags,read_flags("a")); 105 | 106 | id++; 107 | 108 | admins_lookup(id,AdminProp_Auth,AuthData,sizeof(AuthData)-1); 109 | admins_lookup(id,AdminProp_Password,Password,sizeof(Password)-1); 110 | Access=admins_lookup(id,AdminProp_Access); 111 | Flags=admins_lookup(id,AdminProp_Flags); 112 | 113 | test(strcmp(AuthData,"ZYXWVUTSRQPONMLKJIHGFEDCBA"),0); 114 | test(strcmp(Password,"plop"),0); 115 | test(Access,read_flags("a")); 116 | test(Flags,read_flags("b")); 117 | 118 | admins_flush(); 119 | 120 | test(admins_num(),0); 121 | 122 | server_print("test complete, %d errors",errcount); 123 | } -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_stock.inc: -------------------------------------------------------------------------------- 1 | /* VexdUM stocks backwards compatibility 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _vexd_bcompat_stocks_included 9 | #endinput 10 | #endif 11 | #define _vexd_bcompat_stocks_included 12 | 13 | #if !defined _engine_included 14 | #include 15 | #endif 16 | 17 | stock is_entity(ent) 18 | { 19 | return pev_valid(ent); 20 | } 21 | 22 | stock get_offset_int(ent, offset, linos = 5) 23 | { 24 | return get_pdata_int(ent, offset, linos); 25 | } 26 | 27 | stock set_offset_int(ent, offset, value, linos = 5) 28 | { 29 | return set_pdata_int(ent, offset, value, linos); 30 | } 31 | 32 | stock in_view_cone(ent, Float:Orig[3]) 33 | { 34 | return is_in_viewcone(ent, Orig); 35 | } 36 | 37 | stock get_maxentities() 38 | { 39 | return global_get(glb_maxEntities); 40 | } 41 | 42 | stock can_see(ent1, ent2) 43 | { 44 | if (is_entity(ent1) && is_entity(ent2)) 45 | { 46 | new flags = pev(ent1, pev_flags); 47 | if (flags & EF_NODRAW || flags & FL_NOTARGET) 48 | { 49 | return 0; 50 | } 51 | 52 | new Float:lookerOrig[3]; 53 | new Float:targetOrig[3]; 54 | new Float:temp[3]; 55 | 56 | pev(ent1, pev_origin, lookerOrig); 57 | pev(ent1, pev_view_ofs, temp); 58 | lookerOrig[0] += temp[0]; 59 | lookerOrig[1] += temp[1]; 60 | lookerOrig[2] += temp[2]; 61 | 62 | pev(ent2, pev_origin, targetOrig); 63 | pev(ent2, pev_view_ofs, temp); 64 | targetOrig[0] += temp[0]; 65 | targetOrig[1] += temp[1]; 66 | targetOrig[2] += temp[2]; 67 | 68 | engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, ent1, 0); 69 | if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater)) 70 | { 71 | return 0; 72 | } else { 73 | new Float:flFraction; 74 | get_tr2(0, TraceResult:TR_flFraction, flFraction); 75 | if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == ent2)) 76 | { 77 | return 1; 78 | } 79 | } 80 | } 81 | 82 | return 0; 83 | } 84 | 85 | //From AMX Mod: 86 | // Find an entity in the world, will return -1 if nothing is found 87 | // type = 0: "classname" 88 | // type = 1: "globalname" 89 | // type = 2: "model" 90 | // type = 3: "target" 91 | // type = 4: "targetname" 92 | // type = 5: "netname" 93 | // type = 6: "message" 94 | // type = 7: "noise" 95 | // type = 8: "noise1" 96 | // type = 9: "noise2" 97 | // type = 10: "noise3" 98 | // type = 11: "viewmodel" 99 | // type = 12: "weaponmodel" 100 | 101 | stock vexd_find_entity(ent, szValue[], type=0) 102 | { 103 | static _g_FindEntTypes[13][] = 104 | { 105 | "classname", 106 | "globalname", 107 | "model", 108 | "target", 109 | "targetname", 110 | "netname", 111 | "messages", 112 | "noise", 113 | "noise1", 114 | "noise2", 115 | "noise3", 116 | "viewmodel", 117 | "weaponmodel" 118 | }; 119 | 120 | if (type < 0 || type >= 13) 121 | { 122 | type = 0; 123 | } 124 | 125 | return engfunc(EngFunc_FindEntityByString, ent, _g_FindEntTypes[type], szValue); 126 | } 127 | 128 | #define find_entity vexd_find_entity 129 | 130 | //From AMX Mod: 131 | // Find an entity within a given origin and radius 132 | stock find_entity_sphere(ent, Float:Orig[3], Float:Rad) 133 | { 134 | return engfunc(EngFunc_FindEntityInSphere, ent, Orig, Rad); 135 | } 136 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/adminslots.sma: -------------------------------------------------------------------------------- 1 | /* AMX Mod X 2 | * Slots Reservation Plugin 3 | * 4 | * by the AMX Mod X Development Team 5 | * originally developed by OLO 6 | * 7 | * This file is part of AMX Mod X. 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify it 11 | * under the terms of the GNU General Public License as published by the 12 | * Free Software Foundation; either version 2 of the License, or (at 13 | * your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, but 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program; if not, write to the Free Software Foundation, 22 | * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 | * 24 | * In addition, as a special exception, the author gives permission to 25 | * link the code of this program with the Half-Life Game Engine ("HL 26 | * Engine") and Modified Game Libraries ("MODs") developed by Valve, 27 | * L.L.C ("Valve"). You must obey the GNU General Public License in all 28 | * respects for all of the code used other than the HL Engine and MODs 29 | * from Valve. If you modify this file, you may extend this exception 30 | * to your version of the file, but you are not obligated to do so. If 31 | * you do not wish to do so, delete this exception statement from your 32 | * version. 33 | */ 34 | 35 | #include 36 | #include 37 | 38 | new g_ResPtr 39 | new g_HidePtr 40 | 41 | public plugin_init() 42 | { 43 | register_plugin("Slots Reservation", AMXX_VERSION_STR, "AMXX Dev Team") 44 | register_dictionary("adminslots.txt") 45 | register_dictionary("common.txt") 46 | g_ResPtr = register_cvar("amx_reservation", "0") 47 | g_HidePtr = register_cvar("amx_hideslots", "0") 48 | } 49 | 50 | public plugin_cfg() 51 | { 52 | set_task(3.0, "MapLoaded") 53 | } 54 | 55 | public MapLoaded() 56 | { 57 | if (!get_pcvar_num(g_HidePtr)) 58 | return 59 | 60 | new maxplayers = get_maxplayers() 61 | new players = get_playersnum(1) 62 | new limit = maxplayers - get_pcvar_num(g_ResPtr) 63 | setVisibleSlots(players, maxplayers, limit) 64 | } 65 | 66 | public client_authorized(id) 67 | { 68 | new maxplayers = get_maxplayers() 69 | new players = get_playersnum(1) 70 | new limit = maxplayers - get_pcvar_num(g_ResPtr) 71 | 72 | if (access(id, ADMIN_RESERVATION) || (players <= limit)) 73 | { 74 | if (get_pcvar_num(g_HidePtr) == 1) 75 | setVisibleSlots(players, maxplayers, limit) 76 | return PLUGIN_CONTINUE 77 | } 78 | 79 | new lReason[64] 80 | format(lReason, 63, "%L", id, "DROPPED_RES") 81 | server_cmd("kick #%d ^"%s^"", get_user_userid(id), lReason) 82 | 83 | return PLUGIN_HANDLED 84 | } 85 | 86 | public client_disconnect(id) 87 | { 88 | if (!get_pcvar_num(g_HidePtr)) 89 | return PLUGIN_CONTINUE 90 | 91 | new maxplayers = get_maxplayers() 92 | 93 | setVisibleSlots(get_playersnum(1) - 1, maxplayers, maxplayers - get_pcvar_num(g_ResPtr)) 94 | return PLUGIN_CONTINUE 95 | } 96 | 97 | setVisibleSlots(players, maxplayers, limit) 98 | { 99 | new num = players + 1 100 | 101 | if (players == maxplayers) 102 | num = maxplayers 103 | else if (players < limit) 104 | num = limit 105 | 106 | set_cvar_num("sv_visiblemaxplayers", num) 107 | } 108 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/amxmod_compat/Vexd_Utilities.inc: -------------------------------------------------------------------------------- 1 | /* Vexd Utility backwards compatibility 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _Vexd_Utilities_included 9 | #endinput 10 | #endif 11 | #define _Vexd_Utilities_included 12 | 13 | #include 14 | #if defined AMXMOD_BCOMPAT 15 | #if !defined _vexd_bcompat_included 16 | #include 17 | #endif 18 | #endif 19 | 20 | stock Entvars_Get_Int(iIndex, iVariable) 21 | return entity_get_int(iIndex, iVariable); 22 | 23 | stock Entvars_Set_Int(iIndex, iVariable, iNewValue) 24 | return entity_set_int(iIndex, iVariable, iNewValue); 25 | 26 | stock Float:Entvars_Get_Float(iIndex, iVariable) 27 | return entity_get_float(iIndex, iVariable); 28 | 29 | stock Entvars_Set_Float(iIndex, iVariable, Float:fNewValue) 30 | return entity_set_float(iIndex, iVariable, fNewValue); 31 | 32 | stock Entvars_Get_Vector(iIndex, iVariable, Float:vRetVector[3]) 33 | return entity_get_vector(iIndex, iVariable, vRetVector); 34 | 35 | stock Entvars_Set_Vector(iIndex, iVariable, Float:vNewVector[3]) 36 | return entity_set_vector(iIndex, iVariable, vNewVector); 37 | 38 | stock Entvars_Get_Edict(iIndex, iVariable) 39 | return entity_get_edict(iIndex, iVariable); 40 | 41 | stock Entvars_Set_Edict(iIndex, iVariable, iNewIndex) 42 | return entity_set_edict(iIndex, iVariable, iNewIndex); 43 | 44 | stock Entvars_Get_String(iIndex, iVariable, szReturnValue[], iReturnLen) 45 | return entity_get_string(iIndex, iVariable, szReturnValue, iReturnLen); 46 | 47 | stock Entvars_Set_String(iIndex, iVariable, szNewValue[]) 48 | return entity_set_string(iIndex, iVariable, szNewValue); 49 | 50 | stock Entvars_Get_Byte(iIndex, iVariable) 51 | return entity_get_byte(iIndex, iVariable); 52 | 53 | stock Entvars_Set_Byte(iIndex, iVariable, iNewValue) 54 | return entity_set_byte(iIndex, iVariable, iNewValue); 55 | 56 | stock CreateEntity(szClassname[]) 57 | return create_entity(szClassname); 58 | 59 | stock ENT_SetModel(iIndex, szModel[]) 60 | return entity_set_model(iIndex, szModel); 61 | 62 | stock ENT_SetOrigin(iIndex, Float:fNewOrigin[3]) 63 | return entity_set_origin(iIndex, fNewOrigin); 64 | 65 | stock FindEntity(iIndex, szValue[]) 66 | return find_ent_by_class(iIndex, szValue); 67 | 68 | stock RemoveEntity(iIndex) 69 | return remove_entity(iIndex); 70 | 71 | stock TraceLn(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]) 72 | return trace_line(iIgnoreEnt, fStart, fEnd, vReturn); 73 | 74 | stock TraceNormal(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]) 75 | return trace_normal(iIgnoreEnt, fStart, fEnd, vReturn); 76 | 77 | stock VecToAngles(Float:fVector[3], Float:vReturn[3]) 78 | return vector_to_angle(fVector, vReturn); 79 | 80 | stock Float:VecLength(Float:vVector[3]) 81 | return vector_length(vVector); 82 | 83 | stock Float:VecDist(Float:vVector[3], Float:vVector2[3]) 84 | return vector_distance(vVector, vVector2); 85 | 86 | stock MessageBlock(iMessage, iMessageFlags) 87 | return set_msg_block(iMessage, iMessageFlags); 88 | 89 | stock GetMessageBlock(iMessage) 90 | return get_msg_block(iMessage); 91 | 92 | stock Float:HLTime() 93 | return halflife_time(); 94 | 95 | stock FakeTouch(iToucher, iTouched) 96 | return fake_touch(iToucher, iTouched); 97 | 98 | stock AttachView(iIndex, iTargetIndex) 99 | return attach_view(iIndex, iTargetIndex); 100 | 101 | stock SetView(iIndex, ViewType) 102 | return set_view(iIndex, ViewType); 103 | 104 | stock SetSpeak(iIndex, iSpeakFlags) 105 | return set_speak(iIndex, iSpeakFlags); 106 | 107 | forward vexd_pfntouch(pToucher, pTouched); 108 | 109 | forward ServerFrame(); 110 | -------------------------------------------------------------------------------- /docs/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | body { 8 | font-family: 'Trebuchet MS', Arial, sans-serif; 9 | line-height: 1.6; 10 | color: #ff9500; 11 | background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 50%, #1a1a1a 100%); 12 | min-height: 100vh; 13 | background-attachment: fixed; 14 | } 15 | 16 | .container { 17 | max-width: 1200px; 18 | margin: 0 auto; 19 | padding: 2rem; 20 | } 21 | 22 | header { 23 | text-align: center; 24 | margin-bottom: 3rem; 25 | } 26 | 27 | h1 { 28 | font-size: 3rem; 29 | color: #ff9500; 30 | text-shadow: 0 0 10px rgba(255, 149, 0, 0.8), 2px 2px 4px rgba(0,0,0,0.8); 31 | margin-bottom: 1rem; 32 | font-weight: bold; 33 | letter-spacing: 2px; 34 | } 35 | 36 | .subtitle { 37 | font-size: 1.2rem; 38 | color: #ffcc66; 39 | margin-bottom: 2rem; 40 | text-shadow: 1px 1px 2px rgba(0,0,0,0.8); 41 | } 42 | 43 | .card { 44 | background: rgba(0,0,0,0.85); 45 | border: 2px solid #ff9500; 46 | border-radius: 8px; 47 | padding: 2rem; 48 | margin-bottom: 2rem; 49 | box-shadow: 0 0 20px rgba(255, 149, 0, 0.3), inset 0 0 20px rgba(255, 149, 0, 0.1); 50 | backdrop-filter: blur(10px); 51 | } 52 | 53 | .card h2 { 54 | color: #ff9500; 55 | } 56 | 57 | .features { 58 | display: grid; 59 | grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); 60 | gap: 2rem; 61 | margin-bottom: 2rem; 62 | } 63 | 64 | .feature { 65 | text-align: center; 66 | padding: 1.5rem; 67 | } 68 | 69 | .feature-icon { 70 | font-size: 3rem; 71 | margin-bottom: 1rem; 72 | } 73 | 74 | .code-block { 75 | background: #000; 76 | color: #ff9500; 77 | padding: 1.5rem; 78 | border: 1px solid #ff9500; 79 | border-radius: 4px; 80 | font-family: 'Courier New', monospace; 81 | margin: 1rem 0; 82 | box-shadow: inset 0 0 10px rgba(255, 149, 0, 0.2); 83 | white-space: pre; 84 | line-height: 1.4; 85 | text-align: left; 86 | } 87 | 88 | .btn { 89 | display: inline-block; 90 | padding: 12px 24px; 91 | background: transparent; 92 | color: #ff9500; 93 | text-decoration: none; 94 | border: 2px solid #ff9500; 95 | border-radius: 4px; 96 | transition: all 0.3s; 97 | margin: 0.5rem; 98 | text-transform: uppercase; 99 | font-weight: bold; 100 | letter-spacing: 1px; 101 | } 102 | 103 | .btn:hover { 104 | background: #ff9500; 105 | color: #000; 106 | box-shadow: 0 0 15px rgba(255, 149, 0, 0.6); 107 | } 108 | 109 | .btn-secondary { 110 | color: #ffcc66; 111 | border-color: #ffcc66; 112 | } 113 | 114 | .btn-secondary:hover { 115 | background: #ffcc66; 116 | color: #000; 117 | box-shadow: 0 0 15px rgba(255, 204, 102, 0.6); 118 | } 119 | 120 | .badges { 121 | text-align: center; 122 | margin: 2rem 0; 123 | } 124 | 125 | .badge { 126 | display: inline-block; 127 | margin: 0.25rem; 128 | } 129 | 130 | .server-features { 131 | list-style: none; 132 | padding: 0; 133 | } 134 | 135 | .server-features li { 136 | color: #ff9500; 137 | margin: 0.5rem 0; 138 | } 139 | 140 | footer { 141 | text-align: center; 142 | color: #ffcc66; 143 | margin-top: 3rem; 144 | padding-top: 2rem; 145 | border-top: 1px solid rgba(255, 149, 0, 0.3); 146 | } 147 | 148 | a { 149 | color: #ff9500; 150 | text-decoration: none; 151 | transition: color 0.3s; 152 | } 153 | 154 | a:hover { 155 | color: #ffcc66; 156 | text-shadow: 0 0 5px rgba(255, 149, 0, 0.5); 157 | } 158 | 159 | @media (max-width: 768px) { 160 | .container { 161 | padding: 1rem; 162 | } 163 | 164 | h1 { 165 | font-size: 2rem; 166 | } 167 | 168 | .features { 169 | grid-template-columns: 1fr; 170 | } 171 | } 172 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/trietest.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | 4 | // These natives are only available in a debug build of amxmodx 5 | native TrieFreeCount(); 6 | native TrieMallocCount(); 7 | 8 | new failcount = 0; 9 | new passcount = 0; 10 | public plugin_init() 11 | { 12 | register_plugin("Trie Test", AMXX_VERSION_STR, "AMXX Dev Team"); 13 | register_srvcmd("trietest", "trietest"); 14 | } 15 | 16 | stock fail(const testname[]) 17 | { 18 | server_print("[FAIL] %s", testname); 19 | 20 | failcount++; 21 | } 22 | stock pass(const testname[]) 23 | { 24 | server_print("[PASS] %s", testname); 25 | 26 | passcount++; 27 | } 28 | stock done() 29 | { 30 | server_print("Finished. %d tests, %d failed", failcount + passcount, failcount); 31 | } 32 | stock check_frees() 33 | { 34 | if (TrieMallocCount() != TrieFreeCount()) 35 | fail("free count == malloc count"); 36 | 37 | else 38 | pass("free count == malloc count"); 39 | 40 | server_print("malloc count: %d free count: %d", TrieMallocCount(), TrieFreeCount()); 41 | } 42 | public trietest() 43 | { 44 | failcount = 0; 45 | passcount = 0; 46 | 47 | new bool:ok = true; 48 | new Trie:t = TrieCreate(); 49 | 50 | new Trie:oldhandle = t; // Makes sure that the trie handle system recycles old handles 51 | 52 | new key[32]; 53 | for (new i = 0; i < 100; i++) 54 | { 55 | formatex(key, charsmax(key), "K%dK", i); 56 | TrieSetCell(t, key, i); 57 | } 58 | 59 | for (new i = 0; i < 100; i++) 60 | { 61 | formatex(key, charsmax(key), "K%dK", i); 62 | new val; 63 | if (!TrieGetCell(t, key, val)) 64 | { 65 | server_print("TrieGetCell(%d, '%s', %d) failed", t, key, val); 66 | ok = false; 67 | } 68 | 69 | else if (val != i) 70 | { 71 | server_print("val mismatch, expected: %d got: %d", i, val); 72 | ok = false; 73 | } 74 | 75 | } 76 | if (ok) 77 | pass("Cell tests"); 78 | 79 | else 80 | fail("Cell tests"); 81 | 82 | TrieClear(t); 83 | TrieDestroy(t); 84 | 85 | t = TrieCreate(); 86 | 87 | if (t == oldhandle) 88 | pass("Recycle handles"); 89 | 90 | else 91 | fail("Recycle handles"); 92 | 93 | ok = true; 94 | for (new i = 0; i < 100; i++) 95 | { 96 | static val[32]; 97 | formatex(key, charsmax(key), "K%dK", i); 98 | formatex(val, charsmax(val), "V%dV", i); 99 | TrieSetString(t, key, val); 100 | } 101 | 102 | for (new i = 0; i < 100; i++) 103 | { 104 | formatex(key, charsmax(key), "K%dK", i); 105 | static val[32]; 106 | static exp[32]; 107 | formatex(exp, charsmax(exp), "V%dV", i); 108 | if (!TrieGetString(t, key, val, charsmax(val))) 109 | { 110 | server_print("TrieGetString(%d, '%s', %s) failed", t, key, val); 111 | ok = false; 112 | } 113 | 114 | else if (!equal(val, exp)) 115 | { 116 | server_print("val mismatch, key: '%s' expected: '%s' got: '%s'", key, exp, val); 117 | ok = false; 118 | } 119 | 120 | } 121 | if (ok) 122 | pass("String tests"); 123 | 124 | else 125 | fail("String tests"); 126 | 127 | TrieDestroy(t); 128 | 129 | check_frees(); 130 | 131 | t = TrieCreate(); 132 | ok = true; 133 | for (new i = 0; i < 1000; i++) 134 | { 135 | formatex(key, charsmax(key), "!%d!", i); 136 | TrieSetString(t, key, key); 137 | } 138 | for (new i = 0; i < 1000; i++) 139 | { 140 | formatex(key, charsmax(key), "!%d!", i); 141 | 142 | if (!TrieKeyExists(t, key)) 143 | { 144 | ok = false; 145 | server_print("Key '%s' does not exist", key); 146 | } 147 | else 148 | { 149 | if (!TrieDeleteKey(t, key)) 150 | { 151 | server_print("Key '%s' could not be deleted", key); 152 | ok = false; 153 | } 154 | } 155 | } 156 | if (ok) 157 | pass("Exists/Delete"); 158 | 159 | else 160 | fail("Exists/Delete"); 161 | 162 | check_frees(); 163 | TrieClear(t); 164 | TrieDestroy(t); 165 | check_frees(); 166 | done(); 167 | 168 | } 169 | 170 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/testsuite/sorttest.sma: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | public plugin_init() 4 | { 5 | register_plugin("Sort Test", "1.0", "BAILOPAN") 6 | 7 | register_srvcmd("test_sort_ints", "Command_TestSortInts") 8 | register_srvcmd("test_sort_floats", "Command_TestSortFloats") 9 | register_srvcmd("test_sort_strings", "Command_TestSortStrings") 10 | register_srvcmd("test_sort_1d", "Command_TestSort1D") 11 | register_srvcmd("test_sort_2d", "Command_TestSort2D") 12 | } 13 | 14 | /***************** 15 | * INTEGER TESTS * 16 | *****************/ 17 | // Note that integer comparison is just int1-int2 (or a variation therein) 18 | 19 | PrintIntegers(const array[], size) 20 | { 21 | for (new i=0; i elem2) 70 | { 71 | return -1; 72 | } else if (elem1 < elem2) { 73 | return 1; 74 | } 75 | 76 | return 0; 77 | } 78 | 79 | public Command_TestSort1D() 80 | { 81 | new Float:array[10] = {6.3, 7.6, 3.2, 2.1, 8.5, 5.2, 0.4, 1.7, 4.8, 8.2} 82 | 83 | SortCustom1D(_:array, 10, "Custom1DSort") 84 | PrintFloats(array, 10) 85 | 86 | return PLUGIN_HANDLED 87 | } 88 | 89 | /*************************** 90 | * String comparison tests * 91 | ***************************/ 92 | 93 | PrintStrings(const array[][], size) 94 | { 95 | for (new i=0; i 36 | #include 37 | 38 | #define SPEED 0.3 39 | #define SCROLLMSG_SIZE 512 40 | 41 | new g_startPos 42 | new g_endPos 43 | new g_scrollMsg[SCROLLMSG_SIZE] 44 | new g_displayMsg[SCROLLMSG_SIZE] 45 | new Float:g_xPos 46 | new g_Length 47 | new g_Frequency 48 | 49 | public plugin_init() 50 | { 51 | register_plugin("Scrolling Message", AMXX_VERSION_STR, "AMXX Dev Team") 52 | register_dictionary("scrollmsg.txt") 53 | register_dictionary("common.txt") 54 | register_srvcmd("amx_scrollmsg", "setMessage") 55 | } 56 | 57 | public showMsg() 58 | { 59 | new a = g_startPos, i = 0 60 | 61 | while (a < g_endPos) 62 | g_displayMsg[i++] = g_scrollMsg[a++] 63 | 64 | g_displayMsg[i] = 0 65 | 66 | if (g_endPos < g_Length) 67 | g_endPos++ 68 | 69 | if (g_xPos > 0.35) 70 | g_xPos -= 0.0063 71 | else 72 | { 73 | g_startPos++ 74 | g_xPos = 0.35 75 | } 76 | 77 | set_hudmessage(200, 100, 0, g_xPos, 0.90, 0, SPEED, SPEED, 0.05, 0.05, 2) 78 | show_hudmessage(0, "%s", g_displayMsg) 79 | } 80 | 81 | public msgInit() 82 | { 83 | g_endPos = 1 84 | g_startPos = 0 85 | g_xPos = 0.65 86 | 87 | new hostname[64] 88 | 89 | get_cvar_string("hostname", hostname, 63) 90 | replace(g_scrollMsg, SCROLLMSG_SIZE-1, "%hostname%", hostname) 91 | 92 | g_Length = strlen(g_scrollMsg) 93 | 94 | set_task(SPEED, "showMsg", 123, "", 0, "a", g_Length + 48) 95 | client_print(0, print_console, "%s", g_scrollMsg) 96 | } 97 | 98 | public setMessage() 99 | { 100 | remove_task(123) /* remove current messaging */ 101 | read_argv(1, g_scrollMsg, SCROLLMSG_SIZE-1) 102 | 103 | g_Length = strlen(g_scrollMsg) 104 | 105 | new mytime[32] 106 | 107 | read_argv(2, mytime, 31) 108 | 109 | g_Frequency = str_to_num(mytime) 110 | 111 | if (g_Frequency > 0) 112 | { 113 | new minimal = floatround((g_Length + 48) * (SPEED + 0.1)) 114 | 115 | if (g_Frequency < minimal) 116 | { 117 | server_print("%L", LANG_SERVER, "MIN_FREQ", minimal) 118 | g_Frequency = minimal 119 | } 120 | 121 | server_print("%L", LANG_SERVER, "MSG_FREQ", g_Frequency / 60, g_Frequency % 60) 122 | set_task(float(g_Frequency), "msgInit", 123, "", 0, "b") 123 | } 124 | else 125 | server_print("%L", LANG_SERVER, "MSG_DISABLED") 126 | 127 | return PLUGIN_HANDLED 128 | } 129 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/timeleft.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | THE_TIME = The time 3 | TIME_LEFT = Time Left 4 | NO_T_LIMIT = No Time Limit 5 | MINUTE = minute 6 | MINUTES = minutes 7 | SECOND = second 8 | SECONDS = seconds 9 | 10 | [de] 11 | THE_TIME = Es ist 12 | TIME_LEFT = Zeit uebrig 13 | NO_T_LIMIT = Kein Zeitlimit 14 | MINUTE = Minute 15 | MINUTES = Minuten 16 | SECOND = Sekunde 17 | SECONDS = Sekunden 18 | 19 | [sr] 20 | THE_TIME = Vreme 21 | TIME_LEFT = Preostalo Vreme 22 | NO_T_LIMIT = Nema Ogranicenja Vremena 23 | MINUTE = minut 24 | MINUTES = minute 25 | SECOND = sekund 26 | SECONDS = sekundi 27 | 28 | [tr] 29 | THE_TIME = Saat 30 | TIME_LEFT = Kalan zaman 31 | NO_T_LIMIT = Suresiz zaman 32 | MINUTE = dakika 33 | MINUTES = dakikalar 34 | SECOND = saniye 35 | SECONDS = saniyeler 36 | 37 | [fr] 38 | THE_TIME = Il est 39 | TIME_LEFT = Temps Restant 40 | NO_T_LIMIT = Aucun Temps Limite 41 | MINUTE = minute 42 | MINUTES = minutes 43 | SECOND = seconde 44 | SECONDS = secondes 45 | 46 | [sv] 47 | THE_TIME = Tid 48 | TIME_LEFT = Tid kvar 49 | NO_T_LIMIT = Ingen tidsbegr'a'nsning 50 | MINUTE = minut 51 | MINUTES = minuter 52 | SECOND = sekund 53 | SECONDS = sekunder 54 | 55 | [da] 56 | THE_TIME = Tiden 57 | TIME_LEFT = Tid tilbage 58 | NO_T_LIMIT = Ingen tidsbegraensning 59 | MINUTE = minut 60 | MINUTES = minutter 61 | SECOND = sekund 62 | SECONDs = sekunder 63 | 64 | [pl] 65 | THE_TIME = Czas 66 | TIME_LEFT = Pozostalo czasu 67 | NO_T_LIMIT = Bez limitu czasu 68 | MINUTE = minuta 69 | MINUTES = minut 70 | SECOND = sekunda 71 | SECONDS = sekund 72 | 73 | [nl] 74 | THE_TIME = Het is nu 75 | TIME_LEFT = Restende Tijd 76 | NO_T_LIMIT = Geen Tijdlimiet 77 | MINUTE = minuut 78 | MINUTES = minuten 79 | SECOND = seconde 80 | SECONDS = seconden 81 | 82 | [es] 83 | THE_TIME = Hora y fecha 84 | TIME_LEFT = Tiempo Restante 85 | NO_T_LIMIT = Tiempo Ilimitado 86 | MINUTE = minuto 87 | MINUTES = minutos 88 | SECOND = segundo 89 | SECONDS = segundos 90 | 91 | [bp] 92 | THE_TIME = Hora certa 93 | TIME_LEFT = Tempo Restante 94 | NO_T_LIMIT = Sem Tempo Limite 95 | MINUTE = minuto 96 | MINUTES = minutos 97 | SECOND = segundo 98 | SECONDS = segundos 99 | 100 | [cz] 101 | THE_TIME = Cas 102 | TIME_LEFT = Zbyva jeste 103 | NO_T_LIMIT = Neni casovy limit 104 | MINUTE = minuta 105 | MINUTES = minut 106 | SECOND = sekunda 107 | SECONDS = second 108 | 109 | [fi] 110 | THE_TIME = Aika 111 | TIME_LEFT = Aikaa jaljella 112 | NO_T_LIMIT = Ei aikarajaa 113 | MINUTE = minuutti 114 | MINUTES = minuuttia 115 | SECOND = sekunti 116 | SECONDS = sekuntia 117 | 118 | [ls] 119 | THE_TIME = T3h t!m3 120 | TIME_LEFT = T!m3 L3ft 121 | NO_T_LIMIT = N0 T!m3 L!m!t 122 | MINUTE = m!nut3 123 | MINUTES = m!nut3z 124 | SECOND = s3c0nd 125 | SECONDS = s3c0ndz 126 | 127 | [bg] 128 | THE_TIME = 4asa 129 | TIME_LEFT = Ostanalo Vreme 130 | NO_T_LIMIT = Nqma limit na vremeto 131 | MINUTE = minuta 132 | MINUTES = minuti 133 | SECOND = secunda 134 | SECONDS = secundi 135 | 136 | [ro] 137 | THE_TIME = Ora 138 | TIME_LEFT = Timp Ramas 139 | NO_T_LIMIT = Nici o Limita a Timpului 140 | MINUTE = minut ramas 141 | MINUTES = minute ramase 142 | SECOND = secunda 143 | SECONDS = secunde 144 | 145 | [hu] 146 | THE_TIME = Az ido 147 | TIME_LEFT = Hatralevo ido 148 | NO_T_LIMIT = NIncs idohatar 149 | MINUTE = perc 150 | MINUTES = perc 151 | SECOND = masodperc 152 | SECONDS = masodperc 153 | 154 | [lt] 155 | THE_TIME = Laikas 156 | TIME_LEFT = Liko laiko 157 | NO_T_LIMIT = Nera laiko limito 158 | MINUTE = minute 159 | MINUTES = minutes 160 | SECOND = sekunde 161 | SECONDS = sekundes 162 | 163 | [sk] 164 | THE_TIME = Cas 165 | TIME_LEFT = Ostava este 166 | NO_T_LIMIT = Neni casovy limit 167 | MINUTE = minuta 168 | MINUTES = minut 169 | SECOND = sekunda 170 | SECONDS = sekund 171 | 172 | [mk] 173 | THE_TIME = Vreme 174 | TIME_LEFT = Preostanato Vreme 175 | NO_T_LIMIT = Nema Ogranicuvanje Na Vremeto 176 | MINUTE = minuta 177 | MINUTES = minuti 178 | SECOND = sekunda 179 | SECONDS = sekundi 180 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/messages.inc: -------------------------------------------------------------------------------- 1 | /* Messaging functions (now part of Core) 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _coremsg_included 9 | #endinput 10 | #endif 11 | #define _coremsg_included 12 | 13 | #include 14 | 15 | /* These functinos are used to generate client messages. 16 | * You may generate menu, smoke, shockwaves, thunderlights, 17 | * intermission and many many others messages. 18 | * See HL SDK for more examples. */ 19 | native message_begin(dest, msg_type, const origin[3] = {0,0,0}, player = 0); 20 | native message_end(); 21 | native write_byte(x); 22 | native write_char(x); 23 | native write_short(x); 24 | native write_long(x); 25 | native write_entity(x); 26 | native write_angle(x); 27 | native write_coord(x); 28 | native write_string(const x[]); 29 | 30 | /* These are the same as above, except that the messages sent 31 | * are also sent to all other plugins and Metamod plugins. 32 | * This means that if you send one of these messages, other plugins will 33 | * be notified, which was previously impossible. 34 | * BE CAREFUL! Using these incorrectly, or not for their intended purpose, 35 | * could cause infinite recursion or something just as bad. 36 | * NOTE! These natives are experimental. 37 | */ 38 | native emessage_begin(dest, msg_type, const origin[3] = {0,0,0}, player = 0); 39 | native emessage_end(); 40 | native ewrite_byte(x); 41 | native ewrite_char(x); 42 | native ewrite_short(x); 43 | native ewrite_long(x); 44 | native ewrite_entity(x); 45 | native ewrite_angle(x); 46 | native ewrite_coord(x); 47 | native ewrite_string(const x[]); 48 | 49 | /* Sets/Gets what engine messages are blocked. */ 50 | native set_msg_block(iMessage, iMessageFlags); 51 | native get_msg_block(iMessage); 52 | 53 | /* Lets you directly hook a message in the engine! 54 | * You can overwrite the message before anything happens and either let the message continue 55 | * or fully block it. Here is how it works: 56 | * If you hook a message, the message is stored but not sent. You have the opportunity to 57 | * not only execute code, but to get/set the contents of the message, before you choose to 58 | * either block it or let it go on its way. The hooked function will be passed a msg_id, msg_dest, and entity index. 59 | * The return value can be passed to unregister_message() to stop the message from being hooked */ 60 | native register_message(iMsgId, const szFunction[]); 61 | 62 | /* Unregisters a message hook previously created with register_message 63 | * You must pass the proper message id, and return value from the message to unregister the message successfully. */ 64 | native unregister_message(iMsgId, registeredmsg); 65 | 66 | 67 | /* The get/set _msg commands will fail if used outside a hooked message scope. 68 | * They should never be used unless inside a registered message function. 69 | * There are eight different ways of sending a message, five are ints, two are floats, and one is string. 70 | * These are denoted by iArgType. argn is the number 71 | * of the argument. Exceeding the bounds of 1 to get_msg_args() is a bad idea. 72 | * As of AMX Mod X 1.5, the middle parameter of set_* no longer does anything. 73 | * You cannot change the message argument type (as this would crash the mod anyway) 74 | */ 75 | 76 | /* Gets number of arguments that were passed to this message */ 77 | native get_msg_args(); 78 | 79 | /* Gets the argument type of argument argn */ 80 | native get_msg_argtype(argn); 81 | 82 | /* Gets the value of argn. */ 83 | native get_msg_arg_int(argn); 84 | native Float:get_msg_arg_float(argn); 85 | native get_msg_arg_string(argn, szReturn[], iLength); 86 | 87 | /* sets the value of argn. */ 88 | native set_msg_arg_int(argn, argtype, iValue); 89 | native set_msg_arg_float(argn, argtype, Float:fValue); 90 | native set_msg_arg_string(argn, const szString[]); 91 | 92 | /* Gets the origin of a message */ 93 | native get_msg_origin(const Float:_Origin[3]); 94 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/time.inc: -------------------------------------------------------------------------------- 1 | /* Time specific functions 2 | * 3 | * by the AMX Mod X Development Team 4 | * 5 | * This file is provided as is (no warranties). 6 | */ 7 | 8 | #if defined _time_included 9 | #endinput 10 | #endif 11 | #define _time_included 12 | 13 | /* Time unit types for get_time_length() */ 14 | enum 15 | { 16 | timeunit_seconds = 0, 17 | timeunit_minutes, 18 | timeunit_hours, 19 | timeunit_days, 20 | timeunit_weeks, 21 | }; 22 | 23 | // seconds are in each time unit 24 | #define SECONDS_IN_MINUTE 60 25 | #define SECONDS_IN_HOUR 3600 26 | #define SECONDS_IN_DAY 86400 27 | #define SECONDS_IN_WEEK 604800 28 | 29 | /* Stock by Brad */ 30 | stock get_time_length(id, unitCnt, type, output[], outputLen) 31 | { 32 | // IMPORTANT: You must add register_dictionary("time.txt") in plugin_init() 33 | 34 | // id: The player whose language the length should be translated to (or 0 for server language). 35 | // unitCnt: The number of time units you want translated into verbose text. 36 | // type: The type of unit (i.e. seconds, minutes, hours, days, weeks) that you are passing in. 37 | // output: The variable you want the verbose text to be placed in. 38 | // outputLen: The length of the output variable. 39 | 40 | if (unitCnt > 0) 41 | { 42 | // determine the number of each time unit there are 43 | new weekCnt = 0, dayCnt = 0, hourCnt = 0, minuteCnt = 0, secondCnt = 0; 44 | 45 | switch (type) 46 | { 47 | case timeunit_seconds: secondCnt = unitCnt; 48 | case timeunit_minutes: secondCnt = unitCnt * SECONDS_IN_MINUTE; 49 | case timeunit_hours: secondCnt = unitCnt * SECONDS_IN_HOUR; 50 | case timeunit_days: secondCnt = unitCnt * SECONDS_IN_DAY; 51 | case timeunit_weeks: secondCnt = unitCnt * SECONDS_IN_WEEK; 52 | } 53 | 54 | weekCnt = secondCnt / SECONDS_IN_WEEK; 55 | secondCnt -= (weekCnt * SECONDS_IN_WEEK); 56 | 57 | dayCnt = secondCnt / SECONDS_IN_DAY; 58 | secondCnt -= (dayCnt * SECONDS_IN_DAY); 59 | 60 | hourCnt = secondCnt / SECONDS_IN_HOUR; 61 | secondCnt -= (hourCnt * SECONDS_IN_HOUR); 62 | 63 | minuteCnt = secondCnt / SECONDS_IN_MINUTE; 64 | secondCnt -= (minuteCnt * SECONDS_IN_MINUTE); 65 | 66 | // translate the unit counts into verbose text 67 | new maxElementIdx = -1; 68 | new timeElement[5][33]; 69 | 70 | if (weekCnt > 0) 71 | format(timeElement[++maxElementIdx], 32, "%i %L", weekCnt, id, (weekCnt == 1) ? "TIME_ELEMENT_WEEK" : "TIME_ELEMENT_WEEKS"); 72 | if (dayCnt > 0) 73 | format(timeElement[++maxElementIdx], 32, "%i %L", dayCnt, id, (dayCnt == 1) ? "TIME_ELEMENT_DAY" : "TIME_ELEMENT_DAYS"); 74 | if (hourCnt > 0) 75 | format(timeElement[++maxElementIdx], 32, "%i %L", hourCnt, id, (hourCnt == 1) ? "TIME_ELEMENT_HOUR" : "TIME_ELEMENT_HOURS"); 76 | if (minuteCnt > 0) 77 | format(timeElement[++maxElementIdx], 32, "%i %L", minuteCnt, id, (minuteCnt == 1) ? "TIME_ELEMENT_MINUTE" : "TIME_ELEMENT_MINUTES"); 78 | if (secondCnt > 0) 79 | format(timeElement[++maxElementIdx], 32, "%i %L", secondCnt, id, (secondCnt == 1) ? "TIME_ELEMENT_SECOND" : "TIME_ELEMENT_SECONDS"); 80 | 81 | switch(maxElementIdx) 82 | { 83 | case 0: format(output, outputLen, "%s", timeElement[0]); 84 | case 1: format(output, outputLen, "%s %L %s", timeElement[0], id, "TIME_ELEMENT_AND", timeElement[1]); 85 | case 2: format(output, outputLen, "%s, %s %L %s", timeElement[0], timeElement[1], id, "TIME_ELEMENT_AND", timeElement[2]); 86 | case 3: format(output, outputLen, "%s, %s, %s %L %s", timeElement[0], timeElement[1], timeElement[2], id, "TIME_ELEMENT_AND", timeElement[3]); 87 | case 4: format(output, outputLen, "%s, %s, %s, %s %L %s", timeElement[0], timeElement[1], timeElement[2], timeElement[3], id, "TIME_ELEMENT_AND", timeElement[4]); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/scrollmsg.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | MIN_FREQ = Minimal frequency for this message is %d seconds 3 | MSG_FREQ = Scrolling message displaying frequency: %d:%02d minutes 4 | MSG_DISABLED = Scrolling message disabled 5 | 6 | [de] 7 | MIN_FREQ = Minimale Frequenz fuer diese Anzeige sind %d Sekunden 8 | MSG_FREQ = Scrollnachricht Anzeigefrequenz: %d:%02d Minuten 9 | MSG_DISABLED = Scrollnachrichten abgeschaltet 10 | 11 | [sr] 12 | MIN_FREQ = Minimalno vreme prikazivanja za ovu poruku je %d sekundi 13 | MSG_FREQ = Vreme prikazivanja prolazece poruke: %d:%02d minut(a) 14 | MSG_DISABLED = Prolazeca poruka iskljucna 15 | 16 | [tr] 17 | MIN_FREQ = Bu mesajin en az frekansi %d saniyedir 18 | MSG_FREQ = Kaydirilan mesaj gosterme frekansi: %d:%02d dakika 19 | MSG_DISABLED = Kaydirilan mesaj kullanimda degil 20 | 21 | [fr] 22 | MIN_FREQ = La frequence minimale pour ce message est de %d secondes 23 | MSG_FREQ = La frequence d'affichage des messages deroulants est de: %d:%02d minutes 24 | MSG_DISABLED = Les messages deroulants sont desactives 25 | 26 | [sv] 27 | MIN_FREQ = Minimefrekvens f'o'r detta meddelande e %d sekunder 28 | MSG_FREQ = Frekvens f'o'r rullande meddelanden: %d:%02d minuter 29 | MSG_DISABLED = Rullande meddelande avst'a'ngt 30 | 31 | [da] 32 | MIN_FREQ = Minimum frekvens for denne besked er %d sekunder 33 | MSG_FREQ = Rullende besked visnings frekvens: %d:%02d minutter 34 | MSG_DISABLED = Rullende besked slaaet fra 35 | 36 | [pl] 37 | MIN_FREQ = Minimalna czestotliwosc dla tej wiadomosci to %d sekund 38 | MSG_FREQ = Czestotliwosc wyswietlania wiadomosci: %d:%02d minut 39 | MSG_DISABLED = Wiadomosci przesuwane wylaczone 40 | 41 | [nl] 42 | MIN_FREQ = Minimale frequentie voor dit bericht is %d seconden 43 | MSG_FREQ = Scrollend bericht frequentie: %d:%02d minuten 44 | MSG_DISABLED = Scrollend bericht uitgeschakeld 45 | 46 | [es] 47 | MIN_FREQ = La frecuencia minima para este mensaje es de %d segundos 48 | MSG_FREQ = Frecuencia de aparicion del mensaje rotatorio: %d:%02d minutos 49 | MSG_DISABLED = Mensaje rotatorio desactivado 50 | 51 | [bp] 52 | MIN_FREQ = Frequencia minima para esta mensagem e de %d segundos 53 | MSG_FREQ = Mensagem Rolante sera exibida na frequencia de: %d:%02d minutos 54 | MSG_DISABLED = Mensagem Rolante desabilitada 55 | 56 | [cz] 57 | MIN_FREQ = Minimalalni frekvence teto zpravy je %d sekund 58 | MSG_FREQ = Frekvence zobrazeni skrolujici zpravy: %d:%02d minut 59 | MSG_DISABLED = Skrolovaci zpravy vyple 60 | 61 | [fi] 62 | MIN_FREQ = Minimitaajuus talle viestille on %d sekuntia 63 | MSG_FREQ = Vierivan tekstin taajuus on: %d:%02d minuuttia 64 | MSG_DISABLED = Vieriva teksti poissa kaytosta 65 | 66 | [ls] 67 | MIN_FREQ = M!n!m4| fr3qu3ncy f0r th!s m3ss4ge !s %d s3c0ndz 68 | MSG_FREQ = $cr0||!ng m3ss4g3 d!spl4y!ng fr3qu3ncy: %d:%02d m!nut3z 69 | MSG_DISABLED = |N0T 3NUFF M4N4!| - $cr0||!ng m3ss4g3 d!s4bl3d 70 | 71 | [bg] 72 | MIN_FREQ = Minimalnoto povtarq6to vreme za tova saob6tenie e %d secundi 73 | MSG_FREQ = Scrolling saob6tenieto se pokazva vseki: %d:%02d minuti 74 | MSG_DISABLED = Scrolling saob6tenieto e isklu4eno 75 | 76 | [ro] 77 | MIN_FREQ = Frecventa minima pentru acest mesaj este %d secunde 78 | MSG_FREQ = Frecventa afisarii messajului Rulant: %d:%02d minute 79 | MSG_DISABLED = Mesajul Rulant dezactivat 80 | 81 | [hu] 82 | MIN_FREQ = A minimum ido erre az uzenetre %d perc 83 | MSG_FREQ = Mozgo uzenet: %d:%02d percenkent 84 | MSG_DISABLED = Scrolling uzenet letiltva 85 | 86 | [lt] 87 | MIN_FREQ = Minimalus daznumas siai zinutei yra %d sekundes 88 | MSG_FREQ = Slenkancios zinutes daznumas: %d:%02d minutes 89 | MSG_DISABLED = Slenkancioji zinute isjungta 90 | 91 | [sk] 92 | MIN_FREQ = Minimalna frekvencia tejto spravy je %d sekund 93 | MSG_FREQ = Frekvencia zobrazenia skrolovacej spravy: %d:%02d minut 94 | MSG_DISABLED = Skrolovacie zpravy vypnute 95 | 96 | [mk] 97 | MIN_FREQ = Minimalnoto vreme na prikazuvanje na ovaa poraka e %d sekundi 98 | MSG_FREQ = Vreme za prikazuvanje na leteckite poraki: %d:%02d minuti 99 | MSG_DISABLED = Leteckata poraka e isklucena 100 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/adminhelp.sma: -------------------------------------------------------------------------------- 1 | /* AMX Mod X 2 | * Admin Help Plugin 3 | * 4 | * by the AMX Mod X Development Team 5 | * originally developed by tcquest78 6 | * 7 | * This file is part of AMX Mod X. 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify it 11 | * under the terms of the GNU General Public License as published by the 12 | * Free Software Foundation; either version 2 of the License, or (at 13 | * your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, but 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program; if not, write to the Free Software Foundation, 22 | * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 | * 24 | * In addition, as a special exception, the author gives permission to 25 | * link the code of this program with the Half-Life Game Engine ("HL 26 | * Engine") and Modified Game Libraries ("MODs") developed by Valve, 27 | * L.L.C ("Valve"). You must obey the GNU General Public License in all 28 | * respects for all of the code used other than the HL Engine and MODs 29 | * from Valve. If you modify this file, you may extend this exception 30 | * to your version of the file, but you are not obligated to do so. If 31 | * you do not wish to do so, delete this exception statement from your 32 | * version. 33 | */ 34 | 35 | #include 36 | 37 | #define DISPLAY_MSG // Comment to disable message on join 38 | #define HELPAMOUNT 10 // Number of commands per page 39 | 40 | public plugin_init() 41 | { 42 | register_plugin("Admin Help", AMXX_VERSION_STR, "AMXX Dev Team") 43 | register_dictionary("adminhelp.txt") 44 | register_concmd("amx_help", "cmdHelp", 0, " [nr of cmds (only for server)] - displays this help") 45 | } 46 | 47 | #if defined DISPLAY_MSG 48 | public client_putinserver(id) 49 | { 50 | if (is_user_bot(id)) 51 | return 52 | 53 | set_task(15.0, "dispInfo", id) 54 | } 55 | 56 | public client_disconnect(id) 57 | { 58 | remove_task(id) 59 | } 60 | #endif 61 | 62 | public cmdHelp(id, level, cid) 63 | { 64 | new arg1[8], flags = get_user_flags(id) 65 | new start = read_argv(1, arg1, 7) ? str_to_num(arg1) : 1 66 | new lHelpAmount = HELPAMOUNT 67 | 68 | // HACK: ADMIN_ADMIN is never set as a user's actual flags, so those types of commands never show 69 | if (flags > 0 && !(flags & ADMIN_USER)) 70 | { 71 | flags |= ADMIN_ADMIN; 72 | } 73 | 74 | if (id == 0 && read_argc() == 3) 75 | lHelpAmount = read_argv(2, arg1, 7) ? str_to_num(arg1) : HELPAMOUNT 76 | 77 | if (--start < 0) 78 | start = 0 79 | 80 | new clcmdsnum = get_concmdsnum(flags, id) 81 | 82 | if (start >= clcmdsnum) 83 | start = clcmdsnum - 1 84 | 85 | console_print(id, "^n----- %L -----", id, "HELP_COMS") 86 | 87 | new info[128], cmd[32], eflags 88 | new end = start + lHelpAmount // HELPAMOUNT 89 | 90 | if (end > clcmdsnum) 91 | end = clcmdsnum 92 | 93 | for (new i = start; i < end; i++) 94 | { 95 | get_concmd(i, cmd, 31, eflags, info, 127, flags, id) 96 | console_print(id, "%3d: %s %s", i + 1, cmd, info) 97 | } 98 | 99 | console_print(id, "----- %L -----", id, "HELP_ENTRIES", start + 1, end, clcmdsnum) 100 | 101 | if (end < clcmdsnum) 102 | console_print(id, "----- %L -----", id, "HELP_USE_MORE", end + 1) 103 | else 104 | console_print(id, "----- %L -----", id, "HELP_USE_BEGIN") 105 | 106 | return PLUGIN_HANDLED 107 | } 108 | 109 | #if defined DISPLAY_MSG 110 | public dispInfo(id) 111 | { 112 | client_print(id, print_chat, "%L", id, "TYPE_HELP") 113 | 114 | new nextmap[32] 115 | get_cvar_string("amx_nextmap", nextmap, 31) 116 | 117 | if (get_cvar_float("mp_timelimit")) 118 | { 119 | new timeleft = get_timeleft() 120 | 121 | if (timeleft > 0) 122 | { 123 | client_print(id, print_chat, "%L", id, "TIME_INFO_1", timeleft / 60, timeleft % 60, nextmap) 124 | } else { 125 | client_print(id, print_chat, "%L", id, "TIME_INFO_2", nextmap) 126 | } 127 | } 128 | } 129 | #endif 130 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/data/lang/telemenu.txt: -------------------------------------------------------------------------------- 1 | [en] 2 | ADMIN_TELEPORT_1 = ADMIN: teleport %s 3 | ADMIN_TELEPORT_2 = ADMIN %s: teleport %s 4 | TELE_MENU = Teleport Menu 5 | CUR_LOC = Current Location 6 | SAVE_LOC = Save Location 7 | 8 | [de] 9 | ADMIN_TELEPORT_1 = ADMIN: teleportiert %s 10 | ADMIN_TELEPORT_2 = ADMIN %s: teleportiert %s 11 | TELE_MENU = Menu > Teleport 12 | CUR_LOC = Momentane Position 13 | SAVE_LOC = Position speichern 14 | 15 | [sr] 16 | ADMIN_TELEPORT_1 = ADMIN: teleportuj %s 17 | ADMIN_TELEPORT_2 = ADMIN %s: teleportuj %s 18 | TELE_MENU = Teleport Meni 19 | CUR_LOC = Sadasnja Lokacija 20 | SAVE_LOC = Sacuvaj Lokaciju 21 | 22 | [tr] 23 | ADMIN_TELEPORT_1 = ADMIN: teleportladi %s 24 | ADMIN_TELEPORT_2 = ADMIN %s: teleportladi %s 25 | TELE_MENU = Teleport Menusu 26 | CUR_LOC = Oldugu su anki yer 27 | SAVE_LOC = Oldugu yeri saklayin 28 | 29 | [fr] 30 | ADMIN_TELEPORT_1 = ADMIN: teleporte %s 31 | ADMIN_TELEPORT_2 = ADMIN %s: teleporte %s 32 | TELE_MENU = Menu Teleportation 33 | CUR_LOC = Emplacement Actuel 34 | SAVE_LOC = Sauver l'emplacement 35 | 36 | [sv] 37 | ADMIN_TELEPORT_1 = ADMIN: teleportera %s 38 | ADMIN_TELEPORT_2 = ADMIN %s: teleportera %s 39 | TELE_MENU = Teleportmeny 40 | CUR_LOC = Nuvarande position 41 | SAVE_LOC = Spara position 42 | 43 | [da] 44 | ADMIN_TELEPORT_1 = ADMIN: teleport %s 45 | ADMIN_TELEPORT_2 = ADMIN %s: teleport %s 46 | TELE_MENU = Teleport Menu 47 | CUR_LOC = Nuvaerende lokation 48 | SAVE_LOC = Gem Lokation 49 | 50 | [pl] 51 | ADMIN_TELEPORT_1 = ADMIN: teleportowal %s 52 | ADMIN_TELEPORT_2 = ADMIN %s: teleportowal %s 53 | TELE_MENU = Menu teleportu 54 | CUR_LOC = Aktualna pozycja 55 | SAVE_LOC = Zapisz pozycje 56 | 57 | [nl] 58 | ADMIN_TELEPORT_1 = ADMIN: teleporteer %s 59 | ADMIN_TELEPORT_2 = ADMIN %s: teleporteer %s 60 | TELE_MENU = Teleportatiemenu 61 | CUR_LOC = Huidige Locatie 62 | SAVE_LOC = Locatie Bewaren 63 | 64 | [es] 65 | ADMIN_TELEPORT_1 = ADMIN: %s teletransportado 66 | ADMIN_TELEPORT_2 = ADMIN %s: %s teletransportado 67 | TELE_MENU = Menu de Teletransporte 68 | CUR_LOC = Posicion Actual 69 | SAVE_LOC = Guardar Posicion 70 | 71 | [bp] 72 | ADMIN_TELEPORT_1 = ADMIN: teletransportou %s 73 | ADMIN_TELEPORT_2 = ADMIN %s: teletransportou %s 74 | TELE_MENU = Menu de Teletransporte 75 | CUR_LOC = Local Atual 76 | SAVE_LOC = Salvar Local 77 | 78 | [cz] 79 | ADMIN_TELEPORT_1 = ADMIN: teleportoval %s 80 | ADMIN_TELEPORT_2 = ADMIN %s: teleportovali %s 81 | TELE_MENU = Menu Teleportu 82 | CUR_LOC = Soucasna misto 83 | SAVE_LOC = Ulozit misto 84 | 85 | [fi] 86 | ADMIN_TELEPORT_1 = ADMIN: teleporttasi pelaajan %s 87 | ADMIN_TELEPORT_2 = ADMIN %s: teleporttasi pelaajan %s 88 | TELE_MENU = Teleportvalikko 89 | CUR_LOC = Nykyinen sijainti 90 | SAVE_LOC = Tallenna sijainti 91 | 92 | [ls] 93 | ADMIN_TELEPORT_1 = l33t s3rv3r 0P: h4x3d %s t0 n3w ISP 94 | ADMIN_TELEPORT_2 = l33t s3rv3r 0P %s: h4x3d %s t0 n3w ISP 95 | TELE_MENU = l33t T3l3p0rt M3nu 96 | CUR_LOC = Cu|2|2en7 ISP 97 | SAVE_LOC = S4v3 ISP 98 | 99 | [bg] 100 | ADMIN_TELEPORT_1 = ADMININISTRATOR: teleportira %s 101 | ADMIN_TELEPORT_2 = ADMINISTRATOR %s: teleportira %s 102 | TELE_MENU = Teleport Menu 103 | CUR_LOC = Mestopolojenie 104 | SAVE_LOC = Zapazi mestopolojenieto 105 | 106 | [ro] 107 | ADMIN_TELEPORT_1 = ADMIN: teleportare %s 108 | ADMIN_TELEPORT_2 = ADMIN %s: teleportare %s 109 | TELE_MENU = Menu Teleportare 110 | CUR_LOC = Locatia Actuala 111 | SAVE_LOC = Salveaza Locatie 112 | 113 | [hu] 114 | ADMIN_TELEPORT_1 = ADMIN: %s teleport 115 | ADMIN_TELEPORT_2 = ADMIN %s: %s teleport 116 | TELE_MENU = Teleport Menu 117 | CUR_LOC = Mostani hely 118 | SAVE_LOC = Hely mentese 119 | 120 | [lt] 121 | ADMIN_TELEPORT_1 = ADMINAS: teleportavo %s 122 | ADMIN_TELEPORT_2 = ADMINAS %s: teleportavo %s 123 | TELE_MENU = Teleporto Meniu 124 | CUR_LOC = Dabartine vieta 125 | SAVE_LOC = Issaugoti vietove 126 | 127 | [sk] 128 | ADMIN_TELEPORT_1 = ADMIN: teleportoval %s 129 | ADMIN_TELEPORT_2 = ADMIN %s: teleportovali %s 130 | TELE_MENU = MENU: Teleport 131 | CUR_LOC = Sucasne miesto 132 | SAVE_LOC = Ulozit miesto 133 | 134 | [mk] 135 | ADMIN_TELEPORT_1 = ADMIN: go teleportira %s 136 | ADMIN_TELEPORT_2 = ADMIN %s: go teleportira %s 137 | TELE_MENU = Meni za teleportiranje 138 | CUR_LOC = Vidi ja zacuvanata lokacija 139 | SAVE_LOC = Zacuvaj ja segasnata lokacija 140 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | HLDM Docker - Half-Life Deathmatch Server Docker Image 7 | 8 | 9 | 10 | 11 |
12 |
13 |

HLDM Docker

14 |

Dockerized Half-Life Deathmatch Server with AMX Mod X

15 | 16 | 27 |
28 | 29 |
30 |

Quick Start

31 |

Get your Half-Life Deathmatch server running in seconds with Docker:

32 | 33 |
34 | docker run -it --rm -d -p27015:27015 -p27015:27015/udp spezifanta/hldm 35 |
36 | 37 |

Or use docker-compose for advanced configuration:

38 | 39 |
# docker-compose.yaml 40 | services: 41 | hldm: 42 | image: spezifanta/hldm 43 | ports: 44 | - 27015:27015 45 | - 27015:27015/udp 46 | - 26900:26900/udp 47 | volumes: 48 | - ./gamedir:/tmp/gamedir 49 | command: +maxplayers 12 +map crossfire +rcon_password "supersecret" +log on +logaddress 0.0.0.0 27500 +sys_ticrate 1000 -pingboost 2 50 |
51 |
52 | 53 |
54 |
55 |
🐳
56 |

Docker Ready

57 |

Containerized Half-Life Deathmatch server with all dependencies included. No complex setup required.

58 |
59 | 60 |
61 |
62 |

AMX Mod X

63 |

Pre-configured with AMX Mod X for enhanced server administration and custom plugins.

64 |
65 | 66 |
67 |
🔧
68 |

Easy Configuration

69 |

Simple environment variables and volume mounts for customizing your server settings.

70 |
71 | 72 |
73 | 74 |
75 |

Documentation

76 |

Everything you need to get started:

77 | 78 | 81 |
82 | 83 |
84 |

Features

85 |
    86 |
  • MetaMod plugin support
  • 87 |
  • AMX Mod X administration system
  • 88 |
  • Botman's Stripper 2
  • 89 |
  • Configurable game modes and maps
  • 90 |
91 |
92 | 93 |
94 |

© 2025 HLDM Docker Project. Licensed under MIT.

95 |

Built by spezi-clan with ❤️ for the Half-Life community

96 |
97 |
98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/imessage.sma: -------------------------------------------------------------------------------- 1 | /* AMX Mod X 2 | * Info. Messages Plugin 3 | * 4 | * by the AMX Mod X Development Team 5 | * originally developed by OLO 6 | * 7 | * This file is part of AMX Mod X. 8 | * 9 | * 10 | * This program is free software; you can redistribute it and/or modify it 11 | * under the terms of the GNU General Public License as published by the 12 | * Free Software Foundation; either version 2 of the License, or (at 13 | * your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, but 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU General Public License 21 | * along with this program; if not, write to the Free Software Foundation, 22 | * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 | * 24 | * In addition, as a special exception, the author gives permission to 25 | * link the code of this program with the Half-Life Game Engine ("HL 26 | * Engine") and Modified Game Libraries ("MODs") developed by Valve, 27 | * L.L.C ("Valve"). You must obey the GNU General Public License in all 28 | * respects for all of the code used other than the HL Engine and MODs 29 | * from Valve. If you modify this file, you may extend this exception 30 | * to your version of the file, but you are not obligated to do so. If 31 | * you do not wish to do so, delete this exception statement from your 32 | * version. 33 | */ 34 | 35 | #include 36 | #include 37 | 38 | #define X_POS -1.0 39 | #define Y_POS 0.20 40 | #define HOLD_TIME 12.0 41 | 42 | new Array:g_Values 43 | new Array:g_Messages 44 | new g_MessagesNum 45 | new g_Current 46 | 47 | #define charsof(%1) (sizeof(%1)-1) 48 | 49 | new amx_freq_imessage; 50 | 51 | public plugin_init() 52 | { 53 | g_Messages=ArrayCreate(384); 54 | g_Values=ArrayCreate(3); 55 | register_plugin("Info. Messages", AMXX_VERSION_STR, "AMXX Dev Team") 56 | register_dictionary("imessage.txt") 57 | register_dictionary("common.txt") 58 | register_srvcmd("amx_imessage", "setMessage") 59 | amx_freq_imessage=register_cvar("amx_freq_imessage", "10") 60 | 61 | new lastinfo[8] 62 | get_localinfo("lastinfomsg", lastinfo, 7) 63 | g_Current = str_to_num(lastinfo) 64 | set_localinfo("lastinfomsg", "") 65 | } 66 | 67 | public infoMessage() 68 | { 69 | if (g_Current >= g_MessagesNum) 70 | g_Current = 0 71 | 72 | // No messages, just get out of here 73 | if (g_MessagesNum==0) 74 | { 75 | return; 76 | } 77 | 78 | new values[3]; 79 | new Message[384]; 80 | 81 | ArrayGetString(g_Messages, g_Current, Message, charsof(Message)); 82 | ArrayGetArray(g_Values, g_Current, values); 83 | 84 | new hostname[64]; 85 | 86 | get_cvar_string("hostname", hostname, 63); 87 | replace(Message, 380, "%hostname%", hostname); 88 | 89 | set_hudmessage(values[0], values[1], values[2], X_POS, Y_POS, 0, 0.5, HOLD_TIME, 2.0, 2.0, -1); 90 | 91 | show_hudmessage(0, "%s", Message); 92 | 93 | client_print(0, print_console, "%s", Message); 94 | ++g_Current; 95 | 96 | new Float:freq_im = get_pcvar_float(amx_freq_imessage); 97 | 98 | if (freq_im > 0.0) 99 | set_task(freq_im, "infoMessage", 12345); 100 | } 101 | 102 | public setMessage() 103 | { 104 | 105 | new Message[384]; 106 | 107 | remove_task(12345) 108 | read_argv(1, Message, 380) 109 | 110 | while (replace(Message, 380, "\n", "^n")) {} 111 | 112 | new mycol[12] 113 | new vals[3]; 114 | 115 | read_argv(2, mycol, 11) // RRRGGGBBB 116 | vals[2] = str_to_num(mycol[6]) 117 | 118 | mycol[6] = 0 119 | vals[1] = str_to_num(mycol[3]) 120 | 121 | mycol[3] = 0 122 | vals[0] = str_to_num(mycol[0]) 123 | 124 | g_MessagesNum++ 125 | 126 | new Float:freq_im = get_pcvar_float(amx_freq_imessage) 127 | 128 | ArrayPushString(g_Messages, Message); 129 | ArrayPushArray(g_Values, vals); 130 | 131 | if (freq_im > 0.0) 132 | set_task(freq_im, "infoMessage", 12345) 133 | 134 | return PLUGIN_HANDLED 135 | } 136 | 137 | public plugin_end() 138 | { 139 | new lastinfo[8] 140 | 141 | num_to_str(g_Current, lastinfo, 7) 142 | set_localinfo("lastinfomsg", lastinfo) 143 | } 144 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![Half-Life](/media/banner.jpg) 3 | 4 | # Half-Life Deathmatch Server as Docker image 5 | 6 | Probably the fastest and easiest way to set up an old-school Half-Life Deathmatch Dedicated Server (HLDS). 7 | You don't need to know anything about Linux or HLDS to start a server. You just need Docker and this image. 8 | 9 | ## Quick Start 10 | 11 | Start a new server by running: 12 | ``` 13 | docker run -it --rm -d -p27015:27015 -p27015:27015/udp spezifanta/hldm 14 | ``` 15 | 16 | Change the player slot size, map or `rcon_password` by running: 17 | ``` 18 | docker run -it --rm -d --name hldm -p27015:27015 -p27015:27015/udp spezifanta/hldm +map crossfire +maxplayers 12 +rcon_password SECRET_PASSWORD 19 | ``` 20 | 21 | > **Note:** Any [server config command](http://sr-team.clan.su/K_stat/hlcommandsfull.html) can be passed by using `+`. But it has to follow after the image name `spezifanta/hldm`. 22 | 23 | 24 | The following default maps are available: 25 | - boot_camp 26 | - bounce 27 | - crossfire 28 | - datacore 29 | - frenzy 30 | - gasworks 31 | - lambda_bunker 32 | - rapidcore 33 | - snark_pit 34 | - stalkyard 35 | - subtransit 36 | - undertow 37 | 38 | 39 | ## Advanced 40 | 41 | In order to use a custom content like maps or server config file, create a directory named `gamedir` and place your files there. 42 | For an example of a custom `server.cfg` run: 43 | 44 | ``` 45 | mkdir gamedir && echo 'echo "Executing custom server.cfg"' > gamedir/server.cfg 46 | ``` 47 | 48 | Add your settings to the `server.cfg` and mount the directory as volume by running: 49 | 50 | ``` 51 | docker run -it --rm -d -p27015:27015 -p27015:27015/udp -v gamedir:/tmp/gamedir spezifanta/hldm 52 | ``` 53 | 54 | You should see `Executing custom server.cfg` in the server log when starting the server. 55 | 56 | 57 | ## About this Docker image 58 | 59 | This image uses the latest version of [Half-life](https://store.steampowered.com/app/70/HalfLife), which can be installed via [SteamCMD](https://developer.valvesoftware.com/wiki/SteamCMD) 60 | and patched versions of: 61 | 62 | - [Metamod v1.20](http://metamod.org/) 63 | - [Stripper2 v1.0.0](http://hpb-bot.bots-united.com/stripper2.html) 64 | 65 | Patches: https://github.com/spezifanta/metamod-p 66 | 67 | 68 | ## But why? 69 | 70 | ### Speed 71 | 72 | Setting up a new HLDS from scratch can be a bit tedious because since a few years now SteamCMD will fail to download all the files on the first try. 73 | The general workaround is just by retrying. And retrying, and retrying, and... :gun:. A more promising workaround is replacing certain files and forcing a redownload. But even this can fail sometimes. 74 | Anyway, just searching for the download link of SteamCMD takes longer than just copying & pasting the Docker `run` command from above (yes, this assumes you have Docker installed. But why haven't you already?). 75 | 76 | Also, there are a couple of server commands, which need tweaking, and plugins, that need to be installed and configured. 77 | 78 | 79 | So this image saves a lot of time. 80 | 81 | 82 | ### Sustainability 83 | 84 | Half-Life is more than 20 years old now. Many major community pages and tutorials are offline. I am not saying, that Half-Life will die, but the sites with the step by step instructions, workarounds and plugins might not be around for ever. 85 | Furthermore not everybody, who likes playing Half-Life and wants to set up a server, is a Linux geek. You don't need to know anything about Linux or HLDS to start a server by using this image. 86 | That's why I build this image. 87 | 88 | I want HLDM to live forever! 89 | 90 | 91 | ### Other reasons 92 | 93 | - In most cases, you have to wrap `hlds_run` anyway by using something like `screen`, `tmux`, `wmux` or `systemd`, because the server will exit as soon as you close your terminal. So why not add Docker to that list. 94 | - Decoupling. To set up a HLDS you need to install 32bit libraries. On a 64bit system, this is somewhat less than perfect. On a company PC, you might need extra permissions to do so. With Docker on the other hand... I hope you get my point ;). 95 | - Scalability. 96 | 97 | 98 | ## License 99 | 100 | MIT 101 | 102 | ## Test Server 103 | 104 | Connect to `steamcalculator.com:27015` to give it a try. 105 | 106 | 107 | HLDM Docker 108 | 109 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/dodfun.inc: -------------------------------------------------------------------------------- 1 | /* DoDFun functions 2 | * 3 | * (c) 2004-2005, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _dodfun_included 8 | #endinput 9 | #endif 10 | #define _dodfun_included 11 | 12 | #include 13 | 14 | #if AMXX_VERSION_NUM >= 175 15 | #pragma reqlib dodfun 16 | #if !defined AMXMODX_NOAUTOLOAD 17 | #pragma loadlib dodfun 18 | #endif 19 | #else 20 | #pragma library dodfun 21 | #endif 22 | 23 | /* Function is called after grenade throw */ 24 | forward grenade_throw(index,greindex,wId); 25 | 26 | /* Function is called after a rocket is shot */ 27 | forward rocket_shoot(index,rocketindex,wId); 28 | 29 | /* Example: for full stamina use dod_player_stamina(1,STAMINA_SET,100,100) */ 30 | /* value is from 0 - 100 */ 31 | native dod_set_stamina(index,set=STAMINA_SET,minvalue=0,maxvalue=100); 32 | 33 | /* Sets fuse for grenades. Valid number is from 0.1-20.0 */ 34 | /* types : new or preprimed */ 35 | native dod_set_fuse(index,set=FUSE_SET,Float:newFuse=5.0, Type=FT_NEW); 36 | 37 | /* Sets player class */ 38 | native dod_set_user_class(index,classId); 39 | 40 | /* Sets player team and random class. Don't work for spectators. */ 41 | native dod_set_user_team(index,teamId,refresh=1); 42 | 43 | /* Returns next player class. Usefull is player is using random class */ 44 | native dod_get_next_class(index); 45 | 46 | /* Returns 1 if player choose random class */ 47 | native dod_is_randomclass(index); 48 | 49 | /* Returns player deaths */ 50 | native dod_get_pl_deaths(index); 51 | 52 | /* Sets player deaths. 53 | * Note if you opt to refresh the scoreboard, it 54 | * will make the player appear as "DEAD" in the scoreboard. 55 | */ 56 | native dod_set_pl_deaths(index,value,refresh=1); 57 | 58 | /* Returns player deaths. */ 59 | native dod_get_user_kills(index); 60 | 61 | /* Sets player kills. */ 62 | native dod_set_user_kills(index,value,refresh=1); 63 | 64 | /* Sets player score. */ 65 | native dod_set_user_score(index,value,refresh=1); 66 | 67 | /* Sets new team name for this player */ 68 | native dod_set_pl_teamname(index,const szName[]); 69 | 70 | /* Gets player team name */ 71 | native dod_get_pl_teamname(index,szName[],len); 72 | 73 | /* Returns 1 is player weapon is deployed (bar,mg..) */ 74 | native dod_is_deployed(index); 75 | 76 | /*Sets the ammo of the specified weapon entity id */ 77 | native dod_set_user_ammo(index,wid,value); 78 | 79 | /*Gets the ammo of the specified weapon entity id */ 80 | native dod_get_user_ammo(index,wid); 81 | 82 | /* called after first InitObj */ 83 | forward controlpoints_init(); 84 | 85 | enum CP_VALUE { 86 | CP_edict = 1, // read only 87 | CP_area, // read only 88 | CP_index, // read only 89 | CP_owner, 90 | CP_default_owner, 91 | CP_visible, // reinit after change 92 | CP_icon_neutral, // reinit after change 93 | CP_icon_allies, // reinit after change 94 | CP_icon_axis, // reinit after change 95 | CP_origin_x, // reinit after change 96 | CP_origin_y, // reinit after change 97 | 98 | CP_can_touch, 99 | CP_pointvalue, 100 | 101 | CP_points_for_cap, 102 | CP_team_points, 103 | 104 | CP_model_body_neutral, 105 | CP_model_body_allies, 106 | CP_model_body_axis, 107 | 108 | // strings 109 | CP_name, 110 | CP_reset_capsound, 111 | CP_allies_capsound, 112 | CP_axis_capsound, 113 | CP_targetname, 114 | 115 | CP_model_neutral, 116 | CP_model_allies, 117 | CP_model_axis, 118 | }; 119 | 120 | /* returns number of objectives */ 121 | native objectives_get_num(); 122 | 123 | /* use this function to update client(s) hud. You need to do this sometimes. Check CP_VALUE comments. 124 | if player is 0 , all clients will get this message */ 125 | native objectives_reinit( player=0 ); 126 | 127 | /* use this function to get info about specified control point */ 128 | native objective_get_data( index, CP_VALUE:key, szValue[]="", len=0 ); 129 | 130 | /* use this function to change control point's data */ 131 | native objective_set_data( index, CP_VALUE:key , iValue=-1, const szValue[]="" ); 132 | 133 | enum CA_VALUE { 134 | CA_edict = 1, 135 | CA_allies_numcap, 136 | CA_axis_numcap, 137 | CA_timetocap, 138 | CA_can_cap, 139 | 140 | // strings 141 | CA_target, 142 | CA_sprite, 143 | }; 144 | 145 | /* use this function to get info about specified control point's area */ 146 | native area_get_data( index, CA_VALUE:key, szValue[]="", len=0 ); 147 | 148 | /* use this function to change control point's area data */ 149 | native area_set_data( index, CA_VALUE:key , iValue=-1, const szValue[]="" ); 150 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/dbi.inc: -------------------------------------------------------------------------------- 1 | /* SQL Database API 2 | * By the AMX Mod X Development Team 3 | * Notes - Read the comments! Make sure your plugins use 4 | * nice ANSI SQL and don't use database column names like "key" 5 | * otherwise this API will be a nightmare 6 | * Never do error checking with the not operator! This is bad: 7 | * if (!dbi_query()) 8 | * You should do: 9 | * ret = dbi_query() 10 | * if (ret < 0) 11 | * This is because DBI functions can and will return negative numbers 12 | * Negative numbers evaluate to "true" in AMX. 13 | */ 14 | 15 | #if defined _dbi_included 16 | #endinput 17 | #endif 18 | #define _dbi_included 19 | 20 | // You can't include SQLX first! 21 | // there's really no reason to anyway. 22 | #assert !defined _sqlx_included 23 | 24 | #if AMXX_VERSION_NUM >= 175 25 | #pragma reqclass dbi 26 | #else 27 | #pragma library dbi 28 | #endif 29 | 30 | enum Sql 31 | { 32 | SQL_FAILED=0, 33 | SQL_OK 34 | }; 35 | 36 | enum Result 37 | { 38 | RESULT_FAILED=-1, 39 | RESULT_NONE, 40 | RESULT_OK 41 | }; 42 | 43 | /* This will return a number equal to or below 0 on failure. 44 | * If it does fail, the error will be mirrored in dbi_error() 45 | * The return value will otherwise be a resource handle, not an 46 | * OK code or cell pointer. 47 | */ 48 | native Sql:dbi_connect(_host[], _user[], _pass[], _dbname[], _error[]="", _maxlength=0); 49 | 50 | /* This will do a simple query execution on the SQL server. 51 | * If it fails, it will return a number BELOW ZERO (0) 52 | * If zero, it succeeded with NO RETURN RESULT. 53 | * If greater than zero, make sure to call dbi_free_result() on it! 54 | * The return is a handle to the result set 55 | */ 56 | native Result:dbi_query(Sql:_sql, _query[], any:...); 57 | 58 | /* Has the same usage as dbi_query, but this native returns by 59 | * reference the number of rows affected in the query. If the 60 | * query fails rows will be equal to -1. 61 | */ 62 | native Result:dbi_query2(Sql:_sql, &rows, _query[], any:...); 63 | 64 | /* Returns 0 on failure or End of Results. 65 | * Advances result pointer by one row. 66 | */ 67 | native dbi_nextrow(Result:_result); 68 | 69 | /* Gets a field by number. Returns 0 on failure. 70 | * Although internally fields always start from 0, 71 | * This function takes fieldnum starting from 1. 72 | * No extra params: returns int 73 | * One extra param: returns Float: byref 74 | * Two extra param: Stores string with length 75 | */ 76 | native dbi_field(Result:_result, _fieldnum, {Float,_}:... ); 77 | 78 | /* Gets a field by name. Returns 0 on failure. 79 | * One extra param: returns Float: byref 80 | * Two extra param: Stores string with length 81 | */ 82 | native dbi_result(Result:_result, _field[], {Float,_}:... ); 83 | 84 | /* Returns the number of rows returned from a query 85 | */ 86 | native dbi_num_rows(Result:_result); 87 | 88 | /* Frees memory used by a result handle. Do this or get memory leaks. 89 | */ 90 | native dbi_free_result(&Result:result); 91 | 92 | /* Closes a database handle. Internally, it will also 93 | * mark the handle as free, so this particular handle may 94 | * be re-used in the future to save time. 95 | */ 96 | native dbi_close(&Sql:_sql); 97 | 98 | /* Returns an error message set. For PGSQL and MySQL, 99 | * this is a direct error return from the database handle/API. 100 | * For MSSQL, it returns the last error message found from a 101 | * thrown exception. 102 | */ 103 | native dbi_error(Sql:_sql, _error[], _len); 104 | 105 | /* Returns the type of database being used. So far: 106 | * "mysql", "pgsql", "mssql", "sqlite" 107 | */ 108 | native dbi_type(_type[], _len); 109 | 110 | /* Returns the number of fields/colums in a result set. 111 | * Unlike dbi_nextrow, you must pass a valid result handle. 112 | */ 113 | native dbi_num_fields(Result:result); 114 | 115 | /* Retrieves the name of a field/column in a result set. 116 | * Requires a valid result handle, and columns are numbered 1 to n. 117 | */ 118 | native dbi_field_name(Result:result, field, name[], maxLength); 119 | 120 | /* This function can be used to find out if a table in a Sqlite database exists. 121 | */ 122 | stock bool:sqlite_table_exists(Sql:sql, table[]) 123 | { 124 | new bool:exists; 125 | new query[128]; 126 | format(query, 127, "SELECT name FROM sqlite_master WHERE type='table' AND name='%s' LIMIT 1;", table); 127 | 128 | new Result:result = dbi_query(sql, query); 129 | 130 | if (dbi_nextrow(result)) 131 | { 132 | exists = true; 133 | } 134 | else 135 | { 136 | exists = false; 137 | } 138 | 139 | if (result > RESULT_NONE) 140 | { 141 | dbi_free_result(result); 142 | } 143 | 144 | return exists; 145 | } 146 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/configs/amxx.cfg: -------------------------------------------------------------------------------- 1 | // AMX Mod X Configuration File 2 | echo Executing AMX Mod X Configuration File 3 | 4 | // Default access for all non admin players (see users.ini for access details) 5 | // 6 | // Default value: "z" 7 | amx_default_access "z" 8 | 9 | // Name of setinfo which should store a password on a client (you should change this) 10 | // Note: Always prefix the field with an underscore (aka: "_") 11 | // (Example: setinfo _pw "password") 12 | // 13 | // Default value: "_pw" 14 | amx_password_field "_pw" 15 | 16 | // Mode of logging to a server 17 | // 0 - disable logging, players won't be checked (and access won't be set) 18 | // 1 - normal mode which obey flags set in accounts 19 | // 2 - kick all players not on list 20 | // 21 | // Default value: 1 22 | amx_mode 1 23 | 24 | // Show admins activity 25 | // 0 - disabled 26 | // 1 - show without admin name 27 | // 2 - show with name 28 | // 29 | // Default value: 2 30 | amx_show_activity 2 31 | 32 | // Frequency in seconds and text of scrolling message 33 | // 34 | // Default value: "Welcome to %hostname% -- This server is using AMX Mod X" 600 35 | amx_scrollmsg "Welcome to %hostname% -- This server is using AMX Mod X" 600 36 | 37 | // Center typed colored messages (last parameter is a color in RRRGGGBBB format) 38 | // 39 | // Default values: "Welcome to %hostname%" "000255100" 40 | // "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255" 41 | amx_imessage "Welcome to %hostname%" "000255100" 42 | amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255" 43 | 44 | // Frequency in seconds of colored messages 45 | // 46 | // Default value: 180 47 | amx_freq_imessage 180 48 | 49 | // Ban times for the main ban menu (amx_banmenu) 50 | // Use 0 for permanent ban. 51 | // Default values: 0 5 10 15 30 45 60 52 | amx_plmenu_bantimes 0 5 10 15 30 45 60 53 | 54 | // Slap damage amounts for the main slap menu (amx_slapmenu) 55 | // Slay is automatically inserted as the first option. 56 | // Default values: 0 1 5 57 | amx_plmenu_slapdmg 0 1 5 58 | 59 | // Set in seconds how fast players can chat (chat-flood protection) 60 | // 61 | // Default value: 0.75 62 | amx_flood_time 0.75 63 | 64 | // Amount of slots to reserve. 65 | // 66 | // Default value: 0 67 | amx_reservation 0 68 | 69 | // If you set this to 1, you can hide slots on your server. 70 | // If server "full" of public slots and slots hidden, you must manually connect with connect console command 71 | // 72 | // Default value: 0 73 | amx_hideslots 0 74 | 75 | // Displaying of time remaining 76 | // a - display white text on bottom 77 | // b - use voice 78 | // c - don't add "remaining" (only in voice) 79 | // d - don't add "hours/minutes/seconds" (only in voice) 80 | // e - show/speak if current time is less than this set in parameter 81 | // 82 | // Default value: "ab 1200" "ab 600" "ab 300" "ab 180" "ab 60" "bcde 11" 83 | amx_time_display "ab 1200" "ab 600" "ab 300" "ab 180" "ab 60" "bcde 11" 84 | 85 | // Announce "say thetime" and "say timeleft" with voice, set to 0 to disable. 86 | // 87 | // Default value: 1 88 | amx_time_voice 1 89 | 90 | // Minimum delay in seconds between two voting sessions 91 | // 92 | // Default value: 10 93 | amx_vote_delay 10 94 | 95 | // How long voting session goes on 96 | // 97 | // Default value: 10 98 | amx_vote_time 10 99 | 100 | // Display who votes for what option, set to 0 to disable, 1 to enable. 101 | // 102 | // Default value: 1 103 | amx_vote_answers 1 104 | 105 | // Some ratios for voting success 106 | 107 | // Default value: 0.40 108 | amx_votekick_ratio 0.40 109 | 110 | // Default value: 0.40 111 | amx_voteban_ratio 0.40 112 | 113 | // Default value: 0.40 114 | amx_votemap_ratio 0.40 115 | 116 | // Default value: 0.02 117 | amx_vote_ratio 0.02 118 | 119 | // Max. time to which map can be extended 120 | // 121 | // Default value: 90 122 | amx_extendmap_max 90 123 | 124 | // Step for each extending 125 | // 126 | // Default value: 15 127 | amx_extendmap_step 15 128 | 129 | // If you set this to 0, clients cannot chose their language, instead they use 130 | // whatever language the server is configured to use. 131 | // 132 | // Default value: 1 133 | amx_client_languages 1 134 | 135 | // Plugin Debug mode 136 | // 0 - No debugging (garbage line numbers) 137 | // 1 - Plugins with "debug" option in plugins.ini are put into debug mode 138 | // 2 - All plugins are put in debug mode 139 | // Note - debug mode will affect JIT performance 140 | // 141 | // Default value: 1 142 | amx_debug 1 143 | 144 | // Plugin MultiLingual Debug 145 | // To debug a language put its 2 letter code between quotes ("en", "de", etc) 146 | // "" means disabled 147 | // 148 | // Default value: "" 149 | amx_mldebug "" 150 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/tfcx.inc: -------------------------------------------------------------------------------- 1 | /* tfcX functions 2 | * 3 | * (c) 2004, SidLuke 4 | * This file is provided as is (no warranties). 5 | */ 6 | 7 | #if defined _tfcx_included 8 | #endinput 9 | #endif 10 | #define _tfcx_included 11 | 12 | #include 13 | #include 14 | 15 | #if AMXX_VERSION_NUM >= 175 16 | #pragma reqclass xstats 17 | #if !defined AMXMODX_NOAUTOLOAD 18 | #pragma defclasslib xstats tfcx 19 | #endif 20 | #else 21 | #pragma library tfcx 22 | #endif 23 | 24 | /************* Shared Natives Start ********************************/ 25 | 26 | /* Forward types */ 27 | enum { 28 | XMF_DAMAGE = 0, 29 | XMF_DEATH, 30 | }; 31 | 32 | /* Use this function to register forwards */ 33 | native register_statsfwd( ftype ); 34 | 35 | /* Function is called after player to player attacks , 36 | * if players were damaged by teammate TA is set to 1 */ 37 | forward client_damage(attacker,victim,damage,wpnindex,hitplace,TA); 38 | 39 | /* Function is called after player death , 40 | * if player was killed by teammate TK is set to 1 */ 41 | forward client_death(killer,victim,wpnindex,hitplace,TK); 42 | 43 | /* Custom Weapon Support */ 44 | /* function will return index of new weapon */ 45 | native custom_weapon_add( const wpnname[],melee = 0,const logname[]="" ); 46 | /* Function will pass damage done by this custom weapon to stats module and other plugins */ 47 | native custom_weapon_dmg( weapon, att, vic, damage, hitplace=0 ); 48 | /* Function will pass info about custom weapon shot to stats module */ 49 | native custom_weapon_shot( weapon,index ); // weapon id , player id 50 | 51 | /* function will return 1 if true */ 52 | native xmod_is_melee_wpn(wpnindex); 53 | 54 | /* Returns weapon name. */ 55 | native xmod_get_wpnname(wpnindex,name[],len); 56 | 57 | /* Returns weapon logname. */ 58 | native xmod_get_wpnlogname(wpnindex,name[],len); 59 | 60 | /* Returns weapons array size */ 61 | native xmod_get_maxweapons(); 62 | 63 | /* Returns stats array size ex. 8 in TS , 9 in DoD */ 64 | native xmod_get_stats_size(); 65 | 66 | /* Returns 1 if true */ 67 | native xmod_is_custom_wpn(wpnindex); 68 | 69 | /************* Shared Natives End ********************************/ 70 | 71 | stock tfc_isgrenade( weapon ){ 72 | switch( weapon ) 73 | { 74 | case TFC_WPN_CALTROP, 75 | TFC_WPN_CONCUSSIONGRENADE, 76 | TFC_WPN_NORMALGRENADE, 77 | TFC_WPN_NAILGRENADE, 78 | TFC_WPN_MIRVGRENADE, 79 | TFC_WPN_NAPALMGRENADE, 80 | TFC_WPN_GASGRENADE, 81 | TFC_WPN_EMPGRENADE: 82 | return 1; 83 | default: return 0; 84 | } 85 | return 0; 86 | } 87 | 88 | native tfc_userkill( index ); 89 | 90 | /* Use this function to set private data offsets if needed 91 | Default offsets: 92 | timer: 932 93 | sentrygun: 83 94 | from AssKicR 95 | shells: 53 96 | bullets: 55 97 | cells: 57 98 | rockets: 59 99 | nade1: 14 100 | nade2: 15 101 | */ 102 | native tfc_setpddata(timer,sentrygun,shells,bullets,cells,rockets,nade1,nade2); 103 | 104 | /*********************************************************************/ 105 | 106 | native tfc_setmodel(index, const Model[], const Skin[]); 107 | native tfc_clearmodel(index); 108 | 109 | /* Get amount of ammo in backpack on a user for a specific weapon */ 110 | /* Ammo Types in tfcconst.inc */ 111 | native tfc_getbammo(index, ammo); 112 | 113 | /* Set amount of ammo in backpack on a user for a specific weapon */ 114 | native tfc_setbammo(index, ammo, value); 115 | 116 | /* Returns amount of ammo in weapon's clip (backpack) */ 117 | /* Weapons list in tfcconst.inc */ 118 | native tfc_getweaponbammo(index, weapon); 119 | 120 | /* Sets amount of ammo in weapon's clip (backpack) */ 121 | native tfc_setweaponbammo(index, weapon, value); 122 | 123 | /* Returns amount of ammo in weapon's clip */ 124 | /* Index must be weapon's entity index */ 125 | native tfc_getweaponammo(index); 126 | 127 | /* Sets amount of ammo in weapon's clip */ 128 | /* Index must be weapon's entity index */ 129 | native tfc_setweaponammo(index, value); 130 | 131 | /* Returns 1 if user is carrying a goal item such as a flag or a keycard, else 0. 132 | * Team is by reference parameter that will be set to owning team(s) of the goal item. 133 | * Use the TFC_GOALITEM_* constants to determine the owning team. 134 | */ 135 | native tfc_get_user_goalitem(index, &team); 136 | 137 | /* Returns 1 if the player is a spy and is currently feigning death */ 138 | native tfc_is_user_feigning(index); 139 | 140 | /* Returns 1 if the two teams are allies, 0 otherwise 141 | * Note: Team must be 1->4 142 | * Team 0 will always return 0 143 | * Any other team will result in an error 144 | */ 145 | native tfc_is_team_ally(TeamA,TeamB); 146 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD Pipeline 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | env: 10 | REGISTRY: ghcr.io 11 | IMAGE_NAME: ${{ github.repository }} 12 | IMAGE_TAG: ${{ github.sha }} 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | permissions: 18 | contents: read 19 | packages: write 20 | outputs: 21 | image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest 22 | digest: ${{ steps.build.outputs.digest }} 23 | steps: 24 | - name: Checkout repository 25 | uses: actions/checkout@v4 26 | 27 | - name: Set up Docker Buildx 28 | uses: docker/setup-buildx-action@v3 29 | 30 | - name: Log in to Container Registry 31 | uses: docker/login-action@v3 32 | with: 33 | registry: ${{ env.REGISTRY }} 34 | username: ${{ github.actor }} 35 | password: ${{ secrets.GITHUB_TOKEN }} 36 | 37 | - name: Extract metadata 38 | id: meta 39 | uses: docker/metadata-action@v5 40 | with: 41 | images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} 42 | tags: | 43 | type=ref,event=branch 44 | type=ref,event=pr 45 | type=sha,prefix={{branch}}- 46 | type=raw,value=latest,enable={{is_default_branch}} 47 | 48 | - name: Set release date 49 | id: date 50 | run: echo "RELEASE_DATE=$(date -u +%Y-%m-%d)" >> $GITHUB_OUTPUT 51 | 52 | - name: Build and push Docker image 53 | id: build 54 | uses: docker/build-push-action@v5 55 | with: 56 | context: ./docker 57 | push: true 58 | tags: ${{ steps.meta.outputs.tags }} 59 | labels: ${{ steps.meta.outputs.labels }} 60 | build-args: | 61 | RELEASE_DATE=${{ steps.date.outputs.RELEASE_DATE }} 62 | cache-from: type=gha 63 | cache-to: type=gha,mode=max 64 | 65 | - name: Output image reference 66 | id: image 67 | run: echo "image=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_OUTPUT 68 | 69 | test: 70 | runs-on: ubuntu-latest 71 | needs: build 72 | steps: 73 | - name: Set up Docker Buildx 74 | uses: docker/setup-buildx-action@v3 75 | 76 | - name: Log in to Container Registry 77 | uses: docker/login-action@v3 78 | with: 79 | registry: ${{ env.REGISTRY }} 80 | username: ${{ github.actor }} 81 | password: ${{ secrets.GITHUB_TOKEN }} 82 | 83 | - name: Launch HLDM and test 84 | run: | 85 | # Run the container in background and capture output 86 | docker run -d --name hldm-test ${{ needs.build.outputs.image }} > /tmp/container_id 87 | 88 | # Wait for the server to start 89 | sleep 10 90 | 91 | # Get container logs 92 | docker logs hldm-test > /tmp/stdout.log 2>&1 93 | 94 | # Display the logs 95 | cat /tmp/stdout.log 96 | 97 | # Check for the success string 98 | if grep -m 1 "Connection to Steam servers successful" /tmp/stdout.log; then 99 | echo "✅ HLDM server started successfully!" 100 | exit 0 101 | else 102 | echo "❌ HLDM server failed to connect to Steam servers" 103 | exit 1 104 | fi 105 | 106 | - name: Cleanup 107 | if: always() 108 | run: | 109 | docker stop hldm-test || true 110 | docker rm hldm-test || true 111 | 112 | push-to-dockerhub: 113 | runs-on: ubuntu-latest 114 | needs: [build, test] 115 | if: github.ref == 'refs/heads/master' && github.event_name == 'push' 116 | steps: 117 | - name: Set up Docker Buildx 118 | uses: docker/setup-buildx-action@v3 119 | 120 | - name: Log in to GitHub Container Registry 121 | uses: docker/login-action@v3 122 | with: 123 | registry: ${{ env.REGISTRY }} 124 | username: ${{ github.actor }} 125 | password: ${{ secrets.GITHUB_TOKEN }} 126 | 127 | - name: Log in to Docker Hub 128 | uses: docker/login-action@v3 129 | with: 130 | username: ${{ secrets.DOCKERHUB_USERNAME }} 131 | password: ${{ secrets.DOCKERHUB_TOKEN }} 132 | 133 | - name: Pull and retag image for Docker Hub 134 | run: | 135 | # Pull the tested image from GitHub Container Registry 136 | docker pull ${{ needs.build.outputs.image }} 137 | 138 | # Tag for Docker Hub 139 | 140 | docker tag ${{ needs.build.outputs.image }} ${{ secrets.DOCKERHUB_USERNAME }}/hldm:latest 141 | docker tag ${{ needs.build.outputs.image }} ${{ secrets.DOCKERHUB_USERNAME }}/hldm:${{ github.sha }} 142 | 143 | # Push to Docker Hub 144 | docker push ${{ secrets.DOCKERHUB_USERNAME }}/hldm:latest 145 | docker push ${{ secrets.DOCKERHUB_USERNAME }}/hldm:${{ github.sha }} 146 | -------------------------------------------------------------------------------- /docker/gamedir/addons/amxmodx/scripting/include/file.inc: -------------------------------------------------------------------------------- 1 | /* Files functions 2 | * 3 | * by the AMX Mod X Development Team 4 | * originally developed by OLO 5 | * 6 | * This file is provided as is (no warranties). 7 | */ 8 | 9 | #if defined _file_included 10 | #endinput 11 | #endif 12 | #define _file_included 13 | 14 | /* Reads content from directory. 15 | * Returns index of next element or 0 when end of dir. is reached. */ 16 | native read_dir(const dirname[],pos,output[],len,&outlen); 17 | 18 | /* Reads line from file. Returns index of next line or 0 when end of file is reached. */ 19 | native read_file(const file[],line,text[],len,&txtlen); 20 | 21 | /* Writes text to file. Function returns 0 on failure. 22 | * When line is set to -1, the text is added at the end of file. */ 23 | native write_file(const file[],const text[],line = -1); 24 | 25 | /* Deletes file. Function returns 1 on success, 0 on failure. */ 26 | native delete_file(const file[]); 27 | 28 | /* Checks for file. If file exists function returns 1, in other case 0. */ 29 | native file_exists(const file[]); 30 | 31 | /* renames a file. returns 0 on failure, 1 on success. 32 | * if relative true, rename_file will act like other natives which 33 | * use the moddir as a base directory. otherwise, the current directory is 34 | * undefined (but assumed to be hlds). 35 | */ 36 | native rename_file(const oldname[], const newname[], relative=0); 37 | 38 | /* Checks if a directory exists */ 39 | native dir_exists(const dir[]); 40 | 41 | /* Returns a file size in bytes if flag is set to 0. 42 | * When flag is set to 1 returns number of lines in the file, 43 | * and when flags is 2, function returns 1 if the file ends 44 | * with line feed. If file doesn't exist returns -1. */ 45 | native file_size(const file[], flag=0); 46 | 47 | #define SEEK_SET 0 48 | #define SEEK_CUR 1 49 | #define SEEK_END 2 50 | 51 | //Open a file, returns a handle or 0 on failure 52 | native fopen(const filename[],const mode[]); 53 | 54 | //Closes a file handle 55 | native fclose(file); 56 | 57 | #define BLOCK_INT 4 58 | #define BLOCK_SHORT 2 59 | #define BLOCK_CHAR 1 60 | #define BLOCK_BYTE 1 61 | 62 | //The following functions work as such: 63 | // RAW - means the array you pass is a raw bytestream, for experts only 64 | // BLOCK - means you are passing in an array where each element will be written 65 | // NORMAL - means you are writing only one element 66 | // RAW and BLOCK return the number of blocks acted upon successfully 67 | // NORMAL returns 1 on success 68 | 69 | native fread(file, &data, mode); 70 | native fread_blocks(file, data[], blocks, mode); 71 | native fread_raw(file, stream[], blocksize, blocks); 72 | native fwrite(file, data, mode); 73 | native fwrite_blocks(file, const data[], blocks, mode); 74 | native fwrite_raw(file, const stream[], blocksize, mode); 75 | 76 | //Returns 1 if the file is ended, 0 otherwise 77 | native feof(file); 78 | 79 | //Reads a line from a text file -- includes newline! 80 | native fgets(file, buffer[], maxlength); 81 | 82 | //Writes a line to a text file. Returns # of characters written. 83 | native fputs(file, const text[]); 84 | 85 | //Writes a line to the file 86 | native fprintf(file, const fmt[], any:...); 87 | 88 | //Sets the current position in a file (see SEEK_ values above) 89 | native fseek(file, position, start); 90 | 91 | //Returns the current position in a file 92 | native ftell(file); 93 | 94 | //These are straight from the C standard. 95 | native fgetc(file); 96 | native fputc(file, data); 97 | native fungetc(file, data); 98 | 99 | //Return the size of a file 100 | native filesize(const filename[], any:...); 101 | 102 | //Attempts to remove a directory. 103 | //Note that you cannot remove a directory that has files on most 104 | // operating systems. 105 | native rmdir(const path[]); 106 | 107 | /* Returns 0 on success, like the POSIX specification */ 108 | native mkdir(const dirname[]); 109 | 110 | 111 | //Delete a file (delete_file macro) 112 | native unlink(const filename[]); 113 | 114 | //Returns a handle to a directory 115 | native open_dir(dir[], firstfile[], length); 116 | native next_file(dirh, buffer[], length); 117 | native close_dir(dirh); 118 | 119 | /** 120 | * Loads a file using the LoadFileForMe engine function. 121 | * 122 | * The data is truncated if there is not enough space. No null-terminator 123 | * is applied; the data is the raw contents of the file. 124 | * 125 | * @param file File to load (may be a file from the GCF). 126 | * @param buffer Buffer to store file contents. 127 | * @param maxlength Maximum size of the file buffer. 128 | * @param length Variable to store the file length. This may return 129 | * a number larger than the buffer size. 130 | * @return -1 if the file could not be loaded. Otherwise, 131 | * the number of cells actually written to the buffer 132 | * are returned. 133 | */ 134 | native LoadFileForMe(const file[], buffer[], maxlength, &length=0); 135 | 136 | /** 137 | * Flushes a buffered output stream. 138 | * 139 | * @param file File handle, or 0 for all open streams. 140 | * @return 0 on success, -1 on failure. 141 | */ 142 | native fflush(file); 143 | 144 | --------------------------------------------------------------------------------