diff --git a/Dockerfile b/Dockerfile index 5728221..9bcd9f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ FROM debian:buster-slim -# Install software +# Install dependencies RUN dpkg --add-architecture i386 RUN apt-get update && \ - apt-get install -y apt-utils vim curl wget file tar bzip2 gzip unzip bsdmainutils python util-linux ca-certificates binutils bc jq tmux netcat lib32gcc1 lib32stdc++6 cpio sudo procps iproute2 + apt-get install -y apt-utils vim curl wget file tar bzip2 gzip unzip bsdmainutils python util-linux ca-certificates binutils bc jq tmux netcat lib32gcc1 lib32stdc++6 cpio sudo procps iproute2 libsdl2-2.0-0:i386 # Install gamedig # GameDig is a tool that queries game servers and returns outputs data from a query into json format. It can not only check if the game server is online but also return various data such as current maps and players. This allows ./gameserver details to display live information. -# See https://github.com/gamedig/node-gamedig +# https://github.com/gamedig/node-gamedig RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - RUN apt-get install -y nodejs RUN npm install gamedig -g @@ -22,6 +22,8 @@ USER csserver WORKDIR /home/csserver # Download linuxgsm.sh +# LinuxGSM is the command-line tool for quick, simple deployment and management of Linux dedicated game servers. +# https://github.com/GameServerManagers/LinuxGSM RUN wget -O linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh csserver # Installation of dependencies requires either sudo or root access. LinuxGSM can automatically install dependencies if the user has sudo or is root. @@ -30,9 +32,9 @@ RUN sudo ./csserver install # Auto install is useful for automatic server deployments as no user prompt is required. RUN ./csserver auto-install -# Get and install serverconfig -RUN wget https://dl.ardestani.org/cs16serverconfig.tar.gz -RUN tar -zxvf cs16serverconfig.tar.gz -RUN rm cs16serverconfig.tar.gz +# Install config, metamod & amxmodx. +# http://metamod.org/ +# https://www.amxmodx.org/ +COPY --chown=csserver ./src/csserver/ ./src/scripts/mapcheck.js ./ -CMD /bin/bash -c '/home/csserver/csserver start; /bin/bash' +CMD /bin/bash -c '/home/csserver/csserver start; /bin/bash' \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 48f81ed..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# cstrike-1.6server - diff --git a/docker-compose.yml b/docker-compose.yml index efbc882..ae7435b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,10 @@ version: '3' - services: - cs16: + cs16amxx: build: . - image: cs16:latest + image: cs16amxx:latest ports: - - "27015:27015/udp" - - "27015:27015/tcp" - container_name: cs16 - tty: true + - "27016:27016/udp" + - "27016:27016/tcp" + container_name: cs16amxx + tty: true \ No newline at end of file diff --git a/src/csserver/lgsm/config-lgsm/csserver/csserver.cfg b/src/csserver/lgsm/config-lgsm/csserver/csserver.cfg new file mode 100644 index 0000000..2589a5a --- /dev/null +++ b/src/csserver/lgsm/config-lgsm/csserver/csserver.cfg @@ -0,0 +1,10 @@ +## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters +ip="0.0.0.0" +port="27016" +clientport="27005" +defaultmap="aim_map" +maxplayers="32" +pingboost="2" + +## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters +startparameters="-game cstrike -strictportbind +ip ${ip} -port ${port} +clientport ${clientport} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers} -pingboost ${pingboost}" diff --git a/src/csserver/serverfiles/cstrike/0soup0_simpsons.wad b/src/csserver/serverfiles/cstrike/0soup0_simpsons.wad new file mode 100644 index 0000000..bc2d92a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/0soup0_simpsons.wad differ diff --git a/src/csserver/serverfiles/cstrike/23b.wad b/src/csserver/serverfiles/cstrike/23b.wad new file mode 100644 index 0000000..8ee7eae Binary files /dev/null and b/src/csserver/serverfiles/cstrike/23b.wad differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/amxx.cfg b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/amxx.cfg new file mode 100644 index 0000000..5f18828 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/amxx.cfg @@ -0,0 +1,183 @@ +// AMX Mod X Configuration File +echo Executing AMX Mod X Configuration File + +// Default access for all non admin players (see users.ini for access details) +// +// Default value: "z" +amx_default_access "z" + +// Name of setinfo which should store a password on a client (you should change this) +// Note: Always prefix the field with an underscore (aka: "_") +// (Example: setinfo _pw "password") +// +// Default value: "_pw" +amx_password_field "_pw" + +// Mode of logging to a server +// 0 - disable logging, players won't be checked (and access won't be set) +// 1 - normal mode which obey flags set in accounts +// 2 - kick all players not on list +// +// Default value: 1 +amx_mode 1 + +// Show admins activity +// 0 - disabled +// 1 - show without admin name +// 2 - show with name +// +// Default value: 2 +amx_show_activity 2 + +// Frequency in seconds and text of scrolling message +// +// Default value: "Welcome to %hostname% -- This server is using AMX Mod X" 600 +amx_scrollmsg "Welcome to %hostname% -- This server is using AMX Mod X" 600 + +// Center typed colored messages (last parameter is a color in RRRGGGBBB format) +// +// Default values: "Welcome to %hostname%" "000255100" +// "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255" +amx_imessage "Welcome to %hostname%" "000255100" +amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255" + +// Frequency in seconds of colored messages +// +// Default value: 180 +amx_freq_imessage 180 + +// Ban times for the main ban menu (amx_banmenu) +// Use 0 for permanent ban +// Default values: 0 5 10 15 30 45 60 +amx_plmenu_bantimes 0 5 10 15 30 45 60 + +// Slap damage amounts for the main slap menu (amx_slapmenu) +// Slay is automaticall inserted as the first option +// Default values: 0 1 5 +amx_plmenu_slapdmg 0 1 5 + +// Set in seconds how fast players can chat (chat-flood protection) +// +// Default value: 0.75 +amx_flood_time 0.75 + +// Amount of slots to reserve. +// +// Default value: 0 +amx_reservation 0 + +// If you set this to 1, you can hide slots on your server. +// If server "full" of public slots and slots hidden, you must manually connect with connect console command +// +// Default value: 0 +amx_hideslots 0 + +// Displaying of time remaining +// a - display white text on bottom +// b - use voice +// c - don't add "remaining" (only in voice) +// d - don't add "hours/minutes/seconds" (only in voice) +// e - show/speak if current time is less than this set in parameter +// +// Default value: "ab 1200" "ab 600" "ab 300" "ab 180" "ab 60" "bcde 11" +amx_time_display "ab 1200" "ab 600" "ab 300" "ab 180" "ab 60" "bcde 11" + +// Announce "say thetime" and "say timeleft" with voice, set to 0 to disable. +// +// Default value: 1 +amx_time_voice 1 + +// Minimum delay in seconds between two voting sessions +// +// Default value: 10 +amx_vote_delay 10 + +// How long voting session goes on +// +// Default value: 10 +amx_vote_time 10 + +// Display who votes for what option, set to 0 to disable, 1 to enable. +// +// Default value: 1 +amx_vote_answers 1 + +// Some ratios for voting success + +// Default value: 0.40 +amx_votekick_ratio 0.40 + +// Default value: 0.40 +amx_voteban_ratio 0.40 + +// Default value: 0.40 +amx_votemap_ratio 0.40 + +// Default value: 0.02 +amx_vote_ratio 0.02 + +// Max. time to which map can be extended +// +// Default value: 90 +amx_extendmap_max 90 + +// Step for each extending +// +// Default value: 15 +amx_extendmap_step 15 + +// If you set this to 0, clients cannot chose their language, instead they use +// whatever language the server is configured to use. +// +// Default value: 1 +amx_client_languages 1 + +// Plugin Debug mode +// 0 - No debugging (garbage line numbers) +// 1 - Plugins with "debug" option in plugins.ini are put into debug mode +// 2 - All plugins are put in debug mode +// Note - debug mode will affect JIT performance +// +// Default value: 1 +amx_debug 1 + +// Plugin MultiLingual Debug +// To debug a language put its 2 letter code between quotes ("en", "de", etc) +// "" means disabled +// +// Default value: "" +amx_mldebug "" + +// +// Beginning of Counter-Strike package specific configurations. +// + +// Rank mode +// 0 - by nick +// 1 - by authid +// 2 - by ip +// +// Default value: 1 +csstats_rank 1 + +// Max size of the stats file +// +// Default value: 3500 +csstats_maxsize 3500 + +// Whether or not to rank bots with csstats - set to 1 to rank bots, 0 otherwise. +// +// Default value: 0 +csstats_rankbots 0 + +// Duration of HUD-statistics +// +// Default value: 12.0 +amx_statsx_duration 12.0 + +// HUD-statistics display limit relative round freeze end +// Negative time will clear the HUD-statstics before the round freeze time has ended +// +// Default value: -2.0 +amx_statsx_freeze -2.0 + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/clcmds.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/clcmds.ini new file mode 100644 index 0000000..e0c2f9e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/clcmds.ini @@ -0,0 +1,17 @@ +; Menu configuration file +; Default File location: $moddir/addons/amxmodx/configs/clcmds.ini +; To use with Players Menu plugin + +; NOTE: By default in all settings the access level is set to "u". +; However you can change that, to limit the access to some settings. + +; Client Commands Menu: ; < description > < command > < flags > < access level > +; "a" - execute from server console +; "b" - execute from admin console +; "c" - execute on selected player +; "d" - back to menu when executed + +"Kick player" "amx_kick #%userid%" "b" "u" +"Slay player" "amx_slay #%userid%" "bd" "u" +"Slap with 1 dmg." "amx_slap #%userid% 1" "bd" "u" +"Ban for 5 minutes" "amx_ban #%userid% 5" "b" "u" diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/cmds.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/cmds.ini new file mode 100644 index 0000000..554d4f9 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/cmds.ini @@ -0,0 +1,16 @@ +; Menu configuration file +; File location: $moddir/addons/amxmodx/configs/cmds.ini +; To use with Commands Menu plugin + +; NOTE: By default in all settings the access level is set to "u". +; However you can change that, to limit the access to some settings. + +; Commands Menu: ; < description > < command > < flags > < access level > +; "a" - execute from server console +; "b" - execute from admin console +; "c" - execute on all clients +; "d" - back to menu when executed + +"Pause" "amx_pause" "ad" "u" +" " "-" "" "u" +"Restart Round" "sv_restartround 1" "a" "u" diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/configs.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/configs.ini new file mode 100644 index 0000000..27bbdd1 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/configs.ini @@ -0,0 +1,22 @@ +; Menu configuration file +; File location: $moddir/addons/amxmodx/configs/configs.ini +; To use with Commands Menu plugin + +; NOTE: By default in all settings the access level is set to "u". +; However you can change that, to limit the access to some settings. + +; Commands Menu: +; < description > < command > < flags > < access level > +; "a" - execute from server console +; "b" - execute from admin console +; "c" - execute on all clients +; "d" - back to menu when executed + +;"PUBLIC Settings" "servercfgfile server.cfg;exec server.cfg" "a" "u" +;"Clanbase" "exec clanbase.cfg;servercfgfile \'\'" "a" "u" +;"Clanbase Charges Only" "exec clanbase_co.cfg;servercfgfile \'\'" "a" "u" +;"Official CAL Match" "exec cal.cfg;servercfgfile \'\'" "a" "u" +;"ProvingGrounds Server Config" "exec leagues/pg.cfg;servercfgfile \'\'" "a" "u" +;"OGL CS Server Config" "exec ogl.cfg;servercfgfile \'\'" "a" "u" +;"OGL CS FF Server Config" "exec ogl_ff.cfg;servercfgfile \'\'" "a" "u" +;"OGL CS Advanced Server Config" "exec ogl_adv.cfg;servercfgfile \'\'" "a" "u" diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/core.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/core.ini new file mode 100644 index 0000000..ab40bc9 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/core.ini @@ -0,0 +1,42 @@ +; Configuration file for AMX Mod X +amxx_logs addons/amxmodx/logs +amxx_configsdir addons/amxmodx/configs +amxx_datadir addons/amxmodx/data +amxx_modules addons/amxmodx/configs/modules.ini +amxx_plugins addons/amxmodx/configs/plugins.ini +amxx_pluginsdir addons/amxmodx/plugins +amxx_modulesdir addons/amxmodx/modules +amxx_vault addons/amxmodx/data/vault.ini +; It is important that "csstats" comes before "csstats_score" +csstats addons/amxmodx/data/csstats.dat +csstats_score addons/amxmodx/data/csstats.amxx + +; Logging mode +; 0 - no logging +; 1 - one logfile / day +; 2 - one logfile / map +; 3 - HL Logs +amxx_logging 1 + +; Binary logging level +; add these up to get what you want +; these only work with bin logging binaries +; 1 - default +; 2 - log internal string sets/gets +; 4 - log internal formats +; 8 - log all native params +; 16 - log internal function calls (only in debug mode) +; 32 - log line number accesses (only in debug mode) +bin_logging 49 + +; Maximum binary log size, in megs +max_binlog_size 20 + +; Plugin optimization flags - add these up to get what you want +; lowering these may stop crashes on very old CPUs +; set 65536 to disable optimizer, NOT 0! +;------------- +; 1 - float arithmetic +; 2 - float comparisons +; 4 - float rounding +optimizer 7 diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/custommenuitems.cfg b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/custommenuitems.cfg new file mode 100644 index 0000000..cb6f2aa --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/custommenuitems.cfg @@ -0,0 +1,19 @@ +// Here you can add menu items from any plugin to Menus Front-End plugin, aka "amxmodmenu". +// You can also add menu items to the normal non-admin client menu "amx_menu". +// +// Adding to "amxmodmenu": +// Usage: "amx_addmenuitem " +// +// Adding to "amx_menu": +// Usage: "amx_addclientmenuitem " +// +// : This is the text displayed in the menu itself for this item. +// : This is the client command used to access the menu. +// : Specify what access flags admins must have to use this menu item. (Check users.ini for access flags.) +// : 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.) +// +// Example: (be sure to use quotes around parameters with spaces!) +// +// amx_addmenuitem "Weapon Arena" "weaponarena_menu" "hu" "Weapon Arena" +// amx_addclientmenuitem "Warcraft 3" "war3menu" "" "Warcraft 3 XP" + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/cvars.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/cvars.ini new file mode 100644 index 0000000..fb61b38 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/cvars.ini @@ -0,0 +1,22 @@ +; Menu configuration file +; File location: $moddir/addons/amxmodx/configs/cvars.ini +; To use with Commands Menu plugin + +; Cvars Menu: +; < cvar > < values > ... < access level > + +"mp_timelimit" "0" "30" "45" "u" +"sv_password" "" "mypw" "clanwar" "u" +"pausable" "0" "1" "u" +"sv_voiceenable" "0" "1" "u" +"mp_chattime" "0" "1" "3" "u" +"mp_logmessages" "0" "1" "u" +"mp_friendlyfire" "0" "1" "u" +"mp_limitteams" "0" "1" "2" "u" +"mp_autoteambalance" "0" "1" "2" "u" +"allow_spectators" "0" "1" "u" +"mp_freezetime" "0" "6" "u" +"mp_buytime" "1" "0.5" "u" +"mp_startmoney" "800" "1800" "3600" "u" +"mp_c4timer" "35" "45" "15" "u" +"mp_forcechasecam" "0" "1" "2" "u" diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/hamdata.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/hamdata.ini new file mode 100644 index 0000000..8e197a0 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/hamdata.ini @@ -0,0 +1,2004 @@ +; Ham Sandwich module config file. +; +; IMPORTANT: It is highly suggested that you do not modify this file unless +; you know _exactly_ what you are doing! +; +; NOTE: Just because a mod contains a function does not means it will work +; as expected. If, for example, HamKilled() does not work as you think +; it should in Counter-Strike DO NOT FILE A BUG REPORT. This just +; exposes the function for you, whether or not it works, or how it +; works is up to plugin authors to figure out. +; +; NOTE: If a mod is missing keys for a certain native, that particular native +; will not be loaded! Example: Say CS is missing the "takedamage" index +; but has the use and pev indexes. The HamUse and HamePdataCbase natives +; will be registered, but the HamTakeDamage native will not register. +; In addition, any attempts to hook a function who's key is missing will +; result in the plugin failing. +; +; NOTE: The base key is only needed for the linux configs. +; +; NOTE: Any keys that begin with a modname (eg: cstrike_restart) will, +; obviously, only work on that mod and all mirrors of it (eg: czero). +; +; NOTE: If you change this file while the module is already loaded, you will +; need to restart the server for the changes to take effect. Changes to +; this file before the module is loaded will take effect when the module +; loads. +; +; NOTE: All of these offsets and settings are for the latest (at the time of +; release) legitimate version of the mod. However, there is a _chance_ +; that they will work on older (and even newer) versions. +; eg: If they work on non-Steam CS 1.6 this is coincidental, if they do +; not work on non-Steam CS 1.6 this will not be officially fixed. +; +; Mirrors: These take the name of one mod, and copy all of its data to another +; name. An example of a use for this would be cstrike and czero: they +; use the same binary so all of its vtable offsets are guaranteed to +; be identical. Mirrors should always come first in the file! +; +; Version: $Id: hamdata.ini 3687 2008-03-04 18:51:35Z sawce $ + + +@mirror cstrike czero +@mirror ns nsp + +; TODO: check these - all are estimates +@section cstrike linux + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 3 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + classify 9 + deathnotice 10 + traceattack 11 + takedamage 12 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addpoints 21 + addpointstoteam 22 + addplayeritem 23 + removeplayeritem 24 + giveammo 25 + getdelay 26 + ismoving 27 + overridereset 28 + damagedecal 29 + settogglestate 30 + startsneaking 31 + stopsneaking 32 + oncontrols 33 + issneaking 34 + isalive 35 + isbspmodel 36 + reflectgauss 37 + hastarget 38 + isinworld 39 + isplayer 40 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 76 + player_duck 77 + player_prethink 78 + player_postthink 79 + player_getgunposition 80 + player_shouldfadeondeath 66 + player_impulsecommands 83 + player_updateclientdata 82 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 64 + item_canholster 66 + item_holster 67 + item_updateiteminfo 68 + item_preframe 69 + item_postframe 70 + item_drop 71 + item_kill 72 + item_attachtoplayer 73 + item_primaryammoindex 74 + item_secondaryammoindex 75 + item_updateclientdata 76 + item_getweaponptr 77 + item_itemslot 79 + + weapon_extractammo 80 + weapon_extractclipammo 81 + weapon_addweapon 82 + weapon_playemptysound 83 + weapon_resetemptysound 84 + weapon_sendweaponanim 85 + weapon_isusable 86 + weapon_primaryattack 87 + weapon_secondaryattack 88 + weapon_reload 89 + weapon_weaponidle 90 + weapon_retireweapon 91 + weapon_shouldweaponidle 92 + weapon_usedecrement 93 + + cstrike_restart 2 + cstrike_roundrespawn 84 + cstrike_item_candrop 63 + cstrike_item_getmaxspeed 78 + +@end +@section cstrike windows + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 3 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + classify 9 + deathnotice 10 + traceattack 11 + takedamage 12 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addpoints 21 + addpointstoteam 22 + addplayeritem 23 + removeplayeritem 24 + giveammo 25 + getdelay 26 + ismoving 27 + overridereset 28 + damagedecal 29 + settogglestate 30 + startsneaking 31 + stopsneaking 32 + oncontrols 33 + issneaking 34 + isalive 35 + isbspmodel 36 + reflectgauss 37 + hastarget 38 + isinworld 39 + isplayer 40 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 76 + player_duck 77 + player_prethink 78 + player_postthink 79 + player_getgunposition 80 + player_shouldfadeondeath 66 + player_impulsecommands 83 + player_updateclientdata 82 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 64 + item_canholster 66 + item_holster 67 + item_updateiteminfo 68 + item_preframe 69 + item_postframe 70 + item_drop 71 + item_kill 72 + item_attachtoplayer 73 + item_primaryammoindex 74 + item_secondaryammoindex 75 + item_updateclientdata 76 + item_getweaponptr 77 + item_itemslot 79 + + weapon_extractammo 80 + weapon_extractclipammo 81 + weapon_addweapon 82 + weapon_playemptysound 83 + weapon_resetemptysound 84 + weapon_sendweaponanim 85 + weapon_isusable 86 + weapon_primaryattack 87 + weapon_secondaryattack 88 + weapon_reload 89 + weapon_weaponidle 90 + weapon_retireweapon 91 + weapon_shouldweaponidle 92 + weapon_usedecrement 93 + + cstrike_restart 2 + cstrike_roundrespawn 84 + cstrike_item_candrop 63 + cstrike_item_getmaxspeed 78 +@end + +@section cstrike mac + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 3 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + classify 9 + deathnotice 10 + traceattack 11 + takedamage 12 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addpoints 21 + addpointstoteam 22 + addplayeritem 23 + removeplayeritem 24 + giveammo 25 + getdelay 26 + ismoving 27 + overridereset 28 + damagedecal 29 + settogglestate 30 + startsneaking 31 + stopsneaking 32 + oncontrols 33 + issneaking 34 + isalive 35 + isbspmodel 36 + reflectgauss 37 + hastarget 38 + isinworld 39 + isplayer 40 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 76 + player_duck 77 + player_prethink 78 + player_postthink 79 + player_getgunposition 80 + player_shouldfadeondeath 66 + player_impulsecommands 83 + player_updateclientdata 82 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 64 + item_canholster 66 + item_holster 67 + item_updateiteminfo 68 + item_preframe 69 + item_postframe 70 + item_drop 71 + item_kill 72 + item_attachtoplayer 73 + item_primaryammoindex 74 + item_secondaryammoindex 75 + item_updateclientdata 76 + item_getweaponptr 77 + item_itemslot 79 + + weapon_extractammo 80 + weapon_extractclipammo 81 + weapon_addweapon 82 + weapon_playemptysound 83 + weapon_resetemptysound 84 + weapon_sendweaponanim 85 + weapon_isusable 86 + weapon_primaryattack 87 + weapon_secondaryattack 88 + weapon_reload 89 + weapon_weaponidle 90 + weapon_retireweapon 91 + weapon_shouldweaponidle 92 + weapon_usedecrement 93 + + cstrike_restart 2 + cstrike_roundrespawn 84 + cstrike_item_candrop 63 + cstrike_item_getmaxspeed 78 +@end + +@section dod linux + pev 0 + base 0x154 + + spawn 5 + precache 6 + keyvalue 7 + objectcaps 10 + activate 11 + objectcollisionbox 14 + classify 15 + deathnotice 16 + traceattack 19 + takedamage 20 + takehealth 21 + killed 22 + bloodcolor 23 + tracebleed 24 + mymonsterpointer 25 + mysquadmonsterpointer 26 + gettogglestate 27 + addpoints 28 + addpointstoteam 29 + addplayeritem 30 + removeplayeritem 31 + giveammo 32 + getdelay 33 + ismoving 34 + overridereset 35 + damagedecal 36 + settogglestate 37 + startsneaking 38 + stopsneaking 39 + oncontrols 40 + issneaking 41 + isalive 42 + isbspmodel 43 + reflectgauss 44 + hastarget 45 + isinworld 46 + isplayer 47 + isnetclient 48 + teamid 49 + getnexttarget 50 + think 51 + touch 52 + use 53 + blocked 54 + respawn 55 + updateowner 56 + fbecomeprone 57 + center 58 + eyeposition 59 + earposition 60 + bodytarget 61 + illumination 62 + fvisible 63 + fvecvisible 64 + + player_jump 136 + player_duck 137 + player_prethink 134 + player_postthink 135 + player_getgunposition 128 + player_shouldfadeondeath 68 + player_impulsecommands 139 + player_updateclientdata 138 + + item_addtoplayer 66 + item_addduplicate 67 + item_getiteminfo 68 + item_candeploy 69 + item_deploy 70 + item_canholster 75 + item_holster 76 + item_updateiteminfo 77 + item_preframe 78 + item_postframe 79 + item_drop 80 + item_kill 81 + item_attachtoplayer 82 + item_primaryammoindex 83 + item_secondaryammoindex 84 + item_updateclientdata 85 + item_getweaponptr 86 + item_itemslot 87 + + weapon_extractammo 88 + weapon_extractclipammo 89 + weapon_addweapon 90 + weapon_playemptysound 91 + weapon_resetemptysound 92 + weapon_sendweaponanim 93 + weapon_isusable 94 + weapon_primaryattack 104 + weapon_secondaryattack 105 + weapon_reload 106 + weapon_weaponidle 107 + weapon_retireweapon 108 + weapon_shouldweaponidle 109 + weapon_usedecrement 110 + + dod_roundrespawn 2 + dod_roundrespawnent 3 + dod_roundstore 4 + dod_areasetindex 12 + dod_areasendstatus 13 + dod_getstate 17 + dod_getstateent 18 + dod_item_candrop 72 + +@end +@section dod windows + pev 4 + base 0x0 + + spawn 3 + precache 4 + keyvalue 5 + objectcaps 8 + activate 9 + objectcollisionbox 12 + classify 13 + deathnotice 14 + traceattack 17 + takedamage 18 + takehealth 19 + killed 20 + bloodcolor 21 + tracebleed 22 + mymonsterpointer 23 + mysquadmonsterpointer 24 + gettogglestate 25 + addpoints 26 + addpointstoteam 27 + addplayeritem 28 + removeplayeritem 29 + giveammo 30 + getdelay 31 + ismoving 32 + overridereset 33 + damagedecal 34 + settogglestate 35 + startsneaking 36 + stopsneaking 37 + oncontrols 48 + issneaking 39 + isalive 40 + isbspmodel 41 + reflectgauss 42 + hastarget 43 + isinworld 44 + isplayer 45 + isnetclient 46 + teamid 47 + getnexttarget 48 + think 49 + touch 50 + use 51 + blocked 52 + respawn 53 + updateowner 54 + fbecomeprone 55 + center 56 + eyeposition 57 + earposition 58 + bodytarget 59 + illumination 60 + fvisible 61 + fvecvisible 62 + + player_jump 134 + player_duck 135 + player_prethink 132 + player_postthink 133 + player_getgunposition 126 + player_shouldfadeondeath 66 + player_impulsecommands 137 + player_updateclientdata 136 + + item_addtoplayer 64 + item_addduplicate 65 + item_getiteminfo 66 + item_candeploy 67 + item_deploy 68 + item_canholster 73 + item_holster 74 + item_updateiteminfo 75 + item_preframe 76 + item_postframe 77 + item_drop 78 + item_kill 79 + item_attachtoplayer 80 + item_primaryammoindex 81 + item_secondaryammoindex 82 + item_updateclientdata 83 + item_getweaponptr 84 + item_itemslot 85 + + weapon_extractammo 86 + weapon_extractclipammo 87 + weapon_addweapon 88 + weapon_playemptysound 89 + weapon_resetemptysound 90 + weapon_sendweaponanim 91 + weapon_isusable 92 + weapon_primaryattack 102 + weapon_secondaryattack 103 + weapon_reload 104 + weapon_weaponidle 105 + weapon_retireweapon 106 + weapon_shouldweaponidle 107 + weapon_usedecrement 108 + + dod_roundrespawn 0 + dod_roundrespawnent 1 + dod_roundstore 2 + dod_areasetindex 10 + dod_areasendstatus 11 + dod_getstate 15 + dod_getstateent 16 + dod_item_candrop 70 +@end + +; TFC Does not have the following "standard" entries in its vtable: +; addpoints, addpointstoteam +@section tfc linux + pev 0 + base 0x470 + + spawn 3 + precache 4 + keyvalue 5 + objectcaps 8 + activate 9 + setobjectcollisionbox 10 + classify 11 + deathnotice 12 + traceattack 13 + takedamage 14 + takehealth 15 + killed 16 + bloodcolor 17 + tracebleed 18 + istriggered 19 + mymonsterpointer 20 + mysquadmonsterpointer 21 + gettogglestate 22 + addplayeritem 23 + removeplayeritem 24 + giveammo 25 + getdelay 26 + ismoving 27 + overridereset 28 + damagedecal 29 + settogglestate 30 + startsneaking 31 + stopsneaking 32 + oncontrols 33 + issneaking 34 + isalive 35 + isbspmodel 36 + reflectgauss 37 + hastarget 38 + isinworld 39 + isplayer 40 + isnetclient 41 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 135 + player_duck 136 + player_prethink 137 + player_postthink 138 + player_shouldfadeondeath 69 + player_impulsecommands 139 + + item_addtoplayer 67 + item_addduplicate 68 + item_getiteminfo 70 + item_candeploy 71 + item_deploy 72 + item_canholster 73 + item_holster 74 + item_updateiteminfo 75 + item_preframe 76 + item_postframe 77 + item_drop 78 + item_kill 79 + item_attachtoplayer 80 + item_primaryammoindex 81 + item_secondaryammoindex 82 + item_updateclientdata 83 + item_getweaponptr 84 + item_itemslot 69 + + weapon_extractammo 85 + weapon_extractclipammo 86 + weapon_addweapon 87 + weapon_playemptysound 88 + weapon_resetemptysound 89 + weapon_sendweaponanim 90 + weapon_isusable 91 + weapon_primaryattack 92 + weapon_secondaryattack 93 + weapon_reload 94 + weapon_weaponidle 95 + weapon_retireweapon 96 + weapon_shouldweaponidle 97 + + tfc_engineeruse 58 + tfc_finished 59 + tfc_empexplode 60 + tfc_calcempdmgrad 61 + tfc_takeempblast 62 + tfc_empremove 63 + tfc_takeconcussionblast 64 + tfc_concuss 65 +@end +@section tfc windows + pev 4 + base 0x0 + + spawn 1 + precache 2 + keyvalue 3 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + classify 9 + deathnotice 10 + traceattack 11 + takedamage 12 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addplayeritem 21 + removeplayeritem 22 + giveammo 23 + getdelay 24 + ismoving 25 + overridereset 26 + damagedecal 27 + settogglestate 28 + startsneaking 29 + stopsneaking 30 + oncontrols 31 + issneaking 32 + isalive 33 + isbspmodel 34 + reflectgauss 35 + hastarget 36 + isinworld 37 + isplayer 38 + isnetclient 39 + getnexttarget 41 + think 42 + touch 43 + use 44 + blocked 45 + respawn 46 + updateowner 47 + fbecomeprone 48 + center 49 + eyeposition 50 + earposition 51 + bodytarget 52 + illumination 53 + fvisible 54 + fvecvisible 55 + + + player_jump 133 + player_duck 134 + player_prethink 135 + player_postthink 136 + player_shouldfadeondeath 67 + player_impulsecommands 137 + + item_addtoplayer 65 + item_addduplicate 66 + item_getiteminfo 68 + item_candeploy 69 + item_deploy 70 + item_canholster 71 + item_holster 72 + item_updateiteminfo 73 + item_preframe 74 + item_postframe 75 + item_drop 76 + item_kill 77 + item_attachtoplayer 78 + item_primaryammoindex 79 + item_secondaryammoindex 80 + item_updateclientdata 81 + item_getweaponptr 82 + item_itemslot 67 + + weapon_extractammo 83 + weapon_extractclipammo 84 + weapon_addweapon 85 + weapon_playemptysound 86 + weapon_resetemptysound 87 + weapon_sendweaponanim 88 + weapon_isusable 89 + weapon_primaryattack 90 + weapon_secondaryattack 91 + weapon_reload 92 + weapon_weaponidle 93 + weapon_retireweapon 94 + weapon_shouldweaponidle 95 + + tfc_engineeruse 56 + tfc_finished 57 + tfc_empexplode 58 + tfc_calcempdmgrad 59 + tfc_takeempblast 60 + tfc_empremove 61 + tfc_takeconcussionblast 62 + tfc_concuss 63 +@end +; ns's linux binary is compiled with gcc 3.3, so the "base" is 0, and pev is 4 +@section ns linux + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 14 + bloodcolor 16 + tracebleed 17 + istriggered 18 + mymonsterpointer 19 + mysquadmonsterpointer 20 + gettogglestate 21 + addpoints 22 + addpointstoteam 23 + addplayeritem 24 + removeplayeritem 25 + giveammo 26 + getdelay 27 + ismoving 28 + overridereset 29 + damagedecal 30 + settogglestate 31 + startsneaking 32 + stopsneaking 33 + oncontrols 34 + issneaking 35 + isalive 36 + isbspmodel 37 + reflectgauss 38 + hastarget 39 + isinworld 40 + isplayer 41 + isnetclient 42 + teamid 43 + getnexttarget 46 + think 47 + touch 48 + use 49 + blocked 50 + respawn 52 + updateowner 53 + fbecomeprone 54 + center 55 + eyeposition 56 + earposition 57 + bodytarget 58 + illumination 59 + fvisible 60 + fvecvisible 61 + + player_jump 83 + player_duck 84 + player_prethink 85 + player_postthink 86 + player_getgunposition 87 + player_shouldfadeondeath 72 + player_impulsecommands 101 + player_updateclientdata 99 + + item_addtoplayer 64 + item_addduplicate 65 + item_getiteminfo 68 + item_candeploy 69 + item_deploy 70 + item_canholster 71 + item_holster 72 + item_updateiteminfo 74 + item_preframe 75 + item_postframe 76 + item_drop 77 + item_kill 78 + item_attachtoplayer 79 + item_primaryammoindex 80 + item_secondaryammoindex 81 + item_updateclientdata 82 + item_getweaponptr 83 + item_itemslot 84 + + weapon_extractammo 85 + weapon_extractclipammo 86 + weapon_addweapon 87 + weapon_playemptysound 88 + weapon_resetemptysound 89 + weapon_sendweaponanim 94 + weapon_isusable 73 + weapon_primaryattack 98 + weapon_secondaryattack 99 + weapon_reload 100 + weapon_weaponidle 101 + weapon_retireweapon 102 + weapon_shouldweaponidle 103 + weapon_usedecrement 104 + + ns_getpointvalue 13 + ns_awardkill 15 + ns_resetentity 45 + ns_updateonremove 51 +@end +@section ns windows + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 14 + bloodcolor 16 + tracebleed 17 + istriggered 18 + mymonsterpointer 19 + mysquadmonsterpointer 20 + gettogglestate 21 + addpoints 22 + addpointstoteam 23 + addplayeritem 24 + removeplayeritem 25 + giveammo 26 + getdelay 27 + ismoving 28 + overridereset 29 + damagedecal 30 + settogglestate 31 + startsneaking 32 + stopsneaking 33 + oncontrols 34 + issneaking 35 + isalive 36 + isbspmodel 37 + reflectgauss 38 + hastarget 39 + isinworld 40 + isplayer 41 + isnetclient 42 + teamid 43 + getnexttarget 46 + think 47 + touch 48 + use 49 + blocked 50 + respawn 52 + updateowner 53 + fbecomeprone 54 + center 55 + eyeposition 56 + earposition 57 + bodytarget 58 + illumination 59 + fvisible 60 + fvecvisible 61 + + player_jump 83 + player_duck 84 + player_prethink 85 + player_postthink 86 + player_getgunposition 87 + player_shouldfadeondeath 72 + player_impulsecommands 101 + player_updateclientdata 99 + + item_addtoplayer 64 + item_addduplicate 65 + item_getiteminfo 68 + item_candeploy 69 + item_deploy 70 + item_canholster 71 + item_holster 72 + item_updateiteminfo 74 + item_preframe 75 + item_postframe 76 + item_drop 77 + item_kill 78 + item_attachtoplayer 79 + item_primaryammoindex 80 + item_secondaryammoindex 81 + item_updateclientdata 82 + item_getweaponptr 83 + item_itemslot 84 + + weapon_extractammo 85 + weapon_extractclipammo 86 + weapon_addweapon 87 + weapon_playemptysound 88 + weapon_resetemptysound 89 + weapon_sendweaponanim 94 + weapon_isusable 73 + weapon_primaryattack 98 + weapon_secondaryattack 99 + weapon_reload 100 + weapon_weaponidle 101 + weapon_retireweapon 102 + weapon_shouldweaponidle 103 + weapon_usedecrement 104 + + ns_getpointvalue 13 + ns_awardkill 15 + ns_resetentity 45 + ns_updateonremove 51 +@end + +@section ts linux + pev 0 + base 0x60 + + spawn 9 + precache 10 + keyvalue 11 + objectcaps 14 + activate 15 + setobjectcollisionbox 18 + classify 19 + deathnotice 20 + traceattack 21 + takedamage 22 + takehealth 23 + killed 24 + bloodcolor 25 + tracebleed 26 + istriggered 27 + mymonsterpointer 28 + mysquadmonsterpointer 29 + gettogglestate 30 + addpoints 31 + addpointstoteam 32 + addplayeritem 33 + removeplayeritem 34 + giveammo 35 + getdelay 36 + ismoving 37 + overridereset 38 + damagedecal 39 + settogglestate 40 + startsneaking 41 + stopsneaking 42 + oncontrols 43 + issneaking 44 + isalive 45 + isbspmodel 46 + reflectgauss 47 + hastarget 48 + isinworld 49 + isplayer 50 + isnetclient 51 + teamid 52 + getnexttarget 53 + think 54 + touch 55 + use 56 + blocked 57 + respawn 59 + updateowner 60 + fbecomeprone 61 + center 62 + eyeposition 63 + earposition 64 + bodytarget 65 + illumination 66 + fvisible 67 + fvecvisible 68 + + player_jump 86 + player_duck 87 + player_prethink 88 + player_postthink 89 + player_getgunposition 90 + player_shouldfadeondeath 77 + player_impulsecommands 92 + player_updateclientdata 91 + + item_addtoplayer 70 + item_addduplicate 71 + item_candeploy 73 + item_deploy 74 + item_canholster 75 + item_holster 76 + item_updateiteminfo 77 + item_preframe 78 + item_postframe 79 + item_drop 80 + item_kill 81 + item_attachtoplayer 82 + item_primaryammoindex 83 + item_secondaryammoindex 84 + item_updateclientdata 85 + item_getweaponptr 86 + item_itemslot 87 + + weapon_extractammo 88 + weapon_extractclipammo 89 + weapon_addweapon 90 + weapon_playemptysound 91 + weapon_resetemptysound 92 + weapon_sendweaponanim 93 + weapon_isusable 94 + weapon_primaryattack 95 + weapon_secondaryattack 96 + weapon_reload 98 + weapon_weaponidle 99 + weapon_retireweapon 100 + weapon_shouldweaponidle 101 + weapon_usedecrement 102 + + ts_breakablerespawn 2 + ts_canusedthroughwalls 3 + ts_giveslowmul 4 + ts_goslow 5 + ts_inslow 6 + ts_isobjective 7 + ts_enableobjective 8 + ts_onfreeentprivatedata 12 + ts_shouldcollide 13 + + ts_weapon_alternateattack 97 +@end +@section ts windows + pev 4 + base 0x0 + + spawn 7 + precache 8 + keyvalue 9 + objectcaps 12 + activate 13 + setobjectcollisionbox 16 + classify 17 + deathnotice 18 + traceattack 19 + takedamage 20 + takehealth 21 + killed 22 + bloodcolor 23 + tracebleed 24 + istriggered 25 + mymonsterpointer 26 + mysquadmonsterpointer 27 + gettogglestate 28 + addpoints 29 + addpointstoteam 30 + addplayeritem 31 + removeplayeritem 32 + giveammo 33 + getdelay 34 + ismoving 35 + overridereset 36 + damagedecal 37 + settogglestate 38 + startsneaking 39 + stopsneaking 40 + oncontrols 41 + issneaking 42 + isalive 43 + isbspmodel 44 + reflectgauss 45 + hastarget 46 + isinworld 47 + isplayer 48 + isnetclient 49 + teamid 50 + getnexttarget 51 + think 52 + touch 53 + use 54 + blocked 55 + respawn 57 + updateowner 58 + fbecomeprone 59 + center 60 + eyeposition 61 + earposition 62 + bodytarget 63 + illumination 64 + fvisible 65 + fvecvisible 66 + + player_jump 84 + player_duck 85 + player_prethink 86 + player_postthink 87 + player_getgunposition 88 + player_shouldfadeondeath 75 + player_impulsecommands 90 + player_updateclientdata 89 + + item_addtoplayer 68 + item_addduplicate 69 + item_candeploy 71 + item_deploy 72 + item_canholster 73 + item_holster 74 + item_updateiteminfo 75 + item_preframe 76 + item_postframe 77 + item_drop 78 + item_kill 79 + item_attachtoplayer 80 + item_primaryammoindex 81 + item_secondaryammoindex 82 + item_updateclientdata 83 + item_getweaponptr 84 + item_itemslot 85 + + weapon_extractammo 86 + weapon_extractclipammo 87 + weapon_addweapon 88 + weapon_playemptysound 89 + weapon_resetemptysound 90 + weapon_sendweaponanim 91 + weapon_isusable 92 + weapon_primaryattack 93 + weapon_secondaryattack 94 + weapon_reload 96 + weapon_weaponidle 97 + weapon_retireweapon 98 + weapon_shouldweaponidle 99 + weapon_usedecrement 100 + + ts_breakablerespawn 0 + ts_canusedthroughwalls 1 + ts_giveslowmul 2 + ts_goslow 3 + ts_inslow 4 + ts_isobjective 5 + ts_enableobjective 6 + ts_onfreeentprivatedata 10 + ts_shouldcollide 11 + + ts_weapon_alternateattack 95 +@end + + +@section esf windows + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 13 + bloodcolor 14 + tracebleed 15 + istriggered 16 + mymonsterpointer 17 + mysquadmonsterpointer 18 + gettogglestate 19 + addpoints 20 + addpointstoteam 21 + addplayeritem 22 + removeplayeritem 23 + getdelay 24 + ismoving 25 + overridereset 26 + damagedecal 27 + settogglestate 28 + startsneaking 29 + stopsneaking 30 + oncontrols 31 + issneaking 32 + isalive 33 + isbspmodel 34 + reflectgauss 35 + hastarget 36 + isinworld 37 + isplayer 38 + isnetclient 39 + teamid 40 + getnexttarget 41 + think 42 + touch 43 + use 44 + blocked 45 + respawn 46 + updateowner 47 + fbecomeprone 48 + center 49 + eyeposition 50 + earposition 51 + bodytarget 52 + illumination 53 + fvisible 54 + fvecvisible 55 + + player_jump 124 + player_prethink 125 + player_postthink 126 + player_getgunposition 118 + player_shouldfadeondeath 59 + player_impulsecommands 128 + player_updateclientdata 127 + + item_addtoplayer 57 + item_addduplicate 58 + item_getiteminfo 59 + item_candeploy 60 + item_deploy 61 + item_canholster 62 + item_holster 63 + item_updateiteminfo 64 + item_preframe 65 + item_postframe 66 + item_drop 67 + item_kill 68 + item_attachtoplayer 69 + item_primaryammoindex 70 + item_secondaryammoindex 71 + item_updateclientdata 72 + item_getweaponptr 73 + item_itemslot 74 + + weapon_playemptysound 75 + weapon_resetemptysound 76 + weapon_sendweaponanim 77 + weapon_primaryattack 78 + weapon_secondaryattack 79 + weapon_weaponidle 80 + weapon_retireweapon 81 + weapon_shouldweaponidle 82 + weapon_usedecrement 83 +@end +@section esf linux + pev 0 + base 0x60 + + spawn 2 + precache 3 + keyvalue 4 + objectcaps 7 + activate 8 + setobjectcollisionbox 9 + classify 10 + deathnotice 11 + traceattack 12 + takedamage 13 + takehealth 14 + killed 15 + bloodcolor 16 + tracebleed 17 + istriggered 18 + mymonsterpointer 19 + mysquadmonsterpointer 20 + gettogglestate 21 + addpoints 22 + addpointstoteam 23 + addplayeritem 24 + removeplayeritem 25 + getdelay 26 + ismoving 27 + overridereset 28 + damagedecal 29 + settogglestate 30 + startsneaking 31 + stopsneaking 32 + oncontrols 33 + issneaking 34 + isalive 35 + isbspmodel 36 + reflectgauss 37 + hastarget 38 + isinworld 39 + isplayer 40 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 126 + player_prethink 127 + player_postthink 128 + player_getgunposition 120 + player_shouldfadeondeath 61 + player_impulsecommands 130 + player_updateclientdata 129 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 63 + item_canholster 64 + item_holster 65 + item_updateiteminfo 66 + item_preframe 67 + item_postframe 68 + item_drop 69 + item_kill 70 + item_attachtoplayer 71 + item_primaryammoindex 72 + item_secondaryammoindex 73 + item_updateclientdata 74 + item_getweaponptr 75 + item_itemslot 76 + + weapon_playemptysound 77 + weapon_resetemptysound 78 + weapon_sendweaponanim 79 + weapon_primaryattack 80 + weapon_secondaryattack 81 + weapon_weaponidle 82 + weapon_retireweapon 83 + weapon_shouldweaponidle 84 + weapon_usedecrement 85 +@end + +; ESF Open Beta is built with GCC 3.x, and the VTable was slightly changed +@section esf_openbeta linux + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addpoints 21 + addpointstoteam 22 + addplayeritem 23 + removeplayeritem 24 + getdelay 25 + ismoving 26 + overridereset 27 + damagedecal 28 + settogglestate 29 + startsneaking 30 + stopsneaking 31 + oncontrols 32 + issneaking 33 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 131 + player_prethink 132 + player_postthink 133 + player_getgunposition 120 + player_shouldfadeondeath 61 + player_impulsecommands 135 + player_updateclientdata 134 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 63 + item_canholster 64 + item_holster 65 + item_updateiteminfo 66 + item_preframe 67 + item_postframe 68 + item_drop 69 + item_kill 70 + item_attachtoplayer 71 + item_primaryammoindex 72 + item_secondaryammoindex 73 + item_updateclientdata 74 + item_getweaponptr 75 + item_itemslot 76 + + weapon_playemptysound 77 + weapon_resetemptysound 78 + weapon_sendweaponanim 79 + weapon_primaryattack 80 + weapon_secondaryattack 81 + weapon_weaponidle 82 + weapon_retireweapon 83 + weapon_shouldweaponidle 84 + weapon_usedecrement 85 + + esf_isenvmodel 40 + esf_takedamage2 12 + +@end +@section esf_openbeta windows + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 13 + killed 14 + bloodcolor 15 + tracebleed 16 + istriggered 17 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addpoints 21 + addpointstoteam 22 + addplayeritem 23 + removeplayeritem 24 + getdelay 25 + ismoving 26 + overridereset 27 + damagedecal 28 + settogglestate 29 + startsneaking 30 + stopsneaking 31 + oncontrols 32 + issneaking 33 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 41 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + player_jump 131 + player_prethink 132 + player_postthink 133 + player_getgunposition 120 + player_shouldfadeondeath 61 + player_impulsecommands 135 + player_updateclientdata 134 + + item_addtoplayer 59 + item_addduplicate 60 + item_getiteminfo 61 + item_candeploy 62 + item_deploy 63 + item_canholster 64 + item_holster 65 + item_updateiteminfo 66 + item_preframe 67 + item_postframe 68 + item_drop 69 + item_kill 70 + item_attachtoplayer 71 + item_primaryammoindex 72 + item_secondaryammoindex 73 + item_updateclientdata 74 + item_getweaponptr 75 + item_itemslot 76 + + weapon_playemptysound 77 + weapon_resetemptysound 78 + weapon_sendweaponanim 79 + weapon_primaryattack 80 + weapon_secondaryattack 81 + weapon_weaponidle 82 + weapon_retireweapon 83 + weapon_shouldweaponidle 84 + weapon_usedecrement 85 + + esf_isenvmodel 40 + esf_takedamage2 12 + +@end +@section valve linux + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 13 + bloodcolor 14 + tracebleed 15 + istriggered 16 + mymonsterpointer 17 + mysquadmonsterpointer 18 + gettogglestate 19 + addpoints 20 + addpointstoteam 21 + addplayeritem 22 + removeplayeritem 23 + giveammo 24 + getdelay 25 + ismoving 26 + overridereset 27 + damagedecal 28 + settogglestate 29 + startsneaking 30 + stopsneaking 31 + oncontrols 32 + issneaking 33 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 40 + teamid 41 + getnexttarget 42 + think 43 + touch 44 + use 45 + blocked 46 + respawn 47 + updateowner 48 + fbecomeprone 49 + center 50 + eyeposition 51 + earposition 52 + bodytarget 53 + illumination 54 + fvisible 55 + fvecvisible 56 + + player_jump 125 + player_duck 126 + player_prethink 127 + player_postthink 128 + player_getgunposition 119 + player_shouldfadeondeath 60 + player_impulsecommands 130 + player_updateclientdata 129 + + item_addtoplayer 58 + item_addduplicate 59 + item_getiteminfo 60 + item_candeploy 61 + item_deploy 62 + item_canholster 63 + item_holster 64 + item_updateiteminfo 65 + item_preframe 66 + item_postframe 67 + item_drop 68 + item_kill 69 + item_attachtoplayer 70 + item_primaryammoindex 71 + item_secondaryammoindex 72 + item_updateclientdata 73 + item_getweaponptr 74 + item_itemslot 75 + + weapon_extractammo 76 + weapon_extractclipammo 77 + weapon_addweapon 78 + weapon_playemptysound 79 + weapon_resetemptysound 80 + weapon_sendweaponanim 81 + weapon_isusable 82 + weapon_primaryattack 83 + weapon_secondaryattack 84 + weapon_reload 85 + weapon_weaponidle 86 + weapon_retireweapon 87 + weapon_shouldweaponidle 88 + weapon_usedecrement 89 +@end +@section valve windows + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 13 + bloodcolor 14 + tracebleed 15 + istriggered 16 + mymonsterpointer 17 + mysquadmonsterpointer 18 + gettogglestate 19 + addpoints 20 + addpointstoteam 21 + addplayeritem 22 + removeplayeritem 23 + giveammo 24 + getdelay 25 + ismoving 26 + overridereset 27 + damagedecal 28 + settogglestate 29 + startsneaking 30 + stopsneaking 31 + oncontrols 32 + issneaking 33 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 40 + teamid 41 + getnexttarget 42 + think 43 + touch 44 + use 45 + blocked 46 + respawn 47 + updateowner 48 + fbecomeprone 49 + center 50 + eyeposition 51 + earposition 52 + bodytarget 53 + illumination 54 + fvisible 55 + fvecvisible 56 + + player_jump 125 + player_duck 126 + player_prethink 127 + player_postthink 128 + player_getgunposition 119 + player_shouldfadeondeath 60 + player_impulsecommands 130 + player_updateclientdata 129 + + item_addtoplayer 58 + item_addduplicate 59 + item_getiteminfo 60 + item_candeploy 61 + item_deploy 62 + item_canholster 63 + item_holster 64 + item_updateiteminfo 65 + item_preframe 66 + item_postframe 67 + item_drop 68 + item_kill 69 + item_attachtoplayer 70 + item_primaryammoindex 71 + item_secondaryammoindex 72 + item_updateclientdata 73 + item_getweaponptr 74 + item_itemslot 75 + + weapon_extractammo 76 + weapon_extractclipammo 77 + weapon_addweapon 78 + weapon_playemptysound 79 + weapon_resetemptysound 80 + weapon_sendweaponanim 81 + weapon_isusable 82 + weapon_primaryattack 83 + weapon_secondaryattack 84 + weapon_reload 85 + weapon_weaponidle 86 + weapon_retireweapon 87 + weapon_shouldweaponidle 88 + weapon_usedecrement 89 +@end + +@section valve mac + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + activate 6 + setobjectcollisionbox 7 + classify 8 + deathnotice 9 + traceattack 10 + takedamage 11 + takehealth 12 + killed 13 + bloodcolor 14 + tracebleed 15 + istriggered 16 + mymonsterpointer 17 + mysquadmonsterpointer 18 + gettogglestate 19 + addpoints 20 + addpointstoteam 21 + addplayeritem 22 + removeplayeritem 23 + giveammo 24 + getdelay 25 + ismoving 26 + overridereset 27 + damagedecal 28 + settogglestate 29 + startsneaking 30 + stopsneaking 31 + oncontrols 32 + issneaking 33 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 40 + teamid 41 + getnexttarget 42 + think 43 + touch 44 + use 45 + blocked 46 + respawn 47 + updateowner 48 + fbecomeprone 49 + center 50 + eyeposition 51 + earposition 52 + bodytarget 53 + illumination 54 + fvisible 55 + fvecvisible 56 + + player_jump 125 + player_duck 126 + player_prethink 127 + player_postthink 128 + player_getgunposition 119 + player_shouldfadeondeath 60 + player_impulsecommands 130 + player_updateclientdata 129 + + item_addtoplayer 58 + item_addduplicate 59 + item_getiteminfo 60 + item_candeploy 61 + item_deploy 62 + item_canholster 63 + item_holster 64 + item_updateiteminfo 65 + item_preframe 66 + item_postframe 67 + item_drop 68 + item_kill 69 + item_attachtoplayer 70 + item_primaryammoindex 71 + item_secondaryammoindex 72 + item_updateclientdata 73 + item_getweaponptr 74 + item_itemslot 75 + + weapon_extractammo 76 + weapon_extractclipammo 77 + weapon_addweapon 78 + weapon_playemptysound 79 + weapon_resetemptysound 80 + weapon_sendweaponanim 81 + weapon_isusable 82 + weapon_primaryattack 83 + weapon_secondaryattack 84 + weapon_reload 85 + weapon_weaponidle 86 + weapon_retireweapon 87 + weapon_shouldweaponidle 88 + weapon_usedecrement 89 +@end + +; Sven-Coop has no linux binaries. This makes disassembly much harder. +; These offsets were contributed by ts2do +@section SvenCoop windows + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 5 + takedamage 11 + addpoints 20 + addpointstoteam 21 + addplayeritem 22 + removeplayeritem 23 + giveammo 24 + oncontrols 32 + isalive 34 + isbspmodel 35 + reflectgauss 36 + hastarget 37 + isinworld 38 + isplayer 39 + isnetclient 40 + teamid 42 + getnexttarget 43 + think 44 + touch 45 + use 46 + blocked 47 + respawn 48 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + +@end diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/modules.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/modules.ini new file mode 100644 index 0000000..50f4c2d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/modules.ini @@ -0,0 +1,40 @@ + +;;; +; To enable a module, remove the semi-colon (;) in front of its name. +; If it's not here, simply add it its name, one per line. +; You don't need to write the _amxx part or the file extension. +;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SQL Modules usually need to be enabled manually ;; +;; You can have any number on at a time. Use ;; +;; amx_sql_type in sql.cfg to specify the default ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;mysql +;sqlite + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Put third party modules below here. ;; +;; You can just list their names, without the _amxx ;; +;; or file extension. ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; These modules will be auto-detected and loaded ;; +;; as needed. You do not need to enable them here ;; +;; unless you have problems. ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +fun +;engine +;fakemeta +;geoip +;sockets +;regex +;nvault +cstrike +csx +;hamsandwich diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/plugins.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/plugins.ini new file mode 100644 index 0000000..f7f8d06 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/plugins.ini @@ -0,0 +1,49 @@ +; AMX Mod X plugins + +; Admin Base - Always one has to be activated +admin.amxx ; admin base (required for any admin-related) +;admin_sql.amxx ; admin base - SQL version (comment admin.amxx) + +; Basic +admincmd.amxx ; basic admin console commands +adminhelp.amxx ; help command for admin console commands +adminslots.amxx ; slot reservation +multilingual.amxx ; Multi-Lingual management + +; Menus +menufront.amxx ; front-end for admin menus +cmdmenu.amxx ; command menu (speech, settings) +plmenu.amxx ; players menu (kick, ban, client cmds.) +;telemenu.amxx ; teleport menu (Fun Module required!) +mapsmenu.amxx ; maps menu (vote, changelevel) +pluginmenu.amxx ; Menus for commands/cvars organized by plugin + +; Chat / Messages +adminchat.amxx ; console chat commands +antiflood.amxx ; prevent clients from chat-flooding the server +scrollmsg.amxx ; displays a scrolling message +imessage.amxx ; displays information messages +adminvote.amxx ; vote commands + +; Map related +nextmap.amxx ; displays next map in mapcycle +mapchooser.amxx ; allows to vote for next map +timeleft.amxx ; displays time left on map + +; Configuration +pausecfg.amxx ; allows to pause and unpause some plugins +statscfg.amxx ; allows to manage stats plugins via menu and commands + +; Counter-Strike +;restmenu.amxx ; restrict weapons menu +statsx.amxx ; stats on death or round end (CSX Module required!) +miscstats.amxx ; bunch of events announcement for Counter-Strike +;stats_logging.amxx ; weapons stats logging (CSX Module required!) + +; Enable to use AMX Mod plugins +;amxmod_compat.amxx ; AMX Mod backwards compatibility layer + +; Custom - Add 3rd party plugins here +;QuakeSounds.amxx +;bullet_damage.amxx +abd.amxx diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/quakesounds.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/quakesounds.ini new file mode 100644 index 0000000..3a30ef9 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/quakesounds.ini @@ -0,0 +1,156 @@ +// NOTE: IF YOU DISABLE AN EVENT, FOR EXAMPLE "HEADSHOT EVENT", THE HEAD SHOT SOUNDS WILL NOT BE PRECACHED. +// NOTE: REGARDING HUD MESSAGES [TE_TEXTMESSAGE], USE THE EMPTY VALUE TO SET NO HUD MESSAGES. +// NOTE: IF YOU DISABLE THE PLUGIN, NO SOUNDS WILL BE PRECACHED. + +# ENABLES OR DISABLES THE PLUGIN. +ENABLE/DISABLE PLUGIN = 1 + +# HUD MESSAGES IN RGB [RED, GREEN, BLUE]. +# NOTE: USE UNDERLINE FOR RANDOM VALUE. THE UNDERLINE IS '_'. +# NOTE: THE MAXIMUM VALUE IS 255 AND THE MINIMUM VALUE IS 0. +HUDMSG RED = _ +HUDMSG GREEN = _ +HUDMSG BLUE = _ + +# KILLS STREAK. +# NOTE: SOUNDS LIKE MONSTER KILL, GOD LIKE, MULTI KILL, MEGA KILL, TRIPLE KILL, ... +# NOTE: YOU CAN MODIFY THE "REQUIREDKILLS" VALUES. +# NOTE: YOU CAN ALSO MODIFY THE MESSAGES THAT WILL BE SENT TO THE PLAYERS. +# NOTE: YOU CAN ALSO ADD OR REMOVE SOUNDS FROM THIS LIST. +# NOTE: THERE'S NO SOUNDS LIMIT. +KILLSTREAK EVENT = 1 + +; Sounds structure: +; SOUND = {soundnumber} REQUIREDKILLS {kills} = {sound} +; SOUND = {soundnumber} MESSAGE @ %s {message} + +SOUND = 1 REQUIREDKILLS 3 = QuakeSounds/triplekill.wav +SOUND = 1 MESSAGE @ %s is on TRIPLE KILL! + +SOUND = 2 REQUIREDKILLS 5 = QuakeSounds/multikill.wav +SOUND = 2 MESSAGE @ %s is on MULTI KILL! + +SOUND = 3 REQUIREDKILLS 6 = QuakeSounds/rampage.wav +SOUND = 3 MESSAGE @ %s is on RAMPAGE! + +SOUND = 4 REQUIREDKILLS 7 = QuakeSounds/killingspree.wav +SOUND = 4 MESSAGE @ %s is on a KILLING SPREE! + +SOUND = 5 REQUIREDKILLS 9 = QuakeSounds/dominating.wav +SOUND = 5 MESSAGE @ %s is DOMINATING! + +SOUND = 6 REQUIREDKILLS 11 = QuakeSounds/unstoppable.wav +SOUND = 6 MESSAGE @ %s is UNSTOPPABLE! + +SOUND = 7 REQUIREDKILLS 13 = QuakeSounds/megakill.wav +SOUND = 7 MESSAGE @ %s made a MEGA KILL! + +SOUND = 8 REQUIREDKILLS 15 = QuakeSounds/ultrakill.wav +SOUND = 8 MESSAGE @ %s made an ULTRA KILL! + +SOUND = 9 REQUIREDKILLS 16 = QuakeSounds/eagleeye.wav +SOUND = 9 MESSAGE @ %s has an EAGLE EYE! + +SOUND = 10 REQUIREDKILLS 17 = QuakeSounds/ownage.wav +SOUND = 10 MESSAGE @ %s OWNS! + +SOUND = 11 REQUIREDKILLS 18 = QuakeSounds/ludicrouskill.wav +SOUND = 11 MESSAGE @ %s made a LUDICROUS KILL! + +SOUND = 12 REQUIREDKILLS 19 = QuakeSounds/headhunter.wav +SOUND = 12 MESSAGE @ %s is a HEAD HUNTER! + +SOUND = 13 REQUIREDKILLS 20 = QuakeSounds/whickedsick.wav +SOUND = 13 MESSAGE @ %s is WICKED SICK! + +SOUND = 14 REQUIREDKILLS 21 = QuakeSounds/monsterkill.wav +SOUND = 14 MESSAGE @ %s made a MONSTER KILL! + +SOUND = 15 REQUIREDKILLS 23 = QuakeSounds/holyshit.wav +SOUND = 15 MESSAGE @ HOLY SHIT! %s GOT ANOTHER ONE! + +SOUND = 16 REQUIREDKILLS 24 = QuakeSounds/godlike.wav +SOUND = 16 MESSAGE @ %s IS G O D L I K E !!! + +# IF YOU WANNA ADD ANOTHER KILLS STREAK SOUND, IT WILL BE THE SOUND WITH NUMBER '17'. + +# HEADSHOT +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE} %s {MESSAGE}", WHERE THE FIRST '%s' IS THE KILLER NAME AND THE NEXT '%s' IS THE VICTIM NAME. +# NOTE: EXAMPLE OF HUD MESSAGE FOR HEADSHOT: "%s REMOVED %s's HEAD!" (WITHOUT QUOTES). +# NOTE: THIS HUD MESSAGE WILL BE SENT TO ALL PLAYERS (NOT ONLY TO THE KILLER OR ONLY TO THE VICTIM). +# NOTE: I SUGGEST TO LEAVE THE MESSAGE EMPTY ON POPULATED GAME SERVERS. +# NOTE: BUT IT LOOKS FINE ON DAY OF DEFEAT. +HEADSHOT EVENT = 1 +HEADSHOT ONLY KILLER = 1 +HEADSHOT SOUNDS = QuakeSounds/headshot.wav , QuakeSounds/headshot2.wav , QuakeSounds/headshot3.wav +HEADSHOT HUDMSG = + +# SUICIDE +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE}" OR "{MESSAGE} %s", WHERE '%s' IS THE VICTIM. +SUICIDE EVENT = 1 +SUICIDE SOUNDS = QuakeSounds/suicide.wav , QuakeSounds/suicide2.wav , QuakeSounds/suicide3.wav , QuakeSounds/suicide4.wav +SUICIDE HUDMSG = %s KNOWS HOW THE KILL COMMAND WORKS! + +# GRENADE KILL +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE} %s {MESSAGE}", WHERE THE FIRST '%s' IS THE KILLER NAME AND THE NEXT '%s' IS THE VICTIM NAME. +NADE EVENT = 1 +NADE SOUNDS = QuakeSounds/nade.wav +NADE HUDMSG = %s MADE A PRECISION THROW TO %s + +# TEAM KILL +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE}" OR "{MESSAGE} %s", WHERE '%s' IS THE KILLER NAME. +TEAMKILL EVENT = 1 +TEAMKILL SOUNDS = QuakeSounds/teamkiller.wav +TEAMKILL HUDMSG = %s IS SICK! + +# KNIFE KILL +# NOTE: THE HUDM ESSAGE STRUCTURE IS "%s {MESSAGE} %s {MESSAGE}", WHERE THE FIRST '%s' IS THE KILLER NAME AND THE NEXT '%s' IS THE VICTIM NAME. +KNIFE EVENT = 1 +KNIFE SOUNDS = QuakeSounds/knife.wav , QuakeSounds/knife2.wav , QuakeSounds/knife3.wav +KNIFE HUDMSG = %s SLICED AND DICED %s! + +# FIRST BLOOD +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE}" OR "{MESSAGE} %s", WHERE '%s' IS THE KILLER NAME. +FIRSTBLOOD EVENT = 1 +FIRSTBLOOD SOUNDS = QuakeSounds/firstblood.wav , QuakeSounds/firstblood2.wav , QuakeSounds/firstblood3.wav +FIRSTBLOOD HUDMSG = %s made the FIRST BLOOD! + +# ROUND START +# NOTE: THE HUD MESSAGE STRUCTURE IS "{MESSAGE}", THE MESSAGE YOU WANT, DON'T USE '%s' HERE! +ROUNDSTART EVENT = 1 +ROUNDSTART SOUNDS = QuakeSounds/prepare.wav , QuakeSounds/prepare2.wav , QuakeSounds/prepare3.wav , QuakeSounds/prepare4.wav +ROUNDSTART HUDMSG = PREPARE TO FIGHT! + +# DOUBLE KILL +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE}" OR "{MESSAGE} %s", WHERE '%s' IS THE KILLER NAME. +DOUBLEKILL EVENT = 1 +DOUBLEKILL SOUNDS = QuakeSounds/doublekill.wav , QuakeSounds/doublekill2.wav +DOUBLEKILL HUDMSG = WOW, %s made a DOUBLE KILL! + +# HATTRICK +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE}" OR "{MESSAGE} %s", WHERE '%s' IS THE LEADER NAME, THE PLAYER WITH MOST KILLS FOR THIS ROUND. +# NOTE: THE 'MIN FRAGS FOR HATTRICK' MEANS HOW MANY FRAGS YOU SHOULD DO THIS ROUND TO APPEAR AT THE ROUND END AS "<%> WAS UNREAL THIS ROUND!". +HATTRICK EVENT = 1 +HATTRICK SOUNDS = QuakeSounds/hattrick.wav +HATTRICK HUDMSG = %s WAS UNREAL THIS ROUND! +MIN FRAGS FOR HATTRICK = 7 + +# FLAWLESS VICTORY +# NOTE: THE HUD MESSAGE STRUCTURE IS "{MESSAGE} %s {MESSAGE}", WHERE '%s' IS THE TEAM NAME. +# NOTE: YOU CAN SET THE TEAM NAMES TO BE SHOWN. YOU CAN USE FOR EXAMPLE 'TERRO' INSTEAD OF THE DEFAULT VALUE 'TERRORIST'. +FLAWLESS VICTORY = 1 +FLAWLESS SOUNDS = QuakeSounds/flawless.wav +FLAWLESS VICTORY HUDMSG = FLAWLESS %s VICTORY! +TERRO TEAM NAME = TERRORIST +CT TEAM NAME = COUNTER-TERRORIST + +# REVENGE +# NOTE: THE HUD MESSAGE STRUCTURE IS "%s {MESSAGE}" OR "{MESSAGE} %s", WHERE '%s' IS THE KILLER OR THE VICTIM NAME. +# NOTE: IF 'REVENGE ONLY FOR KILLER' IS SET TO 1, THE VICTIM WILL NOT HEAR THE SOUND. +REVENGE EVENT = 1 +REVENGE ONLY FOR KILLER = 0 +REVENGE SOUNDS = QuakeSounds/payback.wav +REVENGE KILLER MESSAGE = YOU'VE PAID %s BACK! +REVENGE VICTIM MESSAGE = %s HAS JUST PAID YOU BACK! + + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/speech.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/speech.ini new file mode 100644 index 0000000..725acf6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/speech.ini @@ -0,0 +1,34 @@ +; Menu configuration file +; File location: $moddir/addons/amxmodx/configs/speech.ini +; To use with Commands Menu plugin + +; NOTE: By default in all settings the access level is set to "u". +; However you can change that, to limit the access to some settings. + +; Commands Menu: ; < description > < command > < flags > < access level > +; "a" - execute from server console +; "b" - execute from admin console +; "c" - execute on all clients +; "d" - back to menu when executed + +"Hello!" "spk \'vox/hello\'" "cd" "u" +"Don't think so" "spk \'barney/dontguess\'" "cd" "u" +"Don't ask me" "spk \'barney/dontaskme\'" "cd" "u" +"Hey! Stop that!" "spk \'barney/donthurtem\'" "cd" "u" +"Yup" "spk \'barney/yup\'" "cd" "u" +"Nope" "spk \'barney/nope\'" "cd" "u" +"Maybe" "spk \'barney/maybe\'" "cd" "u" +"Seeya" "spk \'barney/seeya\'" "cd" "u" +"Man that sounded bad" "spk \'barney/soundsbad\'" "cd" "u" +"Hello and die" "spk \'vox/hello and die\'" "cd" "u" +"Move!" "spk \'hgrunt/move! _comma yessir!\'" "cd" "u" +"You will definitely pay!" "spk \'hgrunt/c2a2_hg_chat5a\'" "cd" "u" +"Laughter" "spk \'hgrunt/c2a3_hg_laugh\'" "cd" "u" +"Silence!" "spk \'hgrunt/silence!\'" "cd" "u" +"You talk too much" "spk \'barney/youtalkmuch\'" "cd" "u" +"You thinkin?" "spk \'barney/thinking\'" "cd" "u" +"Open fire Gordon!" "spk \'barney/openfire\'" "cd" "u" +"Couldnt make a bigger mess" "spk \'barney/bigmess\'" "cd" "u" +"I have a Bad feeling" "spk \'barney/badfeeling\'" "cd" "u" +"Yes sir!" "spk \'hgrunt/yessir!\'" "cd" "u" +"No sir" "spk \'barney/nosir\'" "cd" "u" diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/sql.cfg b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/sql.cfg new file mode 100644 index 0000000..b8cd765 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/sql.cfg @@ -0,0 +1,14 @@ +// SQL configuration file +// File location: $moddir/addons/amxmodx/configs/sql.cfg + +// *NOTE* Linux users may encounter problems if they specify "localhost" instead of "127.0.0.1" +// We recommend using your server IP address instead of its name + +// *NOTE* amx_sql_type specifies the DEFAULT database type which admin.sma will use. + +amx_sql_host "127.0.0.1" +amx_sql_user "root" +amx_sql_pass "" +amx_sql_db "amx" +amx_sql_table "admins" +amx_sql_type "mysql" diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/stats.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/stats.ini new file mode 100644 index 0000000..13a1218 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/stats.ini @@ -0,0 +1,8 @@ +;Generated by Stats Configuration Plugin. Do not modify! +;Variable Description +ShowAttackers ;Show Attackers +ShowVictims ;Show Victims +ShowStats ;HUD-stats default +SayRankStats ;Say /rankstats +SayRank ;Say /rank +SayTop15 ;Say /top15 diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/users.ini b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/users.ini new file mode 100644 index 0000000..6e3f97e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/configs/users.ini @@ -0,0 +1,54 @@ +; Users configuration file +; File location: $moddir/addons/amxmodx/configs/users.ini + +; Line starting with ; is a comment + +; Access flags: +; a - immunity (can't be kicked/baned/slayed/slaped and affected by other commmands) +; b - reservation (can join on reserved slots) +; c - amx_kick command +; d - amx_ban and amx_unban commands +; e - amx_slay and amx_slap commands +; f - amx_map command +; g - amx_cvar command (not all cvars will be available) +; h - amx_cfg command +; i - amx_chat and other chat commands +; j - amx_vote and other vote commands +; k - access to sv_password cvar (by amx_cvar command) +; l - access to amx_rcon command and rcon_password cvar (by amx_cvar command) +; m - custom level A (for additional plugins) +; n - custom level B +; o - custom level C +; p - custom level D +; q - custom level E +; r - custom level F +; s - custom level G +; t - custom level H +; u - menu access +; z - user (no admin) + +; Account flags: +; a - disconnect player on invalid password +; b - clan tag +; c - this is steamid/wonid +; d - this is ip +; e - password is not checked (only name/ip/steamid needed) +; k - name or tag is case sensitive. eg: if you set it so the name "Ham" +; is protected and case sensitive (flags "k" only), then anybody +; can use the names "haM", "HAM", "ham", etc, but not "Ham" + +; Password: +; Add to your autoexec.cfg: setinfo _pw "" +; Change _pw to the value of amx_password_field + +; Format of admin account: +; + +; Examples of admin accounts: +; "STEAM_0:0:123456" "" "abcdefghijklmnopqrstu" "ce" +; "123.45.67.89" "" "abcdefghijklmnopqrstu" "de" +; "My Name" "my_password" "abcdefghijklmnopqrstu" "a" +"STEAM_0:1:35537" "" "abcdefghijklmnopqrstu" "ce" +"STEAM_0:0:39361676" "" "abcdefghijklmnopqrstu" "ce" +"STEAM_0:0:5332910" "" "abcdefghijklmnopqrstu" "ce" +"loopback" "" "abcdefghijklmnopqrstu" "de" diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/GeoIP.dat b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/GeoIP.dat new file mode 100644 index 0000000..13a6518 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/GeoIP.dat differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/csstats.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/csstats.amxx new file mode 100644 index 0000000..b177af5 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/csstats.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/admin.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/admin.txt new file mode 100644 index 0000000..503a7e7 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/admin.txt @@ -0,0 +1,259 @@ +[en] +LOADED_ADMIN = Loaded 1 admin from file +LOADED_ADMINS = Loaded %d admins from file +SQL_CANT_CON = SQL error: can't connect: '%s' +SQL_CANT_LOAD_ADMINS = SQL error: can't load admins: '%s' +NO_ADMINS = No admins found. +SQL_LOADED_ADMIN = Loaded 1 admin from database +SQL_LOADED_ADMINS = Loaded %d admins from database +INV_PAS = Invalid Password! +PAS_ACC = Password accepted +PRIV_SET = Privileges set +NO_ENTRY = You have no entry to the server... + +[de] +LOADED_ADMIN = 1 Admin aus der Datei geladen +LOADED_ADMINS = %d Admins aus der Datei geladen +SQL_CANT_CON = SQL Error: Kann keine Verbindung herstellen: '%s' +SQL_CANT_LOAD_ADMINS = SQL Error: Kann keine Admins laden: '%s' +NO_ADMINS = Keine Admins gefunden. +SQL_LOADED_ADMIN = 1 Admin aus der Datenbank geladen +SQL_LOADED_ADMINS = %d Admins aus der Datenbank geladen +INV_PAS = Passwort falsch! +PAS_ACC = Passwort akzeptiert +PRIV_SET = Rechte gesetzt +NO_ENTRY = Du hast keinen Zugang zu diesem Server... + +[sr] +LOADED_ADMIN = Ucitan 1 administrator iz fajla +LOADED_ADMINS = Ucitano %d administratora iz fajla +SQL_CANT_CON = SQL greska: nije moguce uspostaviti vezu sa: '%s' +SQL_CANT_LOAD_ADMINS = SQL greska: nije moguce ucitati administratore: '%s' +NO_ADMINS = Nema nadjenih administratora. +SQL_LOADED_ADMIN = Ucitan 1 administrator iz baze podataka +SQL_LOADED_ADMINS = Ucitano %d administratora iz baze podataka +INV_PAS = Pogresna lozinka! +PAS_ACC = Lozinka prihvacena +PRIV_SET = Privilegije podesene +NO_ENTRY = Nemate pristup serveru... + +[tr] +LOADED_ADMIN = 1 Admin yuklendi +LOADED_ADMINS = %d Admin dosyadan yuklendi +SQL_CANT_CON = SQL hatasi: baglanamiyor: '%s' +SQL_CANT_LOAD_ADMINS = SQL hatasi: admin yuklenemiyor: '%s' +NO_ADMINS = Hic admin bulunamadi. +SQL_LOADED_ADMIN = 1 Admin dosyadan yuklendi +SQL_LOADED_ADMINS = %d Admin ana hafizadan yuklendi +INV_PAS = Hatali kod! +PAS_ACC = Kod onaylandi +PRIV_SET = Haklar onaylandi +NO_ENTRY = Servere giris hakkiniz yok... + +[fr] +LOADED_ADMIN = 1 admin a ete charge depuis le fichier +LOADED_ADMINS = %d admins ont ete charges depuis le fichier +SQL_CANT_CON = Erreur SQL: Impossible de se connecter: '%s' +SQL_CANT_LOAD_ADMINS = Erreur SQL: Impossible de charger les admins: '%s' +NO_ADMINS = Aucun admin trouve. +SQL_LOADED_ADMIN = 1 admin a ete charge depuis la base de donnees +SQL_LOADED_ADMINS = %d admins ont ete charges depuis la base de donnees +INV_PAS = Mot de Passe Invalide! +PAS_ACC = Mot de Passe Accepte +PRIV_SET = Mise en place des Privileges +NO_ENTRY = Tu n'as aucun droit acces sur ce serveur... + +[sv] +LOADED_ADMIN = Laddade en administrat'o'r fran fil +LOADED_ADMINS = Laddade %d administrat'o'rer fran fil +SQL_CANT_CON = SQL-fel: kan inte ansluta: '%s' +SQL_CANT_LOAD_ADMINS = SQL-fel: kan inte ladda administrat'o'rer: '%s' +NO_ADMINS = Inga administrat'o'rer hittade. +SQL_LOADED_ADMIN = Laddade en administrat'o'r ur databas +SQL_LOADED_ADMINS = Laddade %d administrat'o'rer ur databas +INV_PAS = Ogiltigt l'o'senord! +PAS_ACC = L'o'senord accepterat +PRIV_SET = Befogenheter satta +NO_ENTRY = Du har ingen tillgang till servern... + +[da] +LOADED_ADMIN = Indlaest 1 admin fra fil +LOADED_ADMINS = Indlaest %d adminer fra fil +SQL_CANT_CON = SQL fejl: kan ikke opnaa forbindelse: '%s' +SQL_CANT_LOAD_ADMINS = SQL fejl: kan ikke indlaese adminer: '%s' +NO_ADMINS = Ingen adminer fundet. +SQL_LOADED_ADMIN = Indlaest 1 admin fra database +SQL_LOADED_ADMINS = Indlaest %d adminer fra database +INV_PAS = Ugyldig adgangskode! +PAS_ACC = Adgangskode accepteret +PRIV_SET = Privilegier sat +NO_ENTRY = Du er ikke registreret paa serveren ... + +[pl] +LOADED_ADMIN = Zaladowano 1 admina z pliku +LOADED_ADMINS = Zaladowano %d adminow z pliku +SQL_CANT_CON = Blad SQL: nie mozna polaczyc: '%s' +SQL_CANT_LOAD_ADMINS = Blad SQL: nie mozna zalad. adminow: '%s' +NO_ADMINS = Nie znaleziono adminow. +SQL_LOADED_ADMIN = Zaladowano 1 admina z bazy danych +SQL_LOADED_ADMINS = Zaladowano %d admino z bazy danych +INV_PAS = Zle haslo! +PAS_ACC = Haslo zaakceptowane +PRIV_SET = Przywileje ustawione +NO_ENTRY = Nie mozesz wejsc na ten serwer... + +[nl] +LOADED_ADMIN = 1 admin ingeladen vanuit bestand +LOADED_ADMINS = %d admins ingeladen vanuit bestand +SQL_CANT_CON = SQL Fout: Kan geen verbinding maken: '%s' +SQL_CANT_LOAD_ADMINS = SQL Fout: Kan admins niet inladen: '%s' +NO_ADMINS = Geen admins gevonden. +SQL_LOADED_ADMIN = 1 admin ingeladen vanuit databank +SQL_LOADED_ADMINS = %d admins ingeladen vanuit databank +INV_PAS = Ongeldig wachtwoord! +PAS_ACC = Wachtwoord geaccepteerd +PRIV_SET = Privileges ingesteld +NO_ENTRY = Je hebt geen toegang tot deze server... + +[es] +LOADED_ADMIN = 1 administrador cargado del archivo +LOADED_ADMINS = %d administradores cargados del archivo +SQL_CANT_CON = Error de SQL: no se pudo conectar: '%s' +SQL_CANT_LOAD_ADMINS = Error de SQL: no se pudieron cargar los administradores: '%s' +NO_ADMINS = No se encontraron administradores. +SQL_LOADED_ADMIN = 1 administrador cargado de la base de datos +SQL_LOADED_ADMINS = %d administradores cargados de la base de datos +INV_PAS = Contrasenya Incorrecta! +PAS_ACC = Contrasenya Aceptada +PRIV_SET = Privilegios establecidos +NO_ENTRY = No tienes acceso a este servidor... + +[bp] +LOADED_ADMIN = Carregado 1 admin do arquivo +LOADED_ADMINS = Carregado %d Admins do arquivo +SQL_CANT_CON = Erro de SQL: nao pode conectar: '%s' +SQL_CANT_LOAD_ADMINS = Erro de SQL: nao pode carregar os admins: '%s' +NO_ADMINS = Nenhum administrador encontrado. +SQL_LOADED_ADMIN = Carregado 1 admin do banco de dados +SQL_LOADED_ADMINS = Carregados %d Admins do banco de dados +INV_PAS = Password invalido! +PAS_ACC = Password aceito +PRIV_SET = Privilegios estabelecidos +NO_ENTRY = Voce nao tem acesso ao servidor... + +[cz] +LOADED_ADMIN = 1 admin nacteny ze souboru +LOADED_ADMINS = %d adminu nactenych ze souboru +SQL_CANT_CON = SQL error: nemuzu se pripojit: '%s' +SQL_CANT_LOAD_ADMINS = SQL error: Nemuzu nacist adminy: '%s' +NO_ADMINS = Zadny admin nenalezen. +SQL_LOADED_ADMIN = 1 admin nacteny z databaze +SQL_LOADED_ADMINS = %d adminu nactenych z databaze +INV_PAS = Nespravne heslo! +PAS_ACC = Heslo overeno +PRIV_SET = Privilegia nastavena +NO_ENTRY = Nemas zadny zaznam na serveru... + +[fi] +LOADED_ADMIN = Ladattiin 1 admin tiedostosta +LOADED_ADMINS = Ladattiim %d adminia tiedostosta +SQL_CANT_CON = SQL virhe: Ei voi yhdistaa: '%s' +SQL_CANT_LOAD_ADMINS = SQL virhe: Ei voi ladata admineita: '%s' +NO_ADMINS = Ei loydetty admineita +SQL_LOADED_ADMIN = Ladattiin 1 admin tietokannasta +SQL_LOADED_ADMINS = Ladattiin %d adminia tietokannasta +INV_PAS = Vaara salasana! +PAS_ACC = Salasana oikein +PRIV_SET = Etuoikeudet laitettu +NO_ENTRY = Sinulla ei ole merkintaa palvelimella... + +[ls] +LOADED_ADMIN = | l33t s3rv3r 0P l04d'3d f|20|\/| |200t +LOADED_ADMINS = fu||y l04d'3d %d l33t 3nf0rc3rz f|20|\/| |200t +SQL_CANT_CON = $Q|_ 3rr0r: | N0T 3NUFF M4N4! | c0nn3ct!0n f4!|_u|2: '%s' +SQL_CANT_LOAD_ADMINS = $Q|_ 3rr0r: | N0T 3NUFF M4N4! | l04d f4!|_u|2: '%s' +NO_ADMINS = N0T 3NUFF M4N4: n0 s3rv3r 0P'z t0 f33d fr0m! +SQL_LOADED_ADMIN = l04d'3d 1 l33t s3rv3r f|20|\/| n0n-|200t |)|3! +SQL_LOADED_ADMINS = l04d'3d %d l33t s3rv3r f|20|\/| n0n-|200t |)|3! +INV_PAS = a((e$$ d3|\|i3d. FA(3! +PAS_ACC = \/\/3|_C0|\/|3 l33t 0|\|3! $3cu|2e |200t, |=0|2 G|234t Ju$t!c3! +PRIV_SET = l3v3l up! +NO_ENTRY = D3|\|i3d, n00b... + +[bg] +LOADED_ADMIN = Nameren e edin administrator ot fila. +LOADED_ADMINS = Namereni sa %d administratori ot fila +SQL_CANT_CON = SQL gre6ka: nemoje da se cannectnete: '%s' +SQL_CANT_LOAD_ADMINS = SQL gre6ka: nemoje da nameri administratori: '%s' +NO_ADMINS = Nemoje da nameri administratori. +SQL_LOADED_ADMIN = Nameren e edin administrator ot database +SQL_LOADED_ADMINS = Namereni %d administratori ot database +INV_PAS = Greshna Parola! +PAS_ACC = Parolata e prieta +PRIV_SET = Priviligiite sa nastroeni +NO_ENTRY = Nqmate vhod kam servara... + +[ro] +LOADED_ADMIN = 1 administrator a fost incarcat din fisier +LOADED_ADMINS = %d administratori au fost incarcati din fisier +SQL_CANT_CON = Eroare SQL: conectare esuata: '%s' +SQL_CANT_LOAD_ADMINS = Eroare SQL: esuare incarcare administratori: '%s' +NO_ADMINS = Nu a fost gasit nici un administrator. +SQL_LOADED_ADMIN = 1 administrator a fost incarcat din baza de date +SQL_LOADED_ADMINS = %d administratori au fost incarcati din baza de date +INV_PAS = Parola invalida! +PAS_ACC = Parola acceptata +PRIV_SET = Privilegii acordate +NO_ENTRY = Acest nume este rezervat pe server. + +[hu] +LOADED_ADMIN = 1 admin betoltve a file-bol. +LOADED_ADMINS = %d admin betoltve a filebol. +SQL_CANT_CON = SQL hiba: nem lehet csatlakozni: '%s' +SQL_CANT_LOAD_ADMINS = SQL hiba: nem lehet az adminokat betolteni: '%s' +NO_ADMINS = Nincsenek adminok. +SQL_LOADED_ADMIN = 1 admin betoltve a adatbazisbol +SQL_LOADED_ADMINS = %d admin betoltve a adatbazisbol +INV_PAS = Hibas jelszo! +PAS_ACC = Jelszo elfogadva +PRIV_SET = Beallitasok +NO_ENTRY = Neked nincs bejegyzesed a szerveren... + +[lt] +LOADED_ADMIN = Uzkrautas 1 adminas is failo +LOADED_ADMINS = Uzkrauti %d adminai is failo +SQL_CANT_CON = SQL klaida: negali pasijungti: '%s' +SQL_CANT_LOAD_ADMINS = SQL klaida: negali uzkrauti adminu: '%s' +NO_ADMINS = Adminu nerasta. +SQL_LOADED_ADMIN = Uzkrautas 1 adminas is duomenu bazes +SQL_LOADED_ADMINS = Uzkrauti %d adminai is duomenu bazes +INV_PAS = Blogas slaptazodis! +PAS_ACC = Slaptazodis priimtas +PRIV_SET = Privilegijos nustatytos +NO_ENTRY = Neturi leidimo ieiti i serva.. + +[sk] +LOADED_ADMIN = 1 admin nacitany zo soboru +LOADED_ADMINS = %d adminov nacitanych zo suboru +SQL_CANT_CON = SQL error: nemozem sa pripojit: '%s' +SQL_CANT_LOAD_ADMINS = SQL error: Nemozem nacitat adminov: '%s' +NO_ADMINS = Ziadny admin nenajdeny. +SQL_LOADED_ADMIN = 1 admin nacitany z databazy +SQL_LOADED_ADMINS = %d adminov nacitanych z databazy +INV_PAS = Nespravne heslo! +PAS_ACC = Heslo overene +PRIV_SET = Privilegium nastavene +NO_ENTRY = Nemas ziadny zaznam na servery... + +[mk] +LOADED_ADMIN = Vcitan e 1 administrator od fajlot +LOADED_ADMINS = Vcitani se %d administratori od fajlot +SQL_CANT_CON = SQL greska: ne e mozno da se vospostavi vrska so: '%s' +SQL_CANT_LOAD_ADMINS = SQL greska: ne e mozno da se vcitaat administratorite: '%s' +NO_ADMINS = Nema najdeni administratori. +SQL_LOADED_ADMIN = Vcitan e 1 administrator od bazata na podatoci +SQL_LOADED_ADMINS = Vcitani se %d administratori od bazata na podatoci +INV_PAS = Pogresna lozinka! +PAS_ACC = Lozinkata e prifatena +PRIV_SET = Privilegiite se podeseni +NO_ENTRY = Nemate pristap vo serverot... diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminchat.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminchat.txt new file mode 100644 index 0000000..188541d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminchat.txt @@ -0,0 +1,259 @@ +[en] +COL_WHITE = white +COL_RED = red +COL_GREEN = green +COL_BLUE = blue +COL_YELLOW = yellow +COL_MAGENTA = magenta +COL_CYAN = cyan +COL_ORANGE = orange +COL_OCEAN = ocean +COL_MAROON = maroon +PRINT_ALL = (ALL) %s : %s + +[de] +COL_WHITE = weiss +COL_RED = rot +COL_GREEN = gruen +COL_BLUE = blau +COL_YELLOW = gelb +COL_MAGENTA = magenta-rot +COL_CYAN = cyan-blau +COL_ORANGE = orange +COL_OCEAN = ozean-blau +COL_MAROON = braun +PRINT_ALL = (ALLES) %s : %s + +[sr] +COL_WHITE = bela +COL_RED = crvena +COL_GREEN = zelena +COL_BLUE = plava +COL_YELLOW = zuta +COL_MAGENTA = ljubicasta +COL_CYAN = tirkizna +COL_ORANGE = narandzasta +COL_OCEAN = okean +COL_MAROON = modra +PRINT_ALL = (SVE) %s : %s + +[tr] +COL_WHITE = beyaz +COL_RED = kirmizi +COL_GREEN = yesil +COL_BLUE = mavi +COL_YELLOW = sari +COL_MAGENTA = magenta +COL_CYAN = cian +COL_ORANGE = turuncu +COL_OCEAN = deniz +COL_MAROON = kahverengi +PRINT_ALL = (HEPSI) %s : %s + +[fr] +COL_WHITE = blanc +COL_RED = rouge +COL_GREEN = vert +COL_BLUE = bleu +COL_YELLOW = jaune +COL_MAGENTA = magenta +COL_CYAN = cyan +COL_ORANGE = orange +COL_OCEAN = marine +COL_MAROON = marron +PRINT_ALL = (TOUS) %s : %s + +[sv] +COL_WHITE = vit +COL_RED = r'o'd +COL_GREEN = gr'o'n +COL_BLUE = bla +COL_YELLOW = gul +COL_MAGENTA = magenta +COL_CYAN = cyan +COL_ORANGE = orange +COL_OCEAN = oceanbla +COL_MAROON = brun +PRINT_ALL = (ALLA) %s : %s + +[da] +COL_WHITE = hvid +COL_RED = roed +COL_GREEN = groen +COL_BLUE = blaa +COL_YELLOW = gul +COL_MAGENTA = magenta +COL_CYAN = cyan +COL_ORANGE = orange +COL_OCEAN = ocean blaa +COL_MAROON = brun +PRINT_ALL = (ALLE) %s : %s + +[pl] +COL_WHITE = bialy +COL_RED = czerwony +COL_GREEN = zielony +COL_BLUE = niebieski +COL_YELLOW = zolty +COL_MAGENTA = ciemnorozowy +COL_CYAN = turkusowy +COL_ORANGE = pomaranczowy +COL_OCEAN = blekitny +COL_MAROON = bordowy +PRINT_ALL = (WSZYSTKO) %s : %s + +[bp] +COL_WHITE = branco +COL_RED = vermelho +COL_GREEN = verde +COL_BLUE = azul +COL_YELLOW = amarelo +COL_MAGENTA = magenta +COL_CYAN = ciano +COL_ORANGE = laranja +COL_OCEAN = oceano +COL_MAROON = marrom +PRINT_ALL = (TUDO) %s : %s + +[nl] +COL_WHITE = wit +COL_RED = rood +COL_GREEN = groen +COL_BLUE = blauw +COL_YELLOW = geel +COL_MAGENTA = magenta +COL_CYAN = appelblauwzeegroen +COL_ORANGE = oranje +COL_OCEAN = oceaan +COL_MAROON = bruin +PRINT_ALL = (Allemaal) %s : %s + +[es] +COL_WHITE = blanco +COL_RED = rojo +COL_GREEN = verde +COL_BLUE = azul +COL_YELLOW = amarillo +COL_MAGENTA = magenta +COL_CYAN = cian +COL_ORANGE = naranja +COL_OCEAN = azul marino +COL_MAROON = marron +PRINT_ALL = (TODOS) %s : %s + +[cz] +COL_WHITE = bila +COL_RED = cervena +COL_GREEN = zelena +COL_BLUE = modra +COL_YELLOW = zluta +COL_MAGENTA = fuchsiova +COL_CYAN = modrozelena +COL_ORANGE = oranzova +COL_OCEAN = mpdra +COL_MAROON = kastanova +PRINT_ALL = (ALL) %s : %s + +[fi] +COL_WHITE = valkoinen +COL_RED = punainen +COL_GREEN = vihrea +COL_BLUE = sininen +COL_YELLOW = keltainen +COL_MAGENTA = mangaani +COL_CYAN = kyaani +COL_ORANGE = oranssi +COL_OCEAN = merensininen +COL_MAROON = viininpunainen +PRINT_ALL = (KAIKKI) %s : %s + +[ls] +COL_WHITE = \/\/hi73 +COL_RED = r3d +COL_GREEN = gr33n +COL_BLUE = b|u3 +COL_YELLOW = y3||0w +COL_MAGENTA = m4g3nt4 +COL_CYAN = "%s" +CVAR_CHANGED = Cvar "%s" --> "%s" +LOADED_PLUGINS = Ladatut pluginit talla hetkella +NAME = nimi +VERSION = versio +AUTHOR = tekija +FILE = tiedosto +STATUS = tila +PLUGINS_RUN = %d pluginia, %d kaynnissa +LOADED_MODULES = Ladatut modulit talla hetkella +NUM_MODULES = %d modulia +FILE_NOT_FOUND = Tiedostoa "%s" ei loytynyt +ADMIN_CONF_1 = ADMIN: suoritti konffin %s +ADMIN_CONF_2 = ADMIN %s: suoritti konffin %s +PAUSED = pysaytetty +UNPAUSED = ei-pysaytetty +UNABLE_PAUSE = Palvelin ei voinut pysayttaa pelia. Tarvitaan oikeita pelaajia. +SERVER_PROC = Server proceed %s +PAUSING = pysaytetaan +UNPAUSING = jatketaan +PAUSE = pysaytys +UNPAUSE = jatkaminen +COM_SENT_SERVER = Komento "%s" lahetettiin palvelimen konsoliin +CLIENTS_ON_SERVER = Clientteja palvelimella +IMMU = imm +RESERV = res +ACCESS = paasy +TOTAL_NUM = Kaikkiaan %d +SKIP_MATCH = Jatetaan "%s" huomiotta (vertainen "%s" kanssa) +SKIP_IMM = Jatetaan "%s" huomiotta (koskemattomuus) +KICK_PL = Potkitaan "%s" +YOU_DROPPED = Sinut pudotettiin palvelimelta koska admin jatti vain tietyt clientit +KICKED_CLIENTS = Potkittiin %d clientia +ADMIN_LEAVE_1 = ADMIN: leave %s %s %s %s +ADMIN_LEAVE_2 = ADMIN %s: leave %s %s %s %s +ADMIN_NICK_1 = ADMIN: vaihtoi pelaajan %s nickin: "%s" +ADMIN_NICK_2 = ADMIN %s: vaihtoi pelaajan %s nickin: "%s" +CHANGED_NICK = Vaihdoit pelaajan %s nickin: "%s" + +[ls] +ADMIN_KICK_1 = l33t s3rv3r 0P: kickz0|2 %s +ADMIN_KICK_2 = l33t s3rv3r 0P %s: kickz0|2 %s +IP_REMOVED = Ip "%s" r3m0v3d fr0mz0|2 L33T |3L4C|< L!$T +AUTHID_REMOVED = Authid "%s" r3m0v3d fr0mz0|2 L33T |3L4C|< L!$T +ADMIN_UNBAN_1 = l33t s3rv3r 0P: unb4nnz0|2 %s +ADMIN_UNBAN_2 = l33t s3rv3r 0P %s: unb4nnz0|2 %s +ADMIN_ADDBAN_1 = l33t s3rv3r 0P: b4nnz0|2 %s +ADMIN_ADDBAN_2 = l33t s3rv3r 0P %s: b4nnz0|2 %s +BANNED = b4nnz0|2ned +REASON = |234s0n +FOR_MIN = f0r %s m!n +PERM = f0r3v4 +CLIENT_BANNED = Client "%s" b4nnz0|2'3d +ADMIN_SLAY_1 = l33t s3rv3r 0P: sl4yz0|2 %s +ADMIN_SLAY_2 = l33t s3rv3r 0P %s: sl4yz0|2 %s +CLIENT_SLAYED = Client "%s" sl4yz0|2ed +ADMIN_SLAP_1 = l33t s3rv3r 0P: sl4pz0|2 %s with %d damage +ADMIN_SLAP_2 = l33t s3rv3r 0P %s: sl4pz0|2 %s with %d damage +CLIENT_SLAPED = Client "%s" sl4pz0|2ed with %d damage +MAP_NOT_FOUND = | N0T 3NUFF M4N4 | d4t m4p sux, ch00s3 4g4!n +ADMIN_MAP_1 = l33t s3rv3r 0P: ch4ngl3v3l %s +ADMIN_MAP_2 = l33t s3rv3r 0P %s: ch4ngl3v3l %s +NO_MORE_CVARS = 3rr0r | N0T 3NUFF M4N4 | c4nn0t +++ m0r3 l33t (\/4|2s f0r |2(0|\| 4cc3ss! +UNKNOWN_CVAR = th!$ l33t (\/4|2: %s sux, ch00s3 4g4!n +CVAR_NO_ACC = a((e$$ d3|\|i3d. FA(3! N0 l33t (\/4|2 ch4ng'!n f0 j00! +CVAR_IS = C\/4|2 "%s" is "%s" +PROTECTED = | N0T 3NUFF M4N4! | a((e$$ d3|\|i3d. FA(3! +SET_CVAR_TO = %s s3t l33t (\/4|2 %s to "%s" +CVAR_CHANGED = C\/4|2 "%s" ch4ngd to "%s" +LOADED_PLUGINS = l04d'3d l33t plug!nz +NAME = n4m +VERSION = v3r$i0n +AUTHOR = h4x0r +FILE = |200t +STATUS = $t4tuz +PLUGINS_RUN = %d l33t plug!nz, %d j0ggin' +LOADED_MODULES = l04d'3d m0dzul3 +NUM_MODULES = %d m0dzul3 +FILE_NOT_FOUND = }200t "%s" m!zz!n' !n 4cti0nz +ADMIN_CONF_1 = l33t s3rv3r 0P: execute config %s +ADMIN_CONF_2 = l33t s3rv3r 0P %s: execute config %s +PAUSED = p4uz3d +UNPAUSED = unp4uz3d +UNABLE_PAUSE = s3rv3r p4uz3 f4!l. unl33t n33d3d 0N s3rv3r. +SERVER_PROC = s3rv3r proceed %s +PAUSING = p4uz3ing +UNPAUSING = unp4uz3ing +PAUSE = p4uz3 +UNPAUSE = unp4uz3 +COM_SENT_SERVER = |200t "%s" $3nt t0 s3rv3r c0|\| +CLIENTS_ON_SERVER = un-l33tz 0n s3rv3r +IMMU = !|\/||\/| +RESERV = |23z +ACCESS = access +TOTAL_NUM = Total %d +SKIP_MATCH = S|: |200t C0mm4ndz +HELP_ENTRIES = 3nt|2i3z %d - %d 0v %d +HELP_USE_MORE = uzi 'amx_help %d' f0r m0r3 b4$3 +HELP_USE_BEGIN = uzi 'amx_help 1' f0r b3g!n h4x0rin' +TYPE_HELP = uzi 'amx_help' t4 s33 r00tz +TIME_INFO_1 = N0t T!m3 3nu77: %d:%02d min. N3x\ M4|>: %s +TIME_INFO_2 = T!m3 i$ r3l4t!v3 t0 j00r |200t. N3x\ M4|>: %s + +[bg] +HELP_COMS = AMX Mod X Help: Comandi +HELP_ENTRIES = Vkarani %d - %d ot %d +HELP_USE_MORE = Izpolzvaite 'amx_help %d' za pove4e +HELP_USE_BEGIN = izpolzvaite 'amx_help 1' za na4alo +TYPE_HELP = napi6ete 'amx_help' v consolata za da vidite pove4e comandi +TIME_INFO_1 = Ostava6to vreme: %d:%02d min. Sledva6tata karta: %s +TIME_INFO_2 = Nqma limit na vremeto. Sledva6tata karta: %s + +[ro] +HELP_COMS = Ajutor AMX Mod X: Comenzi +HELP_ENTRIES = Intrari %d - %d din %d +HELP_USE_MORE = Scrie 'amx_help %d' pentru mai mult +HELP_USE_BEGIN = Scrie 'amx_help 1' pentru inceput +TYPE_HELP = Scrie 'amx_help' in consola pentru afisare lista comenzi +TIME_INFO_1 = Timp Ramas: %d:%02d. Urmatoarea Harta: %s +TIME_INFO_2 = Nici o Limita a Timpului. Urmatoarea Harta: %s + +[hu] +HELP_COMS = AMX Mod X segitseg: Parancsok +HELP_ENTRIES = Bejegyzes %d - %d of %d +HELP_USE_MORE = Irj 'amx_help %d' -t tobbhoz +HELP_USE_BEGIN = Irj 'amx_help 1' -t az elso oldalhoz +TYPE_HELP = Irj 'amx_help' -t a konzolba hogy lathasd a parancsokat +TIME_INFO_1 = Hatralevo ido: %d:%02d perc. kovetkezo palya: %s +TIME_INFO_2 = Nincs idohatar. A kovetkezo palya: %s + +[lt] +HELP_COMS = AMX Mod X Pagalba: Komandos +HELP_ENTRIES = Irasai %d - %d is %d +HELP_USE_MORE = Naudok 'amx_help %d' del daugiau info +HELP_USE_BEGIN = Naudok 'amx_help 1' kad pradetum +TYPE_HELP = Rasyk 'amx_help' konsoleje, kad pamatytum prieinamas komandas. +TIME_INFO_1 = Liko laiko: %d:%02d min. Kitas zemelapis: %s +TIME_INFO_2 = Nera laiko limito. Kitas zemelapis: %s + +[sk] +HELP_COMS = AMX Mod X Help: Prikazy +HELP_ENTRIES = Polozky %d - %d z %d +HELP_USE_MORE = Napis 'amx_help %d' pre viac +HELP_USE_BEGIN = Napis 'amx_help 1' pre zaciatok +TYPE_HELP = Napis 'amx_help' do konzoly pre vypis prikazov +TIME_INFO_1 = Ostava este: %d:%02d min. Dalsia mapa: %s +TIME_INFO_2 = Neni casovy limit. Dalsia mapa: %s + +[mk] +HELP_COMS = AMX Mod X Pomos - Dozvoleni komandi se: +HELP_ENTRIES = Komandi %d - %d od %d +HELP_USE_MORE = Napisi 'amx_help %d' za uste komandi +HELP_USE_BEGIN = Napisi 'amx_help 1' za od pocetok +TYPE_HELP = Napisi 'amx_help' vo konzolata za da gi vidis dozvolenite komandi +TIME_INFO_1 = Preostanato Vreme: %d:%02d min. Sledna Mapa: %s +TIME_INFO_2 = Nema vremensko ogranicuvanje. Sledna Mapa: %s diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminslots.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminslots.txt new file mode 100644 index 0000000..a7bc2e3 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminslots.txt @@ -0,0 +1,59 @@ +[en] +DROPPED_RES = Dropped due to slot reservation + +[de] +DROPPED_RES = Sorry, dieser Slot ist reserviert. + +[sr] +DROPPED_RES = Server je pun, nemate pristup rezervisanim mestima + +[tr] +DROPPED_RES = Reservasyon nedeniyle atildiniz + +[fr] +DROPPED_RES = Desole, un admin vient de prendre sa place reservee, tu as ete ejecte du serveur. + +[sv] +DROPPED_RES = Nerkopplad pga platsreservation + +[da] +DROPPED_RES = Frakoblet pga. plads reservation + +[pl] +DROPPED_RES = Wyrzucony z powodu rezerwacji slotow + +[bp] +DROPPED_RES = Desconectado pois o slot esta reservado + +[nl] +DROPPED_RES = Sorry, deze plaats is gereserveerd + +[es] +DROPPED_RES = Desconectado por reserva de plazas + +[cz] +DROPPED_RES = Vyhozen, slot je rezervovan + +[fi] +DROPPED_RES = Pudotettiin palvelimelta slotvarauksen takia (adminslot) + +[ls] +DROPPED_RES = j00 r n0t l33t 3uff, s0z + +[bg] +DROPPED_RES = Izklu4en poneje mqstoto e rezervirano + +[ro] +DROPPED_RES = Ai primit kick pentru rezervare slot. + +[hu] +DROPPED_RES = Nincs szabad hely. + +[lt] +DROPPED_RES = Atjungtas, nes nera laisvos vietos + +[sk] +DROPPED_RES = Prepac,ale slot je rezervovany + +[mk] +DROPPED_RES = Serverot e poln, nemate pristap vo rezerviranite mesta diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminvote.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminvote.txt new file mode 100644 index 0000000..ad99cf3 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/adminvote.txt @@ -0,0 +1,679 @@ +[en] +ADMIN_CANC_VOTE_1 = %s: cancel vote +ADMIN_CANC_VOTE_2 = %s %s: cancel vote +VOTING_CANC = Voting canceled +NO_VOTE_CANC = There is no voting to cancel or the vote session can't be canceled with that command +RES_REF = Result refused +RES_ACCEPTED = Result accepted +VOTING_FAILED = Voting failed +VOTING_RES_1 = %s (yes "%d") (no "%d") (needed "%d") +VOTING_RES_2 = %s (got "%d") (needed "%d") +VOTING_SUCCESS = Voting successful +VOTING_RES_3 = %s (got "%d") (needed "%d"). The result: %s +THE_RESULT = The result +WANT_CONTINUE = Do you want to continue? +VOTED_FOR = %s voted for +VOTED_AGAINST = %s voted against +VOTED_FOR_OPT = %s voted for option #%d +ALREADY_VOTING = There is already one voting... +VOTING_NOT_ALLOW = Voting not allowed at this time +GIVEN_NOT_VALID = Given %s not valid +MAP_IS = map is +MAPS_ARE = maps are +CHOOSE_MAP = Choose map +ADMIN_VOTE_MAP_1 = %s: vote map(s) +ADMIN_VOTE_MAP_2 = %s %s: vote map(s) +VOTING_STARTED = Voting has started... +VOTING_FORBIDDEN = Voting for that has been forbidden +ADMIN_VOTE_CUS_1 = %s: vote custom +ADMIN_VOTE_CUS_2 = %s %s: vote custom +VOTE = Vote +ACTION_PERFORMED = That action can't be performed on bot "%s" +ADMIN_VOTE_FOR_1 = %s: vote %s for %s +ADMIN_VOTE_FOR_2 = %s %s: vote %s for %s + +[de] +ADMIN_CANC_VOTE_1 = %s: Abstimmung abgebrochen +ADMIN_CANC_VOTE_2 = %s %s: Abstimmung abgebrochen +VOTING_CANC = Auswahl abgebrochen +NO_VOTE_CANC = Zur Zeit ist keine Abstimmung vorhanden oder das Abbrechen ist mit diesem Befehl nicht moeglich +RES_REF = Resultat abgelehnt +RES_ACCEPTED = Resultat angenommen +VOTING_FAILED = Abstimmung gescheitert +VOTING_RES_1 = %s (Ja "%d") (Nein "%d") (benoetigt "%d") +VOTING_RES_2 = %s (erhielt "%d") (benoetigt "%d") +VOTING_SUCCESS = Abstimmung erfolgreich +VOTING_RES_3 = %s (erhielt "%d") (benoetigt "%d"). Ergebnis: %s +THE_RESULT = Das Ergebnis +WANT_CONTINUE = Forfahren? +VOTED_FOR = %s stimmten dafuer +VOTED_AGAINST = %s stimmten dagegen +VOTED_FOR_OPT = %s stimmten fuer Option #%d +ALREADY_VOTING = Abstimmung laeuft bereits... +VOTING_NOT_ALLOW = Abstimmung ist momentan nicht moeglich! +GIVEN_NOT_VALID = %s ist unzulaessig +MAP_IS = Map ist +MAPS_ARE = Maps sind +CHOOSE_MAP = Waehle Map +ADMIN_VOTE_MAP_1 = %s: Abstimmung fuer Map(s) gestartet +ADMIN_VOTE_MAP_2 = %s %s: Abstimmung fuer Map(s) gestartet +VOTING_STARTED = Abstimmung gestartet ... +VOTING_FORBIDDEN = Abstimmung dafuer ist verboten. +ADMIN_VOTE_CUS_1 = %s: startet eigene Umfrage +ADMIN_VOTE_CUS_2 = %s %s: startet eigene Umfrage +VOTE = Abstimmung +ACTION_PERFORMED = Durchfuehrung an BOT "%s" ist nicht moeglich +ADMIN_VOTE_FOR_1 = %s: %s Stimmen fuer %s +ADMIN_VOTE_FOR_2 = %s %s: %s Stimmen fuer %s + +[sr] +ADMIN_CANC_VOTE_1 = %s: otkazi glasanje +ADMIN_CANC_VOTE_2 = %s %s: otkazi glasanje +VOTING_CANC = Glasanje Otkazano +NO_VOTE_CANC = Trenutno nema glasanja koje bi moglo da se prekine ili glasanje ne moze biti prekinuto tom komandom +RES_REF = Rezultat odbijen +RES_ACCEPTED = Rezultat prihvacen +VOTING_FAILED = Glasanje neuspesno +VOTING_RES_1 = %s (da "%d") (ne "%d") (potrebno "%d") +VOTING_RES_2 = %s (dobijeno "%d") (potrebno "%d") +VOTING_SUCCESS = Glasanje uspesno +VOTING_RES_3 = %s (dobijeno "%d") (potrebno "%d"). Rezultat je: %s +THE_RESULT = Rezultat +WANT_CONTINUE = Da li zelite da nastavite? +VOTED_FOR = %s je glasao za +VOTED_AGAINST = %s je glasao protiv +VOTED_FOR_OPT = %s je glasao za #%d +ALREADY_VOTING = Vec je jedno glasanje je u toku... +VOTING_NOT_ALLOW = Glasanje trenutno nije dozvoljeno +GIVEN_NOT_VALID = Dat %s nije validan +MAP_IS = mapa je +MAPS_ARE = mape su +CHOOSE_MAP = Izaberi mapu +ADMIN_VOTE_MAP_1 = %s: glasanje za mapu(e) +ADMIN_VOTE_MAP_2 = %s %s: glasanje za mapu(e) +VOTING_STARTED = Glasanje je pocelo... +VOTING_FORBIDDEN = Voting for that has been forbidden +ADMIN_VOTE_CUS_1 = %s: specificno glasanje +ADMIN_VOTE_CUS_2 = %s %s: specificno glasanje +VOTE = Glas +ACTION_PERFORMED = Akcija ne moze biti izvrsena na botu "%s" +ADMIN_VOTE_FOR_1 = %s: glasao %s za %s +ADMIN_VOTE_FOR_2 = %s %s: glasao %s za %s + +[tr] +ADMIN_CANC_VOTE_1 = %s: oylamayi durdur +ADMIN_CANC_VOTE_2 = %s %s: oylamayi durdur +VOTING_CANC = Oylama durduruldu +NO_VOTE_CANC = Durdurulacak oylama yokdur yada oylamayi o emir ile durduramazsiniz +RES_REF = Sonuc red edildi +RES_ACCEPTED = Sonuc kabul edildi +VOTING_FAILED = Oylama hatali +VOTING_RES_1 = %s (evet "%d") (hayir "%d") (gerekli "%d") +VOTING_RES_2 = %s (alinan "%d") (gerekli "%d") +VOTING_SUCCESS = Oylama sonucu kabul edilmistir +VOTING_RES_3 = %s (alinan "%d") (gerekli "%d"). Sonuc: %s +THE_RESULT = Sonuc +WANT_CONTINUE = Devam etmek istiyormusunuz? +VOTED_FOR = %s Oy verdi +VOTED_AGAINST = %s Red etdi +VOTED_FOR_OPT = %s Buna oy verdi #%d +ALREADY_VOTING = Zaten su an oylama suruyor... +VOTING_NOT_ALLOW = Su anda oylama yapamazsiniz +GIVEN_NOT_VALID = %s verildi, gecerli degil +MAP_IS = Map budur +MAPS_ARE = Maplar bunlardir +CHOOSE_MAP = Map secin +ADMIN_VOTE_MAP_1 = %s:map(lar) oylamasi +ADMIN_VOTE_MAP_2 = %s %s: map(lar) oylamasi +VOTING_STARTED = Oylama baslamisdir... +VOTING_FORBIDDEN = Onun hakkinda oylama yasaklanmisdir +ADMIN_VOTE_CUS_1 = %s: Ozel oylama +ADMIN_VOTE_CUS_2 = %s %s: Ozel oylama +VOTE = Oy +ACTION_PERFORMED = Bot uzerinde bunu yapamassiniz "%s" +ADMIN_VOTE_FOR_1 = %s: %s hakkinda oy %s +ADMIN_VOTE_FOR_2 = %s %s: %s hakkinda oy %s + +[fr] +ADMIN_CANC_VOTE_1 = %s: annule le vote +ADMIN_CANC_VOTE_2 = %s %s: annule le vote +VOTING_CANC = Le vote a ete annule +NO_VOTE_CANC = Il n'y a pas de vote a annuler, ou la session de vote ne peut pas etre annulee par cette commande +RES_REF = Resultat refuse +RES_ACCEPTED = Resultat accepte +VOTING_FAILED = Le vote a echoue +VOTING_RES_1 = %s (pour "%d") (contre "%d") (besoin de "%d") +VOTING_RES_2 = %s (obtenu "%d") (besoin de "%d") +VOTING_SUCCESS = Le vote a reussi +VOTING_RES_3 = %s (obtenu "%d") (besoin de "%d"). Resultat: %s +THE_RESULT = Resultat +WANT_CONTINUE = Veux-tu continuer? +VOTED_FOR = %s a vote pour +VOTED_AGAINST = %s a vote contre +VOTED_FOR_OPT = %s a vote pour l'option #%d +ALREADY_VOTING = Il y a deja un vote en cours... +VOTING_NOT_ALLOW = Voter n'est pas autorise maintenant... +GIVEN_NOT_VALID = %s donne(e) non valide +MAP_IS = la carte est +MAPS_ARE = les cartes sont +CHOOSE_MAP = Choisir la carte +ADMIN_VOTE_MAP_1 = %s: vote carte(s) +ADMIN_VOTE_MAP_2 = %s %s: vote carte(s) +VOTING_STARTED = Le vote commence... +VOTING_FORBIDDEN = Il est interdit de voter. +ADMIN_VOTE_CUS_1 = %s: lance un vote personnalise +ADMIN_VOTE_CUS_2 = %s %s: lance un vote personnalise +VOTE = Vote +ACTION_PERFORMED = Cette action ne peut etre effectuee sur les BOTs "%s" +ADMIN_VOTE_FOR_1 = %s: vote %s pour %s +ADMIN_VOTE_FOR_2 = %s %s: vote %s pour %s + +[sv] +ADMIN_CANC_VOTE_1 = %s: avbryt omr'o'stning +ADMIN_CANC_VOTE_2 = %s %s: avbryt omr'o'stning +VOTING_CANC = Omr'o'stning avbruten +NO_VOTE_CANC = Det finns ingen omr'o'stning att avbryta, alternativt kan omr'o'stningen inte avbrytas med det kommandot +RES_REF = Resultat nekas +RES_ACCEPTED = Resultat godtages +VOTING_FAILED = Omr'o'stning misslyckades +VOTING_RES_1 = %s (ja "%d") (nej "%d") (fordras "%d") +VOTING_RES_2 = %s (fick "%d") (fordrades "%d") +VOTING_SUCCESS = Omr'o'stningen lyckades +VOTING_RES_3 = %s (fick "%d") (fordrades "%d"). Resultat: %s +THE_RESULT = Resultat +WANT_CONTINUE = Vill du forts'a'tta? +VOTED_FOR = %s valde +VOTED_AGAINST = %s valde mot +VOTED_FOR_OPT = %s valde alternativ #%d +ALREADY_VOTING = En omr'o'stning pagar redan... +VOTING_NOT_ALLOW = Omr'o'stning inte tillatet tills vidare +GIVEN_NOT_VALID = Avlagd %s icke giltig +MAP_IS = karta +MAPS_ARE = kartor +CHOOSE_MAP = Utse karta +ADMIN_VOTE_MAP_1 = %s: val av karta(or) +ADMIN_VOTE_MAP_2 = %s %s: val av karta(or) +VOTING_STARTED = Omr'o'stningen har startat... +VOTING_FORBIDDEN = Icke beviljat val valsalternativ +ADMIN_VOTE_CUS_1 = %s: speciellt val +ADMIN_VOTE_CUS_2 = %s %s: speciellt val +VOTE = Val +ACTION_PERFORMED = Den handlingen kan inte utf'o'ras pa bot "%s" +ADMIN_VOTE_FOR_1 = %s: val %s av %s +ADMIN_VOTE_FOR_2 = %s %s: val %s av %s + +[da] +ADMIN_CANC_VOTE_1 = %s: annuller afstemning +ADMIN_CANC_VOTE_2 = %s %s: annuller afstemning +VOTING_CANC = Afstemning annulleret +NO_VOTE_CANC = Der er ikke nogen afstemning at annullere eller afstemning kan ikke annulleres med den kommando +RES_REF = Resultat afvist +RES_ACCEPTED = Resultat accepteret +VOTING_FAILED = Afstemning mislykkedes +VOTING_RES_1 = %s (ja "%d") (nej "%d") (behoevede "%d") +VOTING_RES_2 = %s (fik "%d") (behoevede "%d") +VOTING_SUCCESS = Afstemning lykkedes +VOTING_RES_3 = %s (fik "%d") (behoevede "%d"). Resultat: %s +THE_RESULT = Resultatet +WANT_CONTINUE = Vil du fortsaette? +VOTED_FOR = %s stemte for +VOTED_AGAINST = %s stemte imod +VOTED_FOR_OPT = %s stemte paa mulighed #%d +ALREADY_VOTING = Der er allerede en afstemning... +VOTING_NOT_ALLOW = Afstemning er ikke tilladt paa nuvaerende tidspunkt +GIVEN_NOT_VALID = Givet %s ikke gyldig +MAP_IS = banen er +MAPS_ARE = banerne er +CHOOSE_MAP = vaelg bane +ADMIN_VOTE_MAP_1 = %s: afstemning bane(r) +ADMIN_VOTE_MAP_2 = %s %s: afstemning bane(r) +VOTING_STARTED = Afstemning er startet... +VOTING_FORBIDDEN = Afstemning om det er blevet forbudt +ADMIN_VOTE_CUS_1 = %s: afstemning speciel +ADMIN_VOTE_CUS_2 = %s %s: afstemning speciel +VOTE = Afstemning +ACTION_PERFORMED = Denne handling kan ikke udfoeres paa bot "%s" +ADMIN_VOTE_FOR_1 = %s: stemmer %s for %s +ADMIN_VOTE_FOR_2 = %s %s: stemmer %s for %s + +[pl] +ADMIN_CANC_VOTE_1 = %s: anulowal glos +ADMIN_CANC_VOTE_2 = %s %s: anulowal glos +VOTING_CANC = Glosowanie anulowane +NO_VOTE_CANC = Nie ma zadnego glosowania ktore moze zostac anulowane +RES_REF = Rezultat odrzucony +RES_ACCEPTED = Rezultat zaakceptowany +VOTING_FAILED = Glosowanie nieudane +VOTING_RES_1 = %s (tak "%d") (nie "%d") (potrzeba "%d") +VOTING_RES_2 = %s (ma "%d") (potrzeba "%d") +VOTING_SUCCESS = Glosowanie udane +VOTING_RES_3 = %s (ma "%d") (potrzeba "%d"). Rezultat: %s +THE_RESULT = Rezultat +WANT_CONTINUE = Czy chcesz kontynuowac? +VOTED_FOR = %s zaglosowal na +VOTED_AGAINST = %s zaglosowal przeciwko +VOTED_FOR_OPT = %s zaglosowal na #%d +ALREADY_VOTING = Juz jest glosowanie w toku +VOTING_NOT_ALLOW = Glosowanie jest teraz niemozliwe +GIVEN_NOT_VALID = Dany %s nie jest prawidlowy +MAP_IS = mapa jest +MAPS_ARE = mapy sa +CHOOSE_MAP = Wybierz mape +ADMIN_VOTE_MAP_1 = %s: zaglosowal mape(s) +ADMIN_VOTE_MAP_2 = %s %s: zaglosowal mape(s) +VOTING_STARTED = Glosowanie rozpoczete +VOTING_FORBIDDEN = Glosowanie na to zostalo zabronione +ADMIN_VOTE_CUS_1 = %s: glos wlasny +ADMIN_VOTE_CUS_2 = %s %s: glos wlasny +VOTE = Glos +ACTION_PERFORMED = Nie mozesz tego wykonac na bocie "%s" +ADMIN_VOTE_FOR_1 = %s: zaglosuj %s na %s +ADMIN_VOTE_FOR_2 = %s %s: zaglosuj %s na %s + +[bp] +ADMIN_CANC_VOTE_1 = %s: votacao cancelada +ADMIN_CANC_VOTE_2 = %s %s: votacao cancelada +VOTING_CANC = Votacao cancelada +NO_VOTE_CANC = Nao ha nenhuma votacao para cancelar ou a votacao nao pode ser cancelada com aquele comando +RES_REF = Resultado recusado +RES_ACCEPTED = Resultado aceito +VOTING_FAILED = Votacao falhou +VOTING_RES_1 = %s (sim " %d ") (nao " %d ") (necessario "%d" votos) +VOTING_RES_2 = %s (obteve "%d") (necessario "%d" votos) +VOTING_SUCCESS = Votacao com sussesso +VOTING_RES_3 = %s (obteve "%d") (necessario "%d" votos). O resultado: %s +THE_RESULT = O resultado +WANT_CONTINUE = Voce quer continuar? +VOTED_FOR = %s votou a favor +VOTED_AGAINST = %s votou contra +VOTED_FOR_OPT = %s votou na opcao #%d +ALREADY_VOTING = Ja existe uma votacao em progresso... +VOTING_NOT_ALLOW = Votacao nao permitida neste momento +GIVEN_NOT_VALID = %s nao valido(s) +MAP_IS = O mapa e +MAPS_ARE = Os mapas sao +CHOOSE_MAP = Escolha o mapa +ADMIN_VOTE_MAP_1 = %s: votacao de mapa(s) +ADMIN_VOTE_MAP_2 = %s %s: votacao de mapa(s) +VOTING_STARTED = Votacao comecou... +VOTING_FORBIDDEN = Votacao proibida +ADMIN_VOTE_CUS_1 = %s: votacao personalizada +ADMIN_VOTE_CUS_2 = %s %s: votacao personalizada +VOTE = Voto +ACTION_PERFORMED = Aquela acao nao pode ser executada com bot "%s" +ADMIN_VOTE_FOR_1 = %s: vote %s para %s +ADMIN_VOTE_FOR_2 = %s %s: vote %s para %s + +[nl] +ADMIN_CANC_VOTE_1 = %s: stemronde annuleren +ADMIN_CANC_VOTE_2 = %s %s: stemronde annuleren +VOTING_CANC = Stemronde geannuleerd +NO_VOTE_CANC = Er is geen stemronde om te annuleren of de stemronde kan niet worden geannuleerd met dat commando +RES_REF = Resultaat geweigerd +RES_ACCEPTED = Resultaat geaccepteerd +VOTING_FAILED = Stemmen mislukt +VOTING_RES_1 = %s (ja "%d") (nee "%d") (nodig "%d") +VOTING_RES_2 = %s (ontvangen "%d") (nodig "%d") +VOTING_SUCCESS = Stemmen geslaagd +VOTING_RES_3 = %s (ontvangen "%d") (nodig "%d"). Resultaat: %s +THE_RESULT = Het resultaat +WANT_CONTINUE = Wil je verder gaan? +VOTED_FOR = %s stemde voor +VOTED_AGAINST = %s stemde tegen +VOTED_FOR_OPT = %s stemde voor optie #%d +ALREADY_VOTING = Er is al een stemronde bezig... +VOTING_NOT_ALLOW = Stemmen nu niet toegestaan +GIVEN_NOT_VALID = Gegeven %s niet geldig +MAP_IS = map is +MAPS_ARE = mappen zijn +CHOOSE_MAP = Kies een map +ADMIN_VOTE_MAP_1 = %s: stem op map(pen) +ADMIN_VOTE_MAP_2 = %s %s: stem op map(pen) +VOTING_STARTED = De stemronde is begonnen +VOTING_FORBIDDEN = Het is verboden om daarop te stemmen +ADMIN_VOTE_CUS_1 = %s: stem custom +ADMIN_VOTE_CUS_2 = %s %s: stem custom +VOTE = Stem +ACTION_PERFORMED = Die actie kan niet worden uitgevoerd op bot "%s" +ADMIN_VOTE_FOR_1 = %s: stem %s voor %s +ADMIN_VOTE_FOR_2 = %s %s: stem %s voor %s + +[es] +ADMIN_CANC_VOTE_1 = %s: votacion anulada +ADMIN_CANC_VOTE_2 = %s %s: votacion anulada +VOTING_CANC = Votacion anulada +NO_VOTE_CANC = No existe votacion por anular o la votacion no se puede anular con ese comando +RES_REF = Resultado rechazado +RES_ACCEPTED = Resultado aceptado +VOTING_FAILED = Votacion fallida +VOTING_RES_1 = %s (si "%d") (no "%d") (necesarios "%d") +VOTING_RES_2 = %s (obtenidos "%d") (necesarios "%d") +VOTING_SUCCESS = Votacion finalizada +VOTING_RES_3 = %s (obtenidos "%d") (necesarios "%d"). Resultado: %s +THE_RESULT = El Resultado +WANT_CONTINUE = Deseas continuar? +VOTED_FOR = %s ha votado a favor +VOTED_AGAINST = %s ha votado en contra +VOTED_FOR_OPT = %s ha votado por la opcion #%d +ALREADY_VOTING = Ya existe una votacion en este instante... +VOTING_NOT_ALLOW = Votacion no permitida en este momento +GIVEN_NOT_VALID = %s dado(s) no es(son) valido(s) +MAP_IS = El mapa +MAPS_ARE = Los mapas +CHOOSE_MAP = Elegir mapa +ADMIN_VOTE_MAP_1 = %s: votar mapa(s) +ADMIN_VOTE_MAP_2 = %s %s: votar mapa(s) +VOTING_STARTED = Votacion iniciada... +VOTING_FORBIDDEN = No se permite votar eso +ADMIN_VOTE_CUS_1 = %s: votacion personalizada +ADMIN_VOTE_CUS_2 = %s %s: votacion personalizada +VOTE = Voto +ACTION_PERFORMED = Esta accion no se puede aplicar a bots "%s" +ADMIN_VOTE_FOR_1 = %s: ha votado %s a %s +ADMIN_VOTE_FOR_2 = %s %s: ha votado %s a %s + +[cz] +ADMIN_CANC_VOTE_1 = %s: zrusil hlasovani +ADMIN_CANC_VOTE_2 = %s %s: zrusili hlasovani +VOTING_CANC = Hlasovani zruseno +NO_VOTE_CANC = Neni co zrusit nebo hlasovani nelze zrusit timhle prikazem +RES_REF = Hlasovani neplatne +RES_ACCEPTED = Hlasovani prijato +VOTING_FAILED = Hlasovani selhalo +VOTING_RES_1 = %s (ano "%d") (ne "%d") (bylo potreba "%d") +VOTING_RES_2 = %s (dostal "%d") (bylo potreba "%d") +VOTING_SUCCESS = Hlasovani uspesne +VOTING_RES_3 = %s (dostal "%d") (bylo potreba "%d"). Vysledek: %s +THE_RESULT = Vysledek +WANT_CONTINUE = Chces pokracovat? +VOTED_FOR = %s hlasovalo pro +VOTED_AGAINST = %s hlasovalo proti +VOTED_FOR_OPT = %s hlasovalo pro volbu #%d +ALREADY_VOTING = Uz se jednou hlasovalo... +VOTING_NOT_ALLOW = Hlasovani neni zrovna povoleno +GIVEN_NOT_VALID = Opakovani %s neplatne +MAP_IS = mapa je +MAPS_ARE = mapy jsou +CHOOSE_MAP = Zvol mapu +ADMIN_VOTE_MAP_1 = %s: hlasoval pro mapu(y) +ADMIN_VOTE_MAP_2 = %s %s: hlasovali pro map(y) +VOTING_STARTED = Hlasovani zapocato... +VOTING_FORBIDDEN = Voting for that has been forbidden +ADMIN_VOTE_CUS_1 = %s: volil jinak +ADMIN_VOTE_CUS_2 = %s %s: volili jinak +VOTE = Hlasovani +ACTION_PERFORMED = Tato operace nebuze byt provedena "%s" +ADMIN_VOTE_FOR_1 = %s: hlasoval %s pro %s +ADMIN_VOTE_FOR_2 = %s %s: hlasoval %s pro %s + +[fi] +ADMIN_CANC_VOTE_1 = %s: peruuta vote +ADMIN_CANC_VOTE_2 = %s %s: peruuta vote +VOTING_CANC = Vote peruutettu +NO_VOTE_CANC = Ei ole peruutettavaa votea tai voteamista ei voida peruuttaa tuolla komennolla +RES_REF = Tulos hylattiin +RES_ACCEPTED = Tulos hyvaksyttiin +VOTING_FAILED = Vote epaonnistui +VOTING_RES_1 = %s (kylla "%d") (ei "%d") (tarvittiin "%d") +VOTING_RES_2 = %s (saatiin "%d") (tarvittiin "%d") +VOTING_SUCCESS = Vote onnistui +VOTING_RES_3 = %s (saatiin "%d") (tarvittiin "%d"). Tulos: %s +THE_RESULT = Tulos +WANT_CONTINUE = Haluatko jatkaa? +VOTED_FOR = %s votesi puolesta +VOTED_AGAINST = %s votesi vastaan +VOTED_FOR_OPT = %s votesi vaihtoehtoa #%d +ALREADY_VOTING = Yksi vote on jo meneillaan +VOTING_NOT_ALLOW = Nyt ei saa votea +GIVEN_NOT_VALID = Annettu %s ei kelpaa +MAP_IS = mappi on +MAPS_ARE = mapit ovat +CHOOSE_MAP = Valitse map +ADMIN_VOTE_MAP_1 = %s: votea mappi/mappeja +ADMIN_VOTE_MAP_2 = %s %s: votea mappi/mappeja +VOTING_STARTED = Voteeminen alkoi... +VOTING_FORBIDDEN = Tuosta voteeminen on kielletty +ADMIN_VOTE_CUS_1 = %s: vapaavalintainen vote +ADMIN_VOTE_CUS_2 = %s %s: vapaavalintainen vote +VOTE = Vote +ACTION_PERFORMED = Botille "%s" ei voida suorittaa tuota toimintoa +ADMIN_VOTE_FOR_1 = %s: votea %s %s:n puolesta +ADMIN_VOTE_FOR_2 = %s %s: votea %s %s:n puolesta + +[ls] +ADMIN_CANC_VOTE_1 = %s: |\|03z \/0+3 +ADMIN_CANC_VOTE_2 = %s %s: |\|03z \/0+3 +VOTING_CANC = pwn@g3 |\|03zed +NO_VOTE_CANC = |\|03z \/073z0rin' |3!tc|-| +RES_REF = PWNT +RES_ACCEPTED = 0k 0k, nubz, ju$7 t|-|!$ 0nc3 +VOTING_FAILED = PWNT +VOTING_RES_1 = %s (yes "%d") (|\|03z "%d") (|\|33|)3|) "%d") +VOTING_RES_2 = %s (|200T "%d") (|\|33|)3|) "%d") +VOTING_SUCCESS = W!N +VOTING_RES_3 = %s (|200T "%d") (|\|33|)3|) "%d"). L3w$3|2z: %s +THE_RESULT = 3xp3|2!m3n7 r3su|_tz@ +WANT_CONTINUE = j00 $ur3? +VOTED_FOR = %s \/0+3d |=0|2 +VOTED_AGAINST = %s \/0+3d @$$ +VOTED_FOR_OPT = %s \/0+3d |=0|2 option #%d +ALREADY_VOTING = N03z, \/073 !|\| |>|20g|23$$ +VOTING_NOT_ALLOW = W00t! \/0t3 |3!tch3z +GIVEN_NOT_VALID = N03 w@y |3itch +MAP_IS = |\/|@|> !$ +MAPS_ARE = |\/|@|>s @|23 +CHOOSE_MAP = Ch00s3 |\/|@|> +ADMIN_VOTE_MAP_1 = %s: \/0+3 |\/|@|>(s) +ADMIN_VOTE_MAP_2 = %s %s: \/0+3 |\/|@|>(s) +VOTING_STARTED = pwn@g3 h@z c0mm3nc3d +VOTING_FORBIDDEN = pwn@g3 |=0|2bidden +ADMIN_VOTE_CUS_1 = %s: \/0+3 cust0m +ADMIN_VOTE_CUS_2 = %s %s: \/0+3 cust0m +VOTE = Vote +ACTION_PERFORMED = No3z! bot! "%s" +ADMIN_VOTE_FOR_1 = %s: \/0+3 %s |=0|2 %s +ADMIN_VOTE_FOR_2 = %s %s: \/0+3 %s |=0|2 %s + +[bg] +ADMIN_CANC_VOTE_1 = %s: kanselira glasuvaneto +ADMIN_CANC_VOTE_2 = %s %s: kanselira glasuvaneto +VOTING_CANC = Glasuvaneto e kanselirano +NO_VOTE_CANC = Nqma nikakvo glasuvane za kanselirane ili glasuvaneto nemoje da se kanselira s tazi camanda +RES_REF = Resultata ne e priet +RES_ACCEPTED = Resultata e priet +VOTING_FAILED = Glasivaneto se e provalilo +VOTING_RES_1 = %s (da "%d") (ne "%d") (nujni "%d") +VOTING_RES_2 = %s (polu4eni "%d") (nujni "%d") +VOTING_SUCCESS = Glasuvaneto e uspe6no +VOTING_RES_3 = %s (polu4eni "%d") (nujni "%d"). Resultata: %s +THE_RESULT = Resultata +WANT_CONTINUE = Iskateli da produljite? +VOTED_FOR = %s glasuva za +VOTED_AGAINST = %s glasuva protiv +VOTED_FOR_OPT = %s glasuva za #%d +ALREADY_VOTING = V momenta ima edno glasuvane... +VOTING_NOT_ALLOW = Ne e pozvoleno da se glasuva v momenta +GIVEN_NOT_VALID = Davaneto %s ne e validno +MAP_IS = kartata e +MAPS_ARE = kartite sa +CHOOSE_MAP = Izbirane na karta +ADMIN_VOTE_MAP_1 = %s: glasuvane za karta(i) +ADMIN_VOTE_MAP_2 = %s %s: glasuvane za karta(i) +VOTING_STARTED = Glasuvaneto zapo4na... +VOTING_FORBIDDEN = Glasuvaneto za tova e zabraneno +ADMIN_VOTE_CUS_1 = %s: vote custom +ADMIN_VOTE_CUS_2 = %s %s: vote custom +VOTE = Glasuvane +ACTION_PERFORMED = tazi commanda nemoje da se izpolzva varhu bota "%s" +ADMIN_VOTE_FOR_1 = %s: glasuva %s za %s +ADMIN_VOTE_FOR_2 = %s %s: glasuva %s za %s + +[ro] +ADMIN_CANC_VOTE_1 = %s: anuleaza vot +ADMIN_CANC_VOTE_2 = %s %s: anuleaza vot +VOTING_CANC = Votarea a fost anulata +NO_VOTE_CANC = Nu exista votari pentru anulare sau nu poate fi anulata cu aceea comanda +RES_REF = Rezultat refuzat +RES_ACCEPTED = Rezultat acceptat +VOTING_FAILED = Votare esuata +VOTING_RES_1 = %s (da "%d" voturi, nu "%dvoturi", necesare "%d") +VOTING_RES_2 = %s (a obtinut "%d voturi", necesare "%d") +VOTING_SUCCESS = Votarea a avut loc cu succes +VOTING_RES_3 = %s (a obtinut "%d" voturi, necesare "%d"). Rezultatul este: %s +THE_RESULT = Rezultatul +WANT_CONTINUE = Accepti schimbarea hartii? +VOTED_FOR = %s a votat pentru +VOTED_AGAINST = %s a votat impotriva +VOTED_FOR_OPT = %s a votat pentru #%d +ALREADY_VOTING = Deja se afla o votare in curs de desfasurare... +VOTING_NOT_ALLOW = Votarile nu sunt permise acum +GIVEN_NOT_VALID = %s nu este valida +MAP_IS = harta este +MAPS_ARE = hartile sunt +CHOOSE_MAP = Alege harta +ADMIN_VOTE_MAP_1 = %s: votare harta +ADMIN_VOTE_MAP_2 = %s %s: votare harta +VOTING_STARTED = Votarea a inceput... +VOTING_FORBIDDEN = Votarea pentru aceasta optiune nu este permisa +ADMIN_VOTE_CUS_1 = %s: votare customizata +ADMIN_VOTE_CUS_2 = %s %s: votare customizata +VOTE = Voteaza +ACTION_PERFORMED = Aceasta comanda nu poate fi executata pe bot-ul "%s" +ADMIN_VOTE_FOR_1 = %s: vot %s pentru %s +ADMIN_VOTE_FOR_2 = %s %s: vot %s pentru %s + +[hu] +ADMIN_CANC_VOTE_1 = %s: szavazas visszavonasa +ADMIN_CANC_VOTE_2 = %s %s: szavazas visszavonasa +VOTING_CANC = Szavazas visszavonva. +NO_VOTE_CANC = Ezzel a parancsal nem lehet visszavonni a szavazast. +RES_REF = Eredmeny elutasitva +RES_ACCEPTED = Eredmeny elfogadva. +VOTING_FAILED = Szavazas sikertelen +VOTING_RES_1 = %s (igen "%d") (nem "%d") (kell "%d") +VOTING_RES_2 = %s (van "%d") (kell "%d") +VOTING_SUCCESS = Szavazas sikeres +VOTING_RES_3 = %s (van "%d") (kell "%d"). Az eredmeny: %s +THE_RESULT = Az eredmeny +WANT_CONTINUE = Folytatod? +VOTED_FOR = %s igen-re szavazott +VOTED_AGAINST = %s nemre szavazott +VOTED_FOR_OPT = %s a #%d - re szavazott +ALREADY_VOTING = Mar folyik 1 szavazas... +VOTING_NOT_ALLOW = A szavazas most nincs engedelyezve +GIVEN_NOT_VALID = Az adott %s nem helyes +MAP_IS = a palya +MAPS_ARE = a palya +CHOOSE_MAP = Valasz palyat +ADMIN_VOTE_MAP_1 = %s: Palya szavazas +ADMIN_VOTE_MAP_2 = %s %s: Palya szavazas +VOTING_STARTED = Szavazas inditva... +VOTING_FORBIDDEN = Voting for that has been forbidden +ADMIN_VOTE_CUS_1 = %s: szavazas custom +ADMIN_VOTE_CUS_2 = %s %s: szavazas custom +VOTE = Szavazas +ACTION_PERFORMED = Az akciot nem lehet "%s"-boton vegrehalytani +ADMIN_VOTE_FOR_1 = %s: szavazas %s vagy %s +ADMIN_VOTE_FOR_2 = %s %s: szavazas %s vagy %s + +[lt] +ADMIN_CANC_VOTE_1 = %s: atsaukti balsavima +ADMIN_CANC_VOTE_2 = %s %s: atsaukti balsavima +VOTING_CANC = Balsavimas atsauktas +NO_VOTE_CANC = Nera balsavimo, kad jy galetum atsaukti. Arba naudoji netinkama komanda +RES_REF = Rezultatas nepriimtas +RES_ACCEPTED = Rezultatas priimtas +VOTING_FAILED = Balsavimas nepavyko +VOTING_RES_1 = %s (taip "%d") (ne "%d") (reikia "%d") +VOTING_RES_2 = %s (gavo "%d") (reikia "%d") +VOTING_SUCCESS = Balsavimas pavyko +VOTING_RES_3 = %s (gavo "%d") (reikia "%d"). Rezultatas: %s +THE_RESULT = Rezultatas +WANT_CONTINUE = Ar nori testi? +VOTED_FOR = %s prabalsavo uz +VOTED_AGAINST = %s prabalsavo pries +VOTED_FOR_OPT = %s balsavo uz #%d +ALREADY_VOTING = Jau balsuojama... +VOTING_NOT_ALLOW = Balsavimas negalimas siuo metu +GIVEN_NOT_VALID = Duota %s neteisinga +MAP_IS = Zemelapis yra +MAPS_ARE = Zemelapiai yra +CHOOSE_MAP = Issirink zemelapi +ADMIN_VOTE_MAP_1 = %s: zemelapiu balsavimas +ADMIN_VOTE_MAP_2 = %s %s: zemelapiu balsavimas +VOTING_STARTED = Balsavimas pradetas +VOTING_FORBIDDEN = Sis balsavimas draudziamas +ADMIN_VOTE_CUS_1 = %s: pakeista balsavima +ADMIN_VOTE_CUS_2 = %s %s: pakeista balsavima +VOTE = Balsavimas +ACTION_PERFORMED = Sis veiksmas negalimas botui "%s" +ADMIN_VOTE_FOR_1 = %s: balsavo %s uz %s +ADMIN_VOTE_FOR_2 = %s %s: balsavo %s uz %s + +[sk] +ADMIN_CANC_VOTE_1 = %s: zrusil hlasovanie +ADMIN_CANC_VOTE_2 = %s %s: zrusili hlasovanie +VOTING_CANC = Hlasovanie zrusene +NO_VOTE_CANC = Neni co zrusit lebo hlasovanie nejde zrusit tymto prikazom +RES_REF = Hlasovanie neplatne +RES_ACCEPTED = Hlasovanie prijate +VOTING_FAILED = Hlasovanie zlihalo +VOTING_RES_1 = %s (za ano "%d") (za nie "%d") (bolo potrebnych "%d") +VOTING_RES_2 = %s (dostal "%d") (bolo potrebnych "%d") +VOTING_SUCCESS = Hlasovanie uspesne +VOTING_RES_3 = %s (dostal "%d") (bolo potrebnych "%d"). Vysledok: %s +THE_RESULT = Vysledok +WANT_CONTINUE = Chces pokracovat? +VOTED_FOR = %s hlasovalo za +VOTED_AGAINST = %s hlasovalo proti +VOTED_FOR_OPT = %s hlasovalo pre volbu #%d +ALREADY_VOTING = Uz sa raz hlasovalo... +VOTING_NOT_ALLOW = Hlasovanie neni teraz povolene +GIVEN_NOT_VALID = Opakovanie %s neplatne +MAP_IS = mapa je +MAPS_ARE = mapy su +CHOOSE_MAP = Zvol mapu +ADMIN_VOTE_MAP_1 = %s: hlasoval pre mapu(y) +ADMIN_VOTE_MAP_2 = %s %s: hlasovali pre map(y) +VOTING_STARTED = Hlasovanie zacate... +VOTING_FORBIDDEN = Hlasovanie bolo zakazane +ADMIN_VOTE_CUS_1 = %s: volil inak +ADMIN_VOTE_CUS_2 = %s %s: volili inak +VOTE = Hlasovanie +ACTION_PERFORMED = Tato operacia nemoze byt prevedena "%s" +ADMIN_VOTE_FOR_1 = %s: hlasoval %s za %s +ADMIN_VOTE_FOR_2 = %s %s: hlasoval %s za %s + +[mk] +ADMIN_CANC_VOTE_1 = %s: otkazi go glasanjeto +ADMIN_CANC_VOTE_2 = %s %s: otkazi go glasanjeto +VOTING_CANC = Glasanjeto e otkazano +NO_VOTE_CANC = Momentalno nema glasanje koe bi mozelo da se prekine ili glasanjeto ne moze da bide prekinato so taa komanda +RES_REF = Rezultatot e odbien +RES_ACCEPTED = Rezultatot e prifaten +VOTING_FAILED = Glasanjeto e neuspesno +VOTING_RES_1 = %s (da "%d") (ne "%d") (potrebno e "%d") +VOTING_RES_2 = %s (dobieno e "%d") (potrebno e "%d") +VOTING_SUCCESS = Glasanjeto e uspesno +VOTING_RES_3 = %s (dobieno e "%d") (potrebno e "%d"). Rezultatot e: %s +THE_RESULT = Rezultat +WANT_CONTINUE = Dali sakate da prodolzite? +VOTED_FOR = %s glasase DA +VOTED_AGAINST = %s glasase NE +VOTED_FOR_OPT = %s glasase za #%d +ALREADY_VOTING = Edno glasanje e veke vo tek... +VOTING_NOT_ALLOW = Glasanje momentalno ne e dozvoleno +GIVEN_NOT_VALID = Dadenite %s glasovi ne se validni +MAP_IS = mapata e +MAPS_ARE = mapite se +CHOOSE_MAP = Izberi mapa +ADMIN_VOTE_MAP_1 = %s: glasanje za mapa +ADMIN_VOTE_MAP_2 = %s %s: glasanje za mapa +VOTING_STARTED = Glasanjeto zapocna... +VOTING_FORBIDDEN = Glasanjeto za toa e zabraneto +ADMIN_VOTE_CUS_1 = %s: Specificno glasanje +ADMIN_VOTE_CUS_2 = %s %s: Specificno glasanje +VOTE = Glasanje +ACTION_PERFORMED = Taa akcija ne moze da bide izvrsena na bot "%s" +ADMIN_VOTE_FOR_1 = %s: glasase %s za %s +ADMIN_VOTE_FOR_2 = %s %s: glasase %s za %s diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/antiflood.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/antiflood.txt new file mode 100644 index 0000000..b1a0aac --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/antiflood.txt @@ -0,0 +1,59 @@ +[en] +STOP_FLOOD = Stop flooding the server! + +[de] +STOP_FLOOD = Bitte nicht zu viele Eingaben auf einmal! + +[sr] +STOP_FLOOD = Prestani da opterecujes server porukama! + +[tr] +STOP_FLOOD = Serveri yazi ile doldurmayin! + +[fr] +STOP_FLOOD = Arrete de flooder le serveur! + +[sv] +STOP_FLOOD = Sluta flooda servern! + +[da] +STOP_FLOOD = Stop med at oversvoemme serveren! + +[pl] +STOP_FLOOD = Przestan zapychac serwer! + +[nl] +STOP_FLOOD = Stop met de server vol te spammen! + +[es] +STOP_FLOOD = Para de saturar el servidor! + +[bp] +STOP_FLOOD = Parem com o flood no servidor! + +[cz] +STOP_FLOOD = Prestan floodovat! + +[fi] +STOP_FLOOD = Lopeta floodiminen! + +[ls] +STOP_FLOOD = nu m0|2 fl00d, | Befehle +CONF_MENU = Menu > Konfiguration +SPE_MENU = Menu > Sprechen + +[sr] +CMD_MENU = Komandne +CONF_MENU = Podesavanja +SPE_MENU = Govorne Komande + +[tr] +CMD_MENU = Emir Menusu +CONF_MENU = Configler Menusu +SPE_MENU = Konusma Menusu + +[fr] +CMD_MENU = Menu Commandes +CONF_MENU = Menu Configurations +SPE_MENU = Menu Voix/Paroles + +[sv] +CMD_MENU = Kommandomeny +CONF_MENU = Konfigurationsmeny +SPE_MENU = Talmeny + +[da] +CMD_MENU = Kommando Menu +CONF_MENU = Konfigurations Menu +SPE_MENU = Tale Menu + +[pl] +CMD_MENU = Menu komend +CONF_MENU = Menu konfiguracji +SPE_MENU = Menu rozmowy + +[nl] +CMD_MENU = Commandomenu +CONF_MENU = Configuratiemenu +SPE_MENU = Spraakmenu + +[es] +CMD_MENU = Menu de Comandos +CONF_MENU = Menu de Configuracion +SPE_MENU = Menu de Voz + +[bp] +CMD_MENU = Menu de Comandos +CONF_MENU = Menu de Configs +SPE_MENU = Menu de Vozes + +[cz] +CMD_MENU = Menu prikazu +CONF_MENU = Menu nastaveni +SPE_MENU = Nastaveni reci + +[fi] +CMD_MENU = Komentovalikko +CONF_MENU = Saatovalikko +SPE_MENU = Puhevalikko + +[ls] +CMD_MENU = l33t cmdz M3nu +CONF_MENU = l33t c0nf!gz M3nu +SPE_MENU = l33t $p33ch M3nu + +[bg] +CMD_MENU = Comandnoto Menu +CONF_MENU = Configuracionno Menu +SPE_MENU = Menu za Govorene + +[ro] +CMD_MENU = Menu Comenzi +CONF_MENU = Menu Configuratie +SPE_MENU = Menu Speech + +[hu] +CMD_MENU = Parancs Menu +CONF_MENU = Beallitas Menu +SPE_MENU = Beszed Menu + +[lt] +CMD_MENU = Komandu meniu +CONF_MENU = Konfigu meniu +SPE_MENU = Kalbos meniu + +[sk] +CMD_MENU = Menu prikazov +CONF_MENU = Menu nastaveni +SPE_MENU = Nastavenie reci + +[mk] +CMD_MENU = Meni so komandi +CONF_MENU = Meni so konfiguracii +SPE_MENU = Meni so glasovni komandi diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/common.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/common.txt new file mode 100644 index 0000000..0fe903f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/common.txt @@ -0,0 +1,439 @@ +[en] +BACK = Back +EXIT = Exit +MORE = More +NONE = None +ADMIN = ADMIN +PLAYER = PLAYER +ERROR = error +YES = Yes +NO = No +BAN = ban +KICK = kick +NO_ACC_COM = You have no access to that command +USAGE = Usage +MORE_CL_MATCHT = There is more than one client matching your argument +CL_NOT_FOUND = Client with that name or userid not found +CLIENT_IMM = Client "%s" has immunity +CANT_PERF_DEAD = That action can't be performed on dead client "%s" +CANT_PERF_BOT = That action can't be performed on bot "%s" +ON = On +OFF = Off + +[de] +BACK = Zurueck +EXIT = Beenden +MORE = Mehr +NONE = Keine +ADMIN = ADMIN +PLAYER = Spieler +ERROR = Fehler +YES = Ja +NO = Nein +BAN = ban +KICK = kick +NO_ACC_COM = Du hast nicht genuegend Rechte, um diesen Befehl auszufuehren! +USAGE = Anwendung +MORE_CL_MATCHT = Es gibt mehrere Spieler, auf die deine Angaben zutreffen +CL_NOT_FOUND = Spieler mit diesem Namen oder dieser UserID nicht gefunden +CLIENT_IMM = Spieler "%s" hat Immnuitaet +CANT_PERF_DEAD = Diese Aktion kann nicht am toten Spieler "%s" ausgefuehrt werden. +CANT_PERF_BOT = Diese Aktion kann nicht am Bot "%s" ausgefuehrt werden. +ON = An +OFF = Aus + +[sr] +BACK = Nazad +EXIT = Izlaz +MORE = Jos +NONE = Nema +ADMIN = ADMIN +PLAYER = IGRAC +ERROR = greska +YES = Da +NO = Ne +BAN = ban +KICK = kick +NO_ACC_COM = Nemate pristup zadatoj komandi +USAGE = Koriscenje +MORE_CL_MATCHT = vise korisnika zadovoljava vas argument +CL_NOT_FOUND = Klijent sa tim imenom ili korisnickim ID-om nije nadjen +CLIENT_IMM = Klijent "%s" ima imunitet +CANT_PERF_DEAD = Komanda ne moze biti izvrsena na mrtvom klijentu "%s" +CANT_PERF_BOT = Komanda ne moze biti izvrsena na botu "%s" +ON = Ukljucen +OFF = Iskljucen + +[tr] +BACK = Geri +EXIT = Cikis +MORE = Daha +NONE = Hic +ADMIN = ADMIN +PLAYER = Oyuncu +ERROR = hata +YES = evet +NO = hayir +BAN = ban +KICK = at +NO_ACC_COM = O emiri kullanma hakkiniz yok +USAGE = kullanim +MORE_CL_MATCHT = Aradiginiz konuya uygun oyuncular +CL_NOT_FOUND = O isimde oyuncu yada kullaniciID'si bulunamadi +CLIENT_IMM = "%s" oyuncunun dokunulmazligi var +CANT_PERF_DEAD = Bunu olu bir oyuncunun uzerinde yapamazsiniz "%s" +CANT_PERF_BOT = Bot uzerinde bunu yapamazsiniz "%s" +ON = Acik +OFF = Kapali + +[fr] +BACK = Retour +EXIT = Sortir +MORE = Plus +NONE = Aucun +ADMIN = ADMIN +PLAYER = JOUEUR +ERROR = erreur +YES = Oui +NO = Non +BAN = bannir +KICK = kicker +NO_ACC_COM = Tu n'as pas acces a cette commande +USAGE = Utilisation +MORE_CL_MATCHT = Plusieurs clients correspondent a tes criteres +CL_NOT_FOUND = Le client avec ce nom ou cette userid est introuvable +CLIENT_IMM = Client "%s" est immunise +CANT_PERF_DEAD = Cette action ne peut pas etre faite sur un joueur mort "%s" +CANT_PERF_BOT = Cette action ne peut pas etre faite sur un BOT "%s" +ON = Actif +OFF = Inactif + +[sv] +BACK = Tillbaka +EXIT = Avsluta +MORE = Mer +NONE = Ingen +ADMIN = ADMIN +PLAYER = SPELARE +ERROR = fel +YES = Ja +NO = Nej +BAN = bannlys +KICK = sparka +NO_ACC_COM = Du saknar befogenhet till det kommandot +USAGE = Utnyttjande +MORE_CL_MATCHT = fler klienter som passar argumentet +CL_NOT_FOUND = Klient med det namnet eller userid'et kan inte hittas +CLIENT_IMM = Klient "%s" har immunitet +CANT_PERF_DEAD = Handling kan inte utf'o'ras pa den likviderade klienten "%s" +CANT_PERF_BOT = Den handlingen kan inte utf'o'ras pa bot "%s" +ON = Aktiv +OFF = Av + +[da] +BACK = Tilbage +EXIT = Exit +MORE = Mere +NONE = Ingen +ADMIN = ADMIN +PLAYER = SPILLER +ERROR = fejl +YES = Ja +NO = Nej +BAN = ban +KICK = kick +NO_ACC_COM = Du har ikke adgang til den kommando +USAGE = brug +MORE_CL_MATCHT = her er flere klienter der passer paa dit argument +CL_NOT_FOUND = Klient med det navn eller brugerid ikke fundet +CLIENT_IMM = Klient "%s" har immunitet +CANT_PERF_DEAD = Den handling kan ikke udfoeres paa doed klient "%s" +CANT_PERF_BOT = Den handling kan ikke udfoeres paa bot "%s" +ON = Til +OFF = Fra + +[pl] +BACK = Wstecz +EXIT = Wyjscie +MORE = Wiecej +NONE = Nic +ADMIN = ADMIN +PLAYER = GRACZ +ERROR = blad +YES = Tak +NO = Nie +BAN = ban +KICK = kick +NO_ACC_COM = Nie mozesz uzyc tej komendy +USAGE = Uzycie +MORE_CL_MATCHT = Istnieje kilku graczy pasujacych do podanego wzorca +CL_NOT_FOUND = Nie znaleziono klienta z tym nickiem lub ID +CLIENT_IMM = Klient "%s" ma immunitet +CANT_PERF_DEAD = Nie mozesz tego wykonac na martwym kliencie "%s" +CANT_PERF_BOT = Nie mozesz tego wykonac na bocie "%s" +ON = Wl +OFF = Wyl + +[nl] +BACK = Terug +EXIT = Verlaat +MORE = Meer +NONE = Geen +ADMIN = ADMIN +PLAYER = SPELER +ERROR = fout +YES = Ja +NO = Nee +BAN = verban +KICK = verwijder +NO_ACC_COM = Je hebt geen toegang tot dat commando. +USAGE = Gebruik +MORE_CL_MATCHT = Er zijn meer spelers die overeen komen met het gegeven patroon +CL_NOT_FOUND = Speler met die naam of UserID niet gevonden. +CLIENT_IMM = Speler "%s" is immuun +CANT_PERF_DEAD = Die actie kan niet worden uitgevoerd op dode speler "%s" +CANT_PERF_BOT = Die actie kan niet worden uitgevoerd op bot "%s" +ON = Aan +OFF = Uit + +[es] +BACK = Atras +EXIT = Salir +MORE = Mas +NONE = Ninguno +ADMIN = ADMIN +PLAYER = JUGADOR +ERROR = error +YES = Si +NO = No +BAN = banear +KICK = expulsar +NO_ACC_COM = No tienes acceso a este comando +USAGE = Uso +MORE_CL_MATCHT = Hay mas de un cliente que coincide con tu argumento +CL_NOT_FOUND = No se encontro ningun cliente con ese nombre o ese identificador +CLIENT_IMM = El cliente "%s" tiene inmunidad +CANT_PERF_DEAD = Esta accion no se puede aplicar a un cliente muerto "%s" +CANT_PERF_BOT = Esta accion no se puede aplicar a un bot "%s" +ON = Activado +OFF = Desactivado + +[bp] +BACK = Voltar +EXIT = Sair +MORE = Mais +NONE = Nenhum +ADMIN = ADMIN +PLAYER = JOGADOR +ERROR = erro +YES = Sim +NO = Nao +BAN = banir +KICK = kickar +NO_ACC_COM = Voce nao tem acesso a este comando +USAGE = Uso +MORE_CL_MATCHT = Aqui sao mais clientes ... para seu argumento +CL_NOT_FOUND = Cliente com este nome ou userid nao encontrado +CLIENT_IMM = Cliente "%s" tem imunidade +CANT_PERF_DEAD = Aquela acao nao pode ser executada com o cliente morto "%s" +CANT_PERF_BOT = Aquela acao nao pode ser executada com bot "%s" +ON = Ligado +OFF = Desligado + +[cz] +BACK = Zpatky +EXIT = Exit +MORE = Vice +NONE = Nic +ADMIN = ADMIN +PLAYER = HRAC +ERROR = error +YES = Ano +NO = Ne +BAN = ban +KICK = kick +NO_ACC_COM = Nemas pristup k tomuto prikazu +USAGE = Pouziti +MORE_CL_MATCHT = je zde vic klientu odpovidajici tvym kriteriim +CL_NOT_FOUND = Klient s timto jmenem nebo userid nenalezen +CLIENT_IMM = Klient "%s" ma imunitu +CANT_PERF_DEAD = Tato operace nelze provest na mrtvem klientu "%s" +CANT_PERF_BOT = Tato operace nelze provest na botovi "%s" +ON = ON +OFF = OFF + +[fi] +BACK = Takaisin +EXIT = Poistu +MORE = Lisaa +NONE = Ei yhtaan +ADMIN = ADMIN +PLAYER = PELAAJA +ERROR = virhe +YES = Kylla +NO = Ei +BAN = banni +KICK = potku +NO_ACC_COM = Sinulla ei ole valtuuksia tuohon komentoon +USAGE = Kaytto +MORE_CL_MATCHT = taalla on enemman kuin yksi client, joka vastaa kuvaukseesi +CL_NOT_FOUND = Tuon nimista pelaajaa tai tuota ID:ta ei loytynyt +CLIENT_IMM = "%s":lla on immunitteetti +CANT_PERF_DEAD = Tuota toimintoa ei voida suorittaa kuolleeseen pelaajaan "%s" +CANT_PERF_BOT = Tuota toimintoa ei voida suorittaa bottiin "%s" +ON = Paalla +OFF = Poissa paalta + +[ls] +BACK = l3ws3 +EXIT = G!v3 u|> b4$3 +MORE = t0 v!ct0ry +NONE = c3r0 +ADMIN = l33t s3rv3r 0P +PLAYER = un-l33t n0 |200t'3d n00b +ERROR = 3rr0r: | N0T 3NUFF M4N4! | +YES = h4! +NO = n0 +BAN = b4nz0|2 +KICK = k!ckz0|2 +NO_ACC_COM = 3rr0r: | N0T 3NUFF M4N4! | n0t 3nu77 |200t +USAGE = uzig3 +MORE_CL_MATCHT = 3rr0r: | N0T 3NUFF M4N4! | t00 m4ny un-l33t n0 |200t'3d n00b fi7! +CL_NOT_FOUND = 3rr0r: | N0T 3NUFF M4N4! | t00 f3w un-l33t n0 |200t'3d n00b fi7! +CLIENT_IMM = l33t s3rv3r 0P "%s" h4z |200t +CANT_PERF_DEAD = un-l33t n0 |200t'3d n00b "%s" iz d34d! +CANT_PERF_BOT = "%s" iz 4 l33t b0t! +ON = 0|\| +OFF = 077 + +[bg] +BACK = Nazad +EXIT = Izhot +MORE = O6te +NONE = nikolko +ADMIN = ADMINISTRATOR +PLAYER = Igra4 +ERROR = gre6ka +YES = Da +NO = Ne +BAN = ban +KICK = kick +NO_ACC_COM = Nqmate dostap do tazi commanda +USAGE = Ispolzvane +MORE_CL_MATCHT = eto o6te igra4i koito otgovarqt na commandata +CL_NOT_FOUND = Igra4 s tova ime ili userid ne e nameren +CLIENT_IMM = Igra4a "%s" ima immunity +CANT_PERF_DEAD = Tazi comanda nemoje da se izpolzva na umrql igra4 "%s" +CANT_PERF_BOT = Tazi comanda nemoje da se izpolzva na bot "%s" +ON = Vklu4eno +OFF = Isklu4eno + +[ro] +BACK = Inapoi +EXIT = Iesire +MORE = Mai mult +NONE = Nici unul +ADMIN = ADMIN +PLAYER = JUCATOR +ERROR = eroare +YES = Da +NO = Nu +BAN = ban +KICK = kick +NO_ACC_COM = Nu ai acces la aceasta comanda +USAGE = Valoare +MORE_CL_MATCHT = Sunt mai multi jucatori ce va indeplinesc cautarea +CL_NOT_FOUND = Jucatorul cu acel nume sau id nu exista +CLIENT_IMM = Jucatorul "%s" are imunitate +CANT_PERF_DEAD = Aceasta comanda nu poate fi executata pe jucatorul decedat "%s" +CANT_PERF_BOT = Aceasta comanda nu poate fi executata pe bot-ul "%s" +ON = Activat +OFF = Dezactivat + +[hu] +BACK = Vissza +EXIT = Kilepes +MORE = Tobb +NONE = Egyiksem +ADMIN = ADMIN +PLAYER = Jatekos +ERROR = hiba +YES = Igen +NO = Nem +BAN = ban +KICK = kirugas +NO_ACC_COM = Nincs elerhetoseged ehhez a parancshoz. +USAGE = Hasznalat +MORE_CL_MATCHT = here are more clients matching to your argument +CL_NOT_FOUND = Nincs ilyen nevu jatekos +CLIENT_IMM = "%s" ellen all +CANT_PERF_DEAD = Ezt az akciot nem hajthatod vegre "%s"-on mert halott +CANT_PERF_BOT = Ezt az akciot nem hajthatod vegre "%s"-on mert bot +ON = Be +OFF = Ki + +[lt] +BACK = Atgal +EXIT = Iseiti +MORE = Daugiau +NONE = Nera +ADMIN = ADMINAS +PLAYER = ZAIDEJAS +ERROR = klaida +YES = Taip +NO = Ne +BAN = Banas +KICK = Ismesti +NO_ACC_COM = Nera teisiu siai komandai +USAGE = Naudoti +MORE_CL_MATCHT = Cia yra daugiau panasiu klientu. +CL_NOT_FOUND = Klientas siuo vardu ar su userid nerastas +CLIENT_IMM = Klientas "%s" turi imuniteta +CANT_PERF_DEAD = Sis veiksmas negalimas jau numirusiam zaidejui "%s" +CANT_PERF_BOT = Sio veiksmo negalima naudoti ant boto "%s" +ON = Ijungta +OFF = Isjungta + +[sk] +BACK = Spat +EXIT = Exit +MORE = Viac +NONE = Nic +ADMIN = ADMIN +PLAYER = HRAC +ERROR = chyba +YES = Ano +NO = Nie +BAN = ban +KICK = kick +NO_ACC_COM = Nemas pristup k tomuto prikazu +USAGE = Pouzity +MORE_CL_MATCHT = je tu viac klientov zodpovedajucim tymto kriteriam +CL_NOT_FOUND = Klient s tymto menom alebo userid nenajdeny +CLIENT_IMM = Klient "%s" ma imunitu +CANT_PERF_DEAD = Tato operacia nejde previest na mrtvom klientovi "%s" +CANT_PERF_BOT = Tato operacia nejde previest na botovi "%s" +ON = ON +OFF = OFF + +[mk] +BACK = Nazad +EXIT = Izlez +MORE = Uste +NONE = Nema +ADMIN = ADMIN +PLAYER = IGRAC +ERROR = greska +YES = Da +NO = Ne +BAN = ban +KICK = kick +NO_ACC_COM = Nemate pristap na dadenata komanda +USAGE = Koristenje +MORE_CL_MATCHT = Poveke igraci go zadovoluvaat vaseto baranje +CL_NOT_FOUND = Igrac so toa ime ili so toj korisnicki ID ne e najden +CLIENT_IMM = Igracot "%s" ima imunitet +CANT_PERF_DEAD = Komandata ne moze da bide izvrsena na igracot "%s" bidejki e mrtov +CANT_PERF_BOT = Komandata ne moze da bide izvrsena na botot "%s" +ON = Uklucen +OFF = Isklucen diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/imessage.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/imessage.txt new file mode 100644 index 0000000..5432b44 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/imessage.txt @@ -0,0 +1,59 @@ +[en] +INF_REACH = Information Messages limit reached! + +[de] +INF_REACH = Nachrichtenlimit erreicht! + +[sr] +INF_REACH = Dostignut limit Informacione Poruke! + +[tr] +INF_REACH = Informasyon mesajlari sinirina ulasildi! + +[fr] +INF_REACH = Limite de Messages d'Information atteinte! + +[sv] +INF_REACH = Maximalt antal informationsmeddelanden! + +[da] +INF_REACH = Informations beskeder graense naaet! + +[pl] +INF_REACH = Osiagniety limit wiadomosci informacyjnych! + +[nl] +INF_REACH = Informatieve Berichtenlimiet bereikt! + +[es] +INF_REACH = Se ha alcanzado el limite maximo de Mensajes de Informacion! + +[bp] +INF_REACH = Limite de mensagens de informacao obtido! + +[cz] +INF_REACH = Limit informacnich zprav presazen! + +[fi] +INF_REACH = Information Message -raja ylitetty! + +[ls] +INF_REACH = l!m!tz r34ch3d + +[bg] +INF_REACH = Informacionnoto saob6tenie dostigna limita! + +[ro] +INF_REACH = Limita mesajelor informative a fost atinsa! + +[hu] +INF_REACH = Informacio uzenetek limit elerve! + +[lt] +INF_REACH = Informacijos zinuciu limitas pasiektas + +[sk] +INF_REACH = Limit informacnych sprav prekroceny! + +[mk] +INF_REACH = Dostignat e limitot za Informacioni Poraki! diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/languages.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/languages.txt new file mode 100644 index 0000000..d81f432 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/languages.txt @@ -0,0 +1,79 @@ +[en] +LANG_NAME = English +LANG_NAME_NATIVE = English + +[de] +LANG_NAME = German +LANG_NAME_NATIVE = Deutsch + +[sr] +LANG_NAME = Serbian +LANG_NAME_NATIVE = Srpski + +[tr] +LANG_NAME = Turkish +LANG_NAME_NATIVE = Turkce + +[fr] +LANG_NAME = French +LANG_NAME_NATIVE = Francais + +[sv] +LANG_NAME = Swedish +LANG_NAME_NATIVE = Svenska + +[da] +LANG_NAME = Danish +LANG_NAME_NATIVE = Dansk + +[pl] +LANG_NAME = Polish +LANG_NAME_NATIVE = Polski + +[nl] +LANG_NAME = Dutch +LANG_NAME_NATIVE = Nederlands + +[es] +LANG_NAME = Spanish +LANG_NAME_NATIVE = Espanyol + +[bp] +LANG_NAME = Brazil Portuguese +LANG_NAME_NATIVE = Portugues Brasil + +[cz] +LANG_NAME = Czech +LANG_NAME_NATIVE = Cestina + +[fi] +LANG_NAME = Finnish +LANG_NAME_NATIVE = Suomi + +[ls] +LANG_NAME = l33t +LANG_NAME_NATIVE = l33t + +[bg] +LANG_NAME = Bulgarian +LANG_NAME_NATIVE = Bulgarski + +[ro] +LANG_NAME = Romanian +LANG_NAME_NATIVE = Romana + +[hu] +LANG_NAME = Hungarian +LANG_NAME_NATIVE = Magyar + +[lt] +LANG_NAME = Lithuania +LANG_NAME_NATIVE = Lithuania + +[sk] +LANG_NAME = Slovak +LANG_NAME_NATIVE = Slovencina + +[mk] +LANG_NAME = Macedonian +LANG_NAME_NATIVE = Makedonski diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/mapchooser.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/mapchooser.txt new file mode 100644 index 0000000..4ccd7e7 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/mapchooser.txt @@ -0,0 +1,179 @@ +[en] +CHO_FIN_EXT = Choosing finished. Current map will be extended to next %.0f minutes +CHO_FIN_NEXT = Choosing finished. The nextmap will be %s +CHOSE_EXT = %s chose map extending +X_CHOSE_X = %s chose %s +CHOOSE_NEXTM = AMX Choose nextmap +EXTED_MAP = Extend map %s +TIME_CHOOSE = It's time to choose the nextmap... + +[de] +CHO_FIN_EXT = Auswahl beendet. Laufende Map wird um %.0f Minuten verlaengert. +CHO_FIN_NEXT = Auswahl beendet. Naechste Map ist %s +CHOSE_EXT = %s waehlten Map-Verlaengerung +X_CHOSE_X = %s waehlten %s +CHOOSE_NEXTM = AMXX waehlt naechste Map +EXTED_MAP = Verlangere Map %s +TIME_CHOOSE = Es ist an der Zeit, die naechste Map zu waehlen... + +[sr] +CHO_FIN_EXT = Biranje zavrseno. Sadasnja mapa ce biti produzena za %.0f minuta +CHO_FIN_NEXT = Biranje zavrseno. Sledeca mapa ce biti %s +CHOSE_EXT = %s biraj mapu sa produzivanjem +X_CHOSE_X = %s izabrao %s +CHOOSE_NEXTM = AMX izaberi sledecu mapu +EXTED_MAP = Produzi mapu %s +TIME_CHOOSE = Vreme je da se izabere sledeca map... + +[tr] +CHO_FIN_EXT = Oylama bitmisdir. Su anki map %.0f dakika uzatilacakdir +CHO_FIN_NEXT = Oylama bitmisdir. Secilen map ise %s +CHOSE_EXT = %s Map uzatilmasini secin +X_CHOSE_X = %s Secin %s +CHOOSE_NEXTM = AMX diger map secimi +EXTED_MAP = %s Map surecini uzat +TIME_CHOOSE = Yeni map secimi baslamisdir... + +[fr] +CHO_FIN_EXT = Les choix sont termines. La carte est prolongee de %.0f minutes +CHO_FIN_NEXT = Les choix sont termines. La prochaine carte sera %s +CHOSE_EXT = %s a choisi de prolonger la carte. +X_CHOSE_X = %s a choisi la carte %s +CHOOSE_NEXTM = AMX Choisir la prochaine carte +EXTED_MAP = Prolonger la carte %s +TIME_CHOOSE = Il est temps de choisir la prochaine carte... + +[sv] +CHO_FIN_EXT = Val avslutat. Aktuell karta kommer att vara ytterligare %.0f minuter +CHO_FIN_NEXT = Val avslutat. Kommande karta kommer att vara %s +CHOSE_EXT = %s valde f'o'rlangning pa aktuell karta +X_CHOSE_X = %s valde %s +CHOOSE_NEXTM = AMX valde kommande karta +EXTED_MAP = Fortsatt karta %s +TIME_CHOOSE = Dags att utse kommande karta... + +[da] +CHO_FIN_EXT = Valg afsluttet. Nuvaerende bane bliver forlaenget til naeste %.0f minutter +CHO_FIN_NEXT = Valg afsluttet. Naeste bane bliver %s +CHOSE_EXT = %s valgte bane forlaengelse +X_CHOSE_X = %s valgte %s +CHOOSE_NEXTM = AMX vaelg naeste bane +EXTED_MAP = Forlaeng bane %s +TIME_CHOOSE = Det er tid til at vaelge naeste bane... + +[pl] +CHO_FIN_EXT = Wybor zakonczony. aktualna mapa zostanie rozszerzona o %.0f minut +CHO_FIN_NEXT = Wybor zakonczony. Nastepna mapa to %s +CHOSE_EXT = %s wybral rozszerzenie mapy +X_CHOSE_X = %s wybral %s +CHOOSE_NEXTM = AMX wybral nastepna mape +EXTED_MAP = Rozszerz mape %s +TIME_CHOOSE = Nadszedl czas wyboru mapy... + +[nl] +CHO_FIN_EXT = Kiezen voltooid. Huidige map wordt verlengd met %.0f minuten +CHO_FIN_NEXT = Kiezen voltooid. De volgende map is %s +CHOSE_EXT = %s koos voor verlenging +X_CHOSE_X = %s koos %s +CHOOSE_NEXTM = AMX Kies volgende map +EXTED_MAP = Verleng map %s +TIME_CHOOSE = Het is tijd om de volgende map te kiezen... + +[es] +CHO_FIN_EXT = Eleccion finalizada. El mapa actual se extendera durante %.0f minutos mas +CHO_FIN_NEXT = Eleccion finalizada. El proximo mapa sera %s +CHOSE_EXT = %s ha elegido extender el mapa +X_CHOSE_X = %s ha elegido %s +CHOOSE_NEXTM = AMX Elegir proximo mapa +EXTED_MAP = Extender el mapa %s +TIME_CHOOSE = Es hora de elegir el proximo mapa... + +[bp] +CHO_FIN_EXT = Escolha terminada. O mapa atual sera extendido pelos proximos %.0f minutos +CHO_FIN_NEXT = Escolha terminada. O proximo mapa sera %s +CHOSE_EXT = %s escolheu extender o mapa +X_CHOSE_X = %s escolheu %s +CHOOSE_NEXTM = AMX Escolher proximo mapa +EXTED_MAP = Extender o mapa %s +TIME_CHOOSE = E a hora de escolher o proximo mapa... + +[cz] +CHO_FIN_EXT = Volba ukoncena. Nynejsi mapa zde bude na dalsich %.0f minut +CHO_FIN_NEXT = Volba ukoncena. Dalsi mapa bude %s +CHOSE_EXT = %s volil prodlouzeni soucasne mapy +X_CHOSE_X = %s volil %s +CHOOSE_NEXTM = Zvol si dalsi mapu +EXTED_MAP = Prodluzuje mapu %s +TIME_CHOOSE = Je cas pro volbu dalsi mapy... + +[fi] +CHO_FIN_EXT = Valinta suoritettu. nykyista mappia jatketaan %.0f minuuttia +CHO_FIN_NEXT = Valinta suoritettu. Seuraava mappi on %s +CHOSE_EXT = %s valitsi nykyisen mapin +X_CHOSE_X = %s valitsi %s +CHOOSE_NEXTM = Valitse seuraava mappi +EXTED_MAP = Jatka mappia %s +TIME_CHOOSE = On aika valita seruaava mappi... + +[ls] +CHO_FIN_EXT = N0 M0|23 \/0TI|\| F0 j00! cu|2|2ent m4p f0 %.0f M0 m!nut3z +CHO_FIN_NEXT = N0 M0|23 \/0TI|\| F0 j00! The nextmap will be %s +CHOSE_EXT = %s w4ntz M0 cu|2|2ent m4p! +X_CHOSE_X = %s \/0TI3'd %s +CHOOSE_NEXTM = AMXTR3M3 \/0TI3 n3xtm4p +EXTED_MAP = M0 m4p %s +TIME_CHOOSE = \/0TI3 f0 n3xtm4p M0TH4FU|<4! + +[bg] +CHO_FIN_EXT = Izbiraneto priklu4i. Nastoq6tata karta 6te e odaljena za o6te %.0f minuti +CHO_FIN_NEXT = Izbiraneto priklu4i. Sledva6tata karta 6te e %s +CHOSE_EXT = %s izbra odaljenie na nastoq6tata karta +X_CHOSE_X = %s izbra %s +CHOOSE_NEXTM = AMX Izberete sledva6tata karta +EXTED_MAP = Odalji kartata %s +TIME_CHOOSE = Vreme e da se izbere sledva6tata karta... + +[ro] +CHO_FIN_EXT = Votarea s-a incheiat. Harta actuala va fi prelungita %.0f minute +CHO_FIN_NEXT = Votarea s-a incheiat. Urmatoarea harta va fi %s +CHOSE_EXT = %s a votat pentru prelungirea hartii actuale +X_CHOSE_X = %s a votat pentru %s +CHOOSE_NEXTM = AMX Alege harta urmatoare +EXTED_MAP = Prelungirea hartii actuale %s +TIME_CHOOSE = E timpul sa alegeti harta urmatoare... + +[hu] +CHO_FIN_EXT = A valasztas veget ert. A mostani palya meg %.0f percig lesz. +CHO_FIN_NEXT = A valasztas veget ert. A kovetkezo palya a %s lesz. +CHOSE_EXT = %s meg maradni szeretne +X_CHOSE_X = %s a %s-ra szavazott +CHOOSE_NEXTM = Valaszd ki a kovetkezo palyat. +EXTED_MAP = Maradjunk a %s-n! +TIME_CHOOSE = Itt az ido hogy kivalaszd a kovetkezo palyat. + +[lt] +CHO_FIN_EXT = Pasirinkimai baigti. Sis zemelapis dar bus %.0f minutes +CHO_FIN_NEXT = Pasirinkimtas baigtas. Kitas zemelapis %s +CHOSE_EXT = %s Pasirinko zemelapio pratesima +X_CHOSE_X = %s pasirinko %s +CHOOSE_NEXTM = AMX Issirink sekanti zemelapi +EXTED_MAP = Pratestas zemelapis %s +TIME_CHOOSE = Laikas issirinkti kita zemelapi.. + +[sk] +CHO_FIN_EXT = Volba ukoncena. Tato mapa bude este dalsych %.0f minut +CHO_FIN_NEXT = Volba ukoncena. Dalsia mapa bude %s +CHOSE_EXT = %s zvolil predlzenie sucasnej mapy +X_CHOSE_X = %s zvolil %s +CHOOSE_NEXTM = Zvol si dalsiu mapu +EXTED_MAP = Predlzuje mapu %s +TIME_CHOOSE = Je cas pre volbu dalsej mapy... + +[mk] +CHO_FIN_EXT = Izborot e zavrsen. Segasnata mapa ke bide prodolzena za %.0f minuti +CHO_FIN_NEXT = Izborot e zavrsen. Slednata mapa ke bide %s +CHOSE_EXT = %s izbra prodolzuvanje na mapata +X_CHOSE_X = %s ja izbra mapata %s +CHOOSE_NEXTM = AMX izberete sledna mapa +EXTED_MAP = Prodolzi ja mapata %s +TIME_CHOOSE = Vreme e da se izbere sledna mapa... diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/mapsmenu.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/mapsmenu.txt new file mode 100644 index 0000000..c5637ed --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/mapsmenu.txt @@ -0,0 +1,479 @@ +[en] +RESULT_REF = Result refused +RESULT_ACC = Result accepted +VOTE_SUCCESS = Voting successful. Map will be changed to +VOTE_FAILED = Voting failed +THE_WINNER = The winner +WANT_CONT = Do you want to continue? +VOT_CANC = Voting has been canceled +X_VOTED_FOR = %s voted for option #%d +VOTEMAP_MENU = Votemap Menu +START_VOT = Start Voting +SEL_MAPS = Selected Maps +ALREADY_VOT = There is already one voting... +NO_MAPS_MENU = There are no maps in menu +VOT_NOW_ALLOW = Voting not allowed at this time +WHICH_MAP = Which map do you want? +CHANGE_MAP_TO = Change map to +CANC_VOTE = Cancel Vote +ADMIN_V_MAP_1 = ADMIN: vote map(s) +ADMIN_V_MAP_2 = ADMIN %s: vote map(s) +ADMIN_CHANGEL_1 = ADMIN: changelevel %s +ADMIN_CHANGEL_2 = ADMIN %s: changelevel %s +CHANGLE_MENU = Changelevel Menu + +[de] +RESULT_REF = Ergebnis abgelehnt +RESULT_ACC = Ergebnis angenommen +VOTE_SUCCESS = Abstimmung beendet. Map wird gewechselt zu +VOTE_FAILED = Abstimmung gescheitert +THE_WINNER = Der Gewinner +WANT_CONT = Willst du fortfahren? +VOT_CANC = Abstimmung abgebrochen +X_VOTED_FOR = %s stimmten fuer Option #%d +VOTEMAP_MENU = Menu > Mapwahl +START_VOT = Start Abstimmung +SEL_MAPS = Ausgewaehlte Maps +ALREADY_VOT = Es laeuft bereits eine Abstimmung... +NO_MAPS_MENU = Es sind keine Maps im Menu vorhanden +VOT_NOW_ALLOW = Abstimmung zur Zeit nicht moeglich +WHICH_MAP = Welche Map moechtest du? +CHANGE_MAP_TO = Wechsle zu Map +CANC_VOTE = Abstimmung abgebrochen +ADMIN_V_MAP_1 = ADMIN: waehlt Map(s) +ADMIN_V_MAP_2 = ADMIN %s: waehlt Map(s) +ADMIN_CHANGEL_1 = ADMIN: wechselt zur Map %s +ADMIN_CHANGEL_2 = ADMIN %s: wechselt zur Map %s +CHANGLE_MENU = Menu > Mapwechsel + +[sr] +RESULT_REF = Rezultat odbijen +RESULT_ACC = Rezultat prihvacen +VOTE_SUCCESS = Glasanje uspesno. Sledeca mapa ce biti +VOTE_FAILED = Glasanje neuspesno +THE_WINNER = Pobednik +WANT_CONT = Da li zelite da nastavite? +VOT_CANC = Glasanje je otkazano +X_VOTED_FOR = %s je glasao za #%d +VOTEMAP_MENU = Meni za glasanje mapa +START_VOT = Pokreni Glasanje +SEL_MAPS = Izabrane Mape +ALREADY_VOT = Vec je jedno glasanje je u toku... +NO_MAPS_MENU = Nema mapa u meniju +VOT_NOW_ALLOW = Glasanje trenutno nije dozvoljeno +WHICH_MAP = Koju mapu zelite? +CHANGE_MAP_TO = Promeni mapu u +CANC_VOTE = Otkazi glasanje +ADMIN_V_MAP_1 = ADMIN: glasanje za mapu(e) +ADMIN_V_MAP_2 = ADMIN %s: glasanje za mapu(e) +ADMIN_CHANGEL_1 = ADMIN: changelevel %s +ADMIN_CHANGEL_2 = ADMIN %s: changelevel %s +CHANGLE_MENU = Meni za menjanje mape + +[tr] +RESULT_REF = Sonuc red edilmistir +RESULT_ACC = Sonuc kabul edilmistir +VOTE_SUCCESS = Oylama sonucu kabul. Bu map'e degisiyor +VOTE_FAILED = Oylama hatali +THE_WINNER = Kazanan +WANT_CONT = Devam etmek istiyormusunuz? +VOT_CANC = Oylama durdurulmusdur +X_VOTED_FOR = %s oyladigi #%d +VOTEMAP_MENU = Map oylama menusu +START_VOT = Oylamayi baslat +SEL_MAPS = Secilen maplar +ALREADY_VOT = Zaten su an oylama suruyor... +NO_MAPS_MENU = Menude map yokdur +VOT_NOW_ALLOW = Su an oylama yapamiyorsunuz +WHICH_MAP = Hangi map'i secmek istiyorsunuz? +CHANGE_MAP_TO = Map'i buna degisdir +CANC_VOTE = Oylamayi durdur +ADMIN_V_MAP_1 = ADMIN: Map(lar) oylamasi +ADMIN_V_MAP_2 = ADMIN %s: Map(lar) oylamasi +ADMIN_CHANGEL_1 = ADMIN: %s buna degisdirdi +ADMIN_CHANGEL_2 = ADMIN %s: %s buna degisdirdi +CHANGLE_MENU = Bolum degisdirme menusu + +[fr] +RESULT_REF = Resultat refuse +RESULT_ACC = Resultat accepte +VOTE_SUCCESS = Vote reussi. La carte va etre changee pour +VOTE_FAILED = Vote rate +THE_WINNER = Le gagnant +WANT_CONT = Veux-tu continuer? +VOT_CANC = Le vote a ete annule +X_VOTED_FOR = %s a vote pour l'option #%d +VOTEMAP_MENU = Menu Vote Carte +START_VOT = Commencer le vote +SEL_MAPS = Cartes selectionnees +ALREADY_VOT = Il y a deja un vote en cours... +NO_MAPS_MENU = Il n'y a pas de cartes dans le menu +VOT_NOW_ALLOW = Voter n'est pas autorise maintenant... +WHICH_MAP = Choisis la/les carte(s)? +CHANGE_MAP_TO = Changer la carte pour +CANC_VOTE = Annuler Vote +ADMIN_V_MAP_1 = ADMIN: vote carte(s) +ADMIN_V_MAP_2 = ADMIN %s: vote carte(s) +ADMIN_CHANGEL_1 = ADMIN: change la carte pour %s +ADMIN_CHANGEL_2 = ADMIN %s: change la carte pour %s +CHANGLE_MENU = Menu Changement de Carte + +[sv] +RESULT_REF = Resultat nekas +RESULT_ACC = Resultat godtages +VOTE_SUCCESS = Valet lyckades. Kartan kommer att bli +VOTE_FAILED = Valet misslyckades +THE_WINNER = Vinnaren +WANT_CONT = Vill du forts'a'tta? +VOT_CANC = Valet har blivit avslutat +X_VOTED_FOR = %s valde alternativ #%d +VOTEMAP_MENU = Kartmeny +START_VOT = Inled val +SEL_MAPS = Valda kartor +ALREADY_VOT = Det sker redan ett val... +NO_MAPS_MENU = Det saknas kartor i menyn +VOT_NOW_ALLOW = Val inte beviljat tillsvidare +WHICH_MAP = Vilken karta vill du ha? +CHANGE_MAP_TO = Byt karta till +CANC_VOTE = Avbryt val +ADMIN_V_MAP_1 = ADMIN: val av karta(or) +ADMIN_V_MAP_2 = ADMIN %s: val av karta(or) +ADMIN_CHANGEL_1 = ADMIN: bytkarta %s +ADMIN_CHANGEL_2 = ADMIN %s: bytkarta %s +CHANGLE_MENU = Bytkarta meny + +[da] +RESULT_REF = Resultat afvist +RESULT_ACC = Resultat accepteret +VOTE_SUCCESS = Afstemning lykkedes. Bane bliver skiftet til +VOTE_FAILED = Afstemning mislykkedes +THE_WINNER = Vinderen +WANT_CONT = Vil du fortsaette? +VOT_CANC = Afstemning er blevet annulleret +X_VOTED_FOR = %s stemte paa mulighed #%d +VOTEMAP_MENU = Vaelg bane Menu +START_VOT = Start afstemning +SEL_MAPS = Valgte baner +ALREADY_VOT = Der er allerede en afstemning... +NO_MAPS_MENU = Der er ikke nogen baner i menuen +VOT_NOW_ALLOW = Afsteming er ikke tilladt paa nuvaerende tidspunkt +WHICH_MAP = Hvilken bane vil du have? +CHANGE_MAP_TO = Skift bane til +CANC_VOTE = Annuller afstemning +ADMIN_V_MAP_1 = ADMIN: Vaelg bane(r) +ADMIN_V_MAP_2 = ADMIN %s: Vaelg bane(r) +ADMIN_CHANGEL_1 = ADMIN: Skift bane %s +ADMIN_CHANGEL_2 = ADMIN %s: Skift bane %s +CHANGLE_MENU = Skift bane Menu + +[pl] +RESULT_REF = Rezultat odrzucony +RESULT_ACC = Rezultat zaakceptowany +VOTE_SUCCESS = Glosowanie udane. Mapa zmieni sie na +VOTE_FAILED = Glosowanie nieudane +THE_WINNER = Zwyciesca +WANT_CONT = Czy chcesz kontynuowac? +VOT_CANC = Glosowanie zostalo przerwane +X_VOTED_FOR = %s zaglosowal na #%d +VOTEMAP_MENU = Menu Glosowan +START_VOT = Rozpocznij glosowanie +SEL_MAPS = Wybrane mapy +ALREADY_VOT = Juz jest jedno glosowanie w trakcie... +NO_MAPS_MENU = Nie ma zadnych map w menu +VOT_NOW_ALLOW = Teraz nie mozna glosowac +WHICH_MAP = Ktora chcesz mape? +CHANGE_MAP_TO = Zmien mape na +CANC_VOTE = Anuluj glos +ADMIN_V_MAP_1 = ADMIN: vote map(s) +ADMIN_V_MAP_2 = ADMIN %s: vote map(s) +ADMIN_CHANGEL_1 = ADMIN: zmiana mapy na %s +ADMIN_CHANGEL_2 = ADMIN %s: zmiana mapy na %s +CHANGLE_MENU = Menu zmiany mapy + +[nl] +RESULT_REF = Resultaat geweigerd +RESULT_ACC = Resultaat geaccepteerd +VOTE_SUCCESS = Stemmen geslaagd. De map wordt veranderd naar +VOTE_FAILED = Stemmen mislukt +THE_WINNER = De winnaar +WANT_CONT = Wil je verder gaan? +VOT_CANC = Stemronde is geannuleerd +X_VOTED_FOR = %s heeft voor optie #%d gestemd +VOTEMAP_MENU = Map stemronde Menu +START_VOT = Start stemronde +SEL_MAPS = Geselecteerde Maps +ALREADY_VOT = Er is al een stemronde bezig... +NO_MAPS_MENU = Geen maps in menu +VOT_NOW_ALLOW = Stemmen nu niet toegestaan +WHICH_MAP = Welke map wil je? +CHANGE_MAP_TO = Verander map naar +CANC_VOTE = Annuleer stemronde +ADMIN_V_MAP_1 = ADMIN: stem op map(pen) +ADMIN_V_MAP_2 = ADMIN %s: stem op map(pen) +ADMIN_CHANGEL_1 = ADMIN: verander map %s +ADMIN_CHANGEL_2 = ADMIN %s: verander map %s +CHANGLE_MENU = Verander Map Menu + +[es] +RESULT_REF = Resultado rechazado +RESULT_ACC = Resultado aceptado +VOTE_SUCCESS = Votacion finalizada. Se va a cambiar el mapa a +VOTE_FAILED = Votacion sin exito +THE_WINNER = El ganador +WANT_CONT = Deseas continuar? +VOT_CANC = La votacion ha sido anulada +X_VOTED_FOR = %s ha votado por la opcion #%d +VOTEMAP_MENU = Menu de Votacion de Mapas +START_VOT = Comenzar la votacion +SEL_MAPS = Mapas Seleccionados +ALREADY_VOT = Ya existe una votacion en este instante... +NO_MAPS_MENU = No hay mapas en el menu +VOT_NOW_ALLOW = Votacion no permitida en este momento +WHICH_MAP = Que mapa eliges? +CHANGE_MAP_TO = Cambiar el mapa a +CANC_VOTE = Cancelar Votacion +ADMIN_V_MAP_1 = ADMIN: votar mapa(s) +ADMIN_V_MAP_2 = ADMIN %s: votar mapa(s) +ADMIN_CHANGEL_1 = ADMIN: cambiando el mapa a %s +ADMIN_CHANGEL_2 = ADMIN %s: cambiando el mapa a %s +CHANGLE_MENU = Menu de Cambio de Mapa + +[bp] +RESULT_REF = Resultado negado +RESULT_ACC = Resultado aceito +VOTE_SUCCESS = Votacao com sucesso. O mapa sera mudado para +VOTE_FAILED = Votacao falhou +THE_WINNER = O vencedor +WANT_CONT = Voce quer continuar? +VOT_CANC = Votacao foi cancelada +X_VOTED_FOR = %s voto para opcao #%d +VOTEMAP_MENU = Menu de votacao de mapa +START_VOT = Votacao iniciada +SEL_MAPS = Selecione os Mapas +ALREADY_VOT = Ja tem uma votacao... +NO_MAPS_MENU = Nao tem nenhum mapa no menu +VOT_NOW_ALLOW = Votacao nao permitida neste momento... +WHICH_MAP = Qual mapa voce quer? +CHANGE_MAP_TO = Mudar mapa para +CANC_VOTE = Cancelar Votacao +ADMIN_V_MAP_1 = ADMIN: votar em mapa(s) +ADMIN_V_MAP_2 = ADMIN %s: votar em mapa(s) +ADMIN_CHANGEL_1 = ADMIN: mudou mapa para %s +ADMIN_CHANGEL_2 = ADMIN %s: mudou mapa para %s +CHANGLE_MENU = Menu Mudanca de Mapas + +[cz] +RESULT_REF = Vysledek odmitnut +RESULT_ACC = Vysledek prijmut +VOTE_SUCCESS = Hlasovani uspesne. Mapa se bude menit na +VOTE_FAILED = Hlasovani selhalo +THE_WINNER = Vitez +WANT_CONT = Chces pokracovat? +VOT_CANC = Hlasovani bylo zruseno +X_VOTED_FOR = %s hlasoval pro volbu #%d +VOTEMAP_MENU = Menu volby mapy +START_VOT = Zacatek hlasovani +SEL_MAPS = Zvolene mapy +ALREADY_VOT = Uz zde jedno hlasovani bylo... +NO_MAPS_MENU = V menu nejsou zadne mapy +VOT_NOW_ALLOW = Hlasovani zrovna neni povoleno +WHICH_MAP = Jakou mapu chces? +CHANGE_MAP_TO = Zmena mapy na +CANC_VOTE = Zrusit hlasovani +ADMIN_V_MAP_1 = ADMIN: volil mapu +ADMIN_V_MAP_2 = ADMIN %s: volili mapu +ADMIN_CHANGEL_1 = ADMIN: meni level na %s +ADMIN_CHANGEL_2 = ADMIN %s: meni level na %s +CHANGLE_MENU = Menu zmeny mapy + +[fi] +RESULT_REF = Tulos hylatty +RESULT_ACC = Tulos hyvaksytty +VOTE_SUCCESS = Vote onnistui. Mappi vaihdetaan +VOTE_FAILED = Vote epaonnistui +THE_WINNER = Voittaja +WANT_CONT = Haluatko jatkaa? +VOT_CANC = Vote peruutettu +X_VOTED_FOR = %s aanesti vaihtoehtoa #%d +VOTEMAP_MENU = Votemapvalikko +START_VOT = Aloita voteeminen +SEL_MAPS = Valitut mapit +ALREADY_VOT = Yksi voteeminen on jo kaynnissa +NO_MAPS_MENU = Valikossa ei ole mappeja +VOT_NOW_ALLOW = Nyt ei saa aanestaa +WHICH_MAP = Minka mapin haluat? +CHANGE_MAP_TO = Vaihda mappi +CANC_VOTE = Peruuta vote +ADMIN_V_MAP_1 = ADMIN: vote mapista/mapeista +ADMIN_V_MAP_2 = ADMIN %s: vote mapista/mapeista +ADMIN_CHANGEL_1 = ADMIN: vaihtoi mapin %s +ADMIN_CHANGEL_2 = ADMIN %s: vaihtoi mapin %s +CHANGLE_MENU = Mapinvaihtovalikko + +[ls] +RESULT_REF = N0 +RESULT_ACC = 0|< +VOTE_SUCCESS = Yush! n3w m@p! +VOTE_FAILED = N03Z! +THE_WINNER = W!n4r! +WANT_CONT = j00 sur3? +VOT_CANC = F4C3! +X_VOTED_FOR = %s = #%d +VOTEMAP_MENU = \/0t3 M3nu +START_VOT = g0! f0r gr34t h0n0r +SEL_MAPS = m@pz +ALREADY_VOT = t00 $|0w +NO_MAPS_MENU = n0 m@pz f0 j00 +VOT_NOW_ALLOW = n0 \/0t!n' |3!tch +WHICH_MAP = w@ j00 w@nt? +CHANGE_MAP_TO = m@p -> +CANC_VOTE = $t0p! +ADMIN_V_MAP_1 = l33t s3rv3r 0P: \/0t3 m@p(z) +ADMIN_V_MAP_2 = l33t s3rv3r 0P %s: \/0t3 m@p(z) +ADMIN_CHANGEL_1 = l33t s3rv3r 0P: Ch4ng3l3v3l %s +ADMIN_CHANGEL_2 = l33t s3rv3r 0P %s: Ch4ng3l3v3l %s +CHANGLE_MENU = Ch4ng3l3v3l M3nu + +[bg] +RESULT_REF = Resultata ne e priet +RESULT_ACC = Resultata e priet +VOTE_SUCCESS = Glasuvaneto e spolo4livo. Karta 6te e smenena na +VOTE_FAILED = Glasuvaneto ne e spolo4livo +THE_WINNER = Pobeditelq +WANT_CONT = Jelaete li da prodaljite? +VOT_CANC = Glasuvaneto be6e sprqno +X_VOTED_FOR = %s glasuva za opcia #%d +VOTEMAP_MENU = Karto Glasuva6to Menu +START_VOT = Sapo4ni glasuvaneto +SEL_MAPS = Izbrani karti +ALREADY_VOT = Ve4e ima edno glasuvane... +NO_MAPS_MENU = Nqma karti v menuto +VOT_NOW_ALLOW = Glasuvaneto ne e pozvoleno po tova vreme +WHICH_MAP = Koq karta jelaete? +CHANGE_MAP_TO = Smeni kartata na +CANC_VOTE = Glasuvaneto be6e sprqno +ADMIN_V_MAP_1 = ADMINISTRATOR: Glasuvane za Karta(i) +ADMIN_V_MAP_2 = ADMINISTRATOR %s: Glasuvane za Karta(i) +ADMIN_CHANGEL_1 = ADMINISTRATOR: smeni karta na %s +ADMIN_CHANGEL_2 = ADMINISTRATOR %s: smeni karta na %s +CHANGLE_MENU = Smenqne na karta Menu + +[ro] +RESULT_REF = Rezultat refuzat +RESULT_ACC = Rezultat acceptat +VOTE_SUCCESS = Votarea a avut loc cu succes. Harta va fi schimbata pe +VOTE_FAILED = Votare esuata +THE_WINNER = Castigatoare +WANT_CONT = Accepti schimbarea hartii? +VOT_CANC = Votarea a fost anulata +X_VOTED_FOR = %s a votat pentru #%d +VOTEMAP_MENU = Menu Votare Harta +START_VOT = Incepe Votarea +SEL_MAPS = Harti Alese +ALREADY_VOT = Se desfasoara o votare deja... +NO_MAPS_MENU = Nu exista harti in menu +VOT_NOW_ALLOW = Nu sunt permise votarile acum +WHICH_MAP = Ce harta doresti? +CHANGE_MAP_TO = Schimbare harta pe +CANC_VOTE = Anuleaza Vot +ADMIN_V_MAP_1 = ADMIN: votare harta +ADMIN_V_MAP_2 = ADMIN %s: votare harta +ADMIN_CHANGEL_1 = ADMIN: schimbare harta pe %s +ADMIN_CHANGEL_2 = ADMIN %s: schimbare harta pe %s +CHANGLE_MENU = Menu Schimbare Harta + +[hu] +RESULT_REF = Ergebnis abgelehnt +RESULT_ACC = Ergebnis angenommen +VOTE_SUCCESS = Abstimmung beendet. Map wird gewechselt zu +VOTE_FAILED = Abstimmung gescheitert +THE_WINNER = Der Gewinner +WANT_CONT = Willst du fortfahren? +VOT_CANC = Abstimmung abgebrochen +X_VOTED_FOR = %s stimmten fuer Option #%d +VOTEMAP_MENU = Mapwahl Menu +START_VOT = Start Abstimmung +SEL_MAPS = Ausgewaehlte Maps +ALREADY_VOT = Es laeuft bereits eine Abstimmung... +NO_MAPS_MENU = Es sind keine Maps im Menu vorhanden +VOT_NOW_ALLOW = Abstimmung zur Zeit nicht moeglich +WHICH_MAP = Welche Map moechtest du? +CHANGE_MAP_TO = Wechsle zu Map +CANC_VOTE = Abstimmung abgebrochen +ADMIN_V_MAP_1 = ADMIN: waehlt Map(s) +ADMIN_V_MAP_2 = ADMIN %s: waehlt Map(s) +ADMIN_CHANGEL_1 = ADMIN: wechselt zur Map %s +ADMIN_CHANGEL_2 = ADMIN %s: wechselt zur Map %s +CHANGLE_MENU = Mapwechsel Menu + +[lt] +RESULT_REF = Rezultatas atsauktas +RESULT_ACC = Rezultatas priimtas +VOTE_SUCCESS = Balsavimas pavyko. Kitas zemelapis bus +VOTE_FAILED = Balsavimas nepavyko +THE_WINNER = Laimetojas +WANT_CONT = Ar nori testi? +VOT_CANC = Balsavimas buvo atsauktas +X_VOTED_FOR = %s balsavo uz #%d +VOTEMAP_MENU = Zemelapiu balsavimo meniu +START_VOT = Pradeti balsavima +SEL_MAPS = Pazymeti zemelapiai +ALREADY_VOT = Jau vyksta balsavimas.. +NO_MAPS_MENU = Cia nera zemelapiu +VOT_NOW_ALLOW = Balsavimas negalimas siuo metu +WHICH_MAP = Kurio zemelapio tu nori? +CHANGE_MAP_TO = Pakeisti zemelapi i +CANC_VOTE = Atsaukti balsavima +ADMIN_V_MAP_1 = ADMINAS: pradejo zemelapiu balsavima +ADMIN_V_MAP_2 = ADMINAS %s: pradejo zemelapiu balsavima +ADMIN_CHANGEL_1 = ADMINAS: pakeite zemelapi i %s +ADMIN_CHANGEL_2 = ADMINAS %s: pakeite zemelapi i %s +CHANGLE_MENU = Zemelapiu sarasas + +[sk] +RESULT_REF = Vysledok odmietnuty +RESULT_ACC = Vysledok prijaty +VOTE_SUCCESS = Hlasovanie uspesne. Mapa se bude menit na +VOTE_FAILED = Hlasovanie zlyhalo +THE_WINNER = Vitaz +WANT_CONT = Chces pokracovat? +VOT_CANC = Hlasovanie bolo zrusene +X_VOTED_FOR = %s hlasoval pre volbu #%d +VOTEMAP_MENU = MENU: volba mapy +START_VOT = Zacat hlasovanie +SEL_MAPS = Zvolene mapy +ALREADY_VOT = Uz tu jedno hlasovanie bolo... +NO_MAPS_MENU = V menu niesu ziadne mapy +VOT_NOW_ALLOW = Hlasovanie teraz neni povolene +WHICH_MAP = Aku mapu chces? +CHANGE_MAP_TO = Zmena mapy na +CANC_VOTE = Zrusit hlasovanie +ADMIN_V_MAP_1 = ADMIN: zvolil mapu +ADMIN_V_MAP_2 = ADMIN %s: zvolili mapu +ADMIN_CHANGEL_1 = ADMIN: meni mapu na %s +ADMIN_CHANGEL_2 = ADMIN %s: meni mapu na %s +CHANGLE_MENU = Menu zmeny mapy + +[mk] +RESULT_REF = Rezultatot e odbien +RESULT_ACC = Rezultatot e prifaten +VOTE_SUCCESS = Glasanjeto e uspesno. Slednata mapa ke bide +VOTE_FAILED = Glasanjeto e neuspesno +THE_WINNER = Pobednikot e +WANT_CONT = Dali sakate da prodolzite? +VOT_CANC = Glasanjeto e otkazano +X_VOTED_FOR = %s glasase za #%d +VOTEMAP_MENU = Meni za glasanje mapa +START_VOT = Zapocni go glasanjeto +SEL_MAPS = Izbrani mapi za glasanje +ALREADY_VOT = Edno glasanje e veke vo tek... +NO_MAPS_MENU = Nema mapi vo menito +VOT_NOW_ALLOW = Glasanje momentalno ne e dozvoleno +WHICH_MAP = Koja mapa ja sakate? +CHANGE_MAP_TO = Dali da se smeni mapata vo +CANC_VOTE = Otkazi go glasanjeto +ADMIN_V_MAP_1 = ADMIN: Glasanje za mapa... +ADMIN_V_MAP_2 = ADMIN %s: Glasanje za mapa... +ADMIN_CHANGEL_1 = ADMIN: ja smeni mapata vo %s +ADMIN_CHANGEL_2 = ADMIN %s: ja smeni mapata vo %s +CHANGLE_MENU = Meni za promena na mapa diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/menufront.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/menufront.txt new file mode 100644 index 0000000..c31fb28 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/menufront.txt @@ -0,0 +1,359 @@ +[en] +KICK_PLAYER = Kick Player +BAN_PLAYER = Ban Player +SLAP_SLAY = Slap/Slay Player +TEAM_PLAYER = Team Player ^n +CHANGEL = Changelevel +VOTE_MAPS = Vote for maps ^n +SPECH_STUFF = Speech Stuff +CLIENT_COM = Client Commands +SERVER_COM = Server Commands +CVARS_SET = Cvars Settings +CONFIG = Configuration +LANG_SET = Language Settings +STATS_SET = Stats Settings ^n +PAUSE_PLUG = Pause Plugins +RES_WEAP = Restrict Weapons +TELE_PLAYER = Teleport Player + +[de] +KICK_PLAYER = Kick Spieler +BAN_PLAYER = Ban Spieler +SLAP_SLAY = Schlage/Toete Spieler +TEAM_PLAYER = Team Spieler ^n +CHANGEL = Mapwechsel +VOTE_MAPS = Map Abstimmung ^n +SPECH_STUFF = Soundausgabe +CLIENT_COM = Client-Befehle +SERVER_COM = Server-Befehle +CVARS_SET = Server-Einstellungen +CONFIG = Konfiguration +LANG_SET = Spracheinstellung +STATS_SET = Statistik-Einstellungen ^n +PAUSE_PLUG = Plugins pausieren +RES_WEAP = Waffen verbieten +TELE_PLAYER = Teleport Spieler + +[sr] +KICK_PLAYER = Kick Igraca +BAN_PLAYER = Ban Igraca +SLAP_SLAY = Slap/Slay Igraca +TEAM_PLAYER = Promeni Tim Igraca ^n +CHANGEL = Promeni Mapu +VOTE_MAPS = Glasaj za mape ^n +SPECH_STUFF = Govorne Komande +CLIENT_COM = Komande Klijenta +SERVER_COM = Komande Servera +CVARS_SET = Komande Podesavanja +CONFIG = Konfiguracija +LANG_SET = Jezik +STATS_SET = Podesavanje Statistike ^n +PAUSE_PLUG = Pauza Pluginova +RES_WEAP = Ogranici Oruzja +TELE_PLAYER = Teleport Igraca + +[tr] +KICK_PLAYER = Oyuncuyu at +BAN_PLAYER = Oyuncuyu banla +SLAP_SLAY = Oyuncuyu tokatla/oldur +TEAM_PLAYER = Takim oyuncusu ^n +CHANGEL = Bolum degisdir +VOTE_MAPS = Mapler icin oylama ^n +SPECH_STUFF = Konusma cihazlari +CLIENT_COM = Oyuncu emirleri +SERVER_COM = Server emirleri +CVARS_SET = Cvars ayarlari +CONFIG = Config ayarlari +LANG_SET = Dil ayarlari +STATS_SET = Statistik ayarlari ^n +PAUSE_PLUG = Pluginleri durdurun +RES_WEAP = Yasakli silahlar +TELE_PLAYER = Oyuncuyu teleport yapi + +[fr] +KICK_PLAYER = Kicker Joueur +BAN_PLAYER = Bannir Joueur +SLAP_SLAY = Frapper/Foudroyer Joueur +TEAM_PLAYER = Equipe du Joueur ^n +CHANGEL = Changer la Carte +VOTE_MAPS = Vote Carte ^n +SPECH_STUFF = Commandes Voix/Paroles +CLIENT_COM = Commandes Clients +SERVER_COM = Commandes Serveur +CVARS_SET = Configuration Cvars +CONFIG = Configuration +LANG_SET = Configuration Langue +STATS_SET = Configuration Stats ^n +PAUSE_PLUG = Pause Plugins +RES_WEAP = Restriction des Armes +TELE_PLAYER = Teleporter Joueur + +[sv] +KICK_PLAYER = Sparka spelare +BAN_PLAYER = Bannlys spelare +SLAP_SLAY = Smiska/Slakta spelare +TEAM_PLAYER = Lagspelare^n +CHANGEL = Kartbyte +VOTE_MAPS = Val av karta^n +SPECH_STUFF = Tal +CLIENT_COM = Klientkommandon +SERVER_COM = Serverkommandon +CVARS_SET = Cvarsinst'a'llningar +CONFIG = Inst'a'llningar +LANG_SET = Sprak inst'a'llningar +STATS_SET = Statistikinst'a'llningar^n +PAUSE_PLUG = Pausa Plugins +RES_WEAP = Definiera vapen +TELE_PLAYER = Teleportera spelare + +[da] +KICK_PLAYER = Kick Spiller +BAN_PLAYER = Ban Spiller +SLAP_SLAY = Klask/Draeb Spiller +TEAM_PLAYER = Hold Spiller ^n +CHANGEL = Skift Bane +VOTE_MAPS = Stem om bane ^n +SPECH_STUFF = Tale Menu +CLIENT_COM = Klient Kommandoer +SERVER_COM = Server Kommandoer +CVARS_SET = Cvars Instillinger +CONFIG = Konfiguration +LANG_SET = Sprog Indstillinger +STATS_SET = statistik indstillinger ^n +PAUSE_PLUG = Pause Plugins +RES_WEAP = Forbyd Vaaben +TELE_PLAYER = Teleport Spiller + +[pl] +KICK_PLAYER = Wywal gracza +BAN_PLAYER = Zbanuj gracza +SLAP_SLAY = Uderz/zgladz gracza +TEAM_PLAYER = Gracz druzyny ^n +CHANGEL = Zmien mape +VOTE_MAPS = Glosuj na mapy ^n +SPECH_STUFF = Rzeczy zw. z rozmowa +CLIENT_COM = Komendy Klienta +SERVER_COM = Komendy Serwera +CVARS_SET = Ustawienia Cvar'ow +CONFIG = Konfiguracja +LANG_SET = Ustawienia jezyka +STATS_SET = Ustawienia statystyk ^n +PAUSE_PLUG = Zatrzymaj pluginy +RES_WEAP = Ogranicz bronie +TELE_PLAYER = Teleportuj gracza + +[nl] +KICK_PLAYER = Speler Kicken +BAN_PLAYER = Speler Verbannen +SLAP_SLAY = Speler Slaan/Slachten +TEAM_PLAYER = Speler van ploeg veranderen ^n +CHANGEL = Map Veranderen +VOTE_MAPS = Stem op maps ^n +SPECH_STUFF = Geluiden +CLIENT_COM = Gebruikerscommando's +SERVER_COM = Servercommando's +CVARS_SET = Cvar-instellingen +CONFIG = Configuratie +LANG_SET = Taalinstellingen +STATS_SET = Statistiekinstellingen ^n +PAUSE_PLUG = Plugins pauzeren +RES_WEAP = Wapens Verbieden +TELE_PLAYER = Speler Teleporteren + +[es] +KICK_PLAYER = Expulsar Jugador +BAN_PLAYER = Banear Jugador +SLAP_SLAY = Pegar/Matar Jugador +TEAM_PLAYER = Equipo del Jugador ^n +CHANGEL = Cambiar de mapa +VOTE_MAPS = Votar mapas ^n +SPECH_STUFF = Comandos de Voz +CLIENT_COM = Comandos de Cliente +SERVER_COM = Comandos del Servidor +CVARS_SET = Configuracion de Cvars +CONFIG = Configuracion +LANG_SET = Configuracion de Idioma +STATS_SET = Configuracion de las Estadisticas ^n +PAUSE_PLUG = Pausar Plugins +RES_WEAP = Restringir Armas +TELE_PLAYER = Teletransportar Jugador + +[bp] +KICK_PLAYER = Kickar Jogadores +BAN_PLAYER = Banir Jogadores +SLAP_SLAY = Tapa/Assassinar Jogadores +TEAM_PLAYER = Time do Jogador ^n +CHANGEL = Mudar Mapa +VOTE_MAPS = Votacao de mapas ^n +SPECH_STUFF = Menu de Vozes +CLIENT_COM = Comandos de Cliente +SERVER_COM = Comandos de Servidor +CVARS_SET = Ajustes dos Cvars +CONFIG = Configuracao +LANG_SET = Ajustes da Linguagem +STATS_SET = Ajustes do Stats ^n +PAUSE_PLUG = Pausar Plugins +RES_WEAP = Limitar Armas +TELE_PLAYER = Teletransportar Jogador + +[cz] +KICK_PLAYER = Vykopnout hrace +BAN_PLAYER = Banovat hrace +SLAP_SLAY = Prastit/Zabit Hrace +TEAM_PLAYER = Tymovy hrac ^n +CHANGEL = Zmena levelu +VOTE_MAPS = Hlasovani pro zmenu mapy ^n +SPECH_STUFF = Veci okolo reci +CLIENT_COM = Prikazy klienta +SERVER_COM = Prikazy serveru +CVARS_SET = Nastaveni Cvar +CONFIG = Konfigurace +LANG_SET = Nastaveni jazyka +STATS_SET = Nastaveni statistik ^n +PAUSE_PLUG = Pauznout pluginy +RES_WEAP = Omezit zbrane +TELE_PLAYER = Teleportovat hrace + +[fi] +KICK_PLAYER = Potki pelaaja +BAN_PLAYER = Bannaa pelaaja +SLAP_SLAY = Slappaa/slayaa pelaaja +TEAM_PLAYER = Vaihda pejaajan tiimia ^n +CHANGEL = Vaihda mappi +VOTE_MAPS = Votea mappeja^n +SPECH_STUFF = Puhemoussea +CLIENT_COM = Clientkomentoja +SERVER_COM = Palvelinkomentoja +CVARS_SET = Cvarsasetuksia +CONFIG = Saatoa +LANG_SET = Kieliasetuksia +STATS_SET = Tilastoasetuksia ^n +PAUSE_PLUG = Pysayta plugineja +RES_WEAP = Kiella aseita +TELE_PLAYER = Teleporttaa pelaaja + +[ls] +KICK_PLAYER = | [name] +PAUSE_COMMANDS = Commands +COM_PAUSE_OFF = ^toff - pauses all plugins not in the list +COM_PAUSE_ON = ^ton - unpauses all plugins +COM_PAUSE_STOP = ^tstop - stops a plugin +COM_PAUSE_PAUSE = ^tpause - pauses a plugin +COM_PAUSE_ENABLE = ^tenable - enables a plugin +COM_PAUSE_SAVE = ^tsave - saves a list of stopped plugins +COM_PAUSE_CLEAR = ^tclear - clears a list of stopped plugins +COM_PAUSE_LIST = ^tlist [id] - lists plugins +COM_PAUSE_ADD = ^tadd - marks a plugin as unpauseable +SAVE_PAUSED = Save paused +COM_PAUSE_SAVE_PAUSED = ^tsave - saves a list of paused plugins +COM_PAUSE_CLEAR_PAUSED = ^tclear - clears a list of paused plugins +CANT_UNPAUSE_PLUGIN = Plugin "%s" is stopped and cannot be paused or unpaused. +CLEAR_PAUSED = Clear file with paused + +[de] +PAUSE_COULDNT_FIND = Konnte kein Plugin finden, dass mit "%s" uebereinstimmt +PAUSE_PLUGIN_MATCH = Plugin stimmt mit "%s" ueberein +PAUSE_CONF_CLEARED = Konfigurationsdatei geloescht. Bei Bedarf Map neu starten. +PAUSE_ALR_CLEARED = Konfiguration war bereits geloescht! +PAUSE_CONF_SAVED = Konfiguration erfolgreich gespeichert. +PAUSE_SAVE_FAILED = Fehler beim Speichern der Konfiguration!!! +LOCKED = GESPERRT +PAUSE_UNPAUSE = Pausiere/Aktiviere Plugins +CLEAR_STOPPED = Loeschen der Datei gestoppt +SAVE_STOPPED = Speichern abgebrochen +PAUSED_PLUGIN = Pausiere %d Plugin +PAUSED_PLUGINS = Pausiere %d Plugins +UNPAUSED_PLUGIN = %d Plugin aktiviert +UNPAUSED_PLUGINS = %d Plugins aktiviert +CANT_MARK_MORE = Kann keine weiteren Plugins aktivieren! +PAUSE_LOADED = Pausierte Plugins: Plugins geladen +STOPPED = gestoppt +VERSION = Version +FILE = Datei +PAUSE_ENTRIES = Eintraege %d - %d von %d (%d laufen) +PAUSE_USE_MORE = Benutze 'amx_pausecfg list %d' fuer mehr +PAUSE_USE_BEGIN = Benutze 'amx_pausecfg list 1' um zum Anfang zu gelangen +PAUSE_USAGE = Benutze: amx_pausecfg <Befehl> [Name] +PAUSE_COMMANDS = Befehle +COM_PAUSE_OFF = ^toff - pausiert alle Plugins, die nicht aufgelistet sind +COM_PAUSE_ON = ^ton - aktiviere alle Plugins +COM_PAUSE_STOP = ^tstop <file> - stoppt ein Plugin +COM_PAUSE_PAUSE = ^tpause <file> - pausiert ein Plugin +COM_PAUSE_ENABLE = ^tenable <file> - aktiviert ein Plugin +COM_PAUSE_SAVE = ^tsave - speichert die Liste der gestoppten Plugins +COM_PAUSE_CLEAR = ^tclear - loescht die Liste der gestoppten Plugins +COM_PAUSE_LIST = ^tlist [id] - Plugins anzeigen +COM_PAUSE_ADD = ^tadd <title> - markiert ein Plugin als nicht pausierbar +SAVE_PAUSED = Speichere pausierte Plugins +COM_PAUSE_SAVE_PAUSED = ^tsave - speichert die Liste der pausierten Plugins +COM_PAUSE_CLEAR_PAUSED = ^tclear - leert die Liste der pausierten Plugins +CANT_UNPAUSE_PLUGIN = Das Plugin "%s" ist gestoppt und kann nicht pausiert oder unpausiert werden. +CLEAR_PAUSED = Loeschen der Datei pausierten + +[sr] +PAUSE_COULDNT_FIND = Nije moguce naci plugin koji se poklapa sa "%s" +PAUSE_PLUGIN_MATCH = Poklapajuci Plugin "%s" +PAUSE_CONF_CLEARED = Konfiguracioni fajl ispraznjen. Ucitajte mapu ponovo ukoliko je potrebno +PAUSE_ALR_CLEARED = Konfiguracioni fajl je vec ispraznjen! +PAUSE_CONF_SAVED = Konfiguracija je sacuvana uspesno +PAUSE_SAVE_FAILED = Konfiguracija je sacuvana neuspesno!!! +LOCKED = ZAKLJUCAN +PAUSE_UNPAUSE = Pauziraj/Pokreni Plugin +CLEAR_STOPPED = Ocisti fajl sa stopiranim +SAVE_STOPPED = Sacuvaj stopirane +PAUSED_PLUGIN = Pauziran %d plugin +PAUSED_PLUGINS = Pauzirani %d pluginovi +UNPAUSED_PLUGIN = Pokrenut %d plugin +UNPAUSED_PLUGINS = Pokrenuti %d pluginovi +CANT_MARK_MORE = Nije moguce izabrati vise pluginova kao zakljucani! +PAUSE_LOADED = Pauzirani Pluginovi: Ucitani pluginovi +STOPPED = zaustavljen +VERSION = verzija +FILE = fajl +PAUSE_ENTRIES = Vrednosti %d - %d od %d (%d pokrenutih) +PAUSE_USE_MORE = Koristi 'amx_pausecfg list %d' za jos +PAUSE_USE_BEGIN = Koristi 'amx_pausecfg list 1' za pocetak +PAUSE_USAGE = Koriscenje: amx_pausecfg <komanda> [ime] +PAUSE_COMMANDS = Komande +COM_PAUSE_OFF = ^toff - pauzira sve pluginove koji nisu u listi +COM_PAUSE_ON = ^ton - pokrece sve pluginove +COM_PAUSE_STOP = ^tstop <fajl> - zaustavlja plugin +COM_PAUSE_PAUSE = ^tpause <fajl> - pauzira plugin +COM_PAUSE_ENABLE = ^tenable <fajl> - pokrece plugin +COM_PAUSE_SAVE = ^tsave - snima listu zaustavljenih pluginova +COM_PAUSE_CLEAR = ^tclear - prazni listu zaustavljenih pluginova +COM_PAUSE_LIST = ^tlist [id] - lista pluginove +COM_PAUSE_ADD = ^tadd <title> - zakljucava plugin + +[tr] +PAUSE_COULDNT_FIND = "%s" Buna benzer bir plugin bulunamadi +PAUSE_PLUGIN_MATCH = "%s" Benzer plugin +PAUSE_CONF_CLEARED = Config dosyasi temizlendi. Gerekliyse mapi tekrar yukleyin +PAUSE_ALR_CLEARED = Config dosyasi zaten temizlenmisdi! +PAUSE_CONF_SAVED = Config dosyasina basari ile saklandi +PAUSE_SAVE_FAILED = Config dosyasina eklenemedi!!! +LOCKED = KILITLI +PAUSE_UNPAUSE = Pluginleri Durdur/Baslat +CLEAR_STOPPED = Durdur emiri ile dosyayi temizleyin +SAVE_STOPPED = Durdur emirini saklayin +PAUSED_PLUGIN = Durdurulmus Plugin %d +PAUSED_PLUGINS = Durdurulmus Pluginler %d +UNPAUSED_PLUGIN = Durdurulmamis Plugin %d +UNPAUSED_PLUGINS = Durdurulmamis Pluginler %d +CANT_MARK_MORE = Sinir asildi gecici olarak Plugin durdurulamiyor! +PAUSE_LOADED = Pluginleri durdur: Calisan pluginler +STOPPED = Durduruldu +VERSION = versiyon +FILE = dosya +PAUSE_ENTRIES = Girisler %d - %d ve %d (%d calisiyor) +PAUSE_USE_MORE = 'amx_pausecfg list %d' i kullanin daha gormek icin +PAUSE_USE_BEGIN = 'amx_pausecfg list 1' i kullanin baslatmak icin +PAUSE_USAGE = kullanim: amx_pausecfg <emir> [isim] +PAUSE_COMMANDS = Emirler +COM_PAUSE_OFF = ^toff - listede olmayan butun pluginler gecici olarak durdurur +COM_PAUSE_ON = ^ton - Durdurulmus pluginleri tekrar baslatir +COM_PAUSE_STOP = ^tstop <dosya> -bir plugin durdurur +COM_PAUSE_PAUSE = ^tpause <dosya> - bir plugin durdurur gecici olarak +COM_PAUSE_ENABLE = ^tenable <dosya> - bir plugin baslatir +COM_PAUSE_SAVE = ^tsave - Durdulmus pluginler uzerine bir liste saklar +COM_PAUSE_CLEAR = ^tclear - Durdurulmus pluginlerin listesini siler +COM_PAUSE_LIST = ^tlist [id] - Pluginleri listele +COM_PAUSE_ADD = ^tadd <isim> - Durduralamiyan bir plugin isaretler + +[fr] +PAUSE_COULDNT_FIND = Impossible de trouver un plugin correspondant a "%s" +PAUSE_PLUGIN_MATCH = Plugin correspondant "%s" +PAUSE_CONF_CLEARED = Fichier de configuration vide. Relancez la map si besoin +PAUSE_ALR_CLEARED = Le fichier de configuration a deja ete vide! +PAUSE_CONF_SAVED = Configuration sauvegardee +PAUSE_SAVE_FAILED = Sauvegarde de la configuration echouee!!! +LOCKED = BLOQUE +PAUSE_UNPAUSE = Mettre/Enlever la pause des Plugins +CLEAR_STOPPED = Efface la liste des plugins arretes +SAVE_STOPPED = Sauvegarde des plugins arretes +PAUSED_PLUGIN = Mettre en pause %d plugin +PAUSED_PLUGINS = Mettre en pause %d plugins +UNPAUSED_PLUGIN = Enlever la pause de %d plugin +UNPAUSED_PLUGINS = Enlever la pause de %d plugins +CANT_MARK_MORE = Impossible d'ajouter plus de plugins qui ne peuvent etre mis en pause! +PAUSE_LOADED = Pause Plugins: Chargement des plugins +STOPPED = stoppe +VERSION = version +FILE = fichier +PAUSE_ENTRIES = Entrees %d - %d sur %d (%d en fonctionnement) +PAUSE_USE_MORE = Utilise 'amx_pausecfg list %d' pour la suite +PAUSE_USE_BEGIN = Utilise 'amx_pausecfg list 1' pour le debut +PAUSE_USAGE = Utilisation: amx_pausecfg <commande> [nom] +PAUSE_COMMANDS = Commandes +COM_PAUSE_OFF = ^toff - met en pause tous les plugins qui ne sont pas dans la liste +COM_PAUSE_ON = ^ton - enleve la pause de tous les plugins +COM_PAUSE_STOP = ^tstop <file> - arrete un plugin +COM_PAUSE_PAUSE = ^tpause <file> - met en pause un plugin +COM_PAUSE_ENABLE = ^tenable <file> - active un plugin +COM_PAUSE_SAVE = ^tsave - sauver la liste des plugins arretes +COM_PAUSE_CLEAR = ^tclear - effacer la liste des plugins arretes +COM_PAUSE_LIST = ^tlist [id] - listes des plugins +COM_PAUSE_ADD = ^tadd <title> - marquer un plugin comme impossible a mettre en paus +SAVE_PAUSED = Sauvegarder les plugins en pause +COM_PAUSE_SAVE_PAUSED = ^tsave - sauvegarde une liste de plugins en pause +COM_PAUSE_CLEAR_PAUSED = ^tclear - efface une liste de plugins en pause +CANT_UNPAUSE_PLUGIN = Le plugin "%s" est arrete et ne peut etre mis en pause ou re-active. +CLEAR_PAUSED = Efface la liste de plugins en pause + +[sv] +PAUSE_COULDNT_FIND = Kunde inte hitta plugin som matchar "%s" +PAUSE_PLUGIN_MATCH = Plugin som matchar "%s" +PAUSE_CONF_CLEARED = Konfigurationsfil rensad. Ladda kartan igen vid behov +PAUSE_ALR_CLEARED = Konfigurationsfil redan rensad! +PAUSE_CONF_SAVED = Konfiguration sparad +PAUSE_SAVE_FAILED = Konfigurationsfilen kunde inte sparas!! +LOCKED = BUNDEN +PAUSE_UNPAUSE = Pausa/Starta Plugins +CLEAR_STOPPED = Rensa fil med stoppade +SAVE_STOPPED = Spara stoppade +PAUSED_PLUGIN = Pausade %d plugin +PAUSED_PLUGINS = Pausade %d plugins +UNPAUSED_PLUGIN = Startade %d plugin +UNPAUSED_PLUGINS = Startade %d plugins +CANT_MARK_MORE = Kan inte markera mer plugins som icke pausbara! +PAUSE_LOADED = Pausa plugins: Ladda plugins +STOPPED = stoppad +VERSION = version +FILE = fil +PAUSE_ENTRIES = Poster %d - %d av %d (%d e aktiva) +PAUSE_USE_MORE = Skriv 'amx_pausecfg list %d' f'o'r mera +PAUSE_USE_BEGIN = Skriv 'amx_pausecfg list 1' f'o'r b'o'rjan +PAUSE_USAGE = Skriv: amx_pausecfg <kommando> [namn] +PAUSE_COMMANDS = Kommandon +COM_PAUSE_OFF = ^toff - pausar alla plugins i listan +COM_PAUSE_ON = ^ton - startar alla plugins i listan +COM_PAUSE_STOP = ^tstop <file> - stoppar en plugin +COM_PAUSE_PAUSE = ^tpause <file> - pausar en plugin +COM_PAUSE_ENABLE = ^tstart <file> - startar en plugin +COM_PAUSE_SAVE = ^tsave - sparar lista av stoppade plugins +COM_PAUSE_CLEAR = ^tclear - rensar lista av stoppade plugins +COM_PAUSE_LIST = ^tlist [id] - listar plugins +COM_PAUSE_ADD = ^tadd <titel> - markerar en plugin som icke pausbar +SAVE_PAUSED = Spara pausade +COM_PAUSE_SAVE_PAUSED = ^tsave - sparar en lista av pausade plugins +COM_PAUSE_CLEAR_PAUSED = ^tclear - rensar en lista av pausade plugins +CANT_UNPAUSE_PLUGIN = Plugin "%s" 'a'r stoppad och kan inte bli pausad eller forts'a'tta. +CLEAR_PAUSED = Rensa fil med pausade + +[da] +PAUSE_COULDNT_FIND = Kunne ikke finde et plugin der matcher til "%s" +PAUSE_PLUGIN_MATCH = Plugin matcher "%s" +PAUSE_CONF_CLEARED = Konfigurationsfil ryddet. Genindlaes banen, hvis noedvendigt +PAUSE_ALR_CLEARED = Konfiguration var allerede ryddet! +PAUSE_CONF_SAVED = Konfiguration gemt +PAUSE_SAVE_FAILED = Gem Konfiguration mislykkedes!!! +LOCKED = LAAST +PAUSE_UNPAUSE = Pause/Unpause Plugins +CLEAR_STOPPED = Ryd fil med stoppede +SAVE_STOPPED = Gem stoppede +PAUSED_PLUGIN = Paused %d plugin +PAUSED_PLUGINS = Paused %d plugins +UNPAUSED_PLUGIN = Upaused %d plugin +UNPAUSED_PLUGINS = Upaused %d plugins +CANT_MARK_MORE = Kan ikke markere flere plugins som upauserbare! +PAUSE_LOADED = Pause Plugins: Indlaeste plugins +STOPPED = stopped +VERSION = version +FILE = fil +PAUSE_ENTRIES = Indskrivninger %d - %d af %d (%d koerer) +PAUSE_USE_MORE = Brug 'amx_pausecfg list %d' for mere +PAUSE_USE_BEGIN = Brug 'amx_pausecfg list 1' for at begynde +PAUSE_USAGE = Brug: amx_pausecfg <kommando> [name] +PAUSE_COMMANDS = Kommando +COM_PAUSE_OFF = ^toff - pauser alle plugins ikke paa listen +COM_PAUSE_ON = ^ton - upause alle plugins +COM_PAUSE_STOP = ^tstop <file> - stopper et plugin +COM_PAUSE_PAUSE = ^tpause <file> - pauser et plugin +COM_PAUSE_ENABLE = ^tenable <file> - starter a plugin +COM_PAUSE_SAVE = ^tsave - Gemmer en liste af stoppede plugins +COM_PAUSE_CLEAR = ^tclear - Rydder en liste med stoppede plugins +COM_PAUSE_LIST = ^tlist [id] - lister plugins +COM_PAUSE_ADD = ^tadd <title> - Markerer et plugin som upauserbart + +[pl] +PAUSE_COULDNT_FIND = Nie mozna znalesc pluginu "%s" +PAUSE_PLUGIN_MATCH = Plugin pasujacy "%s" +PAUSE_CONF_CLEARED = Plik konfiguracji wyczyszczony. Przeladuj mape jezeli potrzeba +PAUSE_ALR_CLEARED = Konfiguracja juz zostala wyczyszczona ! +PAUSE_CONF_SAVED = Konfiguracja zapisana +PAUSE_SAVE_FAILED = Konfiguracji nie udalo sie zapisac !! +LOCKED = ZABLKOWANY +PAUSE_UNPAUSE = Zatrzymaj/Wznow Plugin +CLEAR_STOPPED = Wyczysc plik z zatrzymaniem +SAVE_STOPPED = Zapisywanie zatrzymane +PAUSED_PLUGIN = Zatrzymano %d plugin +PAUSED_PLUGINS = Zatrzymano %d pluginy +UNPAUSED_PLUGIN = Wznowiono %d plugin +UNPAUSED_PLUGINS = Wznowiono %d pluginy +CANT_MARK_MORE = Nie mozna zaznaczyc wiecej pluginow jako wznawialnych! +PAUSE_LOADED = Zatrzymaj pluginy: Zaladowane pluginy +STOPPED = wylaczono +VERSION = wersja +FILE = plik +PAUSE_ENTRIES = Wpisy %d - %d z %d (%d uruchomionych) +PAUSE_USE_MORE = Uzyj 'amx_pausecfg list %d' po wiecej +PAUSE_USE_BEGIN = Uzyj 'amx_pausecfg list 1' do poczatku +PAUSE_USAGE = Uzycie: amx_pausecfg <komenda> [nazwa] +PAUSE_COMMANDS = Komendy +COM_PAUSE_OFF = ^toff - zatrzymal wszystkie pluginy nie w liscie +COM_PAUSE_ON = ^ton - wznowil wszystkie pluginy +COM_PAUSE_STOP = ^tstop <file> - wylaczyl plugin +COM_PAUSE_PAUSE = ^tpause <file> - zatrzymuje plugin +COM_PAUSE_ENABLE = ^tenable <file> - wlacza plugin +COM_PAUSE_SAVE = ^tsave - zapisuje liste wylaczonych pluginow +COM_PAUSE_CLEAR = ^tclear - czysci liste wylaczonych pluginow +COM_PAUSE_LIST = ^tlist [id] - wyswietla liste pluginow +COM_PAUSE_ADD = ^tadd <title> - oznacza plugin jako niepauzowalny +SAVE_PAUSED = Zapisz zapauzowane pluginy +COM_PAUSE_SAVE_PAUSED = ^tsave - zapisuje liste zapauzowanych pluginow +COM_PAUSE_CLEAR_PAUSED = ^tsave - czysci liste zapauzowanych plugninow +CANT_UNPAUSE_PLUGIN = Plugin "%s" jest zastopowany i nie moze byc zapauzowany lub odpauzowany. +CLEAR_PAUSED = czysci liste zapauzowanych pluginow + +[nl] +PAUSE_COULDNT_FIND = Kon geen plugin vinden gelijk aan "%s" +PAUSE_PLUGIN_MATCH = Plugin gelijk aan "%s" +PAUSE_CONF_CLEARED = Configuratiebestand leeggehaald. Herlaad de map als dat nodig is +PAUSE_ALR_CLEARED = Configuratie was al leeggehaald! +PAUSE_CONF_SAVED = Configuratie succesvol bewaard +PAUSE_SAVE_FAILED = Configuratie bewaren mislukt!!! +LOCKED = OP-SLOT +PAUSE_UNPAUSE = Plugins Pauzeren/Hernemen +CLEAR_STOPPED = Haal bestand met gestopte plugins leeg +SAVE_STOPPED = Gestopte Plugins Bewaren +PAUSED_PLUGIN = %d plugin gepauzeerd +PAUSED_PLUGINS = %d plugins gepauzeerd +UNPAUSED_PLUGIN = %d plugin hernomen +UNPAUSED_PLUGINS = %d plugins hernomen +CANT_MARK_MORE = Kan niet nog meer plugins markeren als niet pauzeerbaar! +PAUSE_LOADED = Pauseer Plugins: Geladen plugins +STOPPED = gestopt +VERSION = versie +FILE = bestand +PAUSE_ENTRIES = Entries %d - %d van de %d (%d lopen nu) +PAUSE_USE_MORE = Typ 'amx_pausecfg list %d' voor meer +PAUSE_USE_BEGIN = Typ 'amx_pausecfg list 1' voor het begin +PAUSE_USAGE = Typ: amx_pausecfg <commando> [naam] +PAUSE_COMMANDS = Commando's +COM_PAUSE_OFF = ^toff - pauzeert alle plugins die niet in de lijst staan +COM_PAUSE_ON = ^ton - hervat alle plugins +COM_PAUSE_STOP = ^tstop <bestand> - stopt een plugin +COM_PAUSE_PAUSE = ^tpause <bestand> - pauzeert een plugin +COM_PAUSE_ENABLE = ^tenable <bestand> - schakelt een plugin in +COM_PAUSE_SAVE = ^tsave - bewaart een lijst van gestopte plugins +COM_PAUSE_CLEAR = ^tclear - haalt lijst met gestopte plugins leeg +COM_PAUSE_LIST = ^tlist [id] - maakt lijst met plugins +COM_PAUSE_ADD = ^tadd <titel> - markeert een plugin als niet pauzeerbaar +SAVE_PAUSED = Gepauseerde plugins opgeslagen +COM_PAUSE_SAVE_PAUSED = ^tsave - Slaat een lijst op van gepauseerde plugins +COM_PAUSE_CLEAR_PAUSED = ^tclear - Maakt de lijst met gepauseerde plugins leeg +CANT_UNPAUSE_PLUGIN = Plugin "%s" is gestopt en kan niet meer gepauseerd of gestart worden. +CLEAR_PAUSED = Haal bestand met gepauseerde plugins leeg + +[es] +PAUSE_COULDNT_FIND = No se encontro ningun plugin que coincida con "%s" +PAUSE_PLUGIN_MATCH = Plugin "%s" encontrado +PAUSE_CONF_CLEARED = Archivo de configuracion borrado. Reinicia el mapa si es necesario +PAUSE_ALR_CLEARED = La configuracion ya esta borrada! +PAUSE_CONF_SAVED = Configuracion guardada con exito +PAUSE_SAVE_FAILED = No se pudo guardar la configuracion!!! +LOCKED = BLOQUEADO +PAUSE_UNPAUSE = Pausar/Despausar Plugins +CLEAR_STOPPED = Borrar lista de archivos detenidos +SAVE_STOPPED = Guardar detenidos +PAUSED_PLUGIN = %d plugin pausado +PAUSED_PLUGINS = %d plugins pausados +UNPAUSED_PLUGIN = %d plugin despausado +UNPAUSED_PLUGINS = %d plugins despausados +CANT_MARK_MORE = No se pueden marcar mas plugins como despausables! +PAUSE_LOADED = Pausar Plugins: Plugins Cargados +STOPPED = detenido +VERSION = version +FILE = archivo +PAUSE_ENTRIES = Entradas %d - %d de %d (%d en ejecucion) +PAUSE_USE_MORE = Escribe 'amx_pausecfg list %d' para mostrar mas +PAUSE_USE_BEGIN = Escribe 'amx_pausecfg list 1' para volver al principio +PAUSE_USAGE = Uso: amx_pausecfg <comando> [nombre] +PAUSE_COMMANDS = Comandos +COM_PAUSE_OFF = ^toff - pausa todos los plugins que no esten en la lista +COM_PAUSE_ON = ^ton - despausa todos los plugins +COM_PAUSE_STOP = ^tstop <archivo> - detiene el plugin +COM_PAUSE_PAUSE = ^tpause <archivo> - pausa el plugin +COM_PAUSE_ENABLE = ^tenable <archivo> - activa el plugin +COM_PAUSE_SAVE = ^tsave - guarda la lista de plugins detenidos +COM_PAUSE_CLEAR = ^tclear - borra la lista de plugins detenidos +COM_PAUSE_LIST = ^tlist [id] - muestra la lista de plugins +COM_PAUSE_ADD = ^tadd <titulo> - marca el plugin como despausable +SAVE_PAUSED = Guardar Pausados +COM_PAUSE_SAVE_PAUSED = ^tsave - guarda una lista de los plugins pausados. +COM_PAUSE_CLEAR_PAUSED = ^tclear - limpia la lista de los plugins pausados. +CANT_UNPAUSE_PLUGIN = El plugin "%s" esta detenido, este no puede ser pausado ni reanudado. +CLEAR_PAUSED = Borrar lista de archivos pausados + +[bp] +PAUSE_COULDNT_FIND = Nao achou um plugin igual a "%s" +PAUSE_PLUGIN_MATCH = Plugin igual a "%s" +PAUSE_CONF_CLEARED = Arquivo de configuracao vazio. Recarregue o mapa se preciso +PAUSE_ALR_CLEARED = Configuracao foi removida! +PAUSE_CONF_SAVED = Configuracao salva com sucesso +PAUSE_SAVE_FAILED = Falhou ao salvar a Configuracao!!! +LOCKED = BLOQUEADO +PAUSE_UNPAUSE = Pausar/Despausar Plugins +CLEAR_STOPPED = Limpa arquivo de plugins parados +SAVE_STOPPED = Salvar parados +PAUSED_PLUGIN = Pausou %d plugin +PAUSED_PLUGINS = Pausou %d plugins +UNPAUSED_PLUGIN = Despausou %d plugin +UNPAUSED_PLUGINS = Despausou %d plugins +CANT_MARK_MORE = Nao pode selecionar mais plugins para nao pausar! +PAUSE_LOADED = Pause Plugins: Plugins carregados +STOPPED = parou +VERSION = versao +FILE = arquivo +PAUSE_ENTRIES = Entradas %d - %d de %d (%d rodando) +PAUSE_USE_MORE = Use 'amx_pausecfg list %d' para ver mais +PAUSE_USE_BEGIN = Use 'amx_pausecfg list 1' para voltar ao inicio +PAUSE_USAGE = Use: amx_pausecfg <comando> [nome] +PAUSE_COMMANDS = Comandos +COM_PAUSE_OFF = ^toff - pausa todos os plugins fora da lista +COM_PAUSE_ON = ^ton - despausa todos os plugins +COM_PAUSE_STOP = ^tstop <arquivo> - para um plugin +COM_PAUSE_PAUSE = ^tpause <arquivo> - pausa um plugin +COM_PAUSE_ENABLE = ^tenable <arquivo> - habilita um plugin +COM_PAUSE_SAVE = ^tsave - salva uma lista de plugins parados +COM_PAUSE_CLEAR = ^tclear - clareia uma lista de plugins parado +COM_PAUSE_LIST = ^tlist [id] - lista os plugins +COM_PAUSE_ADD = ^tadd <nome> - marca um plugin para nao pausar +SAVE_PAUSED = Salvar Pausados +COM_PAUSE_SAVE_PAUSED = ^tsave - salva uma lista de plugins pausados +COM_PAUSE_CLEAR_PAUSED = ^tclear - limpa uma lista de plugins pausados +CANT_UNPAUSE_PLUGIN = O plugin "%s" esta desligado e nao pode ser pausado ou re-ativado +CLEAR_PAUSED = Limpa arquivo de plugins pausados + +[cz] +PAUSE_COULDNT_FIND = Nemuzu najit plugin odpovidajici "%s" +PAUSE_PLUGIN_MATCH = Plugin odpovidajici "%s" +PAUSE_CONF_CLEARED = Konfiguracni soubor vycisten. Pokud je to potreba reloudni mapu. +PAUSE_ALR_CLEARED = Konfigurace jiz byla vycistena! +PAUSE_CONF_SAVED = Konfigurace uspesne ulozena +PAUSE_SAVE_FAILED = Konfiguraci se NEPOVEDLO ulozit!!! +LOCKED = ZAMCENO +PAUSE_UNPAUSE = Pauznout/Spustit Pluginy +CLEAR_STOPPED = Vycistit soubor se stopnutim +SAVE_STOPPED = Ulozit stopnute +PAUSED_PLUGIN = Pauznut %d plugin +PAUSED_PLUGINS = Pauznuto %d pluginu +UNPAUSED_PLUGIN = Znovu spusten %d plugin +UNPAUSED_PLUGINS = Znovu spusteno %d pluginu +CANT_MARK_MORE = Nemuzu oznacit vice pluginu jako nepauznutelne! +PAUSE_LOADED = Puznute pluginy: Nactene pluginy +STOPPED = stoply +VERSION = verze +FILE = soubor +PAUSE_ENTRIES = Polozky %d - %d z %d (%d bezi) +PAUSE_USE_MORE = Napis 'amx_pausecfg list %d' pro vice +PAUSE_USE_BEGIN = Napis 'amx_pausecfg list 1' pro zacatek +PAUSE_USAGE = Napis: amx_pausecfg <command> [name] +PAUSE_COMMANDS = Prikazy +COM_PAUSE_OFF = ^toff - pauzne vsechny pluginy ktere nejsou na seznamu +COM_PAUSE_ON = ^ton - znovu spusti vsechny pluginy +COM_PAUSE_STOP = ^tstop <file> - stopne plugin +COM_PAUSE_PAUSE = ^tpause <file> - pauzne plugin +COM_PAUSE_ENABLE = ^tenable <file> - povoli plugin +COM_PAUSE_SAVE = ^tsave - ulozi seznam stopnutych pluginu +COM_PAUSE_CLEAR = ^tclear - vycisti seznam stopnutych plugins +COM_PAUSE_LIST = ^tlist [id] - seznamy pluginu +COM_PAUSE_ADD = ^tadd <title> - oznaci plugin jako nepauznutelny + +[fi] +PAUSE_COULDNT_FIND = Ei loydetty pluginia, joka sopisi kuvaukseen "%s" +PAUSE_PLUGIN_MATCH = Plugin, joka sopii kuvaukseen "%s", loydetty +PAUSE_CONF_CLEARED = Konffit nollattu. Lataa mappi uudestaan, jos tarvitsee +PAUSE_ALR_CLEARED = Konffit on jo nollattu +PAUSE_CONF_SAVED = Konffit tallennettu onnistuneesti +PAUSE_SAVE_FAILED = Konffien tallentaminen epaonnistui +LOCKED = LUKITTU +PAUSE_UNPAUSE = Pysayta/vapauta plugineja +CLEAR_STOPPED = Nollaa filu stoppedilla...hmm +SAVE_STOPPED = Tallenna pysaytetyt +PAUSED_PLUGIN = Pysaytettiin plugin %d +PAUSED_PLUGINS = Pysaytettiin %d pluginia +UNPAUSED_PLUGIN = Vapautettiin plugin %d +UNPAUSED_PLUGINS = Vapautettiin %d pluginia +CANT_MARK_MORE = Ei voida merkata enempaa plugineja pysayttamattomiksi +PAUSE_LOADED = Pysayta plugineja: Pluginit ladattu +STOPPED = pysaytetty +VERSION = versio +FILE = tiedosto +PAUSE_ENTRIES = Kohdat %d - %d Kaikkiaan %d (%d kaynnissa) +PAUSE_USE_MORE = Kirjoita 'amx_pausecfg list %d' saadaksesi lisatietoja +PAUSE_USE_BEGIN = Kirjoita 'amx_pausecfg list 1' aloittaaksesi +PAUSE_USAGE = Kaytto: amx_pausecfg <komento> [nimi] +PAUSE_COMMANDS = Komennot +COM_PAUSE_OFF = ^toff - pysayttaa kaikki pluginit, jotka eivat ole listassa +COM_PAUSE_ON = ^ton - vapauttaa kaikki pluginit +COM_PAUSE_STOP = ^tstop <tiedosto> - pysayttaa pluginin +COM_PAUSE_PAUSE = ^tpause <tiedosto> - pysayttaa pluginin +COM_PAUSE_ENABLE = ^tenable <tiedosto> - ottaa pluginin kayttoon +COM_PAUSE_SAVE = ^tsave - tallentaa listan pysaytetyista plugineista +COM_PAUSE_CLEAR = ^tclear - nollaa pysaytettyjen pluginien listan +COM_PAUSE_LIST = ^tlist [id] - listaa pluginit +COM_PAUSE_ADD = ^tadd <title> - merkkaa kaikki pluginit pysayttamattomiksi + +[ls] +PAUSE_COULDNT_FIND = n0 l33t p|ug!n "%s" +PAUSE_PLUGIN_MATCH = l33t p|ug!n "%s" +PAUSE_CONF_CLEARED = |200t s3tt!nz g0n3 +PAUSE_ALR_CLEARED = |200t s3tt!nz g0n3! +PAUSE_CONF_SAVED = |200t s3tt!nz s4v3d! +PAUSE_SAVE_FAILED = |200t s3tt!nz n0t s4v3dz0r! +LOCKED = N0! +PAUSE_UNPAUSE = P4us3/Unp4us3 l33t p|ug!ns +CLEAR_STOPPED = Cl34r +SAVE_STOPPED = $t0p3dz0r +PAUSED_PLUGIN = %d l33t p|ug!nz |>4UZ3D +PAUSED_PLUGINS = %d l33t p|ug!nz |>4UZ3D +UNPAUSED_PLUGIN = %d l33t p|ug!nz d3-|>4UZ3D +UNPAUSED_PLUGINS = %d l33t p|ug!nz d3-|>4UZ3D +CANT_MARK_MORE = l33t p|ug!nz un-d3-|>4UZ3Dab|3 +PAUSE_LOADED = |>4UZ3D l33t p|ug!ns: L04d3d l33t p|ug!nz +STOPPED = c|_|7 +VERSION = v3r$!0n +FILE = f!l3 +PAUSE_ENTRIES = %d - %d of %d (%d j0ggin') +PAUSE_USE_MORE = uz3 'amx_pausecfg list %d' for more +PAUSE_USE_BEGIN = uz3 'amx_pausecfg list 1' for begin +PAUSE_USAGE = Us4g3: amx_pausecfg <command> [name] +PAUSE_COMMANDS = (mdz +COM_PAUSE_OFF = ^toff - |>4UZ3z all l33t p|ug!nz g0n3 +COM_PAUSE_ON = ^ton - un|>4UZ3z 4ll l33t p|ug!nz +COM_PAUSE_STOP = ^tstop <file> - l33t p|ug!nz l34v3z +COM_PAUSE_PAUSE = ^tpause <file> - |>4UZ3z a l33t p|ug!nz +COM_PAUSE_ENABLE = ^tenable <file> - l33t p|ug!nz c0m3z b4ck +COM_PAUSE_SAVE = ^tsave - s4v3z $t0|>|>3dz l33t p|ug!nz +COM_PAUSE_CLEAR = ^tclear - cl34rz $t0|>|>3dz l33t p|ug!nz +COM_PAUSE_LIST = ^tlist [id] - sh0wz l33t p|ug!nz +COM_PAUSE_ADD = ^tadd <title> - l33t p|ug!nz = un|>4UZ3able +SAVE_PAUSED = $4\/3 P4U$3D +COM_PAUSE_SAVE_PAUSED = ^tsave - $4\/3$ 4 1!$+ 0|= P4U$3D P1UG!|\|$ +COM_PAUSE_CLEAR_PAUSED = ^tclear - C134R$ 4 1!$+ 0|= P4U$3D P1UG!|\|$ +CANT_UNPAUSE_PLUGIN = P1UG!|\| "%s" !$ $+0PP3D 4|\|D C$|\||\|p+ |33 P4U$3D 0|2 U|\|P4U$3D. + +[bg] +PAUSE_COULDNT_FIND = Ne uspq da nameri plugin koito da savbada s "%s" +PAUSE_PLUGIN_MATCH = Plugin savpada "%s" +PAUSE_CONF_CLEARED = Iz4isti configuracionia file. Zaredi na novo kartata ako e nujno +PAUSE_ALR_CLEARED = Configuracionia file e ve4e iz4isten! +PAUSE_CONF_SAVED = configuraciata be6e zapametena +PAUSE_SAVE_FAILED = configuraciata ne be6e zapametena!!! +LOCKED = ZAKLU$ENO +PAUSE_UNPAUSE = Pause/Unpause Plugin +CLEAR_STOPPED = Iz4isti file sas spreni +SAVE_STOPPED = Zapameti spreni +PAUSED_PLUGIN = Paused %d plugin +PAUSED_PLUGINS = Paused %d plugins +UNPAUSED_PLUGIN = Unpaused %d plugin +UNPAUSED_PLUGINS = Unpaused %d plugins +CANT_MARK_MORE = Nemoje da markirate pove4e plugini kato unpauseable! +PAUSE_LOADED = Pause Plugins: Loaded plugins +STOPPED = Sprqn +VERSION = versia +FILE = file +PAUSE_ENTRIES = Vklu4ni %d - %d ot %d (%d sa pusnati) +PAUSE_USE_MORE = Izpolzvai 'amx_pausecfg list %d' za pve4e +PAUSE_USE_BEGIN = Izpolzvai 'amx_pausecfg list 1' za na4alo +PAUSE_USAGE = Izpolzvano: amx_pausecfg <comanda> [ime] +PAUSE_COMMANDS = Comandi +COM_PAUSE_OFF = ^toff - slaga na pausa vsi4kite plugini koito ne sa na lista +COM_PAUSE_ON = ^ton - puska vsi4kite plugini +COM_PAUSE_STOP = ^tstop <file> - spira edin plugin +COM_PAUSE_PAUSE = ^tpause <file> - pauses edin plugin +COM_PAUSE_ENABLE = ^tenable <file> - puska edin plugin +COM_PAUSE_SAVE = ^tsave - zapameti list ot sprqni plugini +COM_PAUSE_CLEAR = ^tclear - iz4isti list ot sprqni plugini +COM_PAUSE_LIST = ^tlist [id] - pokazva plugini +COM_PAUSE_ADD = ^tadd <title> - markira plugin kato nespira6t + +[ro] +PAUSE_COULDNT_FIND = Nu a fost gasit un plugin ce rezulta cautarea "%s" +PAUSE_PLUGIN_MATCH = Plugin-ul "%s" rezulta cautarea +PAUSE_CONF_CLEARED = Fisier-ul de configuratie a fost golit. Reincarca harta daca este nevoie +PAUSE_ALR_CLEARED = Configuratia a fost golita deja! +PAUSE_CONF_SAVED = Configuratia a fost salvata cu succes +PAUSE_SAVE_FAILED = Salvarea configuratiei a esuat!!! +LOCKED = BLOCAT +PAUSE_UNPAUSE = Intrerupe/Reincarca Plugin-uri +CLEAR_STOPPED = Goleste fisier-ul cu cele intrerupte +SAVE_STOPPED = Salveaza fisier-ul cu cele intrerupte +PAUSED_PLUGIN = Plugin-ul %d a fost intrerupt +PAUSED_PLUGINS = Au fost intrerupte %d plugin-uri +UNPAUSED_PLUGIN = Plugin-ul %d a fost reincarcat +UNPAUSED_PLUGINS = Au fost reincarcate %d plugin-uri +CANT_MARK_MORE = Nu se pot marca mai multe plugin-uri ca intrerupte! +PAUSE_LOADED = Intrerupe plugin-uri: Plugin-uri incarcate +STOPPED = intrerupte +VERSION = versiune +FILE = fisier +PAUSE_ENTRIES = Intrari %d - %d din %d (%d functioneaza) +PAUSE_USE_MORE = Scrie 'amx_pausecfg list %d' pentru mai mult +PAUSE_USE_BEGIN = Scrie 'amx_pausecfg list 1' pentru inceput +PAUSE_USAGE = Folosire: amx_pausecfg <comanda> [nume] +PAUSE_COMMANDS = Comenzi +COM_PAUSE_OFF = ^toff - intrerupe toate plugin-urile ce nu sunt in lista +COM_PAUSE_ON = ^ton - reincarca toate plugin-urile ce nu sunt in lista +COM_PAUSE_STOP = ^tstop <fisier> - opreste un plugin +COM_PAUSE_PAUSE = ^tpause <fisier> - intrerupe un plugin +COM_PAUSE_ENABLE = ^tenable <file> - incarca un plugin +COM_PAUSE_SAVE = ^tsave - salveaza o lista a plugin-urilor oprite +COM_PAUSE_CLEAR = ^tclear - goleste o lista a plugin-urilor oprite +COM_PAUSE_LIST = ^tlist [id] - listeaza plugin-urile +COM_PAUSE_ADD = ^tadd <title> - marcheaza un plugin ca si reincarcat +SAVE_PAUSED = Salvarea oprita +COM_PAUSE_SAVE_PAUSED = ^tsave - salveaza o lista cu pluginurile oprite +COM_PAUSE_CLEAR_PAUSED = ^tclear - sterge lista cu pluginurile oprite +CANT_UNPAUSE_PLUGIN = Pluginul "%s" este oprit si nu poate fi pus pe pauza sau scos din pauza. +CLEAR_PAUSED = Goleste fisier-ul cu cele oprite + +[hu] +PAUSE_COULDNT_FIND = Nem lehet a plugint talalni "%s" +PAUSE_PLUGIN_MATCH = Plugin matching "%s" +PAUSE_CONF_CLEARED = Beallitasok file betoltve. Valts palyat a hasznalatahoz +PAUSE_ALR_CLEARED = A beallitasok mar ki vannak uritve! +PAUSE_CONF_SAVED = Beallitasok sikeresen elmentve +PAUSE_SAVE_FAILED = Nem sikerult a mentes!!! +LOCKED = LEZARVA +PAUSE_UNPAUSE = Ki/Be kapcsolas Pluginok +CLEAR_STOPPED = A leallitot pluginok filejenak uritese +SAVE_STOPPED = Megallitottak mentese +PAUSED_PLUGIN = Leallitva %d plugin +PAUSED_PLUGINS = Leallitva %d plugin +UNPAUSED_PLUGIN = Engedelyezve %d plugin +UNPAUSED_PLUGINS = Engedelyezve %d plugin +CANT_MARK_MORE = Nem lehet mark tobb plugint megallitani! +PAUSE_LOADED = Pause Plugins: Loaded plugins +STOPPED = leallitva +VERSION = verzio +FILE = file +PAUSE_ENTRIES = Bejegyzes %d - %d a %d-bol (%d fut) +PAUSE_USE_MORE = Irj 'amx_pausecfg list %d' a tobbihez +PAUSE_USE_BEGIN = Irj 'amx_pausecfg list 1' az elejehez +PAUSE_USAGE = Hasznalat: amx_pausecfg <parancs> [nev] +PAUSE_COMMANDS = Parancsok +COM_PAUSE_OFF = ^tki - minden plugin leallitasa a listan +COM_PAUSE_ON = ^tbe - osszes plugin engedelyezese +COM_PAUSE_STOP = ^tstop <file> - plugin megallitasa +COM_PAUSE_PAUSE = ^tpause <file> - kikapcsolt pluginok +COM_PAUSE_ENABLE = ^tenable <file> - plugin engedelyezese +COM_PAUSE_SAVE = ^tsave - lista mentese a leallitott pluginokkal +COM_PAUSE_CLEAR = ^tclear - a megallitott pluginok listajanak kiuritese +COM_PAUSE_LIST = ^tlist [id] - pluginok listaja +COM_PAUSE_ADD = ^tadd <nev> - megjelolni a plugint megalithatokent +SAVE_PAUSED = Mentes Szunetelve +COM_PAUSE_SAVE_PAUSED = ^tsave - menti a szunetelt pluginok listajat +COM_PAUSE_CLEAR_PAUSED = ^tclear - torli a szunetelt pluginok listajat +CANT_UNPAUSE_PLUGIN = A "%s" plugint nemlehet szuneteltetni vagy engedelyezni. +CLEAR_PAUSED = Torli a szunetelt pluginok listajat + +[lt] +PAUSE_COULDNT_FIND = Negali surasti plugino "%s" +PAUSE_PLUGIN_MATCH = Pluginas sutampa "%s" +PAUSE_CONF_CLEARED = Konfigo failas istryntas. Perkrauk mapa jei reikia +PAUSE_ALR_CLEARED = Konfigas jau buvo isvalyta! +PAUSE_CONF_SAVED = Konfigas issaugotas sekmingai +PAUSE_SAVE_FAILED = Konfigo issaugojimas sekmingas!!! +LOCKED = Uzrakinta +PAUSE_UNPAUSE = Pauze/Nuimti pauze pluginus +CLEAR_STOPPED = Isvalyti sustabdytus failus +SAVE_STOPPED = Issaugoti sustabdytus +PAUSED_PLUGIN = Sustabdytas %d pluginas +PAUSED_PLUGINS = Sustabdyti %d pluginai +UNPAUSED_PLUGIN = Paleistas %d pluginas +UNPAUSED_PLUGINS = Paleisti %d pluginai +CANT_MARK_MORE = Daugiau pluginu pazymeti negalima! +PAUSE_LOADED = Sustabdyti pluginus: Uzkrauti pluginai +STOPPED = sustabdyti +VERSION = versija +FILE = failas +PAUSE_ENTRIES = Irasas %d - %d is %d (%d veikiantis) +PAUSE_USE_MORE = Naudok 'amx_pausecfg sarasa %d' del daugiau info +PAUSE_USE_BEGIN = Naudok 'amx_pausecfg saraso 1 nr del pradzios +PAUSE_USAGE = Naudok: amx_pausecfg <komanda> [skaicius] +PAUSE_COMMANDS = Komandos +COM_PAUSE_OFF = ^tisjungti - Sustabdo visus pluginus esancius ne sarase +COM_PAUSE_ON = ^tijungti - paleidzia visus pluginus +COM_PAUSE_STOP = ^tstop <failas> - sustabdo plugina +COM_PAUSE_PAUSE = ^tpauze <failas> - pauze pluginui +COM_PAUSE_ENABLE = ^tpaleisti <failas> - paleidzia/ijungia plugina +COM_PAUSE_SAVE = ^tissaugoti - issaugo sustabdytu pluginu sarasa +COM_PAUSE_CLEAR = ^tpravalyti - pravalo sustabdytus pluginus +COM_PAUSE_LIST = ^tlistas [id] - pluginu sarasas +COM_PAUSE_ADD = ^tprideti <pavadinimas> - pazymi plugina kaip nesustabdoma + +[sk] +PAUSE_COULDNT_FIND = Nemozem najst plugin zodpovedajuci "%s" +PAUSE_PLUGIN_MATCH = Plugin zodpovedajuci "%s" +PAUSE_CONF_CLEARED = Konfiguracny subor vycisteny. Ak je to potrebne reloadni mapu. +PAUSE_ALR_CLEARED = Konfiguracia uz bola vycistena! +PAUSE_CONF_SAVED = Konfiguracia uspesne ulozena +PAUSE_SAVE_FAILED = Konfiguraciu sa NEPODARILO ulozit!!! +LOCKED = ZAMKNUTE +PAUSE_UNPAUSE = Pauznut/Spustit Pluginy +CLEAR_STOPPED = Vycistit subor so stopnutim +SAVE_STOPPED = Ulozit stopnute +PAUSED_PLUGIN = Pauznut %d plugin +PAUSED_PLUGINS = Pauznuto %d pluginov +UNPAUSED_PLUGIN = Znovu spusteny %d plugin +UNPAUSED_PLUGINS = Znovu spustenych %d pluginov +CANT_MARK_MORE = Nemozem oznacit viac pluginov ako nepauznutelne! +PAUSE_LOADED = Pauznute pluginy: Nacitane pluginy +STOPPED = zastaveny +VERSION = verzia +FILE = subor +PAUSE_ENTRIES = Polozky %d - %d z %d (%d spustene) +PAUSE_USE_MORE = Napis 'amx_pausecfg list %d' pre viac +PAUSE_USE_BEGIN = Napis 'amx_pausecfg list 1' pre zaciatok +PAUSE_USAGE = Napis: amx_pausecfg <command> [name] +PAUSE_COMMANDS = Prikazy +COM_PAUSE_OFF = ^toff - pauzne vsetky pluginy ktore niesu na zozname +COM_PAUSE_ON = ^ton - znovu spusti vsetky pluginy +COM_PAUSE_STOP = ^tstop <file> - stopne plugin +COM_PAUSE_PAUSE = ^tpause <file> - pauzne plugin +COM_PAUSE_ENABLE = ^tenable <file> - povoli plugin +COM_PAUSE_SAVE = ^tsave - ulozi zoznam stopnutych pluginov +COM_PAUSE_CLEAR = ^tclear - vycisti zoznam stopnutych pluginov +COM_PAUSE_LIST = ^tlist [id] - zoznamy pluginov +COM_PAUSE_ADD = ^tadd <title> - oznaci plugin ako nepauznutelny +SAVE_PAUSED = Ulozenie pozastavene +COM_PAUSE_SAVE_PAUSED = ^tsave - uloz zoznam pozastavenych pluginov +COM_PAUSE_CLEAR_PAUSED = ^tclear - vymaz zoznam pozastavenych pluginov +CANT_UNPAUSE_PLUGIN = Plugin "%s" je zastaveny ,nie je mozne ho pozastavit. +CLEAR_PAUSED = vymaz subor s pozastavenymi + +[mk] +PAUSE_COULDNT_FIND = Ne e najden plugin koj se poklopuva so baranjeto za "%s" +PAUSE_PLUGIN_MATCH = Pronajdeniot plugin e "%s" +PAUSE_CONF_CLEARED = Listata so pauzirani plagini e izbrisana. Pustete ja mapata odnovo ako e potrebno. +PAUSE_ALR_CLEARED = Listata so pauzirani plagini e prazna! +PAUSE_CONF_SAVED = Listata so pauzirani plagini e uspesno zacuvana +PAUSE_SAVE_FAILED = Listata so pauzirani plagini ne e zacuvana!!! +LOCKED = ZAKLUCEN +PAUSE_UNPAUSE = Pauziraj/Pusti Plugin +CLEAR_STOPPED = Izbrisi go fajlot so stopirani plugini +SAVE_STOPPED = Zacuvaj gi stopiranite +PAUSED_PLUGIN = Pauziran e %d plagin +PAUSED_PLUGINS = Pauzirani se %d plagini +UNPAUSED_PLUGIN = Pusten e %d plugin +UNPAUSED_PLUGINS = Pusteni se %d plagini +CANT_MARK_MORE = Ne e mozno da se izberat poveke plugini kako zakluceni! +PAUSE_LOADED = Pauza na plaginite: Vcitanite plugini +STOPPED = stopiran +VERSION = verzija +FILE = fajl +PAUSE_ENTRIES = Plagini %d - %d od %d (%d se aktivni) +PAUSE_USE_MORE = Napisi 'amx_pausecfg list %d' za uste +PAUSE_USE_BEGIN = Napisi 'amx_pausecfg list 1' za od pocetok +PAUSE_USAGE = Koristenje: amx_pausecfg <komanda> [ime] +PAUSE_COMMANDS = Komandi +COM_PAUSE_OFF = ^toff - gi pauzira site aktivni plagini +COM_PAUSE_ON = ^ton - gi pusta site pauzirani plagini +COM_PAUSE_STOP = ^tstop <fajl> - go stopira plaginot +COM_PAUSE_PAUSE = ^tpause <fajl> - go pauzira plaginot +COM_PAUSE_ENABLE = ^tenable <fajl> - go pusta plaginot +COM_PAUSE_SAVE = ^tsave - ja zacuvuva listata so stopirani plagini +COM_PAUSE_CLEAR = ^tclear - ja brise listata so stopirani plagini +COM_PAUSE_LIST = ^tlist [id] - gi lista site plagini +COM_PAUSE_ADD = ^tadd <title> - go markira plaginot kako nekoj sto ne moze da se pauzira +SAVE_PAUSED = Zacuvaj gi pauziranite plagini +COM_PAUSE_SAVE_PAUSED = ^tsave - ja zacuvuva listata so pauzirani plagini +COM_PAUSE_CLEAR_PAUSED = ^tclear - ja brise listata so pauzirani plagini +CANT_UNPAUSE_PLUGIN = Plaginot "%s" e stopiran i ne moze da se pauzira ili da se iskluci pauzata. +CLEAR_PAUSED = Izbrisi ja listata so pauzirani plagini diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/plmenu.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/plmenu.txt new file mode 100644 index 0000000..72e3d45 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/plmenu.txt @@ -0,0 +1,339 @@ +[en] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Ban Menu +BAN_FOR_MIN = Ban for %d minutes +BAN_PERM = Ban permanently +SLAP_SLAY_MENU = Slap/Slay Menu +SLAP_WITH_DMG = Slap with %d damage +SLAY = Slay +KICK_MENU = Kick Menu +ADMIN_TRANSF_1 = ADMIN: transfer %s to %s +ADMIN_TRANSF_2 = ADMIN %s: transfer %s to %s +TEAM_MENU = Team Menu +TRANSF_TO = Transfer to %s +CL_CMD_MENU = Client Cmds Menu +NO_CMDS = No cmds available + +[de] +ADMIN_BAN_1 = ADMIN: bannt %s +ADMIN_BAN_2 = ADMIN %s: bannt %s +BAN_MENU = Menu > bannen +BAN_FOR_MIN = Bann fuer %d Minuten +BAN_PERM = fuer immer bannen +SLAP_SLAY_MENU = Schlagen/Toeten-Menu +SLAP_WITH_DMG = Schlaegt mit %d Schaden +SLAY = toeten +KICK_MENU = Menu >kicken +ADMIN_TRANSF_1 = ADMIN: verschiebt %s zu den %s +ADMIN_TRANSF_2 = ADMIN %s: verschiebt %s zu den %s +TEAM_MENU = Menu > Team +TRANSF_TO = zu den %s geschoben +CL_CMD_MENU = Menu > Spielerbefehle +NO_CMDS = keine Befehle verfuegbar + +[sr] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Ban Meni +BAN_FOR_MIN = Ban na %d minuta +BAN_PERM = Ban za stalno +SLAP_SLAY_MENU = Slap/Slay Meni +SLAP_WITH_DMG = Slap sa %d stete +SLAY = Slay +KICK_MENU = Kick Meni +ADMIN_TRANSF_1 = ADMIN: transfer %s u %s +ADMIN_TRANSF_2 = ADMIN %s: transfer %s u %s +TEAM_MENU = Tim Meni +TRANSF_TO = Transfer u %s +CL_CMD_MENU = Klijent Komande Meni +NO_CMDS = Nema dostupnih komandi + +[tr] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Ban Menusu +BAN_FOR_MIN = Ban %d dakika olarak +BAN_PERM = Ban suresiz +SLAP_SLAY_MENU = Tokatla/oldur menusu +SLAP_WITH_DMG = Tokatla %d zarar ile +SLAY = Oldur +KICK_MENU = Atma menusu +ADMIN_TRANSF_1 = ADMIN: takim %s goc %s +ADMIN_TRANSF_2 = ADMIN %s: takim %s goc %s +TEAM_MENU = Takim menu +TRANSF_TO = %s takima goc +CL_CMD_MENU = Oyuncu Emir Menusu +NO_CMDS = Emir mevcud degildir + +[fr] +ADMIN_BAN_1 = ADMIN: banni %s +ADMIN_BAN_2 = ADMIN %s: banni %s +BAN_MENU = Menu Bannir +BAN_FOR_MIN = Bannir pour %d minutes +BAN_PERM = Bannir a vie (permanent) +SLAP_SLAY_MENU = Menu Frapper/Foudroyer +SLAP_WITH_DMG = Frapper avec %d points de degat +SLAY = Foudroyer +KICK_MENU = Menu Kick +ADMIN_TRANSF_1 = ADMIN: transfere %s en %s +ADMIN_TRANSF_2 = ADMIN %s: transfere %s en %s +TEAM_MENU = Menu Equipe +TRANSF_TO = Transferer en %s +CL_CMD_MENU = Menu Cmds Client +NO_CMDS = Aucune commande disponible + +[sv] +ADMIN_BAN_1 = ADMIN: bannlys %s +ADMIN_BAN_2 = ADMIN %s: bannlys %s +BAN_MENU = Bannlysningsmeny +BAN_FOR_MIN = Bannlys i %d minuter +BAN_PERM = Permanent bannlysning +SLAP_SLAY_MENU = Smisk-/Slakt-meny +SLAP_WITH_DMG = Smiska med %d skada +SLAY = Slakta +KICK_MENU = Sparka Meny +ADMIN_TRANSF_1 = ADMIN: skicka %s till %s +ADMIN_TRANSF_2 = ADMIN %s: skicka %s till %s +TEAM_MENU = Lagmeny +TRANSF_TO = Skicka till %s +CL_CMD_MENU = Klientkommandomeny +NO_CMDS = Det finns inga kommandon + +[da] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Ban Menu +BAN_FOR_MIN = Ban i %d minutter +BAN_PERM = Ban permanent +SLAP_SLAY_MENU = Klask/Draeb Menu +SLAP_WITH_DMG = Klask med %d skade +SLAY = Draeb +KICK_MENU = Kick Menu +ADMIN_TRANSF_1 = ADMIN: Overflyt %s to %s +ADMIN_TRANSF_2 = ADMIN %s: Overflyt %s to %s +TEAM_MENU = Hold Menu +TRANSF_TO = Overflyt til %s +CL_CMD_MENU = Klient Kommando Menu +NO_CMDS = Ingen kommandoer til raadighed + +[pl] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Menu Bana +BAN_FOR_MIN = Ban na %d minut +BAN_PERM = Kompletny Ban +SLAP_SLAY_MENU = Menu udzerzen/zgladzen +SLAP_WITH_DMG = Uderz zadajac %d obrazen +SLAY = Zgladzenie +KICK_MENU = Menu kicka +ADMIN_TRANSF_1 = ADMIN: %s przeszedl do %s +ADMIN_TRANSF_2 = ADMIN %s: %s przeszedl do %s +TEAM_MENU = Menu druzyny +TRANSF_TO = Przejdz do %s +CL_CMD_MENU = menu komend klienta +NO_CMDS = Nie ma zadnych komend + +[nl] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Banmenu +BAN_FOR_MIN = Bannen voor %d minuten +BAN_PERM = Permanent Bannen +SLAP_SLAY_MENU = Sla/Slachtmenu +SLAP_WITH_DMG = Sla met %d schade +SLAY = Slacht +KICK_MENU = Kickmenu +ADMIN_TRANSF_1 = ADMIN: zet %s over naar %s +ADMIN_TRANSF_2 = ADMIN %s: zet %s over naar %s +TEAM_MENU = Teammenu +TRANSF_TO = Zet over naar %s +CL_CMD_MENU = Gebruikerscommandomenu +NO_CMDS = Geen cmds beschikbaar + +[es] +ADMIN_BAN_1 = ADMIN: %s baneado +ADMIN_BAN_2 = ADMIN %s: %s baneado +BAN_MENU = Menu de Bans +BAN_FOR_MIN = Banear durante %d minutos +BAN_PERM = Banear permanentemente +SLAP_SLAY_MENU = Menu de Slap/Slay +SLAP_WITH_DMG = Pegar con %d de danyo +SLAY = Matar +KICK_MENU = Menu de Expulsiones +ADMIN_TRANSF_1 = ADMIN: %s transferido al equipo de los %s +ADMIN_TRANSF_2 = ADMIN %s: %s transferido al equipo de los %s +TEAM_MENU = Menu de Equipos +TRANSF_TO = Transferir a los %s +CL_CMD_MENU = Menu de Comandos de Cliente +NO_CMDS = No hay comandos disponibles + +[bp] +ADMIN_BAN_1 = ADMIN: baniu %s +ADMIN_BAN_2 = ADMIN %s: baniu %s +BAN_MENU = Menu Banir +BAN_FOR_MIN = Banido por %d minutos +BAN_PERM = Banido permanentemente +SLAP_SLAY_MENU = Menu Tapa/Assassinar +SLAP_WITH_DMG = Tapa com %d de dano +SLAY = Tapa +KICK_MENU = Menu Kickar +ADMIN_TRANSF_1 = ADMIN: transferiu %s para %s +ADMIN_TRANSF_2 = ADMIN %s: transferiu %s para %s +TEAM_MENU = Menu Controle de Time +TRANSF_TO = Transferir para %s +CL_CMD_MENU = Menu de Comandos no Cliente +NO_CMDS = Sem cmds disponivel + +[cz] +ADMIN_BAN_1 = ADMIN: zabanoval %s +ADMIN_BAN_2 = ADMIN %s: zabanovali %s +BAN_MENU = Menu banu +BAN_FOR_MIN = Zabanovan na %d minut +BAN_PERM = Zaban permanentne +SLAP_SLAY_MENU = Menu Pohlavku/Zabiti +SLAP_WITH_DMG = Pleskl za %d damage +SLAY = Zabit +KICK_MENU = Menu vykopnuti +ADMIN_TRANSF_1 = ADMIN: premistil %s k %s +ADMIN_TRANSF_2 = ADMIN %s: premistili %s k %s +TEAM_MENU = Menu Tymu +TRANSF_TO = Premistit k %s +CL_CMD_MENU = Menu klientskych prikazu +NO_CMDS = Zadny cmds + +[fi] +ADMIN_BAN_1 = ADMIN: bannasi %s +ADMIN_BAN_2 = ADMIN %s: bannasi %s +BAN_MENU = Bannivalikko +BAN_FOR_MIN = Bannaa %d minuutiksi +BAN_PERM = Bannaa pysyvasti +SLAP_SLAY_MENU = Slap- ja slayvalikko +SLAP_WITH_DMG = Slappaa %d damagella +SLAY = Slayaa +KICK_MENU = Potkimisvalikko +ADMIN_TRANSF_1 = ADMIN: siirsi pelaajan%s %s:ksi +ADMIN_TRANSF_2 = ADMIN %s: siirsi pelaajan %s %s:ksi +TEAM_MENU = Joukkuevalikko +TRANSF_TO = Siirra %s.ksi +CL_CMD_MENU = Clientkomentovalikko +NO_CMDS = Ei komentoja kaytettavissa + +[ls] +ADMIN_BAN_1 = ADMIN: b4nz0|2 %s +ADMIN_BAN_2 = ADMIN %s: b4nz0|2 %s +BAN_MENU = |34nz0|2 M3nu +BAN_FOR_MIN = |34nz0|2 for %d minut3s +BAN_PERM = |34nz0|2 p3rm4n3ntly +SLAP_SLAY_MENU = Sl4p/Sl4y M3nu +SLAP_WITH_DMG = Sl4p \/\/I7|-| %d d4m4g3 +SLAY = Sl4y +KICK_MENU = |<ic|< M3nu +ADMIN_TRANSF_1 = ADMIN: tr4nsf3r %s to %s +ADMIN_TRANSF_2 = ADMIN %s: tr4nsf3r %s to %s +TEAM_MENU = T34m M3nu +TRANSF_TO = Tr4nsf3r t0 %s +CL_CMD_MENU = (li3nt (mds M3nu +NO_CMDS = |\|0 cmds 4v4il4bl3 + +[bg] +ADMIN_BAN_1 = ADMINISTRATOR: banna %s +ADMIN_BAN_2 = ADMINISTRATOR %s: banna %s +BAN_MENU = Ban Menu +BAN_FOR_MIN = Ban za %d minuti +BAN_PERM = Banni za vinagi +SLAP_SLAY_MENU = Slap/Slay Menu +SLAP_WITH_DMG = Slapni s %d damage +SLAY = Slay +KICK_MENU = Kick Menu +ADMIN_TRANSF_1 = ADMINISTRATOR: transferira %s kam %s +ADMIN_TRANSF_2 = ADMINISTRATOR %s: transferira %s kam %s +TEAM_MENU = Otborno Menu +TRANSF_TO = Transferirai kam %s +CL_CMD_MENU = Klient Comandno Menu +NO_CMDS = Nqma nikakvi pozvoleni comandi + +[ro] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Menu Ban +BAN_FOR_MIN = Ban %d minute +BAN_PERM = Ban permanent +SLAP_SLAY_MENU = Slap/Slay +SLAP_WITH_DMG = Slap cu %d dmg +SLAY = Slay +KICK_MENU = Menu Kick +ADMIN_TRANSF_1 = ADMIN: transfera %s la %s +ADMIN_TRANSF_2 = ADMIN %s: transfera %s la %s +TEAM_MENU = Menu Echipe +TRANSF_TO = Transfera la %s +CL_CMD_MENU = Menu Comenzi Jucator +NO_CMDS = Nici o comanda valabila + +[hu] +ADMIN_BAN_1 = ADMIN: %s banolva +ADMIN_BAN_2 = ADMIN %s: %s banolva +BAN_MENU = Ban Menu +BAN_FOR_MIN = Banolva %d percre +BAN_PERM = Orokos ban +SLAP_SLAY_MENU = Utes/Oles Menu +SLAP_WITH_DMG = Megutve %d sebzessel +SLAY = Megoles +KICK_MENU = kick Menu +ADMIN_TRANSF_1 = ADMIN: %s atallitva %s-nak +ADMIN_TRANSF_2 = ADMIN %s: %s atallitva %s-nak +TEAM_MENU = CSapat Menu +TRANSF_TO = Atallitva %s-nek +CL_CMD_MENU = Client Cmds Menu +NO_CMDS = Nincs elerheto parancs + +[lt] +ADMIN_BAN_1 = ADMINAS: isbanino %s +ADMIN_BAN_2 = ADMINAS %s: isbanino %s +BAN_MENU = Ban meniu +BAN_FOR_MIN = Banas %d minutem +BAN_PERM = Banas visam laikui +SLAP_SLAY_MENU = Musti/Nudeti Meniu +SLAP_WITH_DMG = Musa su %d zala +SLAY = Nudeti +KICK_MENU = Ismetimo meniu +ADMIN_TRANSF_1 = ADMINAS: siuncia %s i %s +ADMIN_TRANSF_2 = ADMINAS %s: siuncia %s i %s +TEAM_MENU = Komandos meniu +TRANSF_TO = Issiusti i %s +CL_CMD_MENU = Klientu CMD meniu +NO_CMDS = Nera galimu CMD + +[sk] +ADMIN_BAN_1 = ADMIN: zabanoval %s +ADMIN_BAN_2 = ADMIN %s: zabanovali %s +BAN_MENU = MENU: ban +BAN_FOR_MIN = Zabanovat na %d minut +BAN_PERM = Zabanovat permanentne +SLAP_SLAY_MENU = MENU: Placnut/Zabit +SLAP_WITH_DMG = Udret silou %d damage +SLAY = Zabit +KICK_MENU = MENU: vykopnutie +ADMIN_TRANSF_1 = ADMIN: premiestnil %s k %s +ADMIN_TRANSF_2 = ADMIN %s: premiestnili %s k %s +TEAM_MENU = MENU: Tym +TRANSF_TO = Premiestnit k %s +CL_CMD_MENU = MENU: klientske prikazy +NO_CMDS = Ziadny cmds + +[mk] +ADMIN_BAN_1 = ADMIN: ban %s +ADMIN_BAN_2 = ADMIN %s: ban %s +BAN_MENU = Ban Meni +BAN_FOR_MIN = Ban na %d minuti +BAN_PERM = Ban zasekogas +SLAP_SLAY_MENU = Slap/Slay Meni +SLAP_WITH_DMG = Udri mu samar so %d steta +SLAY = Nasilno ubij go +KICK_MENU = Kick Meni +ADMIN_TRANSF_1 = ADMIN: napravi transfer na %s vo %s +ADMIN_TRANSF_2 = ADMIN %s: napravi transfer na %s vo %s +TEAM_MENU = Meni za timot +TRANSF_TO = Transfer vo %s +CL_CMD_MENU = Meni so komandi za klientite +NO_CMDS = Nema dostapni komandi diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/restmenu.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/restmenu.txt new file mode 100644 index 0000000..f4fd36f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/restmenu.txt @@ -0,0 +1,659 @@ +[en] +EQ_WE_RES = Equipment and weapons have been restricted +EQ_WE_UNRES = Equipment and weapons have been unrestricted +HAVE_BEEN = have been +HAS_BEEN = has been +RESTRICTED = restricted +UNRESTRICTED = unrestricted +NO_EQ_WE = Couldn't find such equipment or weapon +WEAP_RES = Weapons Restriction +VALUE = value +REST_ENTRIES_OF = Entries %i - %i of %i +REST_USE_MORE = Use 'amx_restrict list %i' for more +REST_USE_BEGIN = Use 'amx_restrict list 1' for begin +REST_CONF_SAVED = Configuration has been saved (file "%s") +REST_COULDNT_SAVE = Couldn't save configuration (file "%s") +REST_CONF_LOADED = Configuration has been loaded (file "%s") +REST_COULDNT_LOAD = Couldn't load configuration (file "%s") +COM_REST_USAGE = Usage: amx_restrict <command> [value] +COM_REST_COMMANDS = Commands: +COM_REST_ON = ^ton - set restriction on whole equipment +COM_REST_OFF = ^toff - remove restriction from whole equipment +COM_REST_ONV = ^ton <value> [...] - set specified restriction +COM_REST_OFFV = ^toff <value> [...] - remove specified restriction +COM_REST_LIST = ^tlist - display list of available equipment and weapons +COM_REST_SAVE = ^tsave - save restriction +COM_REST_LOAD = ^tload [file] - load restriction [from a file] +COM_REST_VALUES = Available values to restrict are:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Type 'amx_restrict list' for more specified values +REST_WEAP = Restrict Weapons +SAVE_SET = Save settings +CONF_SAV_SUC = Configuration saved successfully +CONF_SAV_FAIL = Configuration saving failed!!! + +[de] +EQ_WE_RES = Ausruestung und Waffen wurden verboten +EQ_WE_UNRES = Ausruestung und Waffen wurden freigegeben +HAVE_BEEN = sind gewesen +HAS_BEEN = ist gewesen +RESTRICTED = verboten +UNRESTRICTED = wieder erlaubt +NO_EQ_WE = Konnte diese Ausruestung oder Waffe nicht finden +WEAP_RES = Waffenbverbot +VALUE = Wert +REST_ENTRIES_OF = Eintrag %i - %i von %i +REST_USE_MORE = Benutze 'amx_restrict list %i' fuer mehr Info´s +REST_USE_BEGIN = Benutze 'amx_restrict list 1' um zum Anfang zu gelangen +REST_CONF_SAVED = Konfiguration gesichert (Datei "%s") +REST_COULDNT_SAVE = Konfiguration konnte nicht gespeichert werden (Datei "%s") +REST_CONF_LOADED = Konfiguration wurde geladen (Datei "%s") +REST_COULDNT_LOAD = Konfiguration konnte nicht geladen werden (Datei "%s") +COM_REST_USAGE = Benutze: amx_restrict <Befehl> [Wert] +COM_REST_COMMANDS = Befehle: +COM_REST_ON = ^ton - setze Verbot auf die gesamte Ausruestung +COM_REST_OFF = ^toff - Verbot fuer Ausruestung aufheben +COM_REST_ONV = ^ton <value> [...] - setze spezielles Verbot +COM_REST_OFFV = ^toff <value> [...] - spezielles Verbot aufgehoben +COM_REST_LIST = ^tlist - zeigt die Liste der verfuegbaren Waffen und Ausruestungen +COM_REST_SAVE = ^tsave - Verbote speichern +COM_REST_LOAD = ^tload [file] - laedt Verbote [aus einer Datei] +COM_REST_VALUES = erlaubte Verbotswerte:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Schreibe 'amx_restrict list' fuer mehr spezielle Werte +REST_WEAP = Waffen verbieten +SAVE_SET = Einstellungen speichern +CONF_SAV_SUC = Konfiguration erfolgreich gespeichert +CONF_SAV_FAIL = Speichern der Konfiguration fehlgeschlagen!!! + +[sr] +EQ_WE_RES = Oprema i oruzje su zabranjeni +EQ_WE_UNRES = Oprema i oruzje su oslobodjeni zabrane +HAVE_BEEN = je +HAS_BEEN = je +RESTRICTED = zabranjeno +UNRESTRICTED = slobodno +NO_EQ_WE = Nije moguce naci takvo opremu ili oruzje +WEAP_RES = Zabrane oruzja +VALUE = vrednost +REST_ENTRIES_OF = Vrednosti %i - %i od %i +REST_USE_MORE = Koristi 'amx_restrict list %i' za jos +REST_USE_BEGIN = Koristi 'amx_restrict list 1' za pocetak +REST_CONF_SAVED = Konfiguracija je uspesno sacuvana (fajl "%s") +REST_COULDNT_SAVE = Konfiguracija je neuspesno sacuvana (fajl "%s") +REST_CONF_LOADED = Konfiguracija je uspesno ucitana (fajl "%s") +REST_COULDNT_LOAD = Konfiguracija je neuspesno ucitana (fajl "%s") +COM_REST_USAGE = Koriscenje: amx_restrict <komanda> [vrednost] +COM_REST_COMMANDS = Komande: +COM_REST_ON = ^ton - postavi zabranu za celu opremu +COM_REST_OFF = ^toff - skini zabranu sa cele opreme +COM_REST_ONV = ^ton <vrednost> [...] - postavi zabranu na zadato oruzje +COM_REST_OFFV = ^toff <vrednost> [...] - skini zabranu sa zadatog oruzja +COM_REST_LIST = ^tlist - prikazi listu mogucih oruzja i opreme +COM_REST_SAVE = ^tsave - sacuvaj zabrene +COM_REST_LOAD = ^tload [fajl] - ucitaj zabrane [iz fajla] +COM_REST_VALUES = Moguce vrednosti za zabrane su:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Kucaj 'amx_restrict list' za jos specificnih komandi +REST_WEAP = Zabrani oruzja +SAVE_SET = Sacuvaj Podesavanja +CONF_SAV_SUC = Konfiguracija je uspesno sacuvana +CONF_SAV_FAIL = Konfiguracija je neuspesno sacuvana!!! + +[tr] +EQ_WE_RES = Silahlar ve sayre yasakli listesinde +EQ_WE_UNRES = Silahlar ve sayre yasakli listesinden alinmisdir +HAVE_BEEN = olmus +HAS_BEEN = oldu +RESTRICTED = yasaklandi +UNRESTRICTED = yasakli degil +NO_EQ_WE = oylesi bir silah ve sayre bulunamadi +WEAP_RES = Silah Yasaklama +VALUE = deger +REST_ENTRIES_OF = Girisler %i - %i ve %i +REST_USE_MORE = 'amx_restrict list %i' i kullanin dahasini gormek icin +REST_USE_BEGIN = 'amx_restrict list 1' i kullanin baslatmak icin +REST_CONF_SAVED = Configler basari ile saklanmisdir (dosya "%s") +REST_COULDNT_SAVE = Configler saklanamadi (dosya "%s") +REST_CONF_LOADED = Config yuklenmis durumda (dosya "%s") +REST_COULDNT_LOAD = Config yuklenemedi (dosya "%s") +COM_REST_USAGE = Kullanim: amx_restrict <emir> [deger] +COM_REST_COMMANDS = Emirler: +COM_REST_ON = ^ton - tumunu yasakla +COM_REST_OFF = ^toff - tumunden yasakli listesini kaldir +COM_REST_ONV = ^ton <deger> [...] - ozellikle yasakla +COM_REST_OFFV = ^toff <deger> [...] - ozellikle yasakliyi kaldir +COM_REST_LIST = ^tlist - mevcud olan silahlar ve sayre listesini goster +COM_REST_SAVE = ^tsave - yasakli listesini sakla +COM_REST_LOAD = ^tload [dosya] - yasakli listesini yukle [dosyadan] +COM_REST_VALUES = Mevcud olan degerleri yasaklamak:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = 'amx_restrict list' i kullanin daha ozel degerleri gormek icin +REST_WEAP = Yasakli Silahlar +SAVE_SET = Ayarlari Saklayin +CONF_SAV_SUC = Ayarlar basari ile saklandi +CONF_SAV_FAIL = Ayarlar malesef saklanamadi!!! + +[fr] +EQ_WE_RES = Les armes et equipements ont ete restreints +EQ_WE_UNRES = Les armes et equipements ne sont plus restreints +HAVE_BEEN = ont ete +HAS_BEEN = a ete +RESTRICTED = restreint(e)(s) +UNRESTRICTED = retire(e)(s) des restrictions +NO_EQ_WE = l'Arme ou l'Equipement n'a pas ete trouve(e) +WEAP_RES = Restriction des Armes +VALUE = valeur +REST_ENTRIES_OF = Entrees %i - %i sur %i +REST_USE_MORE = Utilise 'amx_restrict list %i' pour la suite +REST_USE_BEGIN = Utilise 'amx_restrict list 1' pour le debut +REST_CONF_SAVED = La configuration a ete sauvee (fichier "%s") +REST_COULDNT_SAVE = La configuration n'a pas ete sauvee (fichier "%s") +REST_CONF_LOADED = La configuration a ete chargee (fichier "%s") +REST_COULDNT_LOAD = La configuration n'a pas ete chargee (fichier "%s") +COM_REST_USAGE = Utilisation: amx_restrict <commande> [valeur] +COM_REST_COMMANDS = Commandes: +COM_REST_ON = ^ton - restreint tous les equipements +COM_REST_OFF = ^toff - enleve la restriction de tous les equipements +COM_REST_ONV = ^ton <valeur> [...] - met une restriction specifique +COM_REST_OFFV = ^toff <valeur> [...] - enleve une restriction specifique +COM_REST_LIST = ^tlist - affiche la liste des equipements et armes disponibles +COM_REST_SAVE = ^tsave - sauver les restrictions +COM_REST_LOAD = ^tload [file] - charger les restriction [a partir d'un fichier] +COM_REST_VALUES = Les valeurs disponibles pour la restriction sont:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Taper 'amx_restrict list' pour avoir une liste plus precise +REST_WEAP = Restreindre les Armes +SAVE_SET = Sauver +CONF_SAV_SUC = Configuration sauvegardee +CONF_SAV_FAIL = Sauvegarde de la configuration echouee!!! + +[sv] +EQ_WE_RES = Utrustning och vapen har begr'a'nsats +EQ_WE_UNRES = Utrustning och vapen har blivit obegr'a'nsade +HAVE_BEEN = har blivit +HAS_BEEN = har blivit +RESTRICTED = begr'a'nsad +UNRESTRICTED = obegr'a'nsad +NO_EQ_WE = Hittade ingen dylik utrustning eller vapen. +WEAP_RES = Vapenbegr'a'nsning +VALUE = pris +REST_ENTRIES_OF = Poster %i - %i av %i +REST_USE_MORE = Skriv 'amx_restrict list %i' f'o'r mera +REST_USE_BEGIN = Skriv 'amx_restrict list 1' f'o'r b'o'rjan +REST_CONF_SAVED = Konfigurationen har sparats (fil "%s") +REST_COULDNT_SAVE = Kunde inte spara konfigurationen (fil "%s") +REST_CONF_LOADED = Konfigurationen har laddats (fil "%s") +REST_COULDNT_LOAD = Kunde inte ladda konfigurationen (fil "%s") +COM_REST_USAGE = Skriv: amx_restrict <kommando> [v'a'rde] +COM_REST_COMMANDS = Kommandon: +COM_REST_ON = ^ton - s'a'tter begr'a'nsningar pa hela utrustningen +COM_REST_OFF = ^toff - tar bort begr'a'nsningar pa hela utrustningen +COM_REST_ONV = ^ton <v'a'rde> [...] - s'a'tter vald begr'a'nsning +COM_REST_OFFV = ^toff <v'a'rde> [...] - tar bort vald begr'a'nsning +COM_REST_LIST = ^tlist - visar lista med befintlig utrustning och vapen +COM_REST_SAVE = ^tsave - Spara begr'a'nsningar +COM_REST_LOAD = ^tload [fil] - ladda begr'a'nsningar +COM_REST_VALUES = Tillg'a'ngliga v'a'rden att begr'a'nsa e: :^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Skriv 'amx_restrict list' f'o'r mer v'a'rden +REST_WEAP = Begr'a'nsa vapen +SAVE_SET = Spara inst'a'llningar +CONF_SAV_SUC = Inst'a'llning sparad +CONF_SAV_FAIL = Spara inst'a'llningar misslyckades!!! + +[da] +EQ_WE_RES = Udstyr og vaaben er blevet forbudt +EQ_WE_UNRES = Udstyr og vaaben er blevet tilladt +HAVE_BEEN = er blevet +HAS_BEEN = er blevet +RESTRICTED = forbudt +UNRESTRICTED = tilladt +NO_EQ_WE = Kunne ikke finde et saadan udstyr eller vaaben +WEAP_RES = Vaaben forbud +VALUE = vaerdi +REST_ENTRIES_OF = indskrivninger %i - %i af %i +REST_USE_MORE = Brug 'amx_restrict list %i' for mere +REST_USE_BEGIN = Brug 'amx_restrict list 1' for at begynde +REST_CONF_SAVED = Konfiguration er blevet gemt (file "%s") +REST_COULDNT_SAVE = Kunne ikke gemme konfiguration (file "%s") +REST_CONF_LOADED = Konfiguration er blevet indlaest (file "%s") +REST_COULDNT_LOAD = Kunne ikke indlaese konfiguration (file "%s") +COM_REST_USAGE = Brug: amx_restrict <kommando> [value] +COM_REST_COMMANDS = Kommandoer: +COM_REST_ON = ^ton - Lav forbud paa alt udstyr +COM_REST_OFF = ^toff - Fjern forbud paa alt udstyr +COM_REST_ONV = ^ton <vaerdi> [...] - Lav specificeret forbud +COM_REST_OFFV = ^toff <vaerdi> [...] - Fjern specificeret forbud +COM_REST_LIST = ^tlist - viser liste med udstyr og vaaben til raadighed +COM_REST_SAVE = ^tsave - gem forbud +COM_REST_LOAD = ^tload [file] - indlaes restriction [fra en fil] +COM_REST_VALUES = Vaerdier til raadighed er, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Skriv 'amx_restrict list' for flere specificerede vaerdier +REST_WEAP = Forbyd vaaben +SAVE_SET = Gem indstillinger +CONF_SAV_SUC = Konfiguration gemt +CONF_SAV_FAIL = Gem konfiguration mislykkedes!!! + +[pl] +EQ_WE_RES = Wyposarzenie i bronie zostaly ograniczone +EQ_WE_UNRES = Wyposarzenie i bronie zostaly odblokowane +HAVE_BEEN = byl +HAS_BEEN = byl +RESTRICTED = ograniczony +UNRESTRICTED = odblokowany +NO_EQ_WE = Nie mozna znalesc takiego wyposarzenia lub broni +WEAP_RES = Ograniczenie broni +VALUE = wartosc +REST_ENTRIES_OF = Wpisy %i - %i z %i +REST_USE_MORE = Uzyj 'amx_restrict list %i' po wiecej +REST_USE_BEGIN = Uzyj 'amx_restrict list 1' do poczatku +REST_CONF_SAVED = Konfiguracja zostala zapisana (plik "%s") +REST_COULDNT_SAVE = Nie mozna zapisac konfiguracji (plik "%s") +REST_CONF_LOADED = Konfiguracja zostala zaladowana (plik "%s") +REST_COULDNT_LOAD = Nie mozna zaladowac konfiguracji (plik "%s") +COM_REST_USAGE = Uzycie: amx_restrict <komenda> [wartosc] +COM_REST_COMMANDS = Komendy: +COM_REST_ON = ^ton - ustawil ograniczenia na cale wyposarzenie +COM_REST_OFF = ^toff - wylaczyl ograniczenie na cale wyposarzenie +COM_REST_ONV = ^ton <value> [...] - ustawil specyficzne ograniczenie +COM_REST_OFFV = ^toff <value> [...] - usunal specyficzne ograniczenie +COM_REST_LIST = ^tlist - wyswietl liste broni i wyposarzenia +COM_REST_SAVE = ^tsave - zapisz ograniczenia +COM_REST_LOAD = ^tload [file] - zaladuj ograniczenia [z pliku] +COM_REST_VALUES = mozliwe wartosci na ktore mozna zalozyc ograniczenia:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Wpisz 'amx_restrict list' po wiecej specyficznych wartosci +REST_WEAP = Ogranicz bronie +SAVE_SET = Zapisz ustawienia +CONF_SAV_SUC = Konfiguracja zapisana z powodzeniem +CONF_SAV_FAIL = Blad podczas zapisu konfiguracji + +[nl] +EQ_WE_RES = Uitrusting en wapens zijn verboden +EQ_WE_UNRES = Uitrusting en wapens zijn toegestaan +HAVE_BEEN = zijn +HAS_BEEN = is +RESTRICTED = verboden +UNRESTRICTED = toegestaan +NO_EQ_WE = Kon dat wapen of die uitrusting niet vinden +WEAP_RES = Wapenrestricties +VALUE = waarde +REST_ENTRIES_OF = Entries %i - %i van de %i +REST_USE_MORE = Typ 'amx_restrict list %i' voor meer +REST_USE_BEGIN = Typ 'amx_restrict list 1' voor het begin +REST_CONF_SAVED = Configuratie is bewaard (file "%s") +REST_COULDNT_SAVE = Kon configuratie niet bewaren (file "%s") +REST_CONF_LOADED = Configuratie is geladen (file "%s") +REST_COULDNT_LOAD = Kon configuratie niet laden (file "%s") +COM_REST_USAGE = Typ: amx_restrict <commando> [waarde] +COM_REST_COMMANDS = Commando's: +COM_REST_ON = ^ton - verboden zetten op hele uitrusting +COM_REST_OFF = ^toff - verbod op hele uitrusting verwijderen +COM_REST_ONV = ^ton <waarde> [...] - gespecificeerde restrictie instellen +COM_REST_OFFV = ^toff <waarde> [...] - gespecificeerde restrictie verwijderen +COM_REST_LIST = ^tlist - lijst van uitrustingen en wapens weergeven +COM_REST_SAVE = ^tsave - verbod bewaren +COM_REST_LOAD = ^tload [bestand] - verboden laden [vanuit een bestand] +COM_REST_VALUES = Beschikbare waarden om te verbieden zijn:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Typ 'amx_restrict list' voor meer gespecificeerde waarden +REST_WEAP = Wapens Verbieden +SAVE_SET = Instellingen Bewaren +CONF_SAV_SUC = Configuratie bewaren gelukt +CONF_SAV_FAIL = Configuratie bewaren MISlukt!!! + +[es] +EQ_WE_RES = El equipamiento y las armas han sido restringidas +EQ_WE_UNRES = El equipamiento y las armas han sido permitidas +HAVE_BEEN = han sido +HAS_BEEN = ha sido +RESTRICTED = restringido +UNRESTRICTED = permitido +NO_EQ_WE = No se encontro dicho equipamiento o arma +WEAP_RES = Restriccion de Armas +VALUE = valor +REST_ENTRIES_OF = Entradas %i - %i de %i +REST_USE_MORE = Escribe 'amx_restrict list %i' para mostrar mas +REST_USE_BEGIN = Escribe 'amx_restrict list 1' para volver al principio +REST_CONF_SAVED = La configuracion ha sido guardada (archivo "%s") +REST_COULDNT_SAVE = No se pudo guardar la configuracion (archivo "%s") +REST_CONF_LOADED = La configuracion ha sido cargada (archivo "%s") +REST_COULDNT_LOAD = No se pudo cargar la configuracion (archivo "%s") +COM_REST_USAGE = Uso: amx_restrict <comando> [valor] +COM_REST_COMMANDS = Comandos: +COM_REST_ON = ^ton - establece restricciones en todo el equipamiento +COM_REST_OFF = ^toff - borra las restricciones de todo el equipamiento +COM_REST_ONV = ^ton <valor> [...] - establece la restriccion especificada +COM_REST_OFFV = ^toff <valor> [...] - borra la restriccion especificada +COM_REST_LIST = ^tlist - muestra la lista de equipamiento y armas permitidas +COM_REST_SAVE = ^tsave - guarda las restricciones +COM_REST_LOAD = ^tload [archivo] - carga las restricciones [de un archivo] +COM_REST_VALUES = Valores disponibles para restringir:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Escribe 'amx_restrict list' para mas valores especificos +REST_WEAP = Restringir Armas +SAVE_SET = Guardar Configuracion +CONF_SAV_SUC = Configuracion guardada con exito +CONF_SAV_FAIL = No se pudo guardar la configuracion!!! + +[bp] +EQ_WE_RES = Equipamentos e armas foram limitados +EQ_WE_UNRES = Equipamentos e armas foram ilimitados +HAVE_BEEN = foram +HAS_BEEN = foi +RESTRICTED = limitado +UNRESTRICTED = ilimitado +NO_EQ_WE = Nao pode achar este equipamento ou arma +WEAP_RES = Limitacao de Armas +VALUE = valor +REST_ENTRIES_OF = Entradas %i - %i de %i +REST_USE_MORE = Use 'amx_restrict listando %i' para ver mais +REST_USE_BEGIN = Use 'amx_restrict listando 1' para voltar ao inicio +REST_CONF_SAVED = Configuracao foi salva (arquivo "%s") +REST_COULDNT_SAVE = Nao pode salvar a configuracao (arquivo "%s") +REST_CONF_LOADED = Configuracao foi carregada (arquivo "%s") +REST_COULDNT_LOAD = Nao pode carregar a configuracao (arquivo "%s") +COM_REST_USAGE = Use: amx_restrict <comando> [valor] +COM_REST_COMMANDS = Comandos: +COM_REST_ON = ^ton - limitar todos equipamentos +COM_REST_OFF = ^toff - remover limitacao para todos equipamentos +COM_REST_ONV = ^ton <valor> [...] - configurar limitacao especifica +COM_REST_OFFV = ^toff <valor> [...] - remover limitacao especificada +COM_REST_LIST = ^tlist - lista de exibicao de equipamento e armas disponiveis +COM_REST_SAVE = ^tsave - salvar limitacao +COM_REST_LOAD = ^tload [arquivo] - carregar limitacao [de um arquivo] +COM_REST_VALUES = Valores disponíveis para limitar sao:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Escreva 'amx_restrict list' para mais valores especificos +REST_WEAP = Limitar Armas +SAVE_SET = Salvar configuracoes +CONF_SAV_SUC = Configuracao salva com sucesso +CONF_SAV_FAIL = Configuracao falhou ao salvar!!! + +[cz] +EQ_WE_RES = Vybaveni a zbrane byly omezeny +EQ_WE_UNRES = Vypaveni a zbrane byly opet povoleny +HAVE_BEEN = byly +HAS_BEEN = byl +RESTRICTED = omezen +UNRESTRICTED = omezeny +NO_EQ_WE = Nemuzu najit takove vybaveni nebo zbran +WEAP_RES = Omezeni zbrani +VALUE = hodnota +REST_ENTRIES_OF = Polozky %i - %i z %i +REST_USE_MORE = Napis 'amx_restrict list %i' pro vice +REST_USE_BEGIN = Napis 'amx_restrict list 1' pro zacatek +REST_CONF_SAVED = Konfigurace byla ulozena (soubor "%s") +REST_COULDNT_SAVE = Nemuzu ulozit konfiguraci (soubor "%s") +REST_CONF_LOADED = Konfigurace byla nactena (soubor "%s") +REST_COULDNT_LOAD = Nemuzu nacist konfiguraci (soubor "%s") +COM_REST_USAGE = Pouziti: amx_restrict <command> [value] +COM_REST_COMMANDS = Prikazy: +COM_REST_ON = ^ton - nastavit omezeni na cele vybaveni +COM_REST_OFF = ^toff - znovue povolit cele vybaveni +COM_REST_ONV = ^ton <value> [...] - nastavi speceficke omezeni +COM_REST_OFFV = ^toff <value> [...] - znovu povoli specificke vybaveni nebo zbran +COM_REST_LIST = ^tlist - zobrazi seznam dostupneho vybaveni a zbrani +COM_REST_SAVE = ^tsave - ulozi omezeni +COM_REST_LOAD = ^tload [file] - nacte omezeni [ze souboru] +COM_REST_VALUES = Pouzitelne hodnoty k omezeni jsou:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Napis 'amx_restrict list' pro vice specifikaci +REST_WEAP = Omezeni zbrani +SAVE_SET = Ulozit nastaveni +CONF_SAV_SUC = Konfigurace ulozena +CONF_SAV_FAIL = Konfiguraci se nepovedlo ulozit!!! + +[fi] +EQ_WE_RES = Aseet ja varusteet on kielletty +EQ_WE_UNRES = Aseet ja varusteet on sallittu +HAVE_BEEN = on ollut +HAS_BEEN = on ollut +RESTRICTED = kielletty +UNRESTRICTED = sallittu +NO_EQ_WE = Ei loydetty sellaista asetta/varustetta +WEAP_RES = Aseiden kieltaminen +VALUE = arvo +REST_ENTRIES_OF = Kohdat %i - %i Kaikkiaan %i +REST_USE_MORE = Kirjoita 'amx_restrict list %i' saadaksesi lisatietoa +REST_USE_BEGIN = Kirjoita 'amx_restrict list 1' aloittaaksesi +REST_CONF_SAVED = Saadot tallennettu (tiedosto "%s") +REST_COULDNT_SAVE = Ei voitu tallnentaa saatoja (tiedosto "%s") +REST_CONF_LOADED = Saadot on ladattu (tiedosto "%s") +REST_COULDNT_LOAD = Ei voitu ladata saatotiedostoa (tiedosto "%s") +COM_REST_USAGE = Kaytto: amx_restrict <komento> [arvo] +COM_REST_COMMANDS = Komennot: +COM_REST_ON = ^ton - Aseta kielto koko varustukselle +COM_REST_OFF = ^toff - Poista kielto koko varustukselta +COM_REST_ON = ^ton <arvo> [...] - Aseta maaritetty kielto +COM_REST_OFF = ^toff <value> [...] - Poista maaritelty kielto +COM_REST_LIST = ^tlist - Nayta lista saatavilla olevista aseista ja varusteista +COM_REST_SAVE = ^tsave - Tallenna kiellot +COM_REST_LOAD = ^tload [file] - Lataa kiellot [tiedostosta] +COM_REST_VALUES = Arvot, jotka voi kieltaa, ovat:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Kirjoita 'amx_restrict list' saadaksesi tarkemmat arvot +REST_WEAP = Kiella aseita +SAVE_SET = Tallenna asetukset +CONF_SAV_SUC = Saadot tallennettu onnistuneesti +CONF_SAV_FAIL = Saatojen tallentaminen epaonnistui + +[ls] +EQ_WE_RES = Eq|_|!pm3|\|7 4|\|d w34p0|\|s h4v3 b33|\| r3s7r!c73d +EQ_WE_UNRES = Eq|_|!pm3|\|7 4|\|d w34p0|\|s h4v3 b33|\| |_||\|r3s7r!c73d +HAVE_BEEN = h4v3 b33|\| +HAS_BEEN = h4s b33|\| +RESTRICTED = r3s7r!c73d +UNRESTRICTED = |_||\|r3s7r!c73d +NO_EQ_WE = C0|_|ld|\|'7 f!|\|d s|_|ch 3q|_|!pm3|\|7 0r w34p0|\| +WEAP_RES = W34p0|\|s R3s7r!c7!0|\| +VALUE = v4l|_|3 +REST_ENTRIES_OF = E|\|7r!3s %i - %i 0f %i +REST_USE_MORE = Us3 'amx_restrict list %i' f0r m0r3 +REST_USE_BEGIN = Us3 'amx_restrict list 1' f0r b3g!|\| +REST_CONF_SAVED = C0|\|f!g|_|r47!0|\| h4s b33|\| s4v3d (f!l3 "%s") +REST_COULDNT_SAVE = C0|_|ld|\|'7 s4v3 c0|\|f!g|_|r47!0|\| (f!l3 "%s") +REST_CONF_LOADED = C0|\|f!g|_|r47!0|\| h4s b33|\| l04d3d (f!l3 "%s") +REST_COULDNT_LOAD = C0|_|ld|\|'7 l04d c0|\|f!g|_|r47!0|\| (f!l3 "%s") +COM_REST_USAGE = Us4g3: amx_restrict <command> [value] +COM_REST_COMMANDS = C0mm4|\|ds: +COM_REST_ON = ^ton - s37 r3s7r!c7!0|\| 0|\| wh0l3 3q|_|!pm3|\|7 +COM_REST_OFF = ^toff - r3m0v3 r3s7r!c7!0|\| fr0m wh0l3 3q|_|!pm3|\|7 +COM_REST_ONV = ^ton <value> [...] - s37 sp3c!f!3d r3s7r!c7!0|\| +COM_REST_OFFV = ^toff <value> [...] - r3m0v3 sp3c!f!3d r3s7r!c7!0|\| +COM_REST_LIST = ^tlist - d!spl4y l!s7 0f 4v4!l4bl3 3q|_|!pm3|\|7 4|\|d w34p0|\|s +COM_REST_SAVE = ^tsave - s4v3 r3s7r!c7!0|\| +COM_REST_LOAD = ^tload [file] - l04d r3s7r!c7!0|\| [fr0m 4 f!l3] +COM_REST_VALUES = Av4!l4bl3 v4l|_|3s 70 r3s7r!c7 4r3:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Typ3 'amx_restrict list' f0r m0r3 sp3c!f!3d v4l|_|3s +REST_WEAP = R3s7r!c7 W34p0|\|s +SAVE_SET = S4v3 s377!|\|gs +CONF_SAV_SUC = C0|\|f!g|_|r47!0|\| s4v3d s|_|cc3ssf|_|lly +CONF_SAV_FAIL = C0|\|f!g|_|r47!0|\| s4v!|\|g f4!l3d!!! + +[bg] +EQ_WE_RES = Orajiata ne sa pozvoleni +EQ_WE_UNRES = Orajiata sa pozvoleni +HAVE_BEEN = sa +HAS_BEEN = sa +RESTRICTED = ne sa pozvoleni +UNRESTRICTED = sa pozvoleni +NO_EQ_WE = Neuspq da nameri orajieto +WEAP_RES = Orajiata ne sa pozvoleni +VALUE = status +REST_ENTRIES_OF = Vkarani %i - %i ot %i +REST_USE_MORE = Ispolzvai 'amx_restrict list %i' za pove4e +REST_USE_BEGIN = Ispolzvai 'amx_restrict list 1' za na4alo +REST_CONF_SAVED = Configuraciqta be6e zapametena (file "%s") +REST_COULDNT_SAVE = Cofiguraciqta nebe6e zapametena (file "%s") +REST_CONF_LOADED = Configuraciqta be6e zaredena (file "%s") +REST_COULDNT_LOAD = Configuraciqta ne be6e zaredena (file "%s") +COM_REST_USAGE = Ispolzvai: amx_restrict <comanda> [value] +COM_REST_COMMANDS = Comandi: +COM_REST_ON = ^ton - pusni zabrana na vsi4kite orajia +COM_REST_OFF = ^toff - mahni zabranata na vsi4kite orajia +COM_REST_ONV = ^ton <value> [...] - nastroi specifi4na zabrana +COM_REST_OFFV = ^toff <value> [...] - mahni specifi4nata zabrana +COM_REST_LIST = ^tlist - Pokaji list na pozvoleni orajiq +COM_REST_SAVE = ^tsave - zapameti zabranata +COM_REST_LOAD = ^tload [file] - zaredi zabrana [ot file] +COM_REST_VALUES = Pozvoleni orajia za zabrana sa:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Napi6i 'amx_restrict list' za po specifi4ni orajia +REST_WEAP = Zabrani Orajia +SAVE_SET = Zapameti nastroikite +CONF_SAV_SUC = Configuraciqta be6e zapametena +CONF_SAV_FAIL = Configuraciqta ne be6e zapametena!!! + +[ro] +EQ_WE_RES = Echipamentul si armele au fost restrictionate +EQ_WE_UNRES = Restrictia echipamentului si armelor a fost inlaturata +HAVE_BEEN = au fost +HAS_BEEN = a fost +RESTRICTED = adaugate restrictii +UNRESTRICTED = inlaturate restrictile +NO_EQ_WE = Nu a putut fi gasit acest echipament sau arma +WEAP_RES = Restrictii Arme +VALUE = valoare +REST_ENTRIES_OF = Intrari %i - %i din %i +REST_USE_MORE = Scrie 'amx_restrict list %i' pentru mai mult +REST_USE_BEGIN = Scrie 'amx_restrict list 1' pentru inceput +REST_CONF_SAVED = Configuratia a fost salvata (fisier "%s") +REST_COULDNT_SAVE = Nu s-a putut salva configuratia (fisier "%s") +REST_CONF_LOADED = Configuratia a fost incarcata (fisier "%s") +REST_COULDNT_LOAD = Nu s-a putut incarca configuratia (file "%s") +COM_REST_USAGE = Folosire: amx_restrict <comanda> [valoare] +COM_REST_COMMANDS = Comenzi: +COM_REST_ON = ^ton - adauga restrictii pe tot echipamentul +COM_REST_OFF = ^toff - inlatura restrictile de pe tot echipamentul +COM_REST_ONV = ^ton <valoare> [...] - adauga restrictile specificate +COM_REST_OFFV = ^toff <valoare> [...] - inlatura restrictile specificate +COM_REST_LIST = ^tlist - afisare lista cu echipamente si arme +COM_REST_SAVE = ^tsave - salveaza restrictii +COM_REST_LOAD = ^tload [fisier] - incarca restrictii [dintr-un fisier] +COM_REST_VALUES = Valorile valabile pentru restrictionare sunt:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Scrie 'amx_restrict list' pentru mai multe valori specificate +REST_WEAP = Restrictioneaza arme +SAVE_SET = Salveaza setari +CONF_SAV_SUC = Configuratia a fost salvata cu succes +CONF_SAV_FAIL = Salvarea configuratiei a esuat!!! + +[hu] +EQ_WE_RES = Felszereles es a fegyverek felfugesztve +EQ_WE_UNRES = Felszereles es a fegyverek engedelyezve +HAVE_BEEN = lettek +HAS_BEEN = lettek +RESTRICTED = felfiggesztve +UNRESTRICTED = engedelyezve +NO_EQ_WE = Nem lehet talalni ezt a fegyvert +WEAP_RES = Fegyver felfuggesztes +VALUE = ertek +REST_ENTRIES_OF = Entries %i - %i of %i +REST_USE_MORE = Irj 'amx_restrict list %i' a tobbhoz +REST_USE_BEGIN = Irj 'amx_restrict list 1' az elsohoz +REST_CONF_SAVED = Beallitas elmentve (file "%s") +REST_COULDNT_SAVE = Nem lehet menteni (file "%s") +REST_CONF_LOADED = Beallitas betoltve (file "%s") +REST_COULDNT_LOAD = Nem lehet betolteni a beallitast(file "%s") +COM_REST_USAGE = Usage: amx_restrict <command> [value] +COM_REST_COMMANDS = Parancsok: +COM_REST_ON = ^ton - set restriction on whole equipment +COM_REST_OFF = ^toff - remove restriction from whole equipment +COM_REST_ONV = ^ton <value> [...] - set specified restriction +COM_REST_OFFV = ^toff <value> [...] - remove specified restriction +COM_REST_LIST = ^tlist - az elerheto fegyverek mutatasa +COM_REST_SAVE = ^tsave - felfuggesztes mentese +COM_REST_LOAD = ^tload [file] - felfuggesztes botoltese [filebol] +COM_REST_VALUES = Available values to restrict are:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Irj 'amx_restrict list' a tobbi ertekhez +REST_WEAP = Felfiggesztett fegyverek +SAVE_SET = Beallitasok mentese +CONF_SAV_SUC = Beallitasok sikeresen elmentve +CONF_SAV_FAIL = Nem sikerult a mentes!!! + +[lt] +EQ_WE_RES = Amunicija ir ginklai buvo uzdrausti +EQ_WE_UNRES = Amunicija ir ginklai buvo neuzdrausti +HAVE_BEEN = buvo +HAS_BEEN = buvo +RESTRICTED = uzdrausti +UNRESTRICTED = neuzdrausti +NO_EQ_WE = Negali rasti tiek amunicijos ar ginklu +WEAP_RES = Ginklu uzdraudimas +VALUE = verte +REST_ENTRIES_OF = Irasai %i - %i is %i +REST_USE_MORE = Naudok 'amx_restrict sarasa %i' del daugiau info +REST_USE_BEGIN = Naudok 'amx_restrict 1' kad pradetum +REST_CONF_SAVED = Konfiguracija issaugota (failas "%s") +REST_COULDNT_SAVE = Negali issaugoti konfigo (failas "%s") +REST_CONF_LOADED = Konfiguracija buvo uzkrauta (failas "%s") +REST_COULDNT_LOAD = Negali uzkrauti konfigo (failas "%s") +COM_REST_USAGE = Naudojimas: amx_restrict <komanda> [skaicius] +COM_REST_COMMANDS = Komandos: +COM_REST_ON = ^tijungti - nustatyti draudimus ant visos amunicijos +COM_REST_OFF = ^tisjungti - pasalinti draudimus visai amunicijai +COM_REST_ONV = ^tijungti <skaicius> [...] - nustatyti specialu draudima +COM_REST_OFFV = ^tisjungti <skaicius> [...] - nuimti specialu draudima +COM_REST_LIST = ^tsarasas - parodyti sarasa prieinamos amunicijos ir ginkluotes +COM_REST_SAVE = ^tissaugoti - issaugoti draudima +COM_REST_LOAD = ^tuzkrauti [failas] - uzkrauti draudima [is failo] +COM_REST_VALUES = Galimi variantai draudimui yra:^nsaudmenys, apranga, pistoletai, vincesteriai, paprasti automatai, automatai, kulkosvaidis +COM_REST_TYPE = Rasyk 'amx_restrict list' del daugiau galimu variantu +REST_WEAP = Uzdrausti ginklus +SAVE_SET = Issaugoti nustatymus +CONF_SAV_SUC = Konfiguracijos issaugotos +CONF_SAV_FAIL = Konfiguracijos neissaugotos!!! + +[sk] +EQ_WE_RES = Vybavenie a zbrane boli obmedzene +EQ_WE_UNRES = Vybavenie a zbrane boli opat povolene +HAVE_BEEN = boli +HAS_BEEN = bol +RESTRICTED = obmedzeny +UNRESTRICTED = obmedzene +NO_EQ_WE = Nemozem najst take vybavenie alebo zbran +WEAP_RES = Obmedzenie zbrani +VALUE = hodnota +REST_ENTRIES_OF = Polozky %i - %i z %i +REST_USE_MORE = Napis 'amx_restrict list %i' pre viac +REST_USE_BEGIN = Napis 'amx_restrict list 1' pre zaciatok +REST_CONF_SAVED = Konfiguracia bola ulozena (subor "%s") +REST_COULDNT_SAVE = Nemozem ulozit konfiguraciu (subor "%s") +REST_CONF_LOADED = Konfiguracia bola nacitana (subor "%s") +REST_COULDNT_LOAD = Nemozem nacitat konfiguraciu (subor "%s") +COM_REST_USAGE = Pouzitie: amx_restrict <command> [value] +COM_REST_COMMANDS = Prikazy: +COM_REST_ON = ^ton - nastavit obmedzenie na cele vybavenie +COM_REST_OFF = ^toff - znovu povolit cele vybavenie +COM_REST_ONV = ^ton <value> [...] - nastavi specificke obmedzenie +COM_REST_OFFV = ^toff <value> [...] - znovu povoli specificke vybavenie alebo zbran +COM_REST_LIST = ^tlist - zobrazi zoznam dostupneho vybavenia a zbrani +COM_REST_SAVE = ^tsave - ulozi obmedzenia +COM_REST_LOAD = ^tload [file] - nacita obmedzenia [zo suboru] +COM_REST_VALUES = Pouzitelne hodnoty k obmedzeniu su:^nammo, equip, pistol, shotgun, sub, rifle, machine +COM_REST_TYPE = Napis 'amx_restrict list' pre viac specifikacii +REST_WEAP = Obmedzenie zbrani +SAVE_SET = Ulozit nastavenie +CONF_SAV_SUC = Konfiguracia ulozena +CONF_SAV_FAIL = Konfiguraciu sa nepodarilo ulozit!!! + +[mk] +EQ_WE_RES = Opremata i oruzjeto se celosno zabraneti +EQ_WE_UNRES = Opremata i oruzjeto se oslobodeni od zabranata +HAVE_BEEN = bese +HAS_BEEN = bese +RESTRICTED = zabraneto +UNRESTRICTED = orizjeto moze slobodno da se koristi +NO_EQ_WE = Ne moze da se najde takva oprema ili oruzje +WEAP_RES = Zabrana za oprema i oruzja +VALUE = vrednost +REST_ENTRIES_OF = Vrednosti %i - %i od %i +REST_USE_MORE = Napisi 'amx_restrict list %i' za uste mozni vrednosti +REST_USE_BEGIN = Napisi 'amx_restrict list 1' za od pocetok +REST_CONF_SAVED = Listata so zabraneti oruzja e uspesno zacuvana (fajl "%s") +REST_COULDNT_SAVE = Listata so zabraneti oruzja ne e zacuvana (fajl "%s") +REST_CONF_LOADED = Listata so zabraneti oruzja e uspesno vcitana (fajl "%s") +REST_COULDNT_LOAD = Listata so zabraneti oruzja ne e vcitana (fajl "%s") +COM_REST_USAGE = Koristenje: amx_restrict <komanda> [vrednost] +COM_REST_COMMANDS = Komandi: +COM_REST_ON = ^ton - postavi zabrana za cela oprema +COM_REST_OFF = ^toff - trgni ja zabranata za cela oprema +COM_REST_ONV = ^ton <vrednost> [...] - postavi zabrana za dadeno oruzje +COM_REST_OFFV = ^toff <vrednost> [...] - trgni ja zabranata za dadenoto oruzje +COM_REST_LIST = ^tlist - prikazi ja listata so mozni oruzja i oprema +COM_REST_SAVE = ^tsave - zacuvaj gi zabranite +COM_REST_LOAD = ^tload [fajl] - vcitaj zabrani [od fajl] +COM_REST_VALUES = Primer za mozni vrednosti za zabrana se:^nammo, equip, pistol, shotgun, sub, rifle, machine itn... +COM_REST_TYPE = Napisi 'amx_restrict list' za site mozni vrednosti +REST_WEAP = Zabrana za oprema i oruzja +SAVE_SET = Zacuvaj gi podesuvanjata +CONF_SAV_SUC = Listata so zabraneti oruzja e uspesno zacuvana +CONF_SAV_FAIL = Listata so zabraneti oruzja ne e zacuvana!!! diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/scrollmsg.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/scrollmsg.txt new file mode 100644 index 0000000..28aee73 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/scrollmsg.txt @@ -0,0 +1,99 @@ +[en] +MIN_FREQ = Minimal frequency for this message is %d seconds +MSG_FREQ = Scrolling message displaying frequency: %d:%02d minutes +MSG_DISABLED = Scrolling message disabled + +[de] +MIN_FREQ = Minimale Frequenz fuer diese Anzeige sind %d Sekunden +MSG_FREQ = Scrollnachricht Anzeigefrequenz: %d:%02d Minuten +MSG_DISABLED = Scrollnachrichten abgeschaltet + +[sr] +MIN_FREQ = Minimalno vreme prikazivanja za ovu poruku je %d sekundi +MSG_FREQ = Vreme prikazivanja prolazece poruke: %d:%02d minut(a) +MSG_DISABLED = Prolazeca poruka iskljucna + +[tr] +MIN_FREQ = Bu mesajin en az frekansi %d saniyedir +MSG_FREQ = Kaydirilan mesaj gosterme frekansi: %d:%02d dakika +MSG_DISABLED = Kaydirilan mesaj kullanimda degil + +[fr] +MIN_FREQ = La frequence minimale pour ce message est de %d secondes +MSG_FREQ = La frequence d'affichage des messages deroulants est de: %d:%02d minutes +MSG_DISABLED = Les messages deroulants sont desactives + +[sv] +MIN_FREQ = Minimefrekvens f'o'r detta meddelande e %d sekunder +MSG_FREQ = Frekvens f'o'r rullande meddelanden: %d:%02d minuter +MSG_DISABLED = Rullande meddelande avst'a'ngt + +[da] +MIN_FREQ = Minimum frekvens for denne besked er %d sekunder +MSG_FREQ = Rullende besked visnings frekvens: %d:%02d minutter +MSG_DISABLED = Rullende besked slaaet fra + +[pl] +MIN_FREQ = Minimalna czestotliwosc dla tej wiadomosci to %d sekund +MSG_FREQ = Czestotliwosc wyswietlania wiadomosci: %d:%02d minut +MSG_DISABLED = Wiadomosci przesuwane wylaczone + +[nl] +MIN_FREQ = Minimale frequentie voor dit bericht is %d seconden +MSG_FREQ = Scrollend bericht frequentie: %d:%02d minuten +MSG_DISABLED = Scrollend bericht uitgeschakeld + +[es] +MIN_FREQ = La frecuencia minima para este mensaje es de %d segundos +MSG_FREQ = Frecuencia de aparicion del mensaje rotatorio: %d:%02d minutos +MSG_DISABLED = Mensaje rotatorio desactivado + +[bp] +MIN_FREQ = Frequencia minima para esta mensagem e de %d segundos +MSG_FREQ = Mensagem Rolante sera exibida na frequencia de: %d:%02d minutos +MSG_DISABLED = Mensagem Rolante desabilitada + +[cz] +MIN_FREQ = Minimalalni frekvence teto zpravy je %d sekund +MSG_FREQ = Frekvence zobrazeni skrolujici zpravy: %d:%02d minut +MSG_DISABLED = Skrolovaci zpravy vyple + +[fi] +MIN_FREQ = Minimitaajuus talle viestille on %d sekuntia +MSG_FREQ = Vierivan tekstin taajuus on: %d:%02d minuuttia +MSG_DISABLED = Vieriva teksti poissa kaytosta + +[ls] +MIN_FREQ = M!n!m4| fr3qu3ncy f0r th!s m3ss4ge !s %d s3c0ndz +MSG_FREQ = $cr0||!ng m3ss4g3 d!spl4y!ng fr3qu3ncy: %d:%02d m!nut3z +MSG_DISABLED = |N0T 3NUFF M4N4!| - $cr0||!ng m3ss4g3 d!s4bl3d + +[bg] +MIN_FREQ = Minimalnoto povtarq6to vreme za tova saob6tenie e %d secundi +MSG_FREQ = Scrolling saob6tenieto se pokazva vseki: %d:%02d minuti +MSG_DISABLED = Scrolling saob6tenieto e isklu4eno + +[ro] +MIN_FREQ = Frecventa minima pentru acest mesaj este %d secunde +MSG_FREQ = Frecventa afisarii messajului Rulant: %d:%02d minute +MSG_DISABLED = Mesajul Rulant dezactivat + +[hu] +MIN_FREQ = A minimum ido erre az uzenetre %d perc +MSG_FREQ = Mozgo uzenet: %d:%02d percenkent +MSG_DISABLED = Scrolling uzenet letiltva + +[lt] +MIN_FREQ = Minimalus daznumas siai zinutei yra %d sekundes +MSG_FREQ = Slenkancios zinutes daznumas: %d:%02d minutes +MSG_DISABLED = Slenkancioji zinute isjungta + +[sk] +MIN_FREQ = Minimalna frekvencia tejto spravy je %d sekund +MSG_FREQ = Frekvencia zobrazenia skrolovacej spravy: %d:%02d minut +MSG_DISABLED = Skrolovacie zpravy vypnute + +[mk] +MIN_FREQ = Minimalnoto vreme na prikazuvanje na ovaa poraka e %d sekundi +MSG_FREQ = Vreme za prikazuvanje na leteckite poraki: %d:%02d minuti +MSG_DISABLED = Leteckata poraka e isklucena diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/stats_dod.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/stats_dod.txt new file mode 100644 index 0000000..b8a7f12 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/stats_dod.txt @@ -0,0 +1,1895 @@ +[en] +WHOLEBODY = whole body +HEAD = head +CHEST = chest +STOMACH = stomach +LEFTARM = leftarm +RIGHTARM = rightarm +LEFTLEG = leftleg +RIGHTLEG = rightleg +MULTI_MSG = Multi-Kill! %s^nwith %d kills (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^nwith %d kills (%d hs) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^nwith %d kills (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^nwith %d kills (%d hs) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^nwith %d kills (%d hs) +MONSTER_MSG = %s IS A MONSTER!^nwith %d kills (%d hs) +GODLIKE_MSG = %s IS GODLIKE!!!!^nwith %d kills (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG1 = %s sliced and diced %s +KNIFE_MSG2 = %s pulled out knife and gutted %s +KNIFE_MSG3 = %s sneaks carefully behind and knifed %s +KNIFE_MSG4 = %s knived %s +HE_MSG1 = %s sends a little gift to %s +HE_MSG2 = %s throws a small present to %s +HE_MSG3 = %s made a precision throw to %s +HE_MSG4 = %s got a big explosion for %s +SHE_MSG1 = %s detonated himself with a grenade +SHE_MSG2 = %s trys the effect of a grenade +SHE_MSG3 = %s kicked a grenade into his own ass +SHE_MSG4 = %s explodes! +HEAD_MSG1 = $kn killed $vn with a well^nplaced shot to the head! +HEAD_MSG2 = $kn removed $vn's^nhead with the $wn +HEAD_MSG3 = $kn turned $vn's head^ninto pudding with the $wn +HEAD_MSG4 = $vn got pwned by $kn +HEAD_MSG5 = $vn's head has been^nturned into red jello +HEAD_MSG6 = $kn has superb aim with the $wn,^nas $vn well knows. +HEAD_MSG7 = $vn's head stayed in $kn's^ncrosshairs a bit too long... +DOUBLE_MSG1 = Wow! %s made a double kill !!! +DOUBLE_MSG2 = Incredible! %s made a triple kill !!! +DOUBLE_MSG3 = Amazing! %s made %d kills at once !!! +MORTAR_MSG1 = %s set up mortar well and blow out %s +MORTAR_MSG2 = %s made a long range kill to %s +KILL_INFO1 = %s killed you with %s^nfrom distance of %.2f meters.^n +KILL_INFO2 = He did %d damage to you with %d hit(s)^nand still has %dhp.^n +KILL_INFO3 = You did %d damage to him with %d hit(s).^n +KILL_INFO4 = He hits you in:^n%s^n +STILL_HAS = %s still has %dhp +NO_KILLER = You have no killer... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Attackers: +VICTIMS = Victims: +DMG = dmg +HIT_S = hit(s) +YOU_HIT = You hit %s in: +SERVER_STATS = Server Stats +SHOW_STATS = Show stats +SHOW_RANK = Show rank +TA_MSG = %s attacked a teammate +TK_MSG = %s killed a teammate ! +NADE_CAUGHT = Wow! %s caught enemy grenade! +NADE_FAILEDTK = Oops.. %s killed you trying to throw back enemy grenade.. +NADE_FAILED = %s failed to throw back enemy grenade.. +NADE_MASTER = OMG! %s is grenade master !!! +DISABLED_MSG = Server has disabled that option +MOST_KILLS = Most kills +KILL = kill +KILLS = kills +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Best Score +POINTS = points +MOST_DAMAGE = Most damage +DAMAGE = damage +HIT = hit +HITS = hits +M_KILLS = Kills: +M_DEATHS = Deaths: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Hits: +M_SHOTS = Shots: +M_HS = HS: +M_WEAPON = Weapon: +M_DAMAGE = Damage: +M_NICK = Nick: +M_YOUR_RANK_IS = Your rank is +M_THEIR_RANK_IS = Their rank is +M_OF = of + +[de] +WHOLEBODY = Koerper +HEAD = Kopf +CHEST = Oberkoerper +STOMACH = Bauch +LEFTARM = linker Arm +RIGHTARM = rechter Arm +LEFTLEG = linkes Bein +RIGHTLEG = rechtes Bein +MULTI_MSG = Multi-Kill! %s^nmit %d Kills (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^nmit %d Kills (%d hs) +SPREE_MSG = %s IST IN EINER KILLER-ORGIE!!!^nmit %d Kills (%d hs) +RAMPAGE_MSG = RANDALIERER!!! %s^nmit %d Kills (%d hs) +UNSTOPPABLE_MSG = %s IST NICHT ZU STOPPEN!!!^nmit %d Kills (%d hs) +MONSTER_MSG = %s IST EIN MONSTER!^nmit %d Kills (%d hs) +GODLIKE_MSG = %s IST GODLIKE!!!!^nmit %d Kills (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IST IN EINER KILLER-ORGIE!!! +RAMPAGE_SMALL = %s: RANDALIERER!!! +UNSTOPPABLE_SMALL = %s IST NICHT ZU STOPPEN!! +MONSTER_SMALL = %s IST EIN MONSTER! +GODLIKE_SMALL = %s IST GODLIKE!!! +KNIFE_MSG_1 = %s hat %s geschnitten und gewuerfelt +KNIFE_MSG_2 = %s hat sein Messer gezueckt und %s ausgeweidet +KNIFE_MSG_3 = %s hat sich angeschlichen und %s gemessert +KNIFE_MSG_4 = %s messerte und verstuemmelte %s +HE_MSG_1 = %s sendet ein kleines Geschenk an %s +HE_MSG_2 = %s wirft ein Knallbonbon zu %s +HE_MSG_3 = %s macht einen Praezisionswurf zu %s +HE_MSG_4 = %s schickte eine dicke Explosion an %s +SHE_MSG_1 = %s sprengte sich selbst mit einer Granate +SHE_MSG_2 = %s untersuchte die Auswirkungen ^neiner Granate an sich selbst... +SHE_MSG_3 = %s schluckte eine Granate! +SHE_MSG_4 = %s explodierte! +HEAD_MSG_1 = $kn killte $vn mit einem ^nplazierten Schuss in den Kopf! +HEAD_MSG_2 = $kn entfernte den Kopf von $vn^nmit einem Praezisionsschuss. +HEAD_MSG_3 = $kn verwandelte den Kopf ^nvon $vn in Pudding. +HEAD_MSG_4 = $vn siegte ueber $kn durch eine Kopfschuss. +HEAD_MSG_5 = $vn's Kopf wurde in der Gegend verteilt +HEAD_MSG_6 = $kn hat einen super ^nTreffer gelandet,das weiss ^n$vn nun auch. +HEAD_MSG_7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn... +DOUBLE_MSG1 = Wow! %s machte einen Doppelkill!!! +DOUBLE_MSG2 = Unglaublich! %s macht einen dreifachen Kill !!! +DOUBLE_MSG3 = Ueberrascung! %s macht %d Kills auf einmal !!! +MORTAR_MSG1 = %s stellte den Moerser auf und schickte %s in den Himmel. +MORTAR_MSG2 = %s killte %s ueber eine lange Distanz. +KILL_INFO1 = %s killte dich mit der %s^nueber eine Entfernung von %.2f Meter.^n +KILL_INFO2 = Er machte %d Schaden bei dir mit %d Treffern ^nund hat noch %dHP.^n +KILL_INFO3 = Du machtest %d Schaden bei ihm mit %d Treffern.^n +KILL_INFO4 = Du hast ihn getroffen in den/das:^n%s^n +STILL_HAS = %s hat noch %dHP +NO_KILLER = Du hast keinen Killer... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Angreifer: +VICTIMS = Gewinner: +DMG = Schaden +HIT_S = Treffer +YOU_HIT = Du trafst %s in: +SERVER_STATS = Server Statistik +SHOW_STATS = Statistik anzeigen +SHOW_RANK = Rang anzeigen +TA_MSG = %s schiesst auf einen Kameraden +TK_MSG = %s toetete einen Kameraden! +NADE_CAUGHT = Wow! %s faengt eine gegnereische Granate! +NADE_FAILEDTK = Oops.. %s killte dich bei dem Versuch, die Granate zurueckzuwerfen.. +NADE_FAILED = %s konnte feindliche Granate nicht zurück werfen. +NADE_MASTER = OMG! %s ist der Meister der Granaten !!! +DISABLED_MSG = Server hat diese Option deaktiviert. +MOST_KILLS = Meisten Kills +KILL = Kill +KILLS = Kills +HEADSHOT = Headshot +HEADSHOTS = Headshots +BEST_SCORE = Die beste Note +POINTS = Punkte +MOST_DAMAGE = Den meisten Schaden +DAMAGE = Schaden +HIT = Treffer +HITS = Treffer +M_KILLS = Kills: +M_DEATHS = Deaths: +M_SCORE = Note: +M_TKS = TKs: +M_HITS = Treffer: +M_SHOTS = Schuesse: +M_HS = HS: +M_WEAPON = Waffe: +M_DAMAGE = Schaden: +M_NICK = Name: +M_YOUR_RANK_IS = Dein Rang ist +M_THEIR_RANK_IS = Sein Rang ist +M_OF = von + +[sr] +WHOLEBODY = celo telo +HEAD = glava +CHEST = grudi +STOMACH = stomak +LEFTARM = leva ruka +RIGHTARM = desna ruka +LEFTLEG = leva noga +RIGHTLEG = desna noga +MULTI_MSG = Multi-Kill! %s^nsa %d ubistava (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^nsa %d ubistava (%d hs) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^nwith %d kills (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^nwith %d kills (%d hs) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^nwith %d kills (%d hs) +MONSTER_MSG = %s IS A MONSTER!^nwith %d kills (%d hs) +GODLIKE_MSG = %s IS GODLIKE!!!!^nwith %d kills (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG1 = %s sliced and diced %s +KNIFE_MSG2 = %s pulled out knife and gutted %s +KNIFE_MSG3 = %s sneaks carefully behind and knifed %s +KNIFE_MSG4 = %s knived %s +HE_MSG1 = %s sends a little gift to %s +HE_MSG2 = %s throws a small present to %s +HE_MSG3 = %s made a precision throw to %s +HE_MSG4 = %s got a big explosion for %s +SHE_MSG1 = %s detonated himself with a grenade +SHE_MSG2 = %s trys the effect of a grenade +SHE_MSG3 = %s kicked a grenade into his own ass +SHE_MSG4 = %s explodes! +HEAD_MSG1 = $kn killed $vn with a well^nplaced shot to the head! +HEAD_MSG2 = $kn removed $vn's^nhead with the $wn +HEAD_MSG3 = $kn turned $vn's head^ninto pudding with the $wn +HEAD_MSG4 = $vn got pwned by $kn +HEAD_MSG5 = $vn's head has been^nturned into red jello +HEAD_MSG6 = $kn has superb aim with the $wn,^nas $vn well knows. +HEAD_MSG7 = $vn's head stayed in $kn's^ncrosshairs a bit too long... +DOUBLE_MSG1 = Wow! %s made a double kill !!! +DOUBLE_MSG2 = Incredible! %s made a triple kill !!! +DOUBLE_MSG3 = Amazing! %s made %d kills at once !!! +MORTAR_MSG1 = %s set up mortar well and blow out %s +MORTAR_MSG2 = %s made a long range kill to %s +KILL_INFO1 = %s killed you with %s^nfrom distance of %.2f meters.^n +KILL_INFO2 = He did %d damage to you with %d hit(s)^nand still has %dhp.^n +KILL_INFO3 = You did %d damage to him with %d hit(s).^n +KILL_INFO4 = He hits you in:^n%s^n +STILL_HAS = %s still has %dhp +NO_KILLER = You have no killer... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Attackers: +VICTIMS = Victims: +DMG = dmg +HIT_S = hit(s) +YOU_HIT = You hit %s in: +SERVER_STATS = Server Stats +SHOW_STATS = Show stats +SHOW_RANK = Show rank +TA_MSG = %s attacked a teammate +TK_MSG = %s killed a teammate ! +NADE_CAUGHT = Wow! %s catched enemy grenade! +NADE_FAILEDTK = Oops.. %s killed you trying to throw back enemy grenade.. +NADE_FAILED = %s failed to throw back enemy grenade.. +NADE_MASTER = OMG! %s is grenade master !!! +DISABLED_MSG = Server has disabled that option +MOST_KILLS = Most kills +KILL = kill +KILLS = kills +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Best Score +POINTS = points +MOST_DAMAGE = Most damage +DAMAGE = damage +HIT = hit +HITS = hits +M_KILLS = Kills: +M_DEATHS = Deaths: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Hits: +M_SHOTS = Shots: +M_HS = HS: +M_WEAPON = Weapon: +M_DAMAGE = Damage: +M_NICK = Nick: +M_YOUR_RANK_IS = Your rank is +M_THEIR_RANK_IS = Their rank is +M_OF = of + +[tr] +WHOLEBODY = tum vucut +HEAD = kafa +CHEST = dos +STOMACH = migde +LEFTARM = sol kol +RIGHTARM = sag kol +LEFTLEG = sol bacak +RIGHTLEG = sag bacak +MULTI_MSG = Muthis! %s^nkullandigi %d oldurdugu (%d hs) +ULTRA_MSG = Super!!! %s^nkullandigi %d oldurdugu (%d hs) +SPREE_MSG = %s OLUM SACIYOR!!!^nkullandigi %d oldurdugu (%d hs) +RAMPAGE_MSG = DAGITIYOR!!! %s^nkullandigi %d oldurdugu (%d hs) +UNSTOPPABLE_MSG = %s DURDURULMAZ!!!^nkullandigi %d oldurdugu (%d hs) +MONSTER_MSG = %s YARATIK!^nwith %d kills (%d hs) +GODLIKE_MSG = %s TANRI GUCUNDE!!!!^nwith %d kills (%d hs) +MULTI_SMALL = %s: Muthis! +ULTRA_SMALL = %s: Super!!! +SPREE_SMALL = %s OLUM SACIYOR!!! +RAMPAGE_SMALL = %s: DAGITIYOR!!! +UNSTOPPABLE_SMALL = %s DURDURULMAZ!!! +MONSTER_SMALL = %s YARATIK! +GODLIKE_SMALL = %s TANRI GUCUNDE!!! +KNIFE_MSG1 = %s kesdi parcaladi %s +KNIFE_MSG2 = %s bicagini cekdi ve yardi %s +KNIFE_MSG3 = %s sezdirmeden arkadan geldi ve kesdi %s +KNIFE_MSG4 = %s bicakladi %s +HE_MSG1 = %s bir hediye yolladi %s +HE_MSG2 = %s bir paket gonderdi %s +HE_MSG3 = %s dort dortluk atis yapdi %s +HE_MSG4 = %s buyuk bir patlama olusdurdu %s +SHE_MSG1 = %s kendini havaya ucurdu +SHE_MSG2 = %s bombanin gucunu kendinde denedi +SHE_MSG3 = %s kendini parim parca etdi +SHE_MSG4 = %s patladi! +HEAD_MSG1 = $kn oldurdu $vn kullandigi^ntam kafa isabeti ile! +HEAD_MSG2 = $kn yok etdi kafasini $vn'in^nkullandigi $wn +HEAD_MSG3 = $kn kafasini $vn'in^nrecele cevirdi bu silah ile $wn +HEAD_MSG4 = $vn arkadasi harcadi $kn +HEAD_MSG5 = $vn'in kafasini^nkirmizi muhallebiye cevirdi +HEAD_MSG6 = $kn cok super bir atisci $wn,^n arkadasin $vn bildigi gibi. +HEAD_MSG7 = $vn'in kafasini $kn's^nnamlida fazla bekletdi... +DOUBLE_MSG1 = Wow! %s bir tas ile iki kus !!! +DOUBLE_MSG2 = Inanilmaz! %s uc kisi birden oldurdu !!! +DOUBLE_MSG3 = Muthis! %s tam %d kisi birden oldurdu !!! +MORTAR_MSG1 = %s bombayi tam hazirladi ve patlatdi %s +MORTAR_MSG2 = %s uzun mesafeli oldurdu %s +KILL_INFO1 = %s sizi oldurdu %s^nmesafe %.2f metre.^n +KILL_INFO2 = onun verdigi zarar %d vurdugu %d ^nve halen %dhp.^n +KILL_INFO3 = sizin verdiginiz zarar %d vurdugunuz %d vurus(lar).^n +KILL_INFO4 = sizi isabetledigi yerler:^n%s^n +STILL_HAS = %s halen bu kadar gucu var %dhp +NO_KILLER = Sizi olduren yok... +TOPX = Top %d +FFIRE_IS = Dost atesi: +ATTACKERS = Saldiranlar: +VICTIMS = Magdurlar: +DMG = zarar +HIT_S = vurdugunuz(lar) +YOU_HIT = sizin vurdugunuz %s: +SERVER_STATS = Server statistigi +SHOW_STATS = Statistigi goster +SHOW_RANK = Siralamayi goster +TA_MSG = %s Takim arkadasina ates etdi +TK_MSG = %s Takim arkadasini oldurdu ! +NADE_CAUGHT = Wow! %s Dusmanin bombasini yakaladi! +NADE_FAILEDTK = Vay be.. %s sizi oldurdu bombayi geri atayim derken.. +NADE_FAILED = %s malesef bombayi geri atamadi.. +NADE_MASTER = HAYRET! %s el bombasi uzmani !!! +DISABLED_MSG = Server o cvar'i kullanmiyor +MOST_KILLS = En fazla olduren +KILL = oldurdugu +KILLS = olduren +HEADSHOT = kafa vurusu +HEADSHOTS = kafa vuruslari +BEST_SCORE = En iyi skor +POINTS = puan(lar) +MOST_DAMAGE = En fazla zarar +DAMAGE = zarar +HIT = vurus +HITS = vurus(lar) +M_KILLS = oldurdugu: +M_DEATHS = oldugunuz: +M_SCORE = Skor: +M_TKS = TK'ler: +M_HITS = vuruslar: +M_SHOTS = kursun: +M_HS = HS'lar: +M_WEAPON = Silah: +M_DAMAGE = Zarar: +M_NICK = Nik: +M_YOUR_RANK_IS = Sizin siralamaniz +M_THEIR_RANK_IS = Onlarin siralamasi +M_OF = Kapali + +[fr] +WHOLEBODY = le corps entier +HEAD = la tete +CHEST = le torse +STOMACH = le ventre +LEFTARM = le bras gauche +RIGHTARM = le bras droit +LEFTLEG = la jambe gauche +RIGHTLEG = la jambe droite +MULTI_MSG = Multi-Kill! %s^navec %d frags (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^navec %d frags (%d hs) +SPREE_MSG = %s EST EN FOLIE MEURTRIERE!!!^navec %d frags (%d hs) +RAMPAGE_MSG = TUEUR EN SERIE!!! %s^navec %d frags (%d hs) +UNSTOPPABLE_MSG = %s NE S'ARRETE PLUS!!!^navec %d kills (%d hs) +MONSTER_MSG = %s EST UN MONSTRE !^navec %d frags (%d hs) +GODLIKE_MSG = %s SE PREND POUR DIEU!!!!^navec %d frags (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s EST EN FOLIE MEURTRIERE!!! +RAMPAGE_SMALL = %s: TUEUR EN SERIE!!! +UNSTOPPABLE_SMALL = %s NE S'ARRETE PLUS!!! +MONSTER_SMALL = %s EST UN MONSTRE! +GODLIKE_SMALL = %s SE PREND POUR DIEU!!! +KNIFE_MSG_1 = %s a emince, et coupe en morceaux %s +KNIFE_MSG_2 = %s a sorti son couteau, et etrippe %s +KNIFE_MSG_3 = %s s'est glisse derriere %s et l'a egorge +KNIFE_MSG_4 = %s a egorge %s +HE_MSG_1 = %s envoie un petit cadeau a %s +HE_MSG_2 = %s lance a %s un cadeau empoisonne +HE_MSG_3 = %s a lancer avec precision sur %s +HE_MSG_4 = %s a fait exploser %s +SHE_MSG_1 = %s vient de s'exploser avec sa Grenade +SHE_MSG_2 = %s tente une experience avec sa Grenade sur lui-meme +SHE_MSG_3 = %s a gobe sa Grenade +SHE_MSG_4 = %s a explose! +HEAD_MSG1 = $kn a tue $vn avec une balle^nbien placee dans la tete! +HEAD_MSG2 = $kn a decapite $vn^navec une seule balle de $wn +HEAD_MSG3 = $kn transforme la tete de $vn^nen puree d'une balle de $wn +DOUBLE_MSG1 = Mortel! %s vient de faire un double kill!!! +DOUBLE_MSG2 = Incroyable! %s vient de faire un triple kill !!! +DOUBLE_MSG3 = Impossible! %s vient de tuer %d personnes en 1 coups !!! +MORTAR_MSG1 = %s ajuste parfaitement son mortier, et explose %s +MORTAR_MSG2 = %s vient de tuer %s a distance +KILL_INFO1 = %s t'a tue avec %s^na une distance de %.2f metres.^n +KILL_INFO2 = Il t'a fait %d points de degat en te touchant %d fois^net il lui reste %dpv.^n +KILL_INFO3 = Tu as fait %d de degats en le touchant %d fois.^n +KILL_INFO4 = Il t'a touche dans:^n%s^n +STILL_HAS = %s a encore %dpv +NO_KILLER = Personne ne t'a tue... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Attaquants: +VICTIMS = Victimes: +DMG = dmg +HIT_S = touche(s) +YOU_HIT = tu touches %s dans: +SERVER_STATS = Stats Serveur +SHOW_STATS = Affiche stats +SHOW_RANK = Affiche classement +TA_MSG = %s attaque un coequipier +TK_MSG = %s a tue un coequipier ! +NADE_CAUGHT = Youpi! %s vient d'attraper une grenade ennemi! +NADE_FAILEDTK = Oups.. %s t'a tue quand tu as essaye de renvoyer une grenade .. +NADE_FAILED = %s viens de rater le lancer d'une grenade ennemi.. +NADE_MASTER = Monstrueux! %s est un maitre grenadier !!! +DISABLED_MSG = Le serveur a desactive cette option +MOST_KILLS = Plus de frags +KILL = kill +KILLS = kills +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Meilleur Score +POINTS = points +MOST_DAMAGE = Plus de points de degat +DAMAGE = points de degat +HIT = touche +HITS = touches +M_KILLS = Frags: +M_DEATHS = Morts: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Touches: +M_SHOTS = Tirs: +M_HS = HS: +M_WEAPON = Arme: +M_DAMAGE = Point de degat: +M_NICK = Pseudo: +M_YOUR_RANK_IS = Tu es classe +M_THEIR_RANK_IS = Son classement est +M_OF = sur + +[sv] +WHOLEBODY = whole body +HEAD = head +CHEST = chest +STOMACH = stomach +LEFTARM = leftarm +RIGHTARM = rightarm +LEFTLEG = leftleg +RIGHTLEG = rightleg +MULTI_MSG = Multi-Kill! %s^nwith %d kills (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^nwith %d kills (%d hs) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^nwith %d kills (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^nwith %d kills (%d hs) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^nwith %d kills (%d hs) +MONSTER_MSG = %s IS A MONSTER!^nwith %d kills (%d hs) +GODLIKE_MSG = %s IS GODLIKE!!!!^nwith %d kills (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG1 = %s sliced and diced %s +KNIFE_MSG2 = %s pulled out knife and gutted %s +KNIFE_MSG3 = %s sneaks carefully behind and knifed %s +KNIFE_MSG4 = %s knived %s +HE_MSG1 = %s sends a little gift to %s +HE_MSG2 = %s throws a small present to %s +HE_MSG3 = %s made a precision throw to %s +HE_MSG4 = %s got a big explosion for %s +SHE_MSG1 = %s detonated himself with a grenade +SHE_MSG2 = %s trys the effect of a grenade +SHE_MSG3 = %s kicked a grenade into his own ass +SHE_MSG4 = %s explodes! +HEAD_MSG1 = $kn killed $vn with a well^nplaced shot to the head! +HEAD_MSG2 = $kn removed $vn's^nhead with the $wn +HEAD_MSG3 = $kn turned $vn's head^ninto pudding with the $wn +HEAD_MSG4 = $vn got pwned by $kn +HEAD_MSG5 = $vn's head has been^nturned into red jello +HEAD_MSG6 = $kn has superb aim with the $wn,^nas $vn well knows. +HEAD_MSG7 = $vn's head stayed in $kn's^ncrosshairs a bit too long... +DOUBLE_MSG1 = Wow! %s made a double kill !!! +DOUBLE_MSG2 = Incredible! %s made a triple kill !!! +DOUBLE_MSG3 = Amazing! %s made %d kills at once !!! +MORTAR_MSG1 = %s set up mortar well and blow out %s +MORTAR_MSG2 = %s made a long range kill to %s +KILL_INFO1 = %s killed you with %s^nfrom distance of %.2f meters.^n +KILL_INFO2 = He did %d damage to you with %d hit(s)^nand still has %dhp.^n +KILL_INFO3 = You did %d damage to him with %d hit(s).^n +KILL_INFO4 = He hits you in:^n%s^n +STILL_HAS = %s still has %dhp +NO_KILLER = You have no killer... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Attackers: +VICTIMS = Victims: +DMG = dmg +HIT_S = hit(s) +YOU_HIT = You hit %s in: +SERVER_STATS = Server Stats +SHOW_STATS = Show stats +SHOW_RANK = Show rank +TA_MSG = %s attacked a teammate +TK_MSG = %s killed a teammate ! +NADE_CAUGHT = Wow! %s catched enemy grenade! +NADE_FAILEDTK = Oops.. %s killed you trying to throw back enemy grenade.. +NADE_FAILED = %s failed to throw back enemy grenade.. +NADE_MASTER = OMG! %s is grenade master !!! +DISABLED_MSG = Server has disabled that option +MOST_KILLS = Most kills +KILL = kill +KILLS = kills +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Best Score +POINTS = points +MOST_DAMAGE = Most damage +DAMAGE = damage +HIT = hit +HITS = hits +M_KILLS = Kills: +M_DEATHS = Deaths: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Hits: +M_SHOTS = Shots: +M_HS = HS: +M_WEAPON = Weapon: +M_DAMAGE = Damage: +M_NICK = Nick: +M_YOUR_RANK_IS = Your rank is +M_THEIR_RANK_IS = Their rank is +M_OF = of + +[da] +WHOLEBODY = Helekrop +HEAD = hoved +CHEST = bryst +STOMACH = mave +LEFTARM = venstrearm +RIGHTARM = hoejrearm +LEFTLEG = venstreben +RIGHTLEG = hoejreben +MULTI_MSG = Multi-Drab! %s^nmed %d drab (%d hs) +ULTRA_MSG = Ultra-Drab!!! %s^nmed %d drab (%d hs) +SPREE_MSG = %s ER PAA DRABS-TUR!!!^nmed %d drab (%d hs) +RAMPAGE_MSG = DRABS-ORGIE!!! %s^nmed %d drab (%d hs) +UNSTOPPABLE_MSG = %s ER USTOPPELIG!!!^nmed %d drab (%d hs) +MONSTER_MSG = %s ER ET MONSTER!^nmed %d drab (%d hs) +GODLIKE_MSG = %s ER GUDDOMMELIG!!!!^nmed %d drab (%d hs) +MULTI_SMALL = %s: Multi-DRAB! +ULTRA_SMALL = %s: Ultra-DRAB!!! +SPREE_SMALL = %s ER PAA DRABS-TUR!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s ER USTOPPELIG!!! +MONSTER_SMALL = %s ER ET MONSTER! +GODLIKE_SMALL = %s ER GUDDOMMELIG!!! +KNIFE_MSG1 = %s skar %s i stumper og stykker +KNIFE_MSG2 = %s trak kniven frem og parterede %s +KNIFE_MSG3 = %s sniger sig forsigtigt og gennemborede %s +KNIFE_MSG4 = %s tog %s med kniv +HE_MSG1 = %s sender en lille gave til %s +HE_MSG2 = %s kaster en lille pakke til %s +HE_MSG3 = %s laver et praecisions kast til %s +HE_MSG4 = %s har en stor eksplosion til %s +SHE_MSG1 = %s detonerede sig selv med en granat +SHE_MSG2 = %s proever effekten af en Granat +SHE_MSG3 = %s sparkede en granat op i sit eget hoved +SHE_MSG4 = %s eksploderer! +HEAD_MSG1 = $kn draebte $vn med et vel^nplaceret skud i hovedet! +HEAD_MSG2 = $kn fjernede $vn's^nhoved med $wn +HEAD_MSG3 = $kn lavede $vn's hoved^ntil budding med $wn +HEAD_MSG4 = $vn blev ejet af $kn +HEAD_MSG5 = $vn's hoved blev^nlavet til roed gele +HEAD_MSG6 = $kn har super sigte med $wn,^nsom $vn har opdaget. +HEAD_MSG7 = $vns hoved blev foran $kn's^nsigtekorn lidt for laenge... +DOUBLE_MSG1 = Wow! %s lavede et dobbelt drab!!! +DOUBLE_MSG2 = Utroligt! %s lavede et trippel drab !!! +DOUBLE_MSG3 = Fantastisk! %s lavede %d drab paa en gang !!! +MORTAR_MSG1 = %s stiller morter op og draeber %s +MORTAR_MSG2 = %s laver et langdistance drab paa %s +KILL_INFO1 = %s draebte dig med %s^npaa en afstand af %.2f meter.^n +KILL_INFO2 = Han gjorde %d skade paa dig med %d traeffer(e)^nog har stadig %dhp.^n +KILL_INFO3 = Du gjorde %d skade paa ham med %d traeffer(e).^n +KILL_INFO4 = Han rammer dig i:^n%s^n +STILL_HAS = %s har stadig %dhp +NO_KILLER = Du har ingen morder... +TOPX = Top %d +FFIRE_IS = Venskablig ild: +ATTACKERS = Angribere: +VICTIMS = Ofre: +DMG = skade +HIT_S = traeffer(e) +YOU_HIT = Du traeffer %s i: +SERVER_STATS = Server Statestik +SHOW_STATS = Vis Statestik +SHOW_RANK = Vis rang +TA_MSG = %s angreb en hold kammerat +TK_MSG = %s draebte en hold kammerat ! +NADE_CAUGHT = Wow! %s greb en af fjendens granater +NADE_FAILEDTK = Ups.. %s drabte dig mens du proevede at kaste en af fjendens granater tilbage.. +NADE_FAILED = %s fejlede i at kaste en af fjendens granater tilbage.. +NADE_MASTER = OMG! %s er granat mester !!! +DISABLED_MSG = Serveren har slaaet den mulighed fra +MOST_KILLS = Flest drab +KILL = drab +KILLS = drab +HEADSHOT = Hovedskud +HEADSHOTS = Hovedskud +BEST_SCORE = Bedste Score +POINTS = point +MOST_DAMAGE = Mest skade +DAMAGE = skade +HIT = traeffer +HITS = traeffere +M_KILLS = Drab: +M_DEATHS = Doedsfald: +M_SCORE = Score: +M_TKS = Hold drab: +M_HITS = Traeffere: +M_SHOTS = Skud: +M_HS = HS: +M_WEAPON = Vaaben: +M_DAMAGE = Skade: +M_NICK = Navn: +M_YOUR_RANK_IS = Din rang er +M_THEIR_RANK_IS = Deres rang er +M_OF = af + +[pl] +WHOLEBODY = wszedzie +HEAD = glowe +CHEST = klatke +STOMACH = brzuch +LEFTARM = lewe ramie +RIGHTARM = prawe ramie +LEFTLEG = lewa noge +RIGHTLEG = prawa noge +MULTI_MSG = Multi-Kill! %s^nz %d zabojstwami (%d w glowe) +ULTRA_MSG = Ultra-Kill!!! %s^nz %d zabojstwami (%d w glowe) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^nz %d zabojstwami (%d w glowe) +RAMPAGE_MSG = RAMPAGE!!! %s^nz %d zabojstwami (%d w glowe) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^nz %d zabojstwami (%d w glowe) +MONSTER_MSG = %s IS A MONSTER!^nz %d zabojstwami (%d w glowe) +GODLIKE_MSG = %s IS GODLIKE!!!!^nz %d zabojstwami (%d w glowe) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s JEST POTWOREM! +GODLIKE_SMALL = %s JEST BOGIEM!!! +KNIFE_MSG1 = %s sliced and diced %s +KNIFE_MSG2 = %s pulled out knife and gutted %s +KNIFE_MSG3 = %s sneaks carefully behind and knifed %s +KNIFE_MSG4 = %s knived %s +HE_MSG1 = %s sends a little gift to %s +HE_MSG2 = %s throws a small present to %s +HE_MSG3 = %s made a precision throw to %s +HE_MSG4 = %s got a big explosion for %s +SHE_MSG1 = %s detonated himself with a grenade +SHE_MSG2 = %s trys the effect of a grenade +SHE_MSG3 = %s kicked a grenade into his own ass +SHE_MSG4 = %s explodes! +HEAD_MSG1 = $kn killed $vn with a well^nplaced shot to the head! +HEAD_MSG2 = $kn removed $vn's^nhead with the $wn +HEAD_MSG3 = $kn turned $vn's head^ninto pudding with the $wn +HEAD_MSG4 = $vn got pwned by $kn +HEAD_MSG5 = $vn's head has been^nturned into red jello +HEAD_MSG6 = $kn has superb aim with the $wn,^nas $vn well knows. +HEAD_MSG7 = $vn's head stayed in $kn's^ncrosshairs a bit too long... +DOUBLE_MSG1 = Wow! %s made a double kill !!! +DOUBLE_MSG2 = Incredible! %s made a triple kill !!! +DOUBLE_MSG3 = Amazing! %s made %d kills at once !!! +MORTAR_MSG1 = %s set up mortar well and blow out %s +MORTAR_MSG2 = %s made a long range kill to %s +KILL_INFO1 = %s killed you with %s^nfrom distance of %.2f meters.^n +KILL_INFO2 = He did %d damage to you with %d hit(s)^nand still has %dhp.^n +KILL_INFO3 = You did %d damage to him with %d hit(s).^n +KILL_INFO4 = He hits you in:^n%s^n +STILL_HAS = %s still has %dhp +NO_KILLER = You have no killer... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Attackers: +VICTIMS = Victims: +DMG = dmg +HIT_S = hit(s) +YOU_HIT = You hit %s in: +SERVER_STATS = Server Stats +SHOW_STATS = Show stats +SHOW_RANK = Show rank +TA_MSG = %s attacked a teammate +TK_MSG = %s killed a teammate ! +NADE_CAUGHT = Wow! %s catched enemy grenade! +NADE_FAILEDTK = Oops.. %s killed you trying to throw back enemy grenade.. +NADE_FAILED = %s failed to throw back enemy grenade.. +NADE_MASTER = OMG! %s is grenade master !!! +DISABLED_MSG = Server has disabled that option +MOST_KILLS = Most kills +KILL = kill +KILLS = kills +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Best Score +POINTS = points +MOST_DAMAGE = Most damage +DAMAGE = damage +HIT = hit +HITS = hits +M_KILLS = Kills: +M_DEATHS = Deaths: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Hits: +M_SHOTS = Shots: +M_HS = HS: +M_WEAPON = Weapon: +M_DAMAGE = Damage: +M_NICK = Nick: +M_YOUR_RANK_IS = Your rank is +M_THEIR_RANK_IS = Their rank is +M_OF = of + +[nl] +WHOLEBODY = volledig lichaam +HEAD = hoofd +CHEST = romp +STOMACH = maag +LEFTARM = linkerarm +RIGHTARM = rechterarm +LEFTLEG = linkerbeen +RIGHTLEG = rechterbeen +MULTI_MSG = Multi-Kill! %s^nmet %d kills (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^nmet %d kills (%d hs) +SPREE_MSG = %s HEEFT EEN 'KILLING SPREE'!!!^nmet %d kills (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^nmet %d kills (%d hs) +UNSTOPPABLE_MSG = %s IS NIET TE STOPPEN!!!^nmet %d kills (%d hs) +MONSTER_MSG = %s IS EEN MONSTER!^nmet %d kills (%d hs) +GODLIKE_MSG = %s IS GODDELIJK!!!!^nmet %d kills (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s HEEFT EEN 'KILLING SPREE'!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS NIET TE STOPPEN!!! +MONSTER_SMALL = %s IS EEN MONSTER! +GODLIKE_SMALL = %s IS GODDELIJK!!! +KNIFE_MSG1 = %s sneed %s in hapklare plakjes +KNIFE_MSG2 = %s nam zijn mes en hakte vrolijk in op %s +KNIFE_MSG3 = %s sloop achter %s en begon zijn lichaamsdelen te amputeren +KNIFE_MSG4 = %s doodde %s met mes +HE_MSG1 = %s stuurde een mooi cadeautje naar %s +HE_MSG2 = %s gooide een klein presentje naar %s +HE_MSG3 = %s maakte een mooie worp naar %s +HE_MSG4 = %s had een grote explosie voor %s +SHE_MSG1 = %s blies zichzelf op met een granaat +SHE_MSG2 = %s probeert het effect van een granaat even uit +SHE_MSG3 = %s moet oppassen met dat vuurwerk +SHE_MSG4 = %s explodeert! +HEAD_MSG1 = $kn doodde $vn met een goed^ngeplaatst schot op het hoofd! +HEAD_MSG2 = $kn verwijderde $vn's^nhoofd met de $wn +HEAD_MSG3 = $kn veranderde $vn's hoofd^nin pudding met de $wn +HEAD_MSG4 = $vn werd gepwned door $kn +HEAD_MSG5 = $vn's hoofd is^nveranderd in rode gelei +HEAD_MSG6 = $kn kan zeer goed mikken met de $wn,^nmaar dat is $vn nu ook wel duidelijk. +HEAD_MSG7 = $vn's hoofd bleef iets te lang in $kn's^nvizier... +DOUBLE_MSG1 = Wow! %s pleegde een dubbele moord !!! +DOUBLE_MSG2 = Waa! %s pleegde een driedubbele moord !!! +DOUBLE_MSG3 = Huuuh! %s vermoordde %d spelers in 1 keer !!! +MORTAR_MSG1 = %s blies %s op met mortier +MORTAR_MSG2 = %s maakte %s van een mooie afstand af +KILL_INFO1 = %s doodde jou met %s^nvan een afstand van %.2f meter.^n +KILL_INFO2 = Hij deed %d schade aan jou met %d hit(s)^nen heeft nog %dhp.^n +KILL_INFO3 = Jij deed %d schade aan hem met %d hit(s).^n +KILL_INFO4 = Hij raakte je in:^n%s^n +STILL_HAS = %s heeft nog %dhp +NO_KILLER = Geen killer gevonden... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Aanvallers: +VICTIMS = Slachtoffer: +DMG = dmg +HIT_S = hit(s) +YOU_HIT = Jij raakte %s in: +SERVER_STATS = Server Status +SHOW_STATS = Laat stats zien +SHOW_RANK = Laat rank zien +TA_MSG = %s heeft een teammaat aangevallen +TK_MSG = %s heeft een teammaat gedood +NADE_CAUGHT = Wow! %s heeft een vijandelijke granaat gevangen! +NADE_FAILEDTK = Oeps.. %s volgende keer beter opletten met een vijandelijke granaat.. +NADE_FAILED = %s slaagde er niet in de vijandelijke granaat terug te gooien.. +NADE_MASTER = OMG! %s is de granaten meester !!! +DISABLED_MSG = De server heeft die optie uitgeschakeld +MOST_KILLS = Meeste kills +KILL = kill +KILLS = kills +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Beste Score +POINTS = punten +MOST_DAMAGE = Meeste schade +DAMAGE = schade +HIT = hit +HITS = hits +M_KILLS = Kills: +M_DEATHS = Deaths: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Hits: +M_SHOTS = Schoten: +M_HS = HS: +M_WEAPON = Wapen: +M_DAMAGE = Schade: +M_NICK = Nick: +M_YOUR_RANK_IS = Jouw rank is +M_THEIR_RANK_IS = Hun rank is +M_OF = van de + +[es] +WHOLEBODY = cuerpo entero +HEAD = cabeza +CHEST = pecho +STOMACH = estomago +LEFTARM = brazo izquierdo +RIGHTARM = brazo derecho +LEFTLEG = pierna izquierda +RIGHTLEG = pierna derecha +MULTI_MSG = Multi-Kill! %s^ncon %d frags (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^ncon %d frags (%d hs) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^ncon %d frags (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^ncon %d frags (%d hs) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^ncon %d frags (%d hs) +MONSTER_MSG = %s IS A MONSTER!^ncon %d frags (%d hs) +GODLIKE_MSG = %s IS GODLIKE!!!!^ncon %d frags (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG_1 = %s ha cortado y rebanado a %s +KNIFE_MSG_2 = %s ha destripado a %s +KNIFE_MSG_3 = %s se acerco con cuidado por detras y rajo a %s +KNIFE_MSG_4 = %s a acuchillado a %s +HE_MSG_1 = %s le ha mandado un pequenyo regalito a %s +HE_MSG_2 = %s le ha tirado un pequenyo regalo a %s +HE_MSG_3 = %s hizo un tiro de precision hacia %s +HE_MSG_4 = %s tenia guardada una gran explosion para %s +SHE_MSG_1 = %s se ha detonado el mismo con una granada +SHE_MSG_2 = %s acaba de comprobar los efectos de una granada explosiva +SHE_MSG_3 = %s se acaba de tragar su propia granada! +SHE_MSG_4 = %s ha explotado! +HS_MSG_1 = $kn ha matado a $vn con un buen^ntiro encarado en toda la cabeza! +HS_MSG_2 = $kn le ha volado la cabeza^na $vn con la $wn +HS_MSG_3 = $kn le ha hecho polvo la cabeza^na $vn con la $wn +HS_MSG_4 = $vn ha sido asesinado por $kn +HS_MSG_5 = La cabeza de $vn se ha convertido^nen pudding +HS_MSG_6 = $kn tiene muy buena punteria con la $wn,^ncomo $vn acaba de comprobar. +HS_MSG_7 = La cabeza de $vn se ha quedado demasiado^ntiempo en el punto de mira de $kn... +DOUBLE_KILL = Wow! %s ha matado a dos a la vez!!! +DOUBLE_MSG2 = Increible! %s ha hecho una muerte triple!!! +DOUBLE_MSG3 = Impresionante! %s ha matado a %d de una!!! +MORTAR_MSG1 = %s preparo bien su mortero y volo a %s por los aires +MORTAR_MSG2 = %s ha matado a %s a gran distancia +KILL_INFO1 = %s te ha matado con %s^ndesde una distancia de %.2f metros.^n +KILL_INFO2 = Te ha hecho %d puntos de danyo con %d acierto(s)^ny todavia tiene %dhp.^n +KILL_INFO3 = Le has hecho %d puntos de danyo con %d acierto(s).^n +KILL_INFO4 = Te ha dado en:^n%s^n +STILL_HAS = %s todavia tiene %dhp +NO_KILLER = Nadie te ha matado... +TOPX = Top %d +FFIRE_IS = Fuego amigo: +ATTACKERS = Atacantes: +VICTIMS = Victimas: +DMG = dno +HIT_S = acierto(s) +YOU_HIT = Das a %s en: +SERVER_STATS = Estadisticas del Servidor +SHOW_STATS = Mostrar estadisticas +SHOW_RANK = Mostrar ranking +TA_MSG = %s ha atacado a un companyero +TK_MSG = %s ha matado a un companyero! +NADE_CAUGHT = Wow! %s ha cogido una granada enemiga! +NADE_FAILEDTK = Uups.. %s te ha matado intentando devolver una granada enemiga.. +NADE_FAILED = %s fallo al devolver la granada enemiga... +NADE_MASTER = OMG! %s es un maestro con las granadas!!! +DISABLED_MSG = El Servidor ha desactivado esta opcion +MOST_KILLS = Mayor numero de frags +KILL = frag +KILLS = frags +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Mejor Puntuacion +POINTS = puntos +MOST_DAMAGE = Mayor danyo +DAMAGE = danyo +HIT = acierto +HITS = aciertos +M_KILLS = Frags: +M_DEATHS = Muertes: +M_SCORE = Puntacion: +M_TKS = TKs: +M_HITS = Aciertos: +M_SHOTS = Disparos: +M_HS = HS: +M_WEAPON = Arma: +M_DAMAGE = Danyo: +M_NICK = Nombre: +M_YOUR_RANK_IS = Tu ranking es +M_THEIR_RANK_IS = Sus rankings son +M_OF = de + +[bp] +WHOLEBODY = corpo +HEAD = cabeca +CHEST = peito +STOMACH = estomago +LEFTARM = braco esquerdo +RIGHTARM = braco direito +LEFTLEG = perna esquerda +RIGHTLEG = perna direita +MULTI_MSG = Multi-Kill! %s^ncom %d frags (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^ncom %d frags (%d hs) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^ncom %d frags (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^ncom %d frags (%d hs) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^ncom %d frags (%d hs) +MONSTER_MSG = %s IS A MONSTER!^ncom %d frags (%d hs) +GODLIKE_MSG = %s IS GODLIKE!!!!^ncom %d frags (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG_1 = %s fatiou e serviu %s +KNIFE_MSG_2 = %s puxou a faca e estripou %s +KNIFE_MSG_3 = %s foi cuidadosamente por atras^ne passou a faca em %s +KNIFE_MSG_4 = %s meteu a faca no bucho de %s +HE_MSG_1 = %s mandou a granada para %s que^nagarrou com as duas maos! +HE_MSG_2 = %s lancou um presentinho para %s +HE_MSG_3 = %s fez um lancamento preciso para %s +HE_MSG_4 = %s causou uma grande explosao para %s +SHE_MSG_1 = %s se detonou com uma granada +SHE_MSG_2 = %s sentiu o efeito de uma Granada!!! +SHE_MSG_3 = %s Enfiou a granada na bunda e subiu! +SHE_MSG_4 = %s ficou soh o poh! +HEAD_MSG_1 = $kn matou $vn com um tiro de bem^ndado na cabeca! +HEAD_MSG_2 = $kn removeu a cabeca^nde $vn com a $wn +HEAD_MSG_3 = $kn transformou a cabeca de^n$vn em um pudim com a $wn +HEAD_MSG_4 = $vn sentiu o poder do $kn +HEAD_MSG_5 = $vn viu sua cabeca virar gelatina vermelha +HEAD_MSG_6 = $kn tem uma pontaria magnifica com a $wn,^ne $vn sabe muito bem disso... +HEAD_MSG_7 = A cabeca de $vn ficou na mira de^n$kn por muito tempo e olha como ficou... +DOUBLE_MSG1 = Nossa! %s conseguiu matar 2 de uma soh vez!!! +DOUBLE_MSG2 = Incrivel! %s matou 3 de uma soh vez!!! +DOUBLE_MSG3 = Maravilhoso! %s conseguiu %d de uma vez!!! +MORTAR_MSG1 = %s armou um morteiro e apagou %s +MORTAR_MSG2 = %s matou a longa distancia %s +KILL_INFO1 = %s o matou com %s^nna distancia %.2f metros.^n +KILL_INFO2 = Ele causou %d de dano em voce com %d acerto(s)^ne ainda tem %dhp e %dap.^n +KILL_INFO3 = Voce causou %d de dano nele com %d acerto(s).^n +KILL_INFO4 = Ele acertou voce em:^n%s^n +STILL_HAS = %s ainda tem %dhp +NO_KILLER = Voce nao matou ninguem... +TOPX = %d Melhores +FFIRE_IS = Fogo Amigo: +ATTACKERS = Atacantes: +VICTIMS = Vitimas: +DMG = dano +HIT_S = acerto(s) +YOU_HIT = Voce acertou %s em: +SERVER_STATS = Estatisticas do Server +SHOW_STATS = Mostrar estatisticas +SHOW_RANK = Mostrar rank +TA_MSG = %s atacou um amigo! +TK_MSG = %s matou um amigo! +NADE_CAUGHT = Nossa! %s devolveu a granada ao inimigo! +NADE_FAILEDTK = Oops.. %s morreu tentando devolver uma granada do inimigo... +NADE_FAILED = %s falhou ao arremessar de volta a granada do inimigo... +NADE_MASTER = OMG! %s e o mestre das granadas!!! +DISABLED_MSG = O servidor desabilitou esta opcao +MOST_KILLS = Maior Frag +KILL = frag +KILLS = frags +HEADSHOT = headshot +HEADSHOTS = headshots +BEST_SCORE = Melhor Placar +POINTS = pontos +MOST_DAMAGE = Maior Dano +DAMAGE = dano +HIT = acerto +HITS = acertos +M_KILLS = Frags: +M_DEATHS = Mortes: +M_SCORE = Placar: +M_TKS = TKs: +M_HITS = Acertos: +M_SHOTS = Tiros: +M_HS = HS: +M_WEAPON = Arma: +M_DAMAGE = Dano: +M_NICK = Nick: +M_YOUR_RANK_IS = Sua posicao e +M_THEIR_RANK_IS = A posicao deles e +M_OF = de + +[cz] +WHOLEBODY = cele telo +HEAD = hlava +CHEST = trup +STOMACH = zaludek +LEFTARM = leva paze +RIGHTARM = prava paze +LEFTLEG = leva noha +RIGHTLEG = prava noha +MULTI_MSG = Multi-Kill! %s^nzabil %d lidi (%d hedkou) +ULTRA_MSG = Ultra-Kill!!! %s^zabil %d lidi (%d hedkou) +SPREE_MSG = %s MA ZABIJACKY ZACHVAT!!!^nZABIL %d lidi (%d hedkou) +RAMPAGE_MSG = AMOK!!! %s^nzabil %d ldi (%d hedkou) +UNSTOPPABLE_MSG = %s JE NEZASTAVITELNY!!!^nzabil %d lidi (%d hedkou) +MONSTER_MSG = %s JE MONSTRUM!^nzabil %d lidi (%d hedkou) +GODLIKE_MSG = %s JE BUH!!!!^nzabil %d lidi (%d hedkou) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s MA ZABIJACKY ZACHVAT!!! +RAMPAGE_SMALL = %s: AMOK!!! +UNSTOPPABLE_SMALL = %s JE NEZASTAVITELNY!!! +MONSTER_SMALL = %s JE MONSTRUM! +GODLIKE_SMALL = %s JE BUH!!! +KNIFE_MSG_1 = %s nasekal a serviruje %s +KNIFE_MSG_2 = %s podrizl jak kure %s +KNIFE_MSG_3 = %s se priplizil zezadu a odkrouhl %s +KNIFE_MSG_4 = %s podrizl %s +HE_MSG_1 = %s poslal maly darek %s +HE_MSG_2 = %s hodil maly darek %s +HE_MSG_3 = %s skvele zabil granatem %s +HE_MSG_4 = %s vyhodil do vzduchu %s +SHE_MSG_1 = %s detonoval sam od sebe :) +SHE_MSG_2 = %s zkousel specialni efekty s grantem :) +SHE_MSG_3 = %s spolkl cely granat! :) +SHE_MSG_4 = %s explodoval! +HEAD_MSG_1 = $kn zabil $vn preciznim^nvystrelem do hlavy! +HEAD_MSG_2 = $kn ustrelil $vnovu^nhlavu +HEAD_MSG_3 = $kn rozslehal $vnovu hlavu^njako puding +HEAD_MSG_4 = $kn skalpoval $vn +HEAD_MSG_5 = $vnova hlava je nyni^nvsude okolo +HEAD_MSG_6 = $kn to umi vytecne s $wn,^njak uz $vn zjistil :) +HEAD_MSG_7 = $vn's nechal hlavu prilis ^ndlouho v $knove zamerovaci... +DOUBLE_MSG1 = Wow! %s trefil 2 mouchy jednou ranou !!! +DOUBLE_MSG2 = Neskutecne! %s zabil tri naraz !!! +DOUBLE_MSG3 = Ohromujici! %s jich sejmul %d naraz !!! +MORTAR_MSG1 = %s nastavil kanon dobre a odstrelil %s +MORTAR_MSG2 = %s zabil na dlouhou vzdalenost %s +KILL_INFO1 = %s te zabil %s^nze vzdalenosti %.2f metru.^n +KILL_INFO2 = %d te trefil %dx ^na sebral %dhp.^n +KILL_INFO3 = Sebral jsi mu %d hp %d zasahy.^n +KILL_INFO4 = Trefil te do:^n%s^n +STILL_HAS = %s stale ma %dhp +NO_KILLER = Nejsi zabijak... +TOPX = Zebricek %d +FFIRE_IS = Friendly fire: +ATTACKERS = Utocnici: +VICTIMS = Obeti: +DMG = dmg +HIT_S = zasahu +YOU_HIT = Trefil jsi %s v: +SERVER_STATS = Statistika serveru +SHOW_STATS = Zobrazit statistiku +SHOW_RANK = Zobrazit zebricek +TA_MSG = %s trefil spoluhrace +TK_MSG = %s zabil spoluhrace ! +NADE_CAUGHT = Wow! %s chytil nepratelsy granate! +NADE_FAILEDTK = Oops.. %s te zabil kdyz zkousel hodit zpet nepratelsky granat.. +NADE_FAILED = %s neuspel pri pokudu odhodit nepratelsky granat.. +NADE_MASTER = OMG! %s je granatovy mistr !!! +DISABLED_MSG = Server nema tuto volbu povolenou +MOST_KILLS = Nejvice zabitych +KILL = zabiti +KILLS = zabiti +HEADSHOT = headshot +HEADSHOTS = headshotu +BEST_SCORE = Nejlepsi Score +POINTS = bodu +MOST_DAMAGE = Nejdrsnejsi +DAMAGE = poskozeni +HIT = zasah +HITS = zasahu +M_KILLS = Zabiti: +M_DEATHS = Smrti: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Zasahu: +M_SHOTS = Strel: +M_HS = HS: +M_WEAPON = Zbran: +M_DAMAGE = Poskozeni: +M_NICK = Nick: +M_YOUR_RANK_IS = Jsi na +M_THEIR_RANK_IS = Je na +M_OF = z + +[fi] +WHOLEBODY = koko keho +HEAD = paa +CHEST = rinta +STOMACH = vatsa +LEFTARM = vasen kasi +RIGHTARM = oikea kasi +LEFTLEG = vasen jalka +RIGHTLEG = oikea jalka +MULTI_MSG = Multikill! %s^n %d tapolla (%d hs) +ULTRA_MSG = Ultrakill! %s^n %d tapolla (%d hs) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^nwith %d kills (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^nwith %d kills (%d hs) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^nwith %d kills (%d hs) +MONSTER_MSG = %s IS A MONSTER!^nwith %d kills (%d hs) +GODLIKE_MSG = %s IS GODLIKE!!!!^nwith %d kills (%d hs) +MULTI_SMALL = %s: Multiill! +ULTRA_SMALL = %s: Ultrakill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG1 = %s puukotti pelaajan %s +KNIFE_MSG2 = %s puukotti pelaajan %s +KNIFE_MSG3 = %s puukotti pelaajan %s +KNIFE_MSG4 = %s puukotti pelaajan %s +HE_MSG1 = %s tappoi pelaajan %s granaatilla +HE_MSG2 = %s tappoi pelaajan %s granaatilla +HE_MSG3 = %s tappoi pelaajan %s granaatilla +HE_MSG4 = %s tappoi pelaajan %s granaatilla +SHE_MSG1 = %s rajaytti itsensa onnistuneesti +SHE_MSG2 = %s rajaytti itsensa onnistuneesti +SHE_MSG3 = %s rajaytti itsensa onnistuneesti +SHE_MSG4 = %s rajaytti itsensa onnistuneesti +HEAD_MSG1 = $kn tappoi pelaajan $vn headshotilla +HEAD_MSG2 = $kn tappoi pelaajan $vn headshotilla $wn:sta +HEAD_MSG3 = $kn tappoi pelaajan $vn headshotilla $wn:sta +HEAD_MSG4 = $kn tappoi pelaajan $vn +HEAD_MSG5 = $vn tapettiin headshotilla +HEAD_MSG6 = $kn tappoi pelaajan $vn headshotilla $wn:sta +HEAD_MSG7 = $kn tappoi pelaajan $vn headshotilla +DOUBLE_MSG1 = %s suoritti tuplatapon +DOUBLE_MSG2 = %s suoritti triplatapon +DOUBLE_MSG3 = %s tappoi %d pelaajaa kerralla +MORTAR_MSG1 = %s set up mortar well and blow out %s +MORTAR_MSG2 = %s tappoi pelaajan %s pitkalta matkalta +KILL_INFO1 = %s tappoi sinut %.2f metrin etaisyydelta.^n +KILL_INFO2 = Han teki %d damagea sinulle %d osumalla^nhanella on viela %dhp.^n +KILL_INFO3 = Teit %d damagea hanelle %d osumalla^n +KILL_INFO4 = Han osui sinua:^n%s^n +STILL_HAS = pelaajalla %s on viela %dhp +NO_KILLER = Kukaan ei tappanut sinua... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Hyokkaajat: +VICTIMS = Uhrit: +DMG = damage +HIT_S = osumat +YOU_HIT = osuit pelaajaa %s: +SERVER_STATS = Palvelimen tilastot +SHOW_STATS = Nayta tilastot +SHOW_RANK = Nayta ranking +TA_MSG = %s hyokkasi tiimilaisensa kimppuun +TK_MSG = %s tappoi tiimilaisensa +NADE_CATCHED = %s kuoli vihollisen granaattiin +NADE_FAILEDTK = %s tappoi sinut granaatilla +NADE_FAILED = %s kuoli granaattiin +NADE_MASTER = %s on loistava granaattien kanssa... +DISABLED_MSG = Palvelin on poistanut tuon vaihtoehdon kaytosta +MOST_KILLS = Eniten tappoja +KILL = tappo +KILLS = tapot +HEADSHOT = headshot +HEADSHOTS = headshotit +BEST_SCORE = Paras pistemaara +POINTS = pisteita +MOST_DAMAGE = Eniten damagea +DAMAGE = damage +HIT = osuma +HITS = osumat +M_KILLS = Tapot: +M_DEATHS = Kuolemat: +M_SCORE = Pisteet: +M_TKS = TKt: +M_HITS = Osumat: +M_SHOTS = Laukaukset: +M_HS = HS: +M_WEAPON = Ase: +M_DAMAGE = Damage: +M_NICK = Nick: +M_YOUR_RANK_IS = Sijoituksesi on +M_THEIR_RANK_IS = Heidan sijoituksensa on +M_OF = + +[ls] +WHOLEBODY = wh0l3 |30dy +HEAD = h34d +CHEST = ch3z7 +STOMACH = z70m4ch +LEFTARM = l3f74rm +RIGHTARM = r!gh74rm +LEFTLEG = l3f7l3g +RIGHTLEG = r!gh7l3g +MULTI_MSG = M|_|l7!-K!ll! %s^nw!7h %d k!llz (%d hz) +ULTRA_MSG = Ul7r4-K!ll!!! %s^nw!7h %d k!llz (%d hz) +SPREE_MSG = %s iz pwnz0r!!!^nw!7h %d k!llz (%d hz) +RAMPAGE_MSG = KILLZ0|2!!! %s^nw!7h %d k!llz (%d hz) +UNSTOPPABLE_MSG = %s iz h4x0|2in'! nw!7h %d k!llz (%d hz) +MONSTER_MSG = %s iz zux!^nw!7h %d k!llz (%d hz) +GODLIKE_MSG = %s Iz |200t!!!!^nw!7h %d k!llz (%d hz) +MULTI_SMALL = %s: M|_|l7!-K!ll! +ULTRA_SMALL = %s: Ul7r4-K!ll!!! +SPREE_SMALL = %s iz pwnz0r!!! +RAMPAGE_SMALL = %s: KILLZ0|2!!! +UNSTOPPABLE_SMALL = %s iz h4x0|2in'!! +MONSTER_SMALL = %s iz zux! +GODLIKE_SMALL = %s |z |200t!!! +KNIFE_MSG1 = %s zl!c3d 4nd d!c3d %s +KNIFE_MSG2 = %s p|_|ll3d 0|_|7 kn!f3 4nd g|_|773d %s +KNIFE_MSG3 = %s zn34kz c4r3f|_|lly |33h!nd 4nd kn!f3d %s +KNIFE_MSG4 = %s kn!v3d %s +HE_MSG1 = %s z3ndz 4 l!77l3 g!f7 70 %s +HE_MSG2 = %s 7hr0wz 4 zm4ll pr3z3n7 70 %s +HE_MSG3 = %s m4d3 4 pr3c!z!0n 7hr0w 70 %s +HE_MSG4 = %s g07 4 |3!g 3xpl0z!0n f0r %s +SHE_MSG1 = %s d370n473d h!mz3lf w!7h 4 gr3n4d3 +SHE_MSG2 = %s 7ryz 7h3 3ff3c7 0f 4 gr3n4d3 +SHE_MSG3 = %s k!ck3d 4 gr3n4d3 !n70 h!z 0wn 4zz +SHE_MSG4 = %s 3xpl0d3z! +HEAD_MSG1 = $kn k!ll3d $vn w!7h 4 w3ll^npl4c3d zh07 70 7h3 h34d! +HEAD_MSG2 = $kn r3m0v3d $vn'z^nh34d w!7h 7h3 $wn +HEAD_MSG3 = $kn 7|_|rn3d $vn'z h34d^n!n70 p|_|dd!ng w!7h 7h3 $wn +HEAD_MSG4 = $vn g07 pwn3d |3y $kn +HEAD_MSG5 = $vn'z h34d h4z |333n^n7|_|rn3d !n70 r3d j3ll0 +HEAD_MSG6 = $kn h4z z|_|p3r|3 4!m w!7h 7h3 $wn,^n4z $vn w3ll kn0wz. +HEAD_MSG7 = $vn'z h34d z74y3d !n $kn'z^ncr0zzh4!rz 4 |3!7 700 l0ng... +DOUBLE_MSG1 = W0w! %s m4d3 4 d0|_||3l3 k!ll !!! +DOUBLE_MSG2 = Incr3d!|3l3! %s m4d3 4 7r!pl3 k!ll !!! +DOUBLE_MSG3 = Am4z!ng! %s m4d3 %d k!llz 47 0nc3 !!! +MORTAR_MSG1 = %s z37 |_|p m0r74r w3ll 4nd |3l0w 0|_|7 %s +MORTAR_MSG2 = %s m4d3 4 l0ng r4ng3 k!ll 70 %s +KILL_INFO1 = %s k!ll3d y0|_| w!7h %s^nfr0m d!z74nc3 0f %.2f m373rz.^n +KILL_INFO2 = H3 d!d %d d4m4g3 70 y0|_| w!7h %d h!7(z)^n4nd z7!ll h4z %dhp.^n +KILL_INFO3 = Y0|_| d!d %d d4m4g3 70 h!m w!7h %d h!7(z).^n +KILL_INFO4 = H3 h!7z y0|_| !n:^n%s^n +STILL_HAS = %s z7!ll h4z %dhp +NO_KILLER = Y0|_| h4v3 n0 k!ll3r... +TOPX = T0p %d +FFIRE_IS = Fr!3ndly f!r3: +ATTACKERS = A774ck3rz: +VICTIMS = V!c7!mz: +DMG = dmz +HIT_S = h!7(z) +YOU_HIT = Y0|_| h!7 %s !n: +SERVER_STATS = S3rv3r S747z +SHOW_STATS = Sh0w z747z +SHOW_RANK = Sh0w r4nk +TA_MSG = %s 4774ck3d 4 734mm473 +TK_MSG = %s k!ll3d 4 734mm473 ! +NADE_CAUGHT = W0w! %s c4|_|gh7 3n3my gr3n4d3! +NADE_FAILEDTK = O0pz.. %s k!ll3d y0|_| 7ry!ng 70 7hr0w |34ck 3n3my gr3n4d3.. +NADE_FAILED = %s f4!l3d 70 7hr0w |34ck 3n3my gr3n4d3.. +NADE_MASTER = OMG! %s !z gr3n4d3 m4z73r !!! +DISABLED_MSG = S3rv3r h4z d!z4|3l3d 7h47 0p7!0n +MOST_KILLS = M0z7 k!llz +KILL = k!ll +KILLS = k!llz +HEADSHOT = h34dzh07 +HEADSHOTS = h34dzh07z +BEST_SCORE = B3z7 Sc0r3 +POINTS = p0!n7z +MOST_DAMAGE = M0z7 d4m4g3 +DAMAGE = d4m4g3 +HIT = h!7 +HITS = h!7z +M_KILLS = K!llz: +M_DEATHS = D347hz: +M_SCORE = Sc0r3: +M_TKS = TKz: +M_HITS = H!7z: +M_SHOTS = Sh07z: +M_HS = HS: +M_WEAPON = W34p0n: +M_DAMAGE = D4m4g3: +M_NICK = N!ck: +M_YOUR_RANK_IS = Y0|_|r r4nk !z +M_THEIR_RANK_IS = Th3!r r4nk !z +M_OF = 0f + +[bg] +WHOLEBODY = cqloto tqlo +HEAD = glava +CHEST = graden ko6 +STOMACH = stomak +LEFTARM = lqva raka +RIGHTARM = dqsna raka +LEFTLEG = lqv krak +RIGHTLEG = desen krak +MULTI_MSG = Multi-Kill! %s^ns %d ubiistva (%d glavi) +ULTRA_MSG = Ultra-Kill!!! %s^ns %d ubiistva (%d glavi) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^ns %d ubiistva (%d glavi) +RAMPAGE_MSG = RAMPAGE!!! %s^ns %d ubiistva (%d glavi) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^ns %d ubiistva (%d glavi) +MONSTER_MSG = %s IS A MONSTER!^s %d ubiistva (%d glavi) +GODLIKE_MSG = %s IS GODLIKE!!!!^ns %d ubiistva (%d glavi) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG_1 = %s nakalcan i ubit %s +KNIFE_MSG_2 = %s izvadi no6 i zasrami %s +KNIFE_MSG_3 = %s zaobikoli skri6no i nakalca %s +KNIFE_MSG_4 = %s ubi s no6 %s +HE_MSG_1 = %s isprati malak podarak do %s +HE_MSG_2 = %s hvarli malak podarak do %s +HE_MSG_3 = %s napravi to4no hvarlqne do %s +HE_MSG_4 = %s ima golqm explosiv za %s +SHE_MSG_1 = %s samoubi se s granata +SHE_MSG_2 = %s opitava effecta ot an HE Grenata +SHE_MSG_3 = %s Gla6ta celi granati! +SHE_MSG_4 = %s explodira! +HEAD_MSG1 = $kn ubi $vn sas mnogo precenen istrel v glavata! +HEAD_MSG2 = $kn premahna glavata na $vn s $wn +HEAD_MSG3 = $kn napravi glavata na $vn ^nna puding sas $wn +HEAD_MSG4 = $vn be6e razmazan ot $kn +HEAD_MSG5 = $vn's head has been^nturned into red jello +HEAD_MSG6 = $kn ima mnogo dobar istrel s $wn,^nas $vn mnogo dobre znae. +HEAD_MSG7 = glavata na $vn ostana mnogo vreme na mernika na $kn +DOUBLE_MSG1 = Wow! %s napravi double kill !!! +DOUBLE_MSG2 = Neveroqtno! %s napravi triple kill !!! +DOUBLE_MSG3 = Udivitelno! %s napravi %d ubiistva na vedna6 !!! +MORTAR_MSG1 = %s set up mortar well and blow out %s +MORTAR_MSG2 = %s napravi dalak istrel do %s +KILL_INFO1 = %s ubi vi s %s^not distancia ot %.2f metra.^n +KILL_INFO2 = Toi vi napravi %d damage s %d udar(i)^ni vse o6te ima %dhp krav.^n +KILL_INFO3 = Vie napravihte %d damage kam nego s %d udar(i).^n +KILL_INFO4 = toi vi odari v:^n%s^n +STILL_HAS = %s vse o6te ima %dhp +NO_KILLER = Nqmate ubiec... +TOPX = Nai %d +FFIRE_IS = Friendly fire: +ATTACKERS = Attackers: +VICTIMS = Victims: +DMG = dmg +HIT_S = udar(i) +YOU_HIT = vie udarihte %s v: +SERVER_STATS = Server Statistiki +SHOW_STATS = Pokaji statistiki +SHOW_RANK = Pokaji rank +TA_MSG = %s atakuva saotbornik +TK_MSG = %s ubi saotbornik ! +NADE_CAUGHT = Wow! %s hvana na protivnika granatata! +NADE_FAILEDTK = Oops.. %s vi ubi kato se ma4e6e da hvarli granata na protivnia otbor... +NADE_FAILED = %s neuspq da hvarli granatata na protivnia otbor... +NADE_MASTER = OMG! %s e mastara na granatite !!! +DISABLED_MSG = Servare e isklu4il tazi opcq +MOST_KILLS = Nai mnogo ubiistva +KILL = ubiistvo +KILLS = ubiistva +HEADSHOT = udar v glavata +HEADSHOTS = udari v glavata +BEST_SCORE = Nai dobar resultat +POINTS = to4ki +MOST_DAMAGE = Nai mnogo damage +DAMAGE = damage +HIT = udar +HITS = udari +M_KILLS = ubiistva: +M_DEATHS = umirania: +M_SCORE = Resultat: +M_TKS = TKS: +M_HITS = udari: +M_SHOTS = istreli: +M_HS = udari v glavata: +M_WEAPON = urajie: +M_DAMAGE = Damage: +M_NICK = Ime: +M_YOUR_RANK_IS = Va6ia rank e +M_THEIR_RANK_IS = Tqhnia rank e +M_OF = ot + +[ro] +WHOLEBODY = tot corpul +HEAD = cap +CHEST = piept +STOMACH = stomac +LEFTARM = brat stang +RIGHTARM = brat drept +LEFTLEG = picior stang +RIGHTLEG = picior drept +MULTI_MSG = Multi-Ucidere! %s^ncu %d ucideri (%d hs) +ULTRA_MSG = Ultra-Ucidere!!! %s^ncu %d ucideri (%d hs) +SPREE_MSG = %s ARE CHEF DE MACEL!!!^nwith %d kills (%d hs) +RAMPAGE_MSG = %s ESTE FURIOS!!!^ncu %d ucideri (%d hs) +UNSTOPPABLE_MSG = %s ESTE DE NEOPRIT!!!^ncu %d ucideri (%d hs) +MONSTER_MSG = %s ESTE UN MONSTRU!^ncu %d ucideri (%d hs) +GODLIKE_MSG = %s ESTE DIVIN!!!!^ncu %d ucideri (%d hs) +MULTI_SMALL = %s: Multi-Ucidere! +ULTRA_SMALL = %s: Ultra-Ucidere!!! +SPREE_SMALL = %s ARE CHEF DE MACEL!!! +RAMPAGE_SMALL = %s ESTE FURIOS!!! +UNSTOPPABLE_SMALL = %s ESTE DE NEOPRIT!!! +MONSTER_SMALL = %s ESTE UN MONSTRU! +GODLIKE_SMALL = %s ESTE DIVIN!!! +KNIFE_MSG_1 = %s l-a taiat si feliat pe %s +KNIFE_MSG_2 = %s a scos cutitul afara si l-a macelarit pe %s +KNIFE_MSG_3 = %s se furiseaza atent pe la spate si il taie %s +KNIFE_MSG_4 = %s l-a injunghiat pe %s +HE_MSG_1 = %s ii trimite un mic cadou lui %s +HE_MSG_2 = %s ii arunca un dar micut lui %s +HE_MSG_3 = %s a facut o aruncare precisa catre %s +HE_MSG_4 = %s a avut o explozie mare pentru %s +SHE_MSG_1 = %s s-a detonat cu o grenada +SHE_MSG_2 = %s incearca efectul unei grenade +SHE_MSG_3 = %s inghite grenazi cu totul! +SHE_MSG_4 = %s explodeaza! +HEAD_MSG_1 = $kn l-a ucis pe $vn cu o impuscatura bine^nplasata pe cap! +HEAD_MSG_2 = $kn a inlaturat capul lui $vn^ncu $wn +HEAD_MSG_3 = $kn a transformat capul lui $vn ^nin budinca cu $wn +HEAD_MSG_4 = $vn a fost invins de $kn +HEAD_MSG_5 = Capul lui $vn a fost^ntransformat in gelatina rosie +HEAD_MSG_6 = $kn are o tinta superba cu $wn,^niar $vn stie bine. +HEAD_MSG_7 = Capul lui $vn a stat prea mult in tinta lui $kn... +DOUBLE_MSG1 = Wow! %s a facut o dubla ucidere!!! +DOUBLE_MSG2 = Incredibil! %s a facut o tripla ucidere !!! +DOUBLE_MSG3 = Uimitor! %s a ucis %d oameni deodata !!! +MORTAR_MSG1 = %s a plasat bine mortarul si l-a aruncat in aer pe %s +MORTAR_MSG2 = %s l-a ucis pe %s dintr-o raza mare de actiune +KILL_INFO1 = %s te-a ucis cu %s^nde la distanta de %.2f metri.^n +KILL_INFO2 = El ti-a facut %d dmg din %d lovituri^si inca mai are %dhp.^n +KILL_INFO3 = Tu i-ai facut %d dmg din %d lovituri.^n +KILL_INFO4 = El te-a lovit in:^n%s^n +STILL_HAS = %s inca mai are %dhp +NO_KILLER = Nu ai nici o ucidere... +TOPX = Top %d +FFIRE_IS = Friendly-fire: +ATTACKERS = Atacatori: +VICTIMS = Victime: +DMG = dmg +HIT_S = lovituri +YOU_HIT = Tu l-ai lovit pe %s in: +SERVER_STATS = Statisticile Server-ului +SHOW_STATS = Arata statistici +SHOW_RANK = Arata pozitia +TA_MSG = %s a atacat un coleg de echipa +TK_MSG = %s a ucis un coleg de echipa ! +NADE_CAUGHT = Wow! %s a prins grenada inamicului! +NADE_FAILEDTK = Oops.. %s te-a ucis incercand sa arunce inapoi grenada inamicului.. +NADE_FAILED = %s nu a putut arunca inapoi grenada inamicului.. +NADE_MASTER = OMG! %s este maestru al grenadelor !!! +DISABLED_MSG = Server-ul a dezactivat aceasta optiune +MOST_KILLS = Cele mai multe ucideri +KILL = ucidere +KILLS = ucideri +HEADSHOT = hs +HEADSHOTS = hs +BEST_SCORE = Cel mai bun scor +POINTS = puncte +MOST_DAMAGE = Cel mai mult dmg +DAMAGE = dmg +HIT = lovitura +HITS = lovituri +M_KILLS = Ucideri: +M_DEATHS = Decesuri: +M_SCORE = Scor: +M_TKS = TK: +M_HITS = Lovituri: +M_SHOTS = Focuri: +M_HS = HS: +M_WEAPON = Arma: +M_DAMAGE = Dmg: +M_NICK = Nume: +M_YOUR_RANK_IS = Pozitia ta este +M_THEIR_RANK_IS = Pozitia lor este +M_OF = din + +[hu] +WHOLEBODY = egesz test +HEAD = fej +CHEST = csipo +STOMACH = has +LEFTARM = balkar +RIGHTARM = jobbkar +LEFTLEG = ballab +RIGHTLEG = jobblab +MULTI_MSG = Multi-Gyilok! %s^nwith %d oles (%d fej) +ULTRA_MSG = Ultra-Gyilok!!! %s^nwith %d oles (%d fej) +SPREE_MSG = %s OLDOKLESI SOROZAT!!!^nwith %d oles(%d fej) +RAMPAGE_MSG = RAMPAGE!!! %s^nwith %d oles (%d fej) +UNSTOPPABLE_MSG = %s a MEGALLITHATATLAN!!!^nwith %d oles (%d fej) +MONSTER_MSG = %s EGY GYILOKGEP!^nwith %d oles (%d fej) +GODLIKE_MSG = %s AZ ISTEN!!!!^nwith %d oles (%d fej) +MULTI_SMALL = %s: Multi-Gyilok! +ULTRA_SMALL = %s: Ultra-Gyilok!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s A MEGALLITHATATLAN!!! +MONSTER_SMALL = %s EGY GYILOKGEPP! +GODLIKE_SMALL = %s AZ ISTEN!!! +KNIFE_MSG1 = %s Felvagta %s-t +KNIFE_MSG2 = %s Szetszabta%s-t +KNIFE_MSG3 = %s szetvagta %s-t +KNIFE_MSG4 = %s megkeselte %s-t +HE_MSG1 = %s megajandekozta %s egy granattal +HE_MSG2 = %s felrobbantotta %s +HE_MSG3 = %s kirobbantotta %s +HE_MSG4 = %s szetrobbantotta %s +SHE_MSG1 = %s felrobbantotta magat... +SHE_MSG2 = %s megnezte kozelebrol a granatjat... +SHE_MSG3 = %s azt hitte krumpli van a kezeben... +SHE_MSG4 = %s Felrobbant! +HEAD_MSG1 = $kn megolte $vn t egy fejlovessel! +HEAD_MSG2 = $kn eltavolittotta $vn fejet^naz $wn-vel. +HEAD_MSG3 = $kn hullocsillagot csinalt $vn fejobel egy $wn-vel +HEAD_MSG4 = $vn fejen lett love $kn fegyvere altal... +HEAD_MSG5 = $vn feje foldkoruli palyara alt. +HEAD_MSG6 = $kn segitsegevel $wn feje mar a csillagok kozott tundokolhet... +HEAD_MSG7 = Miaz? Talan egy repulo? Dehogy... Csak $vn-feje +DOUBLE_MSG1 = Wow! %s duplan olt!!! +DOUBLE_MSG2 = Hihetetlen! %s triplan olt !!! +DOUBLE_MSG3 = Szuper! %s egyhuzamban %d embert gyilkolt meg !!! +MORTAR_MSG1 = %s fel allitott egy kilovoallast, es egyszerre %s lazadod irtott ki vele +MORTAR_MSG2 = %s egyhuzamban %s embert olt +KILL_INFO1 = %s megolt teged egy %sel^n%.2f meterrol.^n +KILL_INFO2 = O %d -et sebzett rajtad, %d talalattal^nNeki maradt %dhpja.^n +KILL_INFO3 = Te %d -et sebeztel rajta %d talalattal.^n +KILL_INFO4 = O eltalalt teged itt:^n%s^n +STILL_HAS = %s-nek meg van %dhpja +NO_KILLER = Nincs gyilkosod... +TOPX = Legjobb %d +FFIRE_IS = Csapattars sebzes: +ATTACKERS = Tamadok: +VICTIMS = Aldozatok: +DMG = sebzes +HIT_S = talalat +YOU_HIT = Te eltalaltad %st itt: +SERVER_STATS = Szerver Sztatusz +SHOW_STATS = Allas mutatasa +SHOW_RANK = Helyezes mutatasa +TA_MSG = %s megtamadta a csapattarsat +TK_MSG = %s megolte a csapattarsat! +NADE_CAUGHT = Wow! %s elkapott egy ellenseges granatot! +NADE_FAILEDTK = Oops.. %s megolt teged, visszaprobalta dobni az ellenseges granatot.. +NADE_FAILED = %s -nek nem sikerult visszadobni az ellenseges granatot.. +NADE_MASTER = OMG! %s egy granatmester!!! +DISABLED_MSG = A szerver letiltotta ezt az opciot +MOST_KILLS = Legtobb gyilok +KILL = oles +KILLS = oles +HEADSHOT = fejloves +HEADSHOTS = vejloves +BEST_SCORE = Legjobb pont +POINTS = pont +MOST_DAMAGE = Legtobb sebzes +DAMAGE = sebzes +HIT = talalat +HITS = talalat +M_KILLS = Oles: +M_DEATHS = Halal: +M_SCORE = Eredmeny: +M_TKS = TK: +M_HITS = Talalat: +M_SHOTS = Loves: +M_HS = Fejloves: +M_WEAPON = Fegyver: +M_DAMAGE = Sebzes: +M_NICK = Nick: +M_YOUR_RANK_IS = A te helyezesed +M_THEIR_RANK_IS = Az o helyezese +M_OF = a + +[lt] +WHOLEBODY = kunas +HEAD = galva +CHEST = krutine +STOMACH = pilvas +LEFTARM = kaire ranka +RIGHTARM = desine ranka +LEFTLEG = kaire koja +RIGHTLEG = desine koja +MULTI_MSG = Multi-Kill! %s^nsu %d nuzudymais (%d hs) +ULTRA_MSG = Ultra-Kill!!! %s^nsu %d nuzudymais (%d hs) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^nsu %d nuzudymais (%d hs) +RAMPAGE_MSG = RAMPAGE!!! %s^nsu %d nuzudymais (%d hs) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^nsu %d nuzudymais (%d hs) +MONSTER_MSG = %s IS A MONSTER!^nsu %d nuzudymais (%d hs) +GODLIKE_MSG = %s IS GODLIKE!!!!^nsu %d nuzudymais (%d hs) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG1 = %s papjautas zaidziant %s +KNIFE_MSG2 = %s istrauke peili is %s +KNIFE_MSG3 = %s priselino ir papjove %s +KNIFE_MSG4 = %s uzpjove %s +HE_MSG1 = %s issiunte maza dovanele %s +HE_MSG2 = %s numete maza dovanele %s +HE_MSG3 = %s keistai mete i %s +HE_MSG4 = %s dave dideli sprogima %s +SHE_MSG1 = %s susisprogdino +SHE_MSG2 = %s isbande HE efektyvuma +SHE_MSG3 = %s prarijo visa granata! +SHE_MSG4 = %s sprogo! +HEAD_MSG1 = $kn nudejo $vn su ^n gerai nusitaikes i galva! +HEAD_MSG2 = $kn nunese $vn ^n galva su $wn +HEAD_MSG3 = $kn pasuko $vn galva ^n i purva su $wn +HEAD_MSG4 = $vn suterse $kn +HEAD_MSG5 = $vn galva buvo ^n pasukta i raudona bala +HEAD_MSG6 = $kn taikliai saudo su $wn,^n tai $vn gerai zino. +HEAD_MSG7 = $vn galva nuskrido nuo $kn ^n taikinys per geras.. +DOUBLE_MSG1 = Wow! %s padare dviguba nuzudyma!!! +DOUBLE_MSG2 = Nepakartojama! %s padare triguba nuzudyma !!! +DOUBLE_MSG3 = Nuostabu! %s nudejo %d iskarto!!! +MORTAR_MSG1 = %s uztaise mortara ir susprogdino %s +MORTAR_MSG2 = %s padare tolima nuzudyma %s +KILL_INFO1 = %s nudejo tave su %s^nis %.2f metru.^n +KILL_INFO2 = Jis padare %d zalos tau su %d pataikymu(-ais)^nir vis dar turi %dgivybiu.^n +KILL_INFO3 = Tu padarei %d zalos jam su %d pataikymu(-ais).^n +KILL_INFO4 = Jis pataike tau i:^n%s^n +STILL_HAS = %s dar turi %dgivybiu +NO_KILLER = Neturi zudiko... +TOPX = Top %d +FFIRE_IS = Savu saudymas: +ATTACKERS = Uzpuolikai: +VICTIMS = Aukos: +DMG = zala +HIT_S = pataikymas(-ai) +YOU_HIT = Tu suzeidei %s i: +SERVER_STATS = Serverio statusai +SHOW_STATS = Parodyti statusus +SHOW_RANK = Parodyti rank +TA_MSG = %s saudo i komandos draugus +TK_MSG = %s nusove komandos drauga! +NADE_CAUGHT = Wow! %s pagavo priesu granata! +NADE_FAILEDTK = Ups.. %s zuvo bandant atgal mesti priesu granata.. +NADE_FAILED = %s Nepavyko numesti atgal priesu granatos.. +NADE_MASTER = O Dieve! %s yra granatu profas!!! +DISABLED_MSG = Serveris uzdraude sia komanda +MOST_KILLS = Daugiausia nuzudymu +KILL = nuzudymas +KILLS = nuzudymai +HEADSHOT = headshotas +HEADSHOTS = headshotai +BEST_SCORE = Geriausias rezultatas +POINTS = taskai +MOST_DAMAGE = Daugiausia zalos +DAMAGE = zala +HIT = pataikymas +HITS = pataikymai +M_KILLS = Nuzudymai: +M_DEATHS = Mirtys: +M_SCORE = Rezultatai: +M_TKS = TKs: +M_HITS = Pataikymai: +M_SHOTS = Sovimai: +M_HS = HS: +M_WEAPON = Ginklas: +M_DAMAGE = Zala: +M_NICK = Nikas: +M_YOUR_RANK_IS = Tavo rank yra +M_THEIR_RANK_IS = Jo rank yra +M_OF = is + +[sk] +WHOLEBODY = cele telo +HEAD = hlava +CHEST = trup +STOMACH = zaludok +LEFTARM = lava ruka +RIGHTARM = prava ruka +LEFTLEG = lava noha +RIGHTLEG = prava noha +MULTI_MSG = Multi-Kill! %s^nzabil %d ludi (%d hedkou) +ULTRA_MSG = Ultra-Kill!!! %s^zabil %d ludi (%d hedkou) +SPREE_MSG = %s MA ZABIJACKY ZACHVAT!!!^nZABIL %d ludi (%d hedkou) +RAMPAGE_MSG = AMOK!!! %s^nzabil %d ludi (%d hedkou) +UNSTOPPABLE_MSG = %s JE NEZASTAVYTELNY!!!^nzabil %d ludi (%d hedkou) +MONSTER_MSG = %s JE MONSTRUM!^nzabil %d ludi (%d hedkou) +GODLIKE_MSG = %s JE BOH!!!!^nzabil %d ludi (%d hedkou) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s MA ZABIJACKY ZACHVAT!!! +RAMPAGE_SMALL = %s: AMOK!!! +UNSTOPPABLE_SMALL = %s JE NEZASTAVYTELNY!!! +MONSTER_SMALL = %s JE MONSTRUM! +GODLIKE_SMALL = %s JE BOH!!! +KNIFE_MSG_1 = %s nakrajal a serviruje %s +KNIFE_MSG_2 = %s podrezal ako svinu %s +KNIFE_MSG_3 = %s sa priplazil zozadu a odrovnal %s +KNIFE_MSG_4 = %s podrezal %s +HE_MSG_1 = %s poslal maly darcek %s +HE_MSG_2 = %s hodil maly darcek %s +HE_MSG_3 = %s skvele zabil granatom %s +HE_MSG_4 = %s vyhodil do vzduchu %s +SHE_MSG_1 = %s detonoval sam od seba :) +SHE_MSG_2 = %s zkusal specialne efekty s grantom :) +SHE_MSG_3 = %s prehltol cely granat! :) +SHE_MSG_4 = %s explodoval! +HEAD_MSG_1 = $kn zabil $vn preciznym^nvystrelom do hlavy! +HEAD_MSG_2 = $kn odstrelil $vnovu^nhlavu +HEAD_MSG_3 = $kn rozslahal $vnovu hlavu^nako puding +HEAD_MSG_4 = $kn oskalpoval $vn +HEAD_MSG_5 = $vnova hlava je teraz^nvsade naokolo +HEAD_MSG_6 = $kn to vie vynimocne s $wn,^nako uz $vn zistil :) +HEAD_MSG_7 = $vn's nechal hlavu priliz ^ndlho v $knov zameriavaci... +DOUBLE_MSG1 = Wow! %s trafil 2 muchy jednou ranou !!! +DOUBLE_MSG2 = Neskutocne! %s zabil tri naraz !!! +DOUBLE_MSG3 = Ohromujuce! %s ich sejmol %d naraz !!! +MORTAR_MSG1 = %s nastavil kanon dobre a odstrelil %s +MORTAR_MSG2 = %s zabil na dlhu vzdialenost %s +KILL_INFO1 = %s ta zabil %s^nzo vzdialenosti %.2f metrov.^n +KILL_INFO2 = %d ta trafil %dx ^na zobral %dhp.^n +KILL_INFO3 = Zobral si mu %d hp %d zasahmy.^n +KILL_INFO4 = Trafil ta do:^n%s^n +STILL_HAS = %s stale ma %dhp +NO_KILLER = Niesi zabijak... +TOPX = Rebricek %d +FFIRE_IS = Friendly fire: +ATTACKERS = Utocnici: +VICTIMS = Obete: +DMG = dmg +HIT_S = zasahov +YOU_HIT = Trafil si %s v: +SERVER_STATS = Statistika servera +SHOW_STATS = Zobrazit statistiku +SHOW_RANK = Zobrazit rebricek +TA_MSG = %s trafil spoluhraca +TK_MSG = %s zabil spoluhraca ! +NADE_CAUGHT = Wow! %s chytil nepriatelsky granat! +NADE_FAILEDTK = Oops.. %s ta zabil ked skusal hodit zpat nepriatelsky granat.. +NADE_FAILED = %s neuspel pri pokuse odhodit nepriatelsky granat.. +NADE_MASTER = OMG! %s je granatovy mistr !!! +DISABLED_MSG = Server nema tuto volbu povolenu +MOST_KILLS = Najviac zabitych +KILL = zabitie +KILLS = zabiti +HEADSHOT = headshot +HEADSHOTS = headshotov +BEST_SCORE = Nejlepsie Score +POINTS = bodov +MOST_DAMAGE = Najdrsnejsi +DAMAGE = poskodenie +HIT = zasah +HITS = zasahov +M_KILLS = Zabita: +M_DEATHS = Smrti: +M_SCORE = Score: +M_TKS = TKs: +M_HITS = Zasahov: +M_SHOTS = Striel: +M_HS = HS: +M_WEAPON = Zbran: +M_DAMAGE = Poskozenie: +M_NICK = Nick: +M_YOUR_RANK_IS = Si na +M_THEIR_RANK_IS = Je na +M_OF = z + +[mk] +WHOLEBODY = celo telo +HEAD = glava +CHEST = gradi +STOMACH = stomak +LEFTARM = leva raka +RIGHTARM = desna raka +LEFTLEG = leva noga +RIGHTLEG = desna noga +MULTI_MSG = Multi-Kill! %s^nso %d ubistva (%d vo glava) +ULTRA_MSG = Ultra-Kill!!! %s^nso %d ubistva (%d vo glava) +SPREE_MSG = %s IS ON A KILLING SPREE!!!^nso %d ubistva (%d vo glava) +RAMPAGE_MSG = RAMPAGE!!! %s^nso %d ubistva (%d vo glava) +UNSTOPPABLE_MSG = %s IS UNSTOPPABLE!!!^nso %d ubistva (%d vo glava) +MONSTER_MSG = %s IS A MONSTER!^nso %d ubistva (%d vo glava) +GODLIKE_MSG = %s IS GODLIKE!!!!^nso %d ubistva (%d vo glava) +MULTI_SMALL = %s: Multi-Kill! +ULTRA_SMALL = %s: Ultra-Kill!!! +SPREE_SMALL = %s IS ON A KILLING SPREE!!! +RAMPAGE_SMALL = %s: RAMPAGE!!! +UNSTOPPABLE_SMALL = %s IS UNSTOPPABLE!!! +MONSTER_SMALL = %s IS A MONSTER! +GODLIKE_SMALL = %s IS GODLIKE!!! +KNIFE_MSG1 = %s go isece na parcinja %s +KNIFE_MSG2 = %s go izvadi nozot i go zakla %s +KNIFE_MSG3 = %s se prikrade i go zakla %s +KNIFE_MSG4 = %s go zakla %s +HE_MSG1 = %s mu isprati mal poklon na %s +HE_MSG2 = %s mu frli bomba vo dzeb na %s +HE_MSG3 = %s precizno nafrli kon %s +HE_MSG4 = %s go digna %s vo vozduh +SHE_MSG1 = %s se digna sebe si vo vozduh! +SHE_MSG2 = %s ja proveri ispravnosta na granata! +SHE_MSG3 = %s ja izede granatata! +SHE_MSG4 = %s se raznese sebesi! +HEAD_MSG1 = $kn go pogodi $vn so kursum vo glava! +HEAD_MSG2 = $kn go izbrici $vn^nna glava so $wn +HEAD_MSG3 = $kn go napravi $vn^npuding vo glavata so $wn +HEAD_MSG4 = $vn ostana bez glava od $kn +HEAD_MSG5 = $vn e napraven kechap! +HEAD_MSG6 = $kn odlicno nisani vo glava so $wn^nkako sto primeti i $vn +HEAD_MSG7 = $vn ostana na nisanot od $kn^npodolgo otkolku sto trebase... +DOUBLE_MSG1 = Lele! %s napravi duplo ubistvo!!! +DOUBLE_MSG2 = Kakvo cudo! %s napravi trojno ubistvo !!! +DOUBLE_MSG3 = %s napravi %d ubistva odednas !!! +MORTAR_MSG1 = %s go raznese %s +MORTAR_MSG2 = %s go ubi %s na golema dalecina +KILL_INFO1 = %s te ubi so %s^nna dalecina od %.2f metri.^n +KILL_INFO2 = Toj ti napravi %d steta so %d pogodok(a)^ni seuste ima %d energija.^n +KILL_INFO3 = Ti mu napravi %d steta so %d pogodok(a).^n +KILL_INFO4 = Toj te pogodi vo:^n%s^n +STILL_HAS = %s seuste ima %d energija +NO_KILLER = Nemas ubiec... +TOPX = Top %d +FFIRE_IS = Friendly fire: +ATTACKERS = Te napadnaa: +VICTIMS = Zrtvi: +DMG = steta +HIT_S = pogodok(a) +YOU_HIT = Ti go pogodi %s vo: +SERVER_STATS = Statistika na serverot +SHOW_STATS = Pokazi ja statistikata +SHOW_RANK = Pokazi go rankot +TA_MSG = %s napadna soigrac +TK_MSG = %s ubi svoj soigrac ! +NADE_CAUGHT = Lele! %s ja fati bombata na protivnikot! +NADE_FAILEDTK = Uups.. %s te ubi dodeka sakase da mu ja vratis bombata na neprijatelot +NADE_FAILED = %s ne uspea da mu ja vrati bombata na neprijatelot +NADE_MASTER = LELE! %s e majstor za granati !!! +DISABLED_MSG = Serverot ja iskluci taa opcija +MOST_KILLS = Najmnogu ubistva +KILL = ubistvo +KILLS = ubistva +HEADSHOT = pogodok vo glava +HEADSHOTS = pogodoci vo glava +BEST_SCORE = Najdobar rezultat +POINTS = poeni +MOST_DAMAGE = Najmnogu steta +DAMAGE = steta +HIT = pogodok +HITS = pogodoci +M_KILLS = Ubistva: +M_DEATHS = Bil ubien: +M_SCORE = Rezultat: +M_TKS = TKs: +M_HITS = Pocodoci: +M_SHOTS = Pukanja: +M_HS = Vo glava: +M_WEAPON = Oruzje: +M_DAMAGE = Steta: +M_NICK = Ime: +M_YOUR_RANK_IS = Tvojot rank e +M_THEIR_RANK_IS = Nivniot rank e +M_OF = od diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/statscfg.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/statscfg.txt new file mode 100644 index 0000000..0b9b9e5 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/statscfg.txt @@ -0,0 +1,1499 @@ +[en] +NO_OPTION = Couldn't find option(s) with such variable (name "%s") +STATS_CONF_SAVED = Stats configuration saved successfully +STATS_CONF_FAILED = Failed to save stats configuration!!! +STATS_CONF_LOADED = Stats configuration loaded successfully +STATS_CONF_FAIL_LOAD = Failed to load stats configuration!!! +STATS_CONF = Stats Configuration +STATS_ENTRIES_OF = Entries %i - %i of %i +STATS_USE_MORE = Use 'amx_statscfg list %i' for more +STATS_USE_BEGIN = Use 'amx_statscfg list 1' for begin +STATS_ENABLED = Stats enabled +STATS_DISABLED = Stats disabled +CANT_ADD_STATS = Can't add stats to the list, limit reached! +COM_STATS_USAGE = Usage: amx_statscfg <command> [parameters] ... +COM_STATS_COM = Commands: +COM_STATS_ON = ^ton <variable> - enable specified option +COM_STATS_OFF = ^toff <variable> - disable specified option +COM_STATS_SAVE = ^tsave - save stats configuration +COM_STATS_LOAD = ^tload - load stats configuration +COM_STATS_LIST = ^tlist [id] - list stats status +COM_STATS_ADD = ^tadd <name> <variable> - add stats to the list +NO_STATS = Stats plugins are not^ninstalled on this server^n +SAVE_CONF = Save configuration +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[de] +NO_OPTION = Finde keine Optionen mit dieser Variable (Name "%s") +STATS_CONF_SAVED = Statistik-Konfiguration erfolgreich gespeichert. +STATS_CONF_FAILED = Fehler beim Speichern der Statistik-Konfiguration!!! +STATS_CONF_LOADED = Statistik-Konfiguration erfolgreich geladen +STATS_CONF_FAIL_LOAD = Fehler beim Laden der Statistik-Konfiguration!!! +STATS_CONF = Statistik-Konfiguration +STATS_ENTRIES_OF = Eintraege %i - %i von %i +STATS_USE_MORE = Benutze 'amx_statscfg list %i' fuer mehr Info´s +STATS_USE_BEGIN = Benutze 'amx_statscfg list 1' um zum Anfang zu gelangen +CANT_ADD_STATS = Kann keine Statistik mehr hinzufuegen, das Limit ist erreicht! +COM_STATS_USAGE = Benutze: amx_statscfg <Befehl> [Parameter] ... +COM_STATS_COM = Befehl: +COM_STATS_ON = ^ton <variable> - gibt spezielle Option frei +COM_STATS_OFF = ^toff <variable> - sperrt spezielle Option +COM_STATS_SAVE = ^tsave - speichert Statistik-Konfiguration +COM_STATS_LOAD = ^tload - laedt Statistik-Konfiguration +COM_STATS_LIST = ^tlist [id] - Statistik-Status anzeigen +COM_STATS_ADD = ^tadd <name> <variable> - fuegt eine Statistik zur Liste hinzu +NO_STATS = Statistik-Plugin ist nicht^nauf diesem Server installiert^n +SAVE_CONF = Konfiguration speichern +STATS_ENABLED = Stats enabled +STATS_DISABLED = Stats disabled +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKill Sound +ST_BOMB_PLANTING = Bombe platzieren +ST_BOMB_DEFUSING = Bombe entschaerfen +ST_BOMB_PLANTED = Bombe platziert +ST_BOMB_DEF_SUCC = Bombe entschaerfen erf. +ST_BOMB_DEF_FAIL = Bombe entschaerfen fehl. +ST_BOMB_PICKUP = Bombe aufgenommen +ST_BOMB_DROP = Bombe verloren +ST_BOMB_CD_VOICE = Bomben Countdown Stimme +ST_BOMB_CD_DEF = Bomben Countdown (entschaerfer) +ST_BOMB_SITE = Bomben Platz erreicht +ST_ITALY_BONUS = Italy extra Kill +ST_LAST_MAN = Letzter Mann +ST_KNIFE_KILL = Messer Kill +ST_KNIFE_KILL_SOUND = Messer Kill Sound +ST_HE_KILL = Granaten Kill +ST_HE_SUICIDE = Granaten Selbstmord +ST_HS_KILL = Headshot Kill +ST_HS_KILL_SOUND = Headshot Kill Sound +ST_ROUND_CNT = Runden Zaehler +ST_ROUND_CNT_SOUND = Runden Zaehler Sound +ST_KILL_STR = Kill Serie +ST_KILL_STR_SOUND = Kill Serie Sound +ST_ENEMY_REM = Gegner verbleibend +ST_DOUBLE_KILL = Doppel Kill +ST_DOUBLE_KILL_SOUND = Doppel Kill Sound +ST_PLAYER_NAME = Spieler Name +ST_FIRST_BLOOD_SOUND = Erstes Blut Sound +ST_SHOW_KILLER_CHAT = Zeige Killer HP&AP +ST_SHOW_ATTACKERS = Zeige Angreifer +ST_SHOW_VICTIMS = Zeige Gegner +ST_SHOW_KILLER = Zeige Killer +ST_SHOW_TEAM_SCORE = Zeige Team Score +ST_SHOW_TOTAL_STATS = Zeige totale Stats +ST_SHOW_BEST_SCORE = Zeige besten Score +ST_SHOW_MOST_DISRUPTIVE = Zeige meisten Durchschlaege +ST_SHOW_HUD_STATS_DEF = Standard HUD-Stats +ST_SHOW_DIST_HS_HUD = Distanz&HS in HUD Liste +ST_STATS_PLAYER_MAP_END = Stats am Ende der Map +ST_STATS_TOP15_MAP_END = Top15 am ende der Map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rang Info + +[sr] +NO_OPTION = Nepostoji optcija(e) sa tom promenljivom (ime "%s") +STATS_CONF_SAVED = Podesavanja Statistike su uspesno snimljena +STATS_CONF_FAILED = Podesavanja Statistike su neuspesno snimljena!!! +STATS_CONF_LOADED = Podesavanja Statistike su uspesno ucitana +STATS_CONF_FAIL_LOAD = Podesavanja Statistike su neuspesno ucitana!!! +STATS_CONF = Podesavanja Statistike +STATS_ENTRIES_OF = Vrednosti %i - %i od %i +STATS_USE_MORE = Koristi 'amx_statscfg list %i' za jos +STATS_USE_BEGIN = Koristi 'amx_statscfg list 1' za pocetak +STATS_ENABLED = Statistika ukljucena +STATS_DISABLED = Statistika iskljucena +CANT_ADD_STATS = Nije moguce dodati statistiku na listu, limit popunjen! +COM_STATS_USAGE = Koriscenje: amx_statscfg <komanda> [parametar] ... +COM_STATS_COM = Komande: +COM_STATS_ON = ^ton <variable> - ukljuci opciju +COM_STATS_OFF = ^toff <variable> - iskljuci opciju +COM_STATS_SAVE = ^tsave - sacuvaj podesavanja statistike +COM_STATS_LOAD = ^tload - ucitaj podesavanja statistike +COM_STATS_LIST = ^tlist [id] - prikazi status statistike +COM_STATS_ADD = ^tadd <name> <variable> - dodaj statistiku na kraj liste +NO_STATS = Plugin za statistiku^nnije instaliran na ovom serveru^n +SAVE_CONF = Sacuvaj konfiguraciju +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[tr] +NO_OPTION = O isimde aranan secenek(ler) bulunamadi (isim "%s") +STATS_CONF_SAVED = Statistik configi basari ile saklandi +STATS_CONF_FAILED = Statistik configi malesef saklanamadi!!! +STATS_CONF_LOADED = Statistik configi basari ile yuklendi +STATS_CONF_FAIL_LOAD = Statistik configi malesef yuklenemedi!!! +STATS_CONF = Statistik configi +STATS_ENTRIES_OF = Girisler %i - %i ve %i +STATS_USE_MORE = 'amx_statscfg list %i' i kullanin dahasini gormek icin +STATS_USE_BEGIN = 'amx_statscfg list 1' i kullanin baslatmak icin +CANT_ADD_STATS = Statistik saklanamiyor, sinir asildi! +COM_STATS_USAGE = Kullanim: amx_statscfg <emir> [parametre] ... +COM_STATS_COM = Emirler: +COM_STATS_ON = ^ton <variable> - Ozellikle secilen secenekleri baslat +COM_STATS_OFF = ^toff <variable> - Ozellikle secilen secenekleri durdur +COM_STATS_SAVE = ^tsave - Statistik configini sakla +COM_STATS_LOAD = ^tload - Statistik configini yukle +COM_STATS_LIST = ^tlist [id] - Statistik durumunu listele +COM_STATS_ADD = ^tadd <isim> <deger> - Listeye statistik ekleyin +NO_STATS = Statistik plugini^nserverde mevcud degildir^n +SAVE_CONF = Configleri sakla +STATS_ENABLED = Statistik kullanima acik +STATS_DISABLED = Statistik kullanima kapali +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[fr] +NO_OPTION = Option(s) introuvable(s) avec cette variable (nom ^"%s^") +STATS_CONF_SAVED = Sauvegarde de la configuration des stats effectuee +STATS_CONF_FAILED = Echec de sauvegarde de la configuration des stats!!! +STATS_CONF_LOADED = Chargement de la configuration des stats effectue +STATS_CONF_FAIL_LOAD = Echec du chargement de la configuration des stats!!! +STATS_CONF = Configuration des Stats +STATS_ENTRIES_OF = Entrees %i - %i sur %i +STATS_USE_MORE = Utilise 'amx_statscfg list %i' pour la suite +STATS_USE_BEGIN = Utilise 'amx_statscfg list 1' pour le debut +CANT_ADD_STATS = Limite atteinte, impossible d'ajouter plus de stats! +COM_STATS_USAGE = Utilisation: amx_statscfg <commande> [parametres] ... +COM_STATS_COM = Commandes: +COM_STATS_ON = ^ton <variable> - active l'option specifiee +COM_STATS_OFF = ^toff <variable> - desactive l'option specifiee +COM_STATS_SAVE = ^tsave - sauve la configuration des stats +COM_STATS_LOAD = ^tload - charge la configuration des stats +COM_STATS_LIST = ^tlist [id] - liste le status des stats +COM_STATS_ADD = ^tadd <nom> <variable> - ajoute des stats a la liste +NO_STATS = Les plugins de stats ne sont pas^ninstalles sur ce serveur^n +SAVE_CONF = Sauver la configuration +STATS_ENABLED = Stats activees +STATS_DISABLED = Stats desactivees +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = Son MultiKill +ST_BOMB_PLANTING = Amorcage Bombe +ST_BOMB_DEFUSING = Desamorcage Bombe +ST_BOMB_PLANTED = Bombe Amorcee +ST_BOMB_DEF_SUCC = Bombe Desamorcee +ST_BOMB_DEF_FAIL = Bombe Non Desamorcee +ST_BOMB_PICKUP = Bombe Ramassee +ST_BOMB_DROP = Bombe Lachee +ST_BOMB_CD_VOICE = Compte a Rebours Bombe Vocal +ST_BOMB_CD_DEF = Compte a Rebours (desamorceur) +ST_BOMB_SITE = Point de Bombe Atteint +ST_ITALY_BONUS = Bonus Kill sur Italy +ST_LAST_MAN = Dernier en Vie +ST_KNIFE_KILL = Frag au Couteau +ST_KNIFE_KILL_SOUND = Son Frag au Couteau +ST_HE_KILL = Frag a la Grenade +ST_HE_SUICIDE = Suicide a la Grenade +ST_HS_KILL = HeadShot +ST_HS_KILL_SOUND = Son HeadShot +ST_ROUND_CNT = Compteur de Rounds +ST_ROUND_CNT_SOUND = Son Compteur de Rounds +ST_KILL_STR = Series de Frags +ST_KILL_STR_SOUND = Sons Series de Frags +ST_ENEMY_REM = Ennemi Restant +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Son Double Kill +ST_PLAYER_NAME = Nom de Joueur +ST_FIRST_BLOOD_SOUND = Son First Blood +ST_SHOW_KILLER_CHAT = Montrer HP&AP Tueur +ST_SHOW_ATTACKERS = Montrer Attaquants +ST_SHOW_VICTIMS = Montrer Victimes +ST_SHOW_KILLER = Montrer Tueur +ST_SHOW_TEAM_SCORE = Montrer Scores Equipes +ST_SHOW_TOTAL_STATS = Montrer Stats Totales +ST_SHOW_BEST_SCORE = Montrer Meilleur Score +ST_SHOW_MOST_DISRUPTIVE = Montrer le Plus Actif +ST_SHOW_HUD_STATS_DEF = Stats HUD defaut +ST_SHOW_DIST_HS_HUD = Distance&HS dans listes HUD +ST_STATS_PLAYER_MAP_END = Stats en Fin de Map +ST_STATS_TOP15_MAP_END = Top15 en Fin de Map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Info Rang Spectateur + +[sv] +NO_OPTION = Kunde inte hitta val(en) med en dylik variabel (namn "%s") +STATS_CONF_SAVED = Statistikinst'a'llningar sparade +STATS_CONF_FAILED = Misslyckades att spara inst'a'llningar. +STATS_CONF_LOADED = Statistikinst'a'llningar laddade +STATS_CONF_FAIL_LOAD = Misslyckades att ladda inst'a'llningar. +STATS_CONF = Statistikinst'a'llningar +STATS_ENTRIES_OF = Post %i - %i av %i +STATS_USE_MORE = Skriv 'amx_statscfg list %i' f'o'r mer +STATS_USE_BEGIN = Skriv 'amx_statscfg list 1' f'o'r b'o'rjan +CANT_ADD_STATS = Kan inte ladda till listan, begr'a'nsning nadd! +COM_STATS_USAGE = Skriv: amx_statscfg <kommando> [parametrar] ... +COM_STATS_COM = Kommandon: +COM_STATS_ON = ^ton <variabel> - aktivera markerat val +COM_STATS_OFF = ^toff <variabel> - stoppa markerat val +COM_STATS_SAVE = ^tsave - spara statistikinst'a'llningar +COM_STATS_LOAD = ^tload - ladda statistikinst'a'llningar +COM_STATS_LIST = ^tlist [id] - lista statistikstatus +COM_STATS_ADD = ^tadd <namn> <variabel> - addera statistik till listan +NO_STATS = Statistikplugins e inte installerade pa denna server^n +SAVE_CONF = Spara inst'a'llningar +STATS_ENABLED = Stats enabled +STATS_DISABLED = Stats disabled +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_FLOP15 = Say /flop15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[da] +NO_OPTION = Kunne ikke finde mulighed(er)med en saadan variabel (name "%s") +STATS_CONF_SAVED = Statestik Konfiguration gemt +STATS_CONF_FAILED = Gem Statestik konfiguration mislykkedes!!! +STATS_CONF_LOADED = Statestik Konfiguration indlaest +STATS_CONF_FAIL_LOAD = Indlaes statestik konfiguration mislykkedes!!! +STATS_CONF = Statestik Konfiguration +STATS_ENTRIES_OF = Indskrivninger %i - %i af %i +STATS_USE_MORE = Brug 'amx_statscfg list %i' for mere +STATS_USE_BEGIN = Brug 'amx_statscfg list 1' for at begynde +STATS_ENABLED = Statstik slaaet til +STATS_DISABLED = Statestik slaaet fra +CANT_ADD_STATS = Kan ikke tilfoeje statestik til listen, graense naaet! +COM_STATS_USAGE = Brug: amx_statscfg <kommando> [parameters]... +COM_STATS_COM = Kommandoer: +COM_STATS_ON = ^ton <variable> - Starter specificeret mulighed +COM_STATS_OFF = ^toff <variable> - Stopper specificeret mulighed +COM_STATS_SAVE = ^tsave - Gem statestik konfiguration +COM_STATS_LOAD = ^tload - Indlaes Statestik konfiguration +COM_STATS_LIST = ^tlist [id] - Lister statestik status +COM_STATS_ADD = ^tadd <navn> <variable> - Tilfoejer statestik til listen +NO_STATS = Statestik plugins er ikke ^ninstalleret paa denne server^n +SAVE_CONF = Gem Konfiguration +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[pl] +NO_OPTION = Nie mozna znalesc opcji z podana zmienna (nazwa "%s") +STATS_CONF_SAVED = Konfiguracja statystyk zapisana +STATS_CONF_FAILED = Nie udalo sie zapisac konfiguracji statystyk +STATS_CONF_LOADED = Konfiguracja statystyk zaladowana +STATS_CONF_FAIL_LOAD = Nie udalo sie zaladowac konfiguracji statystyk +STATS_CONF = Konfiguracja statystyk +STATS_ENTRIES_OF = Wpisy %i - %i z %i +STATS_USE_MORE = Uzyj 'amx_statscfg list %i' po wiecej +STATS_USE_BEGIN = Uzyj 'amx_statscfg list 1' do poczatku +CANT_ADD_STATS = Nie mozna dodac statystyk, limit przekroczony +COM_STATS_USAGE = Uzycie: amx_statscfg <komenda> [parametr] ... +COM_STATS_COM = Komendy: +COM_STATS_ON = ^ton <zmienna> - wlacz konkretne opcje +COM_STATS_OFF = ^toff <zmienna> - wylacz konkretne opcje +COM_STATS_SAVE = ^tsave - zapisz konfiguracje statystyk +COM_STATS_LOAD = ^tload - zaladuj konfiguracje statystyk +COM_STATS_LIST = ^tlist [id] - pokaz status statystyk +COM_STATS_ADD = ^tadd <name> <zmienna> - dodaj statystyki do listy +NO_STATS = Pluginy statystyk nie^nistnieja na serwerze^n +SAVE_CONF = Zapisz konfiguracje +STATS_ENABLED = Stats enabled +STATS_DISABLED = Stats disabled +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKill - dzwiek +ST_BOMB_PLANTING = Bomba - Podkladanie +ST_BOMB_DEFUSING = Bomba - Rozbrajanie +ST_BOMB_PLANTED = Bomba Podlozona +ST_BOMB_DEF_SUCC = Bomba Rozbrojona +ST_BOMB_DEF_FAIL = Bomba - Nieudane Rozbrajanie +ST_BOMB_PICKUP = Bomba - Podniesienie +ST_BOMB_DROP = Bomba - Porzucenie +ST_BOMB_CD_VOICE = Bomba - Odliczanie na glos +ST_BOMB_CD_DEF = Bomba - Odliczanie (saper) +ST_BOMB_SITE = Bomb Site osiagniety +ST_ITALY_BONUS = CS Italy - Bonus +ST_LAST_MAN = Ostatni gracz - anons +ST_KNIFE_KILL = Zabicie Nozem - anons +ST_KNIFE_KILL_SOUND = Zabicie Nozem - dzwiek +ST_HE_KILL = Zabicie Granatem - anons +ST_HE_SUICIDE = Samobojstwo Granatem - anons +ST_HS_KILL = Zabicie strzalem w glowe - anons +ST_HS_KILL_SOUND = Zabicie strzalem w glowe - dzwiek +ST_ROUND_CNT = Licznik Rund +ST_ROUND_CNT_SOUND = Licznik Rund - dzwiek +ST_KILL_STR = Serie Zabic +ST_KILL_STR_SOUND = Serie Zabic - dzwiek +ST_ENEMY_REM = Pozostali wrogowie +ST_DOUBLE_KILL = Podwojne Zabicie +ST_DOUBLE_KILL_SOUND = Podwojne Zabicie - dzwiek +ST_PLAYER_NAME = Nick Gracza +ST_FIRST_BLOOD_SOUND = Pierwsza Krew - dzwiek +ST_SHOW_KILLER_CHAT = HP & AP Zabojcy +ST_SHOW_ATTACKERS = Pokaz Atakujacych +ST_SHOW_VICTIMS = Pokaz Ofiary +ST_SHOW_KILLER = Pokaz Zabojce +ST_SHOW_TEAM_SCORE = Pokaz Wynik Gry +ST_SHOW_TOTAL_STATS = Pokaz Statystyki Sumaryczne +ST_SHOW_BEST_SCORE = Pokaz Najlepszego Rundy +ST_SHOW_MOST_DISRUPTIVE = Pokaz Najb. Raniacego Rundy +ST_SHOW_HUD_STATS_DEF = Statystyki HUD podstawowe +ST_SHOW_DIST_HS_HUD = Odleglosc i HS w HUD +ST_STATS_PLAYER_MAP_END = Statystyki na koniec mapy +ST_STATS_TOP15_MAP_END = Top15 na koniec mapy +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Rankingi w Obserwatorze + +[nl] +NO_OPTION = Kon opties met zo'n variabele niet vinden (naam "%s") +STATS_CONF_SAVED = Statistiekconfiguratie bewaren gelukt +STATS_CONF_FAILED = Bewaren van statistiekconfiguratie mislukt!!! +STATS_CONF_LOADED = Statistiekconfiguratie laden gelukt +STATS_CONF_FAIL_LOAD = Laden van statistiekconfiguratie mislukt!!! +STATS_CONF = Statistiekinstellingen +STATS_ENTRIES_OF = Ingangen %i - %i van de %i +STATS_USE_MORE = Typ 'amx_statscfg list %i' voor meer +STATS_USE_BEGIN = Typ 'amx_statscfg list 1' voor begin +STATS_ENABLED = Statistieken ingeschakeld +STATS_DISABLED = Statistieken uitgeschakeld +CANT_ADD_STATS = Kan statistieken niet bij de lijst voegen, limiet bereikt! +COM_STATS_USAGE = Typ: amx_statscfg <commando> [parameters] ... +COM_STATS_COM = Commando's: +COM_STATS_ON = ^ton <variabele> - schakel gespecificeerde optie in +COM_STATS_OFF = ^toff <variabele> - schakel gespecificeerde optie uit +COM_STATS_SAVE = ^tsave - bewaar stats configuration +COM_STATS_LOAD = ^tload - laad stats configuration +COM_STATS_LIST = ^tlist [id] - lijst stats status +COM_STATS_ADD = ^tvoeg toe <naam> <variabele> - voeg stats toe aan de lijst +NO_STATS = Stats plugins zijn niet^ngeinstalleerd op deze server^n +SAVE_CONF = Configuratie Bewaren +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[es] +NO_OPTION = No se encontraron opcion(es) con dicha variable (nombre "%s") +STATS_CONF_SAVED = Configuracion de estadisticas guardada con exito +STATS_CONF_FAILED = No se pudo guardar la configuracion de estadisticas!!! +STATS_CONF_LOADED = Configuracion de estadisticas cargada con exito +STATS_CONF_FAIL_LOAD = No se pudo cargar la configuracion de estadisticas!!! +STATS_CONF = Configuracion de Estadisticas +STATS_ENTRIES_OF = Entradas %i - %i de %i +STATS_USE_MORE = Escribe 'amx_statscfg list %i' para mostrar mas +STATS_USE_BEGIN = Escribe 'amx_statscfg list 1' para volver al principio +STATS_ENABLED = Estadisticas activadas +STATS_DISABLED = Estadisticas desactivadas +CANT_ADD_STATS = No se pudieron anyadir mas estadisticas a la lista, se ha alcanzado el limite! +COM_STATS_USAGE = Uso: amx_statscfg <comando> [parametros] ... +COM_STATS_COM = Comandos: +COM_STATS_ON = ^ton <variable> - activa la opcion especificada +COM_STATS_OFF = ^toff <variable> - desactiva la opcion especificada +COM_STATS_SAVE = ^tsave - guarda la configuracion de las estadisticas +COM_STATS_LOAD = ^tload - carga la configuracion de las estadisticas +COM_STATS_LIST = ^tlist [id] - muestra el estado de las estadisticas +COM_STATS_ADD = ^tadd <nombre> <variable> - anyade estadisticas a la lista +NO_STATS = No hay plugins estadisticos^ninstalados en este servidor^n +SAVE_CONF = Guardar configuracion +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[bp] +NO_OPTION = Nao pode achar opcao(oes) com tal(is) variavel(is) (nome "%s") +STATS_CONF_SAVED = Configuracao de Stats salva com sucesso +STATS_CONF_FAILED = Falhou ao salvar a configuracao de Stats!!! +STATS_CONF_LOADED = Configuracao de Stats carregada com sucesso +STATS_CONF_FAIL_LOAD = Falhou ao carregar configuracao de Stats!!! +STATS_CONF = Configuracao de Stats +STATS_ENTRIES_OF = Entradas %i - %i de %i +STATS_USE_MORE = Use 'amx_statscfg listando %i' para ver mais +STATS_USE_BEGIN = Use 'amx_statscfg listando 1' para voltar ao inicio +STATS_ENABLED = Stats ativado +STATS_DISABLED = Stats desativado +CANT_ADD_STATS = Nao pode acrescentar stats a lista, limite maximo alcancado! +COM_STATS_USAGE = Use: amx_statscfg <comando> [parametros]... +COM_STATS_COM = Comandos: +COM_STATS_ON = ^ton <variavel> - habilitar opcao desejada +COM_STATS_OFF = ^toff <variavel> - desabilitar opcao desejada +COM_STATS_SAVE = ^tsave - salvar configuracao de stats +COM_STATS_LOAD = ^tload - carregar configuracao de stats +COM_STATS_LIST = ^tlist [id] - listar estado de stats +COM_STATS_ADD = ^tadd <nome> <variavel> - acrescentar stats a lista +NO_STATS = plugins de Stats nao esta^ninstalado neste server^n +SAVE_CONF = Salvar configuracao +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = Som de MultiKill +ST_BOMB_PLANTING = Plantando Bomba +ST_BOMB_DEFUSING = Defusando Bomba +ST_BOMB_PLANTED = Bomba Plantada +ST_BOMB_DEF_SUCC = Bomba Defusada +ST_BOMB_DEF_FAIL = Falha ao Defusar a Bomba +ST_BOMB_PICKUP = Bomba Recolhida +ST_BOMB_DROP = Bomba Dropada +ST_BOMB_CD_VOICE = Voz da Contagem da Bomba +ST_BOMB_CD_DEF = Contagem da Bomba (defusando) +ST_BOMB_SITE = TRs no Bomb Sute +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Ultimo Homem +ST_KNIFE_KILL = Frag de Faca +ST_KNIFE_KILL_SOUND = Som de Frag de Faca +ST_HE_KILL = Frag de Granada +ST_HE_SUICIDE = Suicidio de Granada +ST_HS_KILL = HeadShot +ST_HS_KILL_SOUND = Som de HeadShot +ST_ROUND_CNT = Contador de Rounds +ST_ROUND_CNT_SOUND = Som de Contador de Rounds +ST_KILL_STR = Serie de Frags +ST_KILL_STR_SOUND = Som de Serie de Frags +ST_ENEMY_REM = Inimigo Restante +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Som de Double Kill +ST_PLAYER_NAME = Nome do Jogador +ST_FIRST_BLOOD_SOUND = Som de First Blood +ST_SHOW_KILLER_CHAT = Mostre o assassino HP&AP +ST_SHOW_ATTACKERS = Mostre os Atacantes +ST_SHOW_VICTIMS = Mostre as Vitimas +ST_SHOW_KILLER = Mostre o assassino +ST_SHOW_TEAM_SCORE = Mostre o Score do Time +ST_SHOW_TOTAL_STATS = Mostre o Stats Total +ST_SHOW_BEST_SCORE = Mostre o Melhor Score +ST_SHOW_MOST_DISRUPTIVE = Mostre o Mais Destrutivo +ST_SHOW_HUD_STATS_DEF = Stats HUD padrao +ST_SHOW_DIST_HS_HUD = Distancia&HS na lista HUD +ST_STATS_PLAYER_MAP_END = Stats no final do map +ST_STATS_TOP15_MAP_END = Top15 nofinal do mapa +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Info de Rank para Espectador + +[cz] +NO_OPTION = Nemuzu najit volbu s takovou promennou (jmeno "%s") +STATS_CONF_SAVED = Konfigurace statistik ulozena +STATS_CONF_FAILED = Konfigurace statistik se NEULOZILA!!! +STATS_CONF_LOADED = Konfigurace statistik nactena +STATS_CONF_FAIL_LOAD = Konfigurace statistik se NENACETLA!!! +STATS_CONF = Konfigurace statistik +STATS_ENTRIES_OF = Polozky %i - %i z %i +STATS_USE_MORE = Napis 'amx_statscfg list %i' pro vice +STATS_USE_BEGIN = Napis 'amx_statscfg list 1' pro zacatek +STATS_ENABLED = Statistiky povoleny +STATS_DISABLED = Statistiky zakazany +CANT_ADD_STATS = Nemuzu pridat statistiky do seznamu, limit prekrocen!!! +COM_STATS_USAGE = Napis: amx_statscfg <command> [parameters] ... +COM_STATS_COM = Prikazy: +COM_STATS_ON = ^ton <variable> - povoli specifickou volbu +COM_STATS_OFF = ^toff <variable> - zakaze specifickou volbu +COM_STATS_SAVE = ^tsave - ulozi konfiguraci statistik +COM_STATS_LOAD = ^tload - nacte konfiguraci statistik +COM_STATS_LIST = ^tlist [id] - Seznam statistik +COM_STATS_ADD = ^tadd <name> <variable> - prida statistiku do seznamu +NO_STATS = Statistika neni^ninstalovana na tomto serveru^n +SAVE_CONF = Ulozit konfiguraci +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[fi] +NO_OPTION = Ei loydetty asetuksia tuolla muuttujan nimella (nimi "%s") +STATS_CONF_SAVED = Tilastojen saadot tallenettiin onnistuneesti +STATS_CONF_FAILED = Tilastojen saatojen tallentaminen epaonnistui +STATS_CONF_LOADED = Tilastojen saadot ladattiin onnistuneesti +STATS_CONF_FAIL_LOAD = Tilastojen lataaminen epaonnistui +STATS_ENTRIES_OF = Kohdat %i - %i. Kaikkiaan %i +STATS_USE_MORE = Kirjoita 'amx_statscfg list %i' saadaksesi lisatietoa +STATS_USE_BEGIN = Kirjoita 'amx_statscfg list 1' aloittaaksesi +STATS_ENABLED = Tilastot kaytossa +STATS_DISABLED = Tilastot pois kaytosta +CANT_ADD_STATS = Ei voi lisata tilastoja listaan, raja ylitetty +COM_STATS_USAGE = Kaytto: amx_statscfg <komento> [parametrit] ... +COM_STATS_COM = Komennot: +COM_STATS_ON = ^ton <muuttuja> - Ota maaritelty toiminto kayttoon +COM_STATS_OFF = ^toff <variable> - Ota maaritelty toiminto pois kaytosta +COM_STATS_SAVE = ^tsave - Tallenna tilastojen saadot +COM_STATS_LOAD = ^tload - Lataa tilastojen saadot +COM_STATS_LIST = ^tlist [id] - Listaa tilastojen tila +COM_STATS_ADD = ^tadd <nimi> <muuttuja> - Lisaa tilastoja listaan +NO_STATS = Tilastopluginit eivat ole asennettuna talla palvelimellar^n +SAVE_CONF = Tallenna saadot +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[ls] +NO_OPTION = C0|_|ld|\|'t f!|\|d 0pt!0|\|(s) w!th s|_|(h v4r!4bl3 (|\|4m3 "%s") +STATS_CONF_SAVED = $t4tz0|2 (0|\|f!g|_|r4t!0|\| s4v3d s|_|((3ssf|_|lly +STATS_CONF_FAILED = F4!l3d t0 s4v3 $t4tz0|2 (0|\|f!g|_|r4t!0|\|!!! +STATS_CONF_LOADED = $t4tz0|2 (0|\|f!g|_|r4t!0|\| l04d3d s|_|((3ssf|_|lly +STATS_CONF_FAIL_LOAD = F4!l3d t0 l04d $t4tz0|2 (0|\|f!g|_|r4t!0|\|!!! +STATS_CONF = $t4tz0|2 C0|\|f!g|_|r4t!0|\| +STATS_ENTRIES_OF = E|\|tr!3s %i - %i 0f %i +STATS_USE_MORE = Us3 'amx_statscfg list %i' f0r m0r3 +STATS_USE_BEGIN = Us3 'amx_statscfg list 1' f0r b3g!|\| +STATS_ENABLED = $t4tz0|2 3|\|4bl3d +STATS_DISABLED = $t4tz0|2 d!s4bl3d +CANT_ADD_STATS = C4|\|'t 4dd $t4tz0|2 t0 th3 l!st, l!m!t r34(h3d! +COM_STATS_USAGE = Us4g3: amx_statscfg <command> [parameters] ... +COM_STATS_COM = C0mm4|\|ds: +COM_STATS_ON = ^ton <variable> - 3|\|4bl3 sp3(!f!3d 0pt!0|\| +COM_STATS_OFF = ^toff <variable> - d!s4bl3 sp3(!f!3d 0pt!0|\| +COM_STATS_SAVE = ^tsave - s4v3 $t4tz0|2 (0|\|f!g|_|r4t!0|\| +COM_STATS_LOAD = ^tload - l04d $t4tz0|2 (0|\|f!g|_|r4t!0|\| +COM_STATS_LIST = ^tlist [id] - l!st $t4tz0|2 st4t|_|s +COM_STATS_ADD = ^tadd <name> <variable> - 4dd $t4tz0|2 t0 th3 l!st +NO_STATS = $t4tz0|2 pl|_|g!|\|s 4r3 |\|0t^n!|\|st4ll3d 0|\| th!s s3rv3r^n +SAVE_CONF = S4v3 (0|\|f!g|_|r4t!0|\| +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[bg] +NO_OPTION = Neuspe6no namerena opcia(i) s takav variable (ime "%s") +STATS_CONF_SAVED = configuraciata na statisticata e zapametena uspe6no +STATS_CONF_FAILED = configuraciata na statisticata ne e zapametena uspe6no!!! +STATS_CONF_LOADED = configuraciata na statisticata e prika4ena uspe6no +STATS_CONF_FAIL_LOAD = configuraciata na statisticata ne e prika4ena uspe6no!!! +STATS_CONF = configuraciata na statisticata +STATS_ENTRIES_OF = Vkarani %i - %i ot %i +STATS_USE_MORE = Izpolzvai 'amx_statscfg list %i' za pove4e +STATS_USE_BEGIN = Izpolzvai 'amx_statscfg list 1' za na4alo +STATS_ENABLED = statisticata e vklu4ena +STATS_DISABLED = statisticata e izklu4ena +CANT_ADD_STATS = Nemoje da se dobavi statisticata kam tozi list, limita e dostignat! +COM_STATS_USAGE = Izpolzvano: amx_statscfg <comanda> [parametri] ... +COM_STATS_COM = Comandi: +COM_STATS_ON = ^ton <variable> - vklu4ena e specifi4nata opcia +COM_STATS_OFF = ^toff <variable> - izklu4ena e specifi4nata opcia +COM_STATS_SAVE = ^tsave - zapameti configuraciata na statistikata +COM_STATS_LOAD = ^tload - prika4i configuraciata na statistikata +COM_STATS_LIST = ^tlist [id] - list na statusa na statistikata +COM_STATS_ADD = ^tadd <name> <variable> - dobavi statistikata kam lista +NO_STATS = pluginite za statistikata ne sa^ninstalirani na tozi server^n +SAVE_CONF = Zapameti configuraciata +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[ro] +NO_OPTION = Couldn't find option(s) with such variable (name "%s") +STATS_CONF_SAVED = Configuratia stats a fost salvata cu succes +STATS_CONF_FAILED = Salvarea configuratiei stats a esuat!!! +STATS_CONF_LOADED = Configuratia stats a fost incarcata cu succes +STATS_CONF_FAIL_LOAD = Incarcarea configuratiei stats a esuat!!! +STATS_CONF = Configuratie Stats +STATS_ENTRIES_OF = Intrari %i - %i din %i +STATS_USE_MORE = Scrie 'amx_statscfg list %i' pentru mai mult +STATS_USE_BEGIN = Scrie 'amx_statscfg list 1' pentru inceput +STATS_ENABLED = Stats activat +STATS_DISABLED = Stats dezactivat +CANT_ADD_STATS = Nu se pot adauga stats la lista, limita depasita! +COM_STATS_USAGE = Folosire: amx_statscfg <comanda> [parametri] ... +COM_STATS_COM = Comenzi: +COM_STATS_ON = ^ton <variabila> - activeaza optiunea specificata +COM_STATS_OFF = ^toff <variabila> - dezactiveaza optiunea specificata +COM_STATS_SAVE = ^tsave - salveaza configuratia stats +COM_STATS_LOAD = ^tload - incarca configuratia stats +COM_STATS_LIST = ^tlist [id] - lista statut stats +COM_STATS_ADD = ^tadd <nume> <variabila> - adauga stats la lista +NO_STATS = Plugin-urile stats nu sunt^ninstalate pe acest server^n +SAVE_CONF = Salveaza configuratie +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[hu] +NO_OPTION = Nem talalhato Funkcio a megadott nevvel (nev "%s") +STATS_CONF_SAVED = Beallitasok sikeresen mentve +STATS_CONF_FAILED = Nem sikerult a mentes!!! +STATS_CONF_LOADED = Beallitasok sikeresen betoltbe +STATS_CONF_FAIL_LOAD = Nem sikerult betolteni a beallitasokat!!! +STATS_CONF = Statisztika beallitasok +STATS_ENTRIES_OF = Entries %i - %i of %i +STATS_USE_MORE = Irj 'amx_statscfg list %i' a tobbihez +STATS_USE_BEGIN = Irj 'amx_statscfg list 1' az elsohoz +STATS_ENABLED = Stats engedelyezve +STATS_DISABLED = Stats letiltva +CANT_ADD_STATS = Nem lehet tobb statot hozzaadni, limit elerve! +COM_STATS_USAGE = Hasznalat: amx_statscfg <command> [parameters] ... +COM_STATS_COM = Parancsok: +COM_STATS_ON = ^ton <variable> - enable specified option +COM_STATS_OFF = ^toff <variable> - disable specified option +COM_STATS_SAVE = ^tsave - beallitasok mentese +COM_STATS_LOAD = ^tload - beallitasok betoltese +COM_STATS_LIST = ^tlist [id] - list stats status +COM_STATS_ADD = ^tadd <name> <variable> - add stats to the list +NO_STATS = Statisztika pluginok^nnincsenek installalva ezen a szerveren^n +SAVE_CONF = Beallitasok mentese +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[lt] +NO_OPTION = Negali surasti tokios optijos su tokiu kintamuoju (vardas "%s") +STATS_CONF_SAVED = Statistikos konfiguracija issaugota +STATS_CONF_FAILED = Nepavyko issaugoti statistikos konfigo!!! +STATS_CONF_LOADED = Statistikos konfigas uzkrautas +STATS_CONF_FAIL_LOAD = Nepavyko uzkrauti statistikos konfigo!!! +STATS_CONF = Statistikos konfiguravimas +STATS_ENTRIES_OF = Irasai %i - %i is %i +STATS_USE_MORE = Naudok 'amx_statscfg list %i' del daugiau +STATS_USE_BEGIN = Naudok 'amx_statscfg list 1' kad pradetum +STATS_ENABLED = Statusai ijungti +STATS_DISABLED = Statusai isjungti +CANT_ADD_STATS = Negali ikelti statusu i sarasa, limitas pasiektas! +COM_STATS_USAGE = Naudojimas: amx_statscfg <komanda> [parametrai] ... +COM_STATS_COM = Komandos: +COM_STATS_ON = ^tijungti <kintamasis> - ijungti spec nustatyma +COM_STATS_OFF = ^tisjungti <kintamasis> - isjungti spec nustatyma +COM_STATS_SAVE = ^tissaugoti - issaugoti statusu konfiga +COM_STATS_LOAD = ^tuzkrauti - uzkrauti statusu konfiga +COM_STATS_LIST = ^tsarasas [id] - surusiuoti statusu sarasa +COM_STATS_ADD = ^tprideti <vardas> <kintamasis> - ikelti statusa i sarasa +NO_STATS = Statusu pluginas nera ^ninstaliuotas sitame serve^n +SAVE_CONF = Issaugoti konfiguracija +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[sk] +NO_OPTION = Nemozem najst volbu s takouto premennou (meno "%s") +STATS_CONF_SAVED = Konfiguracia statistik ulozena +STATS_CONF_FAILED = Konfiguracia statistik sa NEULOZILA!!! +STATS_CONF_LOADED = Konfiguracia statistik nacitana +STATS_CONF_FAIL_LOAD = Konfiguracia statistik sa NENACITALA!!! +STATS_CONF = Konfiguracia statistik +STATS_ENTRIES_OF = Polozky %i - %i z %i +STATS_USE_MORE = Napis 'amx_statscfg list %i' pre viac +STATS_USE_BEGIN = Napis 'amx_statscfg list 1' pre zaciatok +STATS_ENABLED = Statistiky povolene +STATS_DISABLED = Statistiky zakazane +CANT_ADD_STATS = Nemozem pridat statistiky do zoznamu, limit prekroceny!!! +COM_STATS_USAGE = Napis: amx_statscfg <command> [parameters] ... +COM_STATS_COM = Prikazy: +COM_STATS_ON = ^ton <variable> - povoli specificku volbu +COM_STATS_OFF = ^toff <variable> - zakaze specificku volbu +COM_STATS_SAVE = ^tsave - ulozi konfiguraciu statistik +COM_STATS_LOAD = ^tload - nacita konfiguraciu statistik +COM_STATS_LIST = ^tlist [id] - Zoznam statistik +COM_STATS_ADD = ^tadd <name> <variable> - prida statistiku do zoznamu +NO_STATS = Statistika neni^nnainstalovana na tomto servery^n +SAVE_CONF = Ulozit konfiguraciu +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info + +[mk] +NO_OPTION = Ne postoi opcija so takva vrednost (ime "%s") +STATS_CONF_SAVED = Izmenite vo statistikata se uspesno zacuvani +STATS_CONF_FAILED = Izmenite vo statistikata ne se zacuvani!!! +STATS_CONF_LOADED = Izmenite vo statistikata se uspesno vcitani +STATS_CONF_FAIL_LOAD = Izmenite vo statistikata ne se vcitani!!! +STATS_CONF = Podesuvanja Za Statistikata +STATS_ENTRIES_OF = Vrednosti %i - %i od %i +STATS_USE_MORE = Napisi 'amx_statscfg list %i' za uste +STATS_USE_BEGIN = Napisi 'amx_statscfg list 1' za od pocetok +STATS_ENABLED = Statistikata e uklucena +STATS_DISABLED = Statistikata e isklucena +CANT_ADD_STATS = Ne moze da se dodade statistika na listata, limitot e dostignat! +COM_STATS_USAGE = Koristenje: amx_statscfg <komanda> [vrednost] ... +COM_STATS_COM = Komandi: +COM_STATS_ON = ^ton <vrednost> - ukluci ja izbranata opcijata +COM_STATS_OFF = ^toff <vrednost> - iskluci ja izbranata opcijata +COM_STATS_SAVE = ^tsave - zacuvaj gi podesuvanjata za statistikata +COM_STATS_LOAD = ^tload - vcitaj podesuvanja za statistikata +COM_STATS_LIST = ^tlist [id] - prikazi go statusot za statistikata +COM_STATS_ADD = ^tadd <name> <variable> - dodaj statistika na krajot od listata +NO_STATS = Plaginot za statistika^nne e instaliran na ovoj server^n +SAVE_CONF = Zacuvaj ja konfiguracijata +ST_MULTI_KILL = MultiKill +ST_MULTI_KILL_SOUND = MultiKillSound +ST_BOMB_PLANTING = Bomb Planting +ST_BOMB_DEFUSING = Bomb Defusing +ST_BOMB_PLANTED = Bomb Planted +ST_BOMB_DEF_SUCC = Bomb Defuse Succ. +ST_BOMB_DEF_FAIL = Bomb Def. Failure +ST_BOMB_PICKUP = Bomb PickUp +ST_BOMB_DROP = Bomb Drop +ST_BOMB_CD_VOICE = Bomb Countdown Voice +ST_BOMB_CD_DEF = Bomb Countdown (defuser) +ST_BOMB_SITE = Bomb Site Reached +ST_ITALY_BONUS = Italy Bonus Kill +ST_LAST_MAN = Last Man +ST_KNIFE_KILL = Knife Kill +ST_KNIFE_KILL_SOUND = Knife Kill Sound +ST_HE_KILL = Grenade Kill +ST_HE_SUICIDE = Grenade Suicide +ST_HS_KILL = HeadShot Kill +ST_HS_KILL_SOUND = HeadShot Kill Sound +ST_ROUND_CNT = Round Counter +ST_ROUND_CNT_SOUND = Round Counter Sound +ST_KILL_STR = Killing Streak +ST_KILL_STR_SOUND = Killing Streak Sound +ST_ENEMY_REM = Enemy Remaining +ST_DOUBLE_KILL = Double Kill +ST_DOUBLE_KILL_SOUND = Double Kill Sound +ST_PLAYER_NAME = Player Name +ST_FIRST_BLOOD_SOUND = First Blood Sound +ST_SHOW_KILLER_CHAT = Show Killer HP&AP +ST_SHOW_ATTACKERS = Show Attackers +ST_SHOW_VICTIMS = Show Victims +ST_SHOW_KILLER = Show Killer +ST_SHOW_TEAM_SCORE = Show Team Score +ST_SHOW_TOTAL_STATS = Show Total Stats +ST_SHOW_BEST_SCORE = Show Best Score +ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive +ST_SHOW_HUD_STATS_DEF = Show HUD-stats default +ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists +ST_STATS_PLAYER_MAP_END = Stats at the end of map +ST_STATS_TOP15_MAP_END = Top15 at the end of map +ST_SAY_HP = Say /hp +ST_SAY_STATSME = Say /statsme +ST_SAY_RANKSTATS = Say /rankstats +ST_SAY_ME = Say /me +ST_SAY_RANK = Say /rank +ST_SAY_REPORT = Say /report +ST_SAY_SCORE = Say /score +ST_SAY_TOP15 = Say /top15 +ST_SAY_STATS = Say /stats +ST_SPEC_RANK = Spec. Rank Info diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/statsx.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/statsx.txt new file mode 100644 index 0000000..f0d536c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/statsx.txt @@ -0,0 +1,1024 @@ +[en] +WHOLEBODY = wholebody +HEAD = head +CHEST = chest +STOMACH = stomach +LEFTARM = leftarm +RIGHTARM = rightarm +LEFTLEG = leftleg +RIGHTLEG = rightleg +MODE_SET_TO = "amx_statsx_mode" set to "%s" +ATTACKERS = Attackers +ACC = acc. +HIT_S = hit(s) +DMG = dmg +VICTIMS = Victims +MOST_DMG = Most damage done by +KILLED_YOU_DIST = %s killed you with %s^nfrom distance of %0.2f meters. +DID_DMG_HITS = He did %d damage to you with %d hit(s)^nand still has %dhp and %dap. +YOU_DID_DMG = You did %d damage to him with %d hit(s). +EFF = eff. +BEST_SCORE = Best score +KILL_S = kill(s) +TOTAL = Total +SHOT_S = shot(s) +HITS_YOU_IN = %s hits you in +KILLED_BY_WITH = Killed by %s with %s @ %0.0fm +NO_HITS = no hits +YOU_NO_KILLER = You have no killer... +YOU_HIT = You hit %s %d time(s), %d damage +LAST_RES = Last result: %d hit(s), %d damage +KILLS = Kills +DEATHS = Deaths +HITS = Hits +SHOTS = Shots +YOUR = Your +PLAYERS = Players +RANK_IS = rank is %d of %d +DAMAGE = Damage +WEAPON = Weapon +YOUR_RANK_IS = Your rank is %d of %d with %d kill(s), %d hit(s), %0.2f%% eff. and %0.2f%% acc. +AMMO = ammo +HEALTH = health +ARMOR = armor +GAME_SCORE = Game score +STATS_ANNOUNCE = You have %s stats announcements +ENABLED = enabled +DISABLED = disabled +SERVER_STATS = Server Stats +X_RANK_IS = %s's rank is %d of %d +DISABLED_MSG = Server has disabled that option + +[de] +WHOLEBODY = Koerper +HEAD = Kopf +CHEST = Oberkoerper +STOMACH = Bauch +LEFTARM = linker Arm +RIGHTARM = rechter Arm +LEFTLEG = linkes Bein +RIGHTLEG = rechtes Bein +MODE_SET_TO = "amx_statsx_mode" gesetzt auf "%s" +ATTACKERS = Angreifer +ACC = Genauigkeit +HIT_S = Treffer +DMG = Schaden +VICTIMS = Sieger +MOST_DMG = Am meisten verursachter Schaden durch +KILLED_YOU_DIST = %s hat dich getoetet ^naus einer Entfernung von %0.2f Metern. +DID_DMG_HITS = Er verursachte %d Schaden bei dir mit %d Treffern^nund hat noch %dhp und %dap. +YOU_DID_DMG = Du hast %d Schaden bei ihm angerichtet mit %d Treffern. +EFF = Effizienz +BEST_SCORE = Die meisten Punkte +KILL_S = Kill(s) +TOTAL = Total +SHOT_S = Schuesse +HITS_YOU_IN = %s Treffer bei ihm +KILLED_BY_WITH = Getoetet von %s mit %s @ %0.0fm +NO_HITS = keine Treffer +YOU_NO_KILLER = Du hast niemanden getoetet... +YOU_HIT = Deine Treffer: %s %d mal, %d Schaden +LAST_RES = Letztes Ergebnis: %d Treffer, %d Schaden +KILLS = Kills +DEATHS = Deaths +HITS = Treffer +SHOTS = Schuesse +YOUR = Dein +PLAYERS = Spieler +RANK_IS = Platzierung: %d von %d +DAMAGE = Schaden +WEAPON = Waffe +YOUR_RANK_IS = Deine Platzierung: %d von %d mit %d Kill(s), %d Treffer, %0.2f%% eff. und %0.2f%% acc. +AMMO = Munition +HEALTH = Gesundheit +ARMOR = Ruestung +GAME_SCORE = Punkte +STATS_ANNOUNCE = Du hast %s Statistik-Meldungen +ENABLED = eingeschaltet +DISABLED = ausgeschaltet +SERVER_STATS = Serverstatistik +X_RANK_IS = %s's Platzierung: %d von %d +DISABLED_MSG = Der Server hat diese Option ausgeschaltet. + +[sr] +WHOLEBODY = celo telo +HEAD = glava +CHEST = grudi +STOMACH = stomak +LEFTARM = leva ruka +RIGHTARM = desna ruka +LEFTLEG = leva noga +RIGHTLEG = desna noga +MODE_SET_TO = "amx_statsx_mode" je namesten na "%s" +ATTACKERS = Napadaci +ACC = acc. +HIT_S = pogodak(a) +DMG = steta +VICTIMS = Zrtve +MOST_DMG = Najvise stete naneseno od +KILLED_YOU_DIST = %s te je ubio sa %s^nsa razdaljine od %0.2f metara. +DID_DMG_HITS = Napravio ti je %d sa %d pogodak(a)^ni ima %dhp i %dap. +YOU_DID_DMG = Napravio si mu %d stete sa %d pogodak(a). +EFF = eff. +BEST_SCORE = Najbolji score +KILL_S = ubistava +TOTAL = Ukupno +SHOT_S = pucanja +HITS_YOU_IN = %s te je pogodio +KILLED_BY_WITH = Killed by %s sa %s @ %0.0fm +NO_HITS = nema pogodaka +YOU_NO_KILLER = You have no killer... ??? +YOU_HIT = Pogodio si %s %d put(a), %d stete +LAST_RES = Poslednji rezultat: %d pogodak(a), %d stete +KILLS = Ubistva +DEATHS = Smrti +HITS = Pogodaka +SHOTS = Pucanja +YOUR = Tvoj(a)??? +PLAYERS = Igraca +RANK_IS = rank je %d od %d +DAMAGE = Steta +WEAPON = Oruzje +YOUR_RANK_IS = Tvoj rank je %d od %d sa %d ubistva, %d pogodaka, %0.2f%% efikasnost. i %0.2f%% preciznosti. +AMMO = municija +HEALTH = energija +ARMOR = stit +GAME_SCORE = Rezultat igre +STATS_ANNOUNCE = Imate %s najava +ENABLED = ukljucen +DISABLED = iskljucen +SERVER_STATS = Statistika Servera +X_RANK_IS = %s rank je %d od %d +DISABLED_MSG = Server je iskljucio tu opciju + +[tr] +WHOLEBODY = Vucut +HEAD = Kafa +CHEST = Dos +STOMACH = Migde +LEFTARM = Sol-kol +RIGHTARM = Sag-kol +LEFTLEG = Sol-bacak +RIGHTLEG = Sag-bacak +MODE_SET_TO = "amx_statsx_mode" bu ayari tasiyor "%s" +ATTACKERS = Saldiran(lar) +ACC = isabet. +HIT_S = vurus +DMG = zarar +VICTIMS = Magdur(lar) +MOST_DMG = En fazla zarar veren +KILLED_YOU_DIST = %s Sizi %s^n silah ile vurdu %0.2f metre mesafesinden. +DID_DMG_HITS = Size verdigi zarar %d silah ile %d ^nve halen %dhp kendi gucu ve %dap celigi var. +YOU_DID_DMG = Sizin verdiginiz zarar %d kullandiginiz silah %d. +EFF = efektif +BEST_SCORE = En iyi puan +KILL_S = oldurulen(ler) +TOTAL = Tam +SHOT_S = vurus(lar) +HITS_YOU_IN = %s isabet ile sizi vurdu +KILLED_BY_WITH = Sizi olduren %s kullandigi %s @ %0.0fm +NO_HITS = isabetsiz atis +YOU_NO_KILLER = Sizi olduren yok... +YOU_HIT = %s vurdunuz %d kez, %d zarar +LAST_RES = Son sonuc: %d vurus, %d zarar +KILLS = oldurdugunuz +DEATHS = kendi oldugunuz +HITS = vurdugunuz +SHOTS = kursun(lar) +YOUR = Sizin +PLAYERS = Oyuncular +RANK_IS = Statistik %d ve %d +DAMAGE = Zarar +WEAPON = Silah +YOUR_RANK_IS = Sizin statistik %d ve %d kullanim %d oldurulen, %d vuruslar, %0.2f%% eff. ve %0.2f%% isabet +AMMO = kursun +HEALTH = saglik +ARMOR = celik +GAME_SCORE = Oyun scoru +STATS_ANNOUNCE = sizin %s statistik konulariniz +ENABLED = kullanimda +DISABLED = kullanilmiyor +SERVER_STATS = Serverin statistigi +X_RANK_IS = %s'in statistik %d ve %d +DISABLED_MSG = Server o secenegi kullanmiyor + +[fr] +WHOLEBODY = le corps entier +HEAD = la tete +CHEST = le torse +STOMACH = le ventre +LEFTARM = le bras gauche +RIGHTARM = le bras droit +LEFTLEG = la jambe gauche +RIGHTLEG = la jambe droite +MODE_SET_TO = "amx_statsx_mode" est mis a "%s" +ATTACKERS = Attaquants +ACC = prec. +HIT_S = touche(s) +DMG = dmg +VICTIMS = Victimes +MOST_DMG = Joueur ayant cause le plus de degats +KILLED_YOU_DIST = %s t'a tue avec %s^na une distance de %0.2f metres. +DID_DMG_HITS = Il t'a fait %d points de degat en te touchant %d fois^net il lui reste %dpv et %dpa. +YOU_DID_DMG = Tu lui as fait %d points de degat en le touchant %d fois. +EFF = eff. +BEST_SCORE = Meilleur score +KILL_S = frag(s) +TOTAL = Total +SHOT_S = tir(s) +HITS_YOU_IN = %s t'a touche dans +KILLED_BY_WITH = A ete tue par %s avec %s @ %0.0fm +NO_HITS = pas touche. +YOU_NO_KILLER = Personne ne t'a tue... +YOU_HIT = Tu as ete touche dans %s %d fois, %d points de degat +LAST_RES = Dernier Resultat: touche %d fois , %d points de degat +KILLS = Frags +DEATHS = Morts +HITS = Touches +SHOTS = Tirs +YOUR = Ton +PLAYERS = Joueurs +RANK_IS = classement est de %d sur %d +DAMAGE = Point(s) de degat +WEAPON = Arme +YOUR_RANK_IS = Ton classement est de %d sur %d avec %d frag(s), %d touche(s), %0.2f%% eff. et %0.2f%% prec. +AMMO = munition +HEALTH = sante +ARMOR = armure +GAME_SCORE = Score du jeu +STATS_ANNOUNCE = Tu as %s les annonces des stats +ENABLED = active +DISABLED = desactive +SERVER_STATS = Stats Serveur +X_RANK_IS = le classement de %s est de %d sur %d +DISABLED_MSG = Cette option est desactivee sur le serveur + +[sv] +WHOLEBODY = helakroppen +HEAD = huvud +CHEST = br'o'st +STOMACH = mage +LEFTARM = v'a'nsterarm +RIGHTARM = h'o'gerarm +LEFTLEG = v'a'nsterben +RIGHTLEG = h'o'gerben +MODE_SET_TO = "amx_statsx_mode" satt till "%s" +ATTACKERS = Attackerare +ACC = prec. +HIT_S = tr'a'ff(ar) +DMG = skada +VICTIMS = Offer +MOST_DMG = Mest skada gjord av +KILLED_YOU_DIST = %s likviderade dig med %s^npa ett avstand av %0.2f meter. +DID_DMG_HITS = Han gjorde %d skada pa dig med %d tr'a'ff(ar)^noch har fortfarande %dhp och %dap. +YOU_DID_DMG = Du gjorde %d skada med %d tr'a'ff(ar). +EFF = eff. +BEST_SCORE = H'o'gsta po'a'ng +KILL_S = Likvidering(ar) +TOTAL = Summa +SHOT_S = skott +HITS_YOU_IN = %s tr'a'ffar dig i +KILLED_BY_WITH = Likviderad av %s med %s @ %0.0fm +NO_HITS = inga tr'a'ffar +YOU_NO_KILLER = Du har ingen m'o'rdare... +YOU_HIT = Du tr'a'ffade %s %d gang(er), %d skada +LAST_RES = Sista resultatet: %d tr'a'ff(ar), %d skada +KILLS = Likvideringar +DEATHS = D'o'dsfall +HITS = Tr'a'ffar +SHOTS = Skott +YOUR = Din +PLAYERS = Spelare +RANK_IS = rank 'a'r %d av %d +DAMAGE = Skada +WEAPON = Vapen +YOUR_RANK_IS = Din ranking 'a'r %d av %d med %d likvidering(ar), %d tr'a'ff(ar), %0.2f%% eff. och %0.2f%% prec. +AMMO = ammo +HEALTH = h'a'lsa +ARMOR = skydd +GAME_SCORE = Spelpo'a'ng +STATS_ANNOUNCE = Du har %s statistik poster +ENABLED = aktiv +DISABLED = av +SERVER_STATS = Serverstatistik +X_RANK_IS = %ss rank 'a'r %d av %d +DISABLED_MSG = Servern har den valm'o'jligheten avst'a'ngd + +[da] +WHOLEBODY = Helekrop +HEAD = hoved +CHEST = bryst +STOMACH = mave +LEFTARM = venstrearm +RIGHTARM = hoejrearm +LEFTLEG = venstreben +RIGHTLEG = hoejreben +MODE_SET_TO = "amx_statsx_mode" sat til "%s" +ATTACKERS = Angribere +ACC = acc. +HIT_S = traeffer(e) +DMG = Skade +VICTIMS = Ofre +MOST_DMG = Mest skade gjort af +KILLED_YOU_DIST = %s draebte dig med %s^nfra en afstand paa %0.2f meter. +DID_DMG_HITS = Han gjorde %d skade paa dig med %d traeffer(e)^nog har stadig %dhp og %dap. +YOU_DID_DMG = Du gjorde %d skade paa ham med %d traeffer(e). +EFF = eff. +BEST_SCORE = Bedste score +KILL_S = Drab +TOTAL = Total +SHOT_S = Skud +HITS_YOU_IN = %s rammer dig i +KILLED_BY_WITH = Draebt af %s med %s @ %0.0fm +NO_HITS = Ingen traeffere +YOU_NO_KILLER = Du har ikke en angriber... +YOU_HIT = Du rammer %s %d gang(e), %d skade +LAST_RES = Sidste resultat: %d traeffer(e), %d skade +KILLS = Draeb +DEATHS = Doed +HITS = Traeffere +SHOTS = Skud +YOUR = Din +PLAYERS = Spillere +RANK_IS = rank er %d af %d +DAMAGE = Skade +WEAPON = Vaaben +YOUR_RANK_IS = Din rank er %d af %d med %d drab %d traeffer(e), %0.2f%% eff. og %0.2f%% acc. +AMMO = Ammunition +HEALTH = Helbred +ARMOR = armor +GAME_SCORE = Spil score +STATS_ANNOUNCE = Du har %s statestik meddelelser +ENABLED = Slaaet til +DISABLED = Slaaet fra +SERVER_STATS = Server Statestik +X_RANK_IS = %s's rank er %d af %d +DISABLED_MSG = Serveren har slaaet den mulighed fra + +[pl] +WHOLEBODY = cialo +HEAD = glowa +CHEST = klatka piersiowa +STOMACH = brzuch +LEFTARM = lewe ramie +RIGHTARM = prawe ramie +LEFTLEG = lewa noga +RIGHTLEG = prawa noga +MODE_SET_TO = "amx_statsx_mode" ustawiono na "%s" +ATTACKERS = Atakujacy +ACC = acc. +HIT_S = trafien +DMG = obr +VICTIMS = Ofiary +MOST_DMG = Najwiecej obrazen: +KILLED_YOU_DIST = %s zabil cie z %s^nfrom z odleglosci %0.2f metrow. +DID_DMG_HITS = %d zadal ci %d obrazen ^ni nadal ma %d zycia i %d zbroi. +YOU_DID_DMG = Zadales %d obrazen %d trafieniami. +EFF = eff. +BEST_SCORE = Najlepszy wynik +KILL_S = zabil +TOTAL = Lacznie +SHOT_S = strzalow +HITS_YOU_IN = %s trafil cie w +KILLED_BY_WITH = Zabity przez %s z %s @ %0.0fm +NO_HITS = zadnych trafien +YOU_NO_KILLER = Nie masz zadnego zabojcy +YOU_HIT = Trafiles %s %d razy, %d obrazen +LAST_RES = Ostatni rezultat: %d trafien, %d obrazen +KILLS = Zabojstw +DEATHS = Zginiec +HITS = Trafien +SHOTS = Strzalow +YOUR = Twoj +PLAYERS = Gracze +RANK_IS = ranking wynosi %d na %d +DAMAGE = Obrazenia +WEAPON = Bron +YOUR_RANK_IS = Twoj ranking wynosi %d na %d Masz %d zabojstw, %d trafien, %0.2f%% eff. i %0.2f%% acc. +AMMO = amunicja +HEALTH = zdrowie +ARMOR = kamizelka +GAME_SCORE = Punktacja +STATS_ANNOUNCE = Masz %s odwolan statystyki +ENABLED = wlaczony +DISABLED = wylaczony +SERVER_STATS = Statystyki serwera +X_RANK_IS = Ranking %s wynosi %d na %d +DISABLED_MSG = Serwer wylaczyl ta opcje + +[nl] +WHOLEBODY = volledig lichaam +HEAD = hoofd +CHEST = romp +STOMACH = maag +LEFTARM = linkerarm +RIGHTARM = rechterarm +LEFTLEG = linkerbeen +RIGHTLEG = rechterbeen +MODE_SET_TO = "amx_statsx_mode" veranderd naar "%s" +ATTACKERS = Aanvallers +ACC = acc. +HIT_S = hit(s) +DMG = schade +VICTIMS = Slachtoffers +MOST_DMG = Meeste schade gedaan door +KILLED_YOU_DIST = %s doodde jou wmet %s^nvan een afstand van %0.2f meters. +DID_DMG_HITS = Hij deed %d schade aan jou met %d hit(s)^nen hij heeft nog steeds %dhp en %dap. +YOU_DID_DMG = Jij deed %d schade aan hem met %d hit(s). +EFF = eff. +BEST_SCORE = Beste score +KILL_S = kill(s) +TOTAL = Totaal +SHOT_S = schot(en) +HITS_YOU_IN = %s raakte je in +KILLED_BY_WITH = Gedood door %s met %s @ %0.0fm +NO_HITS = geen hits +YOU_NO_KILLER = Je hebt geen moordenaar... +YOU_HIT = Je raakte %s %d keer, %d schade +LAST_RES = Laatste resultaat: %d hit(s), %d schade +KILLS = Kills +DEATHS = Sterfgevallen +HITS = Hits +SHOTS = Schoten +YOUR = Je +PLAYERS = Spelers +RANK_IS = rank is %d of %d +DAMAGE = Schade +WEAPON = Wapen +YOUR_RANK_IS = Jouw rank is %d van de %d met %d kill(s), %d hit(s), %0.2f%% eff. and %0.2f%% acc. +AMMO = ammo +HEALTH = Gezondheid +ARMOR = armor +GAME_SCORE = Game score +STATS_ANNOUNCE = Je hebt %s statistiekaankondigingen +ENABLED = ingeschakeld +DISABLED = uitgeschakeld +SERVER_STATS = Server Status +X_RANK_IS = %s's rank is %d van de %d +DISABLED_MSG = De server heeft die optie uitgeschakeld + +[es] +WHOLEBODY = cuerpo entero +HEAD = cabeza +CHEST = pecho +STOMACH = estomago +LEFTARM = brazo izquierdo +RIGHTARM = brazo derecho +LEFTLEG = pierna izquierda +RIGHTLEG = pierna derecha +MODE_SET_TO = "amx_statsx_mode" puesto a "%s" +ATTACKERS = Atacantes +ACC = acc. +HIT_S = acierto(s) +DMG = dno +VICTIMS = Victimas +MOST_DMG = Mayor danyo hecho por +KILLED_YOU_DIST = %s te ha matado con %s^ndesde una distancia de %0.2f metros. +DID_DMG_HITS = Te ha hecho %d puntos de danyo con %d acierto(s)^ny todavia tiene %dhp y %dap. +YOU_DID_DMG = Le has hecho %d puntos de danyo con %d aciertos(s). +EFF = eff. +BEST_SCORE = Mejor puntuacion +KILL_S = frag(s) +TOTAL = Total +SHOT_S = disparo(s) +HITS_YOU_IN = %s te ha dado en +KILLED_BY_WITH = Te ha matado %s con %s @ %0.0fm +NO_HITS = sin aciertos +YOU_NO_KILLER = Nadie te ha matado... +YOU_HIT = Das a %s %d vece(s), %d danyo +LAST_RES = Ultimo resultado: %d acierto(s), %d danyo +KILLS = Frags +DEATHS = Muertes +HITS = Aciertos +SHOTS = Disparos +YOUR = Tu +PLAYERS = Jugadores +RANK_IS = ranking es %d de %d +DAMAGE = Danyo +WEAPON = Arma +YOUR_RANK_IS = Tu ranking es %d de %d con %d frag(s), %d acierto(s), %0.2f%% eff. y %0.2f%% acc. +AMMO = municion +HEALTH = vida +ARMOR = armadura +GAME_SCORE = Puntuacion de la partida +STATS_ANNOUNCE = Tienes %s avisos de estadisticas +ENABLED = activado +DISABLED = desactivado +SERVER_STATS = Estadisticas del Servidor +X_RANK_IS = El ranking de %s es %d de %d +DISABLED_MSG = El servidor ha desactivado esta opcion + +[bp] +WHOLEBODY = corpo +HEAD = cabeca +CHEST = peito +STOMACH = estomago +LEFTARM = braco esquerdo +RIGHTARM = braco direito +LEFTLEG = perna esquerda +RIGHTLEG = perna direita +MODE_SET_TO = "amx_statsx_mode" configurado para "%s" +ATTACKERS = Atacantes +ACC = acc. +HIT_S = acerto(s) +DMG = dmg +VICTIMS = Vitimas +MOST_DMG = Maior dano causado por +KILLED_YOU_DIST = %s o matou com %s^nna distancia %0.2f metros. +DID_DMG_HITS = Ele causou %d de dano em voce com %d acerto(s)^ne ainda tem %dhp e %dap. +YOU_DID_DMG = Voce causou %d de dano nele com %d acerto(s). +EFF = eff. +BEST_SCORE = Melhor Placar +KILL_S = frag(s) +TOTAL = Total +SHOT_S = Tiros(S) +HITS_YOU_IN = %s acerto(s) em voce +KILLED_BY_WITH = Morto por %s com %s @ %0.0fm +NO_HITS = nenhum acerto +YOU_NO_KILLER = Voce nao matou ninguem +YOU_HIT = Voce acertou %s %d vez(es), %d de dano +LAST_RES = Ultimo resultado: %d acerto(s), dano de %d +KILLS = Frags +DEATHS = Mortes +HITS = Acertos +SHOTS = Tiros +YOUR = Sua +PLAYERS = Jogadores +RANK_IS = Sua posicao e %d de %d +DAMAGE = Dano +WEAPON = Arma +YOUR_RANK_IS = Sua posicao e %d de %d com %d frag(s), %d acerto(s), %0.2f%% eff. e %0.2f%% prec. +AMMO = municao +HEALTH = Life +ARMOR = Colete +GAME_SCORE = Placar do jogo +STATS_ANNOUNCE = Voce tem %s anuncios de estatisticas +ENABLED = ativado +DISABLED = desativado +SERVER_STATS = Estatisticas do Servidor +X_RANK_IS = %s posicao e %d de %d +DISABLED_MSG = Esta opcao esta desativada no Server + +[cz] +WHOLEBODY = cele telo +HEAD = hlava +CHEST = trup +STOMACH = zaludek +LEFTARM = leva paze +RIGHTARM = prava paze +LEFTLEG = leva noha +RIGHTLEG = prava noha +MODE_SET_TO = "amx_statsx_mode" nastaven na "%s" +ATTACKERS = Utocnici +ACC = presnost. +HIT_S = zasahy +DMG = dmg +VICTIMS = Obeti +MOST_DMG = Nejdrsnejsi byl +KILLED_YOU_DIST = %s te zabil %s^nze vzdalenosti %.2f metru.^n +DID_DMG_HITS = Sebral ti %d hp a trefil te %dx.^n +YOU_DID_DMG = Sebral jsi mu %d hp %d zasahy. +EFF = eff. +BEST_SCORE = Nejlepsi score +KILL_S = zabiti +TOTAL = Celkem +SHOT_S = vystrelu +HITS_YOU_IN = %s zasahl +KILLED_BY_WITH = Zabil te %s s %s @ %0.0fm +NO_HITS = zadne zasahy +YOU_NO_KILLER = Nejsi zabijak... +YOU_HIT = Trefil jsi %s %dx, %d damage +LAST_RES = Naposledy: %d zasahu, %d damage +KILLS = Zabiti +DEATHS = Smrti +HITS = Zasahy +SHOTS = Strely +YOUR = Tvoje +PLAYERS = Hraci +RANK_IS = pricka je %d z %d +DAMAGE = Poskozeni +WEAPON = Zbran +YOUR_RANK_IS = Tvoje pricka je %d z %d s %d zabitimi, %d zasahy, %0.2f%% eff. a %0.2f%% acc. +AMMO = strelivo +HEALTH = zdravi +ARMOR = stity +GAME_SCORE = Herni score +STATS_ANNOUNCE = Mas %s statistickych upozorneni +ENABLED = povoleno +DISABLED = zakazano +SERVER_STATS = Statistiky serveru +X_RANK_IS = %sova pricka je %d z %d +DISABLED_MSG = Server tuto volbu nepovolil + +[fi] +WHOLEBODY = koko keho +HEAD = paa +CHEST = rinta +STOMACH = vatsa +LEFTARM = vasen kasi +RIGHTARM = oikea kasi +LEFTLEG = vasen jalka +RIGHTLEG = oikea jalka +MODE_SET_TO = "amx_statsx_mode" asetettiin "%s" +ATTACKERS = Hyokkaajat +ACC = tarkkuus +HIT_S = osumat +DMG = damage +VICTIMS = Uhrit +MOST_DMG = Eniten damagea teki: +KILLED_YOU_DIST = %s tappoi sinut %0.2f metrin etaisyydelta. +DID_DMG_HITS = Han teki %d damagea sinuun %d osumalla^hanella on viela %dhp ja %dap. +YOU_DID_DMG = Teit %d damagea haneen %d osumalla. +EFF = tehokkuus +BEST_SCORE = Parhaat pisteet +KILL_S = tapot +TOTAL = Kaikkiaan +SHOT_S = Laukaukset +HITS_YOU_IN = %s osui sinua +KILLED_BY_WITH = Sinut tappoi %s %s:lla @ %0.0fm +NO_HITS = ei osumia +YOU_NO_KILLER = Kukaan ei tappanut sinua... +YOU_HIT = Osuit pelaajaa %s %d kertaa, %d damagea +LAST_RES = Viimeinen tulos %d osumaa, %d damagea +KILLS = Tapot +DEATHS = Kuolemat +HITS = Osumat +SHOTS = Laukaukset +YOUR = Sinun +PLAYERS = Pelaajat +RANK_IS = sijoitus on %d / %d +DAMAGE = Damage +WEAPON = Ase +YOUR_RANK_IS = Sijoituksesi on %d / %d: %d tappoa, %d osumaa, %0.2f%% tehokkuus ja %0.2f%% tarkkuus. +AMMO = ammukset +HEALTH = hp +ARMOR = ap +GAME_SCORE = Pistemaara +STATS_ANNOUNCE = Sinulla on %s tilastoilmoitusta +ENABLED = kaytossa +DISABLED = poissa kaytosta +SERVER_STATS = Palvelimen tilastot +X_RANK_IS = Pelaajan %s sijoitus on %d / %d +DISABLED_MSG = Palvelin on poistanut tuon vaihtoehdon kaytosta + +[ls] +WHOLEBODY = wh0l3|30dy +HEAD = h34d +CHEST = ch3$t +STOMACH = $t0m4ch +LEFTARM = l3ft4|2m +RIGHTARM = |2ight4|2m +LEFTLEG = l3ftl3g +RIGHTLEG = |2ightl3g +MODE_SET_TO = "amx_statsx_mode" $3t t0 "%s" +ATTACKERS = Att4c|<3|2$ +ACC = 4cc. +HIT_S = hit($) +DMG = dmg +VICTIMS = Victim$ +MOST_DMG = M0$t d4m4g3 d0n3 |3y +KILLED_YOU_DIST = %s |<ill3d j00 with %s^nf|20m di$t4nc3 0f %0.2f m3t3|2$. +DID_DMG_HITS = H3 d!dz0|2 %d d4m4g3 t0 j00 with %d hit($)^n4nd $till h4$ %dhp 4nd %d4p. +YOU_DID_DMG = j00 d!dz0|2 %d d4m4g3 t0 him with %d hit($). +EFF = 3ff. +BEST_SCORE = B3$t $c0|23 +KILL_S = |<ill($) +TOTAL = T0t4l +SHOT_S = $h0t($) +HITS_YOU_IN = %s hit$ j00 in +KILLED_BY_WITH = Kill3d |3y %s with %s @ %0.0fm +NO_HITS = n0 hit$ +YOU_NO_KILLER = j00 h4\/3 n0 |<ill3|2... +YOU_HIT = j00 hit %s %d tim3($), %d d4m4g3 +LAST_RES = L4$t |23$ult: %d hit($), %d d4m4g3 +KILLS = Kill$ +DEATHS = D34th$ +HITS = Hit$ +SHOTS = Sh0t$ +YOUR = j00|2 +PLAYERS = Pl4y3|2$ +RANK_IS = |24n|< i$ %d 0f %d +DAMAGE = D4m4g3 +WEAPON = W34p0n +YOUR_RANK_IS = j00|2 |24n|< i$ %d 0f %d with %d |<ill($), %d hit($), %0.2f%% 3ff. 4nd %0.2f%% 4cc. +AMMO = 4mm0 +HEALTH = h34lth +ARMOR = 4|2m0|2 +GAME_SCORE = G4m3 $c0|23 +STATS_ANNOUNCE = j00 h4\/3 %s $t4t$ 4nn0unc3m3nt$ +ENABLED = 3n4|3l3d +DISABLED = di$4|3l3d +SERVER_STATS = S3|2\/3|2 St4t$ +X_RANK_IS = %s'$ |24n|< i$ %d 0f %d +DISABLED_MSG = S3|2\/3|2 h4$ di$4|3l3d th4t 0pti0n + +[bg] +WHOLEBODY = cqloto tqlo +HEAD = glava +CHEST = graden ko6 +STOMACH = stomah +LEFTARM = lqva raka +RIGHTARM = dqsna raka +LEFTLEG = lqv krak +RIGHTLEG = desen krak +MODE_SET_TO = "amx_statsx_mode" naglasen na "%s" +ATTACKERS = Attackers +ACC = to4. +HIT_S = udar(i) +DMG = dmg +VICTIMS = Ubiti +MOST_DMG = Nai mnogo damage napraven ot +KILLED_YOU_DIST = %s te ubi s %s^not %0.2f meters. +DID_DMG_HITS = toi napravi %d damage na teb s %d udar(i)^ni vse o6te ima %dhp i %dap. +YOU_DID_DMG = Ti napravi %d damage na nego s %d udar(i). +EFF = eff. +BEST_SCORE = Nai dobar resultat +KILL_S = ubiistrvo(a) +TOTAL = Ob6to +SHOT_S = Istrela(i) +HITS_YOU_IN = %s vi oceli v +KILLED_BY_WITH = Ubit ot %s s %s @ %0.0fm +NO_HITS = Nqma udari +YOU_NO_KILLER = nqnate ubiec... +YOU_HIT = Vie ucelihte %s %d put(i), %d damage +LAST_RES = Posleden resultat: %d put(i), %d damage +KILLS = Ubiistva +DEATHS = umirania +HITS = Udari +SHOTS = Istreli +YOUR = Va6ia +PLAYERS = Igra4i +RANK_IS = ranka e %d ot %d +DAMAGE = Damage +WEAPON = Orajie +YOUR_RANK_IS = Va6ia rank e %d ot %d s %d ubiistvo(a), %d udar(i), %0.2f%% eff. i %0.2f%% acc. +AMMO = patroni +HEALTH = krav +ARMOR = bronq +GAME_SCORE = Resultat na igrata +STATS_ANNOUNCE = Vie imate %s statistiki obqveni +ENABLED = vklu4en +DISABLED = izklu4en +SERVER_STATS = Statistiki na server +X_RANK_IS = ranka na %s e %d ot %d +DISABLED_MSG = Servera e isklu4il tazi optia + +[ro] +WHOLEBODY = tot corpul +HEAD = cap +CHEST = piept +STOMACH = stomac +LEFTARM = brat stang +RIGHTARM = brat drept +LEFTLEG = picior stang +RIGHTLEG = picior drept +MODE_SET_TO = "amx_statsx_mode" este setat la "%s" +ATTACKERS = Atacatori +ACC = ac. +HIT_S = lovituri +DMG = dmg +VICTIMS = Victime +MOST_DMG = Cel mai mult dmg produs de +KILLED_YOU_DIST = %s te-a ucis cu %s^nde la distanta de %0.2f metri. +DID_DMG_HITS = El ti-a facut %d dmg din %d lovituri^nsi inca mai are %dhp si %dap. +YOU_DID_DMG = Tu i-ai facut %d dmg din %d lovituri. +EFF = ef. +BEST_SCORE = Cel mai bun scor +KILL_S = ucideri +TOTAL = Total +SHOT_S = Focuri +HITS_YOU_IN = %s te-a lovit in +KILLED_BY_WITH = Ucis de %s cu %s de la %0.0fm +NO_HITS = nici o lovitura +YOU_NO_KILLER = Nu ai nici o ucidere... +YOU_HIT = Tu l-ai lovit pe %s de %d ori, %d dmg +LAST_RES = Ultimul rezultat: %d lovituri, %d dmg +KILLS = Ucideri +DEATHS = Decesuri +HITS = Lovituri +SHOTS = Focuri +YOUR = Pozitia ta +PLAYERS = Jucatori +RANK_IS = este %d din %d +DAMAGE = Dmg +WEAPON = Arma +YOUR_RANK_IS = Pozitia ta este %d din %d cu %d ucideri, %d lovituri, %0.2f% ef. si %0.2f% ac. +AMMO = munitie +HEALTH = viata +ARMOR = vesta +GAME_SCORE = Scorul Jocului +STATS_ANNOUNCE = Ai %s anunturile statisticilor +ENABLED = activat +DISABLED = dezactivat +SERVER_STATS = Statistici Jucatori +X_RANK_IS = Pozitia lui %s este %d din %d +DISABLED_MSG = Server-ul a dezactivat aceasta optiune + +[hu] +WHOLEBODY = egesz test +HEAD = fej +CHEST = csipo +STOMACH = has +LEFTARM = balkar +RIGHTARM = jobbkar +LEFTLEG = ballab +RIGHTLEG = jobblab +MODE_SET_TO = "amx_statsx_mode" set to "%s" +ATTACKERS = Tamadok +ACC = Pontossag +HIT_S = talalat +DMG = sebzes +VICTIMS = Aldozatok +MOST_DMG = Legtobb sebzes: +KILLED_YOU_DIST = %s megolt teged %s^n %0.2f meterrol. +DID_DMG_HITS = O %d -t sebzett rajtad ^n talalattal es maradt neki %dhp es %dap-ja. +YOU_DID_DMG = Te %d sebeztel rajta %d talalattal. +EFF = eff. +BEST_SCORE = Legjobb pont +KILL_S = Oles +TOTAL = Total +SHOT_S = loves +HITS_YOU_IN = %s eltalalt teged +KILLED_BY_WITH = Megolt %s, %s-el %0.0fmeterrol +NO_HITS = nincs talalat +YOU_NO_KILLER = Nincs gyilkosod... +YOU_HIT = You hit %s %d time(s), %d damage +LAST_RES = Last result: %d hit(s), %d damage +KILLS = Olesek +DEATHS = Halal +HITS = Talalat +SHOTS = Loves +YOUR = Te +PLAYERS = Jatekosok +RANK_IS = helyezese %d of %d +DAMAGE = Sebzes +WEAPON = Fegyver +YOUR_RANK_IS = A te helyezesed %d a %d -bol %d olessel, %d talalattal, %0.2f% effel es %0.2f% accal. +AMMO = tolteny +HEALTH = elet +ARMOR = pancel +GAME_SCORE = Jatek pont +TIME_REM = Hatralevo ido +NO_T_LIMIT = Nincs idohatar +THE_TIME = Az ido +PLAYED_MAP = Mostani palya +FRIEND_FIRE = Csapattars sebzes +STATS_ANNOUNCE = Neked van %s stats announcements +ENABLED = engedelyezve +DISABLED = letiltva +SERVER_STATS = Szerver Status +X_RANK_IS = %s helyezese %d a %d-bol +DISABLED_MSG = A szerver letiltotta ezt az opciot + +[lt] +WHOLEBODY = kunas +HEAD = galva +CHEST = krutine +STOMACH = pilvas +LEFTARM = kaire ranka +RIGHTARM = desine ranka +LEFTLEG = kaire koja +RIGHTLEG = desine koja +MODE_SET_TO = "amx_statsx_mode" nustatytas i "%s" +ATTACKERS = Uzpuolikai +ACC = taiklumas. +HIT_S = pataikymas(-ai) +DMG = zala +VICTIMS = Aukos +MOST_DMG = Daugiausiai zalos padare +KILLED_YOU_DIST = %s nudejo tave su %s^nis %0.2f metru. +DID_DMG_HITS = Jis padare %d zalos tau su %d pataikymu(-ais)^nir vis dar turi %dgivybiu ir %darmoro. +YOU_DID_DMG = Tu padarei %d zalos jam su %d pataikymu(-ais). +EFF = efektyvumas. +BEST_SCORE = Geriausias rezultatas +KILL_S = nuzudymas(-ais) +TOTAL = Isviso +SHOT_S = Suvis(-iai) +HITS_YOU_IN = %s pataike tau i +KILLED_BY_WITH = Nudejo %s su %s @ %0.0fm +NO_HITS = nera suzeidimu +YOU_NO_KILLER = Neturi zudiko... +YOU_HIT = Tu pataikei %s %d karta(-us), %d zala +LAST_RES = Paskutinis rezultatas: %d pataikymu(-ais), %d zala +KILLS = Nuzudymai +DEATHS = Mirtys +HITS = Pataikymai +SHOTS = Suviai +YOUR = Tavo +PLAYERS = Zaidejai +RANK_IS = rankas yra %d is %d +DAMAGE = Zala +WEAPON = Ginklas +YOUR_RANK_IS = Tavo rank yra %d is %d su %d nuzudymais, %d pataikymais, %0.2f%% efektyvumas. ir %0.2f%% taiklumas. +AMMO = saudmenys +HEALTH = givybes +ARMOR = armoras +GAME_SCORE = Zaidimo rezultatas +STATS_ANNOUNCE = Tu turi %s statusu pranesimus +ENABLED = ijungta +DISABLED = isjungta +SERVER_STATS = Serverio statusas +X_RANK_IS = %s rankas yra %d is %d +DISABLED_MSG = Serveris uzdraude sia komanda + +[sk] +WHOLEBODY = cele telo +HEAD = hlava +CHEST = trup +STOMACH = zaludok +LEFTARM = lava ruka +RIGHTARM = prava ruka +LEFTLEG = lava noha +RIGHTLEG = prava noha +MODE_SET_TO = "amx_statsx_mode" nastaveny na "%s" +ATTACKERS = Utocnici +ACC = presnost. +HIT_S = zasah(ov) +DMG = dmg +VICTIMS = Obete +MOST_DMG = Nejdrsnejsi bol +KILLED_YOU_DIST = %s ta zabil s %s^nzo vzdialenosti %.2f metra.^n +DID_DMG_HITS = Zobral ti %d hp a trafil ta %dx.^n +YOU_DID_DMG = Zobral si mu %d hp, %d zasahmi. +EFF = eff. +BEST_SCORE = Naj. score za kolo +KILL_S = zabit(ia/i) +TOTAL = Celkom +SHOT_S = vystrel(ov) +HITS_YOU_IN = %s zasiahol +KILLED_BY_WITH = Zabil ta %s s %s @ %0.0fm +NO_HITS = ziadne zasahy +YOU_NO_KILLER = Niesi zabijak... +YOU_HIT = Trafil si %s %dx, %d damage +LAST_RES = Naposledy: %d zasahov, %d damage +KILLS = Zabiti +DEATHS = Smrti +HITS = zasah(ov) +SHOTS = vystrel(ov) +YOUR = Tvoja +PLAYERS = Hraci +RANK_IS = priecka je %d z %d +DAMAGE = Poskozenie +WEAPON = Zbran +YOUR_RANK_IS = Tvoja priecka je %d z %d s %d zabitiami, %d zasahmy, %0.2f%% eff. a %0.2f%% acc. +AMMO = naboje +HEALTH = zdravie +ARMOR = stit +GAME_SCORE = Herne score +STATS_ANNOUNCE = Mas %s statistickych upozorneni +ENABLED = povolene +DISABLED = zakazane +SERVER_STATS = Statistiky servera +X_RANK_IS = %sova priecka je %d z %d +DISABLED_MSG = Server tuto volbu nepovolil + +[mk] +WHOLEBODY = celo telo +HEAD = glava +CHEST = gradi +STOMACH = stomak +LEFTARM = leva raka +RIGHTARM = desna raka +LEFTLEG = leva noga +RIGHTLEG = desna noga +MODE_SET_TO = "amx_statsx_mode" e namesten na "%s" +ATTACKERS = Te napadnaa +ACC = preciznost +HIT_S = pogodok(a) +DMG = steta +VICTIMS = Zrtvi +MOST_DMG = Najmnogu steta e nanesena od +KILLED_YOU_DIST = %s te ubi so %s^nna dalecina od %0.2f metri. +DID_DMG_HITS = Toj ti napravi %d steta so %d pogodok(a)^ni seuste ima %d energija i %d pancir. +YOU_DID_DMG = Ti mu napravi %d steta so %d pogodok(a). +EFF = efikasnost +BEST_SCORE = Najdobar rezultat +KILL_S = Ubistva +TOTAL = Vkupno +SHOT_S = pukanja +HITS_YOU_IN = %s te pogodi vo +KILLED_BY_WITH = Ubien si od %s so %s @ %0.0fm +NO_HITS = nema pogodoci +YOU_NO_KILLER = Nikoj te nema ubieno... +YOU_HIT = Ti go pogodi %s %d pati, %d steta +LAST_RES = Posleden rezultat: %d pogodoci, %d steta +KILLS = Ubistva +DEATHS = Bil ubien +HITS = Pogodoci +SHOTS = Pukanja +YOUR = Tvojot +PLAYERS = Za igracot +RANK_IS = rank e %d od %d +DAMAGE = Steta +WEAPON = Oruzje +YOUR_RANK_IS = Tvojot rank e %d od %d so %d ubistva, %d pogodok(a), %0.2f%% efikasnost i %0.2f%% preciznost. +AMMO = municija +HEALTH = energija +ARMOR = pancir +GAME_SCORE = Rezultat na igrata +STATS_ANNOUNCE = Imate %s najava +ENABLED = uklucen +DISABLED = isklucen +SERVER_STATS = Statistika na serverot +X_RANK_IS = %s rank e %d od %d +DISABLED_MSG = Taa opcija e isklucena vo serverot diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/telemenu.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/telemenu.txt new file mode 100644 index 0000000..f2566ea --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/telemenu.txt @@ -0,0 +1,139 @@ +[en] +ADMIN_TELEPORT_1 = ADMIN: teleport %s +ADMIN_TELEPORT_2 = ADMIN %s: teleport %s +TELE_MENU = Teleport Menu +CUR_LOC = Current Location +SAVE_LOC = Save Location + +[de] +ADMIN_TELEPORT_1 = ADMIN: teleportiert %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportiert %s +TELE_MENU = Menu > Teleport +CUR_LOC = Momentane Position +SAVE_LOC = Position speichern + +[sr] +ADMIN_TELEPORT_1 = ADMIN: teleportuj %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportuj %s +TELE_MENU = Teleport Meni +CUR_LOC = Sadasnja Lokacija +SAVE_LOC = Sacuvaj Lokaciju + +[tr] +ADMIN_TELEPORT_1 = ADMIN: teleportladi %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportladi %s +TELE_MENU = Teleport Menusu +CUR_LOC = Oldugu su anki yer +SAVE_LOC = Oldugu yeri saklayin + +[fr] +ADMIN_TELEPORT_1 = ADMIN: teleporte %s +ADMIN_TELEPORT_2 = ADMIN %s: teleporte %s +TELE_MENU = Menu Teleportation +CUR_LOC = Emplacement Actuel +SAVE_LOC = Sauver l'emplacement + +[sv] +ADMIN_TELEPORT_1 = ADMIN: teleportera %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportera %s +TELE_MENU = Teleportmeny +CUR_LOC = Nuvarande position +SAVE_LOC = Spara position + +[da] +ADMIN_TELEPORT_1 = ADMIN: teleport %s +ADMIN_TELEPORT_2 = ADMIN %s: teleport %s +TELE_MENU = Teleport Menu +CUR_LOC = Nuvaerende lokation +SAVE_LOC = Gem Lokation + +[pl] +ADMIN_TELEPORT_1 = ADMIN: teleportowal %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportowal %s +TELE_MENU = Menu teleportu +CUR_LOC = Aktualna pozycja +SAVE_LOC = Zapisz pozycje + +[nl] +ADMIN_TELEPORT_1 = ADMIN: teleporteer %s +ADMIN_TELEPORT_2 = ADMIN %s: teleporteer %s +TELE_MENU = Teleportatiemenu +CUR_LOC = Huidige Locatie +SAVE_LOC = Locatie Bewaren + +[es] +ADMIN_TELEPORT_1 = ADMIN: %s teletransportado +ADMIN_TELEPORT_2 = ADMIN %s: %s teletransportado +TELE_MENU = Menu de Teletransporte +CUR_LOC = Posicion Actual +SAVE_LOC = Guardar Posicion + +[bp] +ADMIN_TELEPORT_1 = ADMIN: teletransportou %s +ADMIN_TELEPORT_2 = ADMIN %s: teletransportou %s +TELE_MENU = Menu de Teletransporte +CUR_LOC = Local Atual +SAVE_LOC = Salvar Local + +[cz] +ADMIN_TELEPORT_1 = ADMIN: teleportoval %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportovali %s +TELE_MENU = Menu Teleportu +CUR_LOC = Soucasna misto +SAVE_LOC = Ulozit misto + +[fi] +ADMIN_TELEPORT_1 = ADMIN: teleporttasi pelaajan %s +ADMIN_TELEPORT_2 = ADMIN %s: teleporttasi pelaajan %s +TELE_MENU = Teleportvalikko +CUR_LOC = Nykyinen sijainti +SAVE_LOC = Tallenna sijainti + +[ls] +ADMIN_TELEPORT_1 = l33t s3rv3r 0P: h4x3d %s t0 n3w ISP +ADMIN_TELEPORT_2 = l33t s3rv3r 0P %s: h4x3d %s t0 n3w ISP +TELE_MENU = l33t T3l3p0rt M3nu +CUR_LOC = Cu|2|2en7 ISP +SAVE_LOC = S4v3 ISP + +[bg] +ADMIN_TELEPORT_1 = ADMININISTRATOR: teleportira %s +ADMIN_TELEPORT_2 = ADMINISTRATOR %s: teleportira %s +TELE_MENU = Teleport Menu +CUR_LOC = Mestopolojenie +SAVE_LOC = Zapazi mestopolojenieto + +[ro] +ADMIN_TELEPORT_1 = ADMIN: teleportare %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportare %s +TELE_MENU = Menu Teleportare +CUR_LOC = Locatia Actuala +SAVE_LOC = Salveaza Locatie + +[hu] +ADMIN_TELEPORT_1 = ADMIN: %s teleport +ADMIN_TELEPORT_2 = ADMIN %s: %s teleport +TELE_MENU = Teleport Menu +CUR_LOC = Mostani hely +SAVE_LOC = Hely mentese + +[lt] +ADMIN_TELEPORT_1 = ADMINAS: teleportavo %s +ADMIN_TELEPORT_2 = ADMINAS %s: teleportavo %s +TELE_MENU = Teleporto Meniu +CUR_LOC = Dabartine vieta +SAVE_LOC = Issaugoti vietove + +[sk] +ADMIN_TELEPORT_1 = ADMIN: teleportoval %s +ADMIN_TELEPORT_2 = ADMIN %s: teleportovali %s +TELE_MENU = MENU: Teleport +CUR_LOC = Sucasne miesto +SAVE_LOC = Ulozit miesto + +[mk] +ADMIN_TELEPORT_1 = ADMIN: go teleportira %s +ADMIN_TELEPORT_2 = ADMIN %s: go teleportira %s +TELE_MENU = Meni za teleportiranje +CUR_LOC = Vidi ja zacuvanata lokacija +SAVE_LOC = Zacuvaj ja segasnata lokacija diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/time.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/time.txt new file mode 100644 index 0000000..65edb40 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/time.txt @@ -0,0 +1,237 @@ +[en] +TIME_ELEMENT_SECOND = second +TIME_ELEMENT_SECONDS = seconds +TIME_ELEMENT_MINUTE = minute +TIME_ELEMENT_MINUTES = minutes +TIME_ELEMENT_HOUR = hour +TIME_ELEMENT_HOURS = hours +TIME_ELEMENT_DAY = day +TIME_ELEMENT_DAYS = days +TIME_ELEMENT_WEEK = week +TIME_ELEMENT_WEEKS = weeks +TIME_ELEMENT_PERMANENTLY = permanently +TIME_ELEMENT_AND = and + +[de] +TIME_ELEMENT_SECOND = Sekunde +TIME_ELEMENT_SECONDS = Sekunden +TIME_ELEMENT_MINUTE = Minute +TIME_ELEMENT_MINUTES = Minuten +TIME_ELEMENT_HOUR = Stunde +TIME_ELEMENT_HOURS = Stunden +TIME_ELEMENT_DAY = Tag +TIME_ELEMENT_DAYS = Tage +TIME_ELEMENT_WEEK = Woche +TIME_ELEMENT_WEEKS = Wochen +TIME_ELEMENT_PERMANENTLY = permanent +TIME_ELEMENT_AND = und + +[sr] +TIME_ELEMENT_SECOND = sekunda +TIME_ELEMENT_SECONDS = sekundi +TIME_ELEMENT_MINUTE = minut +TIME_ELEMENT_MINUTES = minuta +TIME_ELEMENT_HOUR = sat +TIME_ELEMENT_HOURS = sati +TIME_ELEMENT_DAY = dan +TIME_ELEMENT_DAYS = dani +TIME_ELEMENT_WEEK = nedelja +TIME_ELEMENT_WEEKS = nedelje +TIME_ELEMENT_PERMANENTLY = za stalno +TIME_ELEMENT_AND = i + +[sv] +TIME_ELEMENT_SECOND = sekund +TIME_ELEMENT_SECONDS = sekunder +TIME_ELEMENT_MINUTE = minut +TIME_ELEMENT_MINUTES = minuter +TIME_ELEMENT_HOUR = timme +TIME_ELEMENT_HOURS = timmar +TIME_ELEMENT_DAY = dag +TIME_ELEMENT_DAYS = dagar +TIME_ELEMENT_WEEK = vecka +TIME_ELEMENT_WEEKS = veckor +TIME_ELEMENT_PERMANENTLY = permanent +TIME_ELEMENT_AND = och + +[fr] +TIME_ELEMENT_SECOND = seconde +TIME_ELEMENT_SECONDS = secondes +TIME_ELEMENT_MINUTE = minute +TIME_ELEMENT_MINUTES = minutes +TIME_ELEMENT_HOUR = heure +TIME_ELEMENT_HOURS = heures +TIME_ELEMENT_DAY = jour +TIME_ELEMENT_DAYS = jours +TIME_ELEMENT_WEEK = semaine +TIME_ELEMENT_WEEKS = semaines +TIME_ELEMENT_PERMANENTLY = a vie (permanent) +TIME_ELEMENT_AND = et + +[es] +TIME_ELEMENT_SECOND = segundo +TIME_ELEMENT_SECONDS = segundos +TIME_ELEMENT_MINUTE = minuto +TIME_ELEMENT_MINUTES = minutos +TIME_ELEMENT_HOUR = hora +TIME_ELEMENT_HOURS = horas +TIME_ELEMENT_DAY = dia +TIME_ELEMENT_DAYS = dias +TIME_ELEMENT_WEEK = semana +TIME_ELEMENT_WEEKS = semanas +TIME_ELEMENT_PERMANENTLY = permanentemente +TIME_ELEMENT_AND = y + +[bp] +TIME_ELEMENT_SECOND = segundo +TIME_ELEMENT_SECONDS = segundos +TIME_ELEMENT_MINUTE = minuto +TIME_ELEMENT_MINUTES = minutos +TIME_ELEMENT_HOUR = hora +TIME_ELEMENT_HOURS = horas +TIME_ELEMENT_DAY = dia +TIME_ELEMENT_DAYS = dias +TIME_ELEMENT_WEEK = semana +TIME_ELEMENT_WEEKS = semanas +TIME_ELEMENT_PERMANENTLY = permanentemente +TIME_ELEMENT_AND = e + +[nl] +TIME_ELEMENT_SECOND = seconde +TIME_ELEMENT_SECONDS = seconden +TIME_ELEMENT_MINUTE = minuut +TIME_ELEMENT_MINUTES = minuten +TIME_ELEMENT_HOUR = uur +TIME_ELEMENT_HOURS = uur +TIME_ELEMENT_DAY = dag +TIME_ELEMENT_DAYS = dagen +TIME_ELEMENT_WEEK = week +TIME_ELEMENT_WEEKS = weken +TIME_ELEMENT_PERMANENTLY = permanent +TIME_ELEMENT_AND = en + +[pl] +TIME_ELEMENT_SECOND = sekunda +TIME_ELEMENT_SECONDS = sekund +TIME_ELEMENT_MINUTE = minuta +TIME_ELEMENT_MINUTES = minut +TIME_ELEMENT_HOUR = godzina +TIME_ELEMENT_HOURS = godzin +TIME_ELEMENT_DAY = dzien +TIME_ELEMENT_DAYS = dni +TIME_ELEMENT_WEEK = tydzien +TIME_ELEMENT_WEEKS = tygodni +TIME_ELEMENT_PERMANENTLY = permanentnie +TIME_ELEMENT_AND = i + +[da] +TIME_ELEMENT_SECOND = sekund +TIME_ELEMENT_SECONDS = sekunder +TIME_ELEMENT_MINUTE = minut +TIME_ELEMENT_MINUTES = minutter +TIME_ELEMENT_HOUR = time +TIME_ELEMENT_HOURS = timer +TIME_ELEMENT_DAY = dag +TIME_ELEMENT_DAYS = dage +TIME_ELEMENT_WEEK = uge +TIME_ELEMENT_WEEKS = uger +TIME_ELEMENT_PERMANENTLY = permanent +TIME_ELEMENT_AND = og + +[ls] +TIME_ELEMENT_SECOND = s3c0nd +TIME_ELEMENT_SECONDS = s3c0ndz +TIME_ELEMENT_MINUTE = m!nut3 +TIME_ELEMENT_MINUTES = m!nut3z +TIME_ELEMENT_HOUR = h0u|2 +TIME_ELEMENT_HOURS = h0u|2z +TIME_ELEMENT_DAY = d4y +TIME_ELEMENT_DAYS = d4yz +TIME_ELEMENT_WEEK = w33|< +TIME_ELEMENT_WEEKS = w33|<z +TIME_ELEMENT_PERMANENTLY = p3|2m4n3ntly +TIME_ELEMENT_AND = 4nd + +[bg] +TIME_ELEMENT_SECOND = secunda +TIME_ELEMENT_SECONDS = secundi +TIME_ELEMENT_MINUTE = minuta +TIME_ELEMENT_MINUTES = minuti +TIME_ELEMENT_HOUR = 4as +TIME_ELEMENT_HOURS = 4asove +TIME_ELEMENT_DAY = den +TIME_ELEMENT_DAYS = dni +TIME_ELEMENT_WEEK = sedmica +TIME_ELEMENT_WEEKS = sedmici +TIME_ELEMENT_PERMANENTLY = do jivot +TIME_ELEMENT_AND = i + +[ro] +TIME_ELEMENT_SECOND = secunda +TIME_ELEMENT_SECONDS = secunde +TIME_ELEMENT_MINUTE = minut +TIME_ELEMENT_MINUTES = minute +TIME_ELEMENT_HOUR = ora +TIME_ELEMENT_HOURS = ore +TIME_ELEMENT_DAY = zi +TIME_ELEMENT_DAYS = zile +TIME_ELEMENT_WEEK = saptamana +TIME_ELEMENT_WEEKS = saptamani +TIME_ELEMENT_PERMANENTLY = permanent +TIME_ELEMENT_AND = si + +[hu] +TIME_ELEMENT_SECOND = masodperc +TIME_ELEMENT_SECONDS = masodperc +TIME_ELEMENT_MINUTE = perc +TIME_ELEMENT_MINUTES = perc +TIME_ELEMENT_HOUR = ora +TIME_ELEMENT_HOURS = ora +TIME_ELEMENT_DAY = nap +TIME_ELEMENT_DAYS = nap +TIME_ELEMENT_WEEK = het +TIME_ELEMENT_WEEKS = het +TIME_ELEMENT_PERMANENTLY = vegleges +TIME_ELEMENT_AND = es + +[lt] +TIME_ELEMENT_SECOND = sekunde +TIME_ELEMENT_SECONDS = sekundes +TIME_ELEMENT_MINUTE = minute +TIME_ELEMENT_MINUTES = minutes +TIME_ELEMENT_HOUR = valanda +TIME_ELEMENT_HOURS = valandos +TIME_ELEMENT_DAY = diena +TIME_ELEMENT_DAYS = dienos +TIME_ELEMENT_WEEK = savaite +TIME_ELEMENT_WEEKS = savaites +TIME_ELEMENT_PERMANENTLY = visam laikui +TIME_ELEMENT_AND = ir + +[sk] +TIME_ELEMENT_SECOND = sekunda +TIME_ELEMENT_SECONDS = sekund +TIME_ELEMENT_MINUTE = minuta +TIME_ELEMENT_MINUTES = minut +TIME_ELEMENT_HOUR = hodina +TIME_ELEMENT_HOURS = hodin +TIME_ELEMENT_DAY = den +TIME_ELEMENT_DAYS = dni +TIME_ELEMENT_WEEK = tyzden +TIME_ELEMENT_WEEKS = tyzdnov +TIME_ELEMENT_PERMANENTLY = permantne +TIME_ELEMENT_AND = a + +[mk] +TIME_ELEMENT_SECOND = sekunda +TIME_ELEMENT_SECONDS = sekundi +TIME_ELEMENT_MINUTE = minuta +TIME_ELEMENT_MINUTES = minuti +TIME_ELEMENT_HOUR = cas +TIME_ELEMENT_HOURS = casovi +TIME_ELEMENT_DAY = den +TIME_ELEMENT_DAYS = denovi +TIME_ELEMENT_WEEK = nedela +TIME_ELEMENT_WEEKS = nedeli +TIME_ELEMENT_PERMANENTLY = zasekogas +TIME_ELEMENT_AND = i diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/timeleft.txt b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/timeleft.txt new file mode 100644 index 0000000..a2beed9 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/data/lang/timeleft.txt @@ -0,0 +1,179 @@ +[en] +THE_TIME = The time +TIME_LEFT = Time Left +NO_T_LIMIT = No Time Limit +MINUTE = minute +MINUTES = minutes +SECOND = second +SECONDS = seconds + +[de] +THE_TIME = Es ist +TIME_LEFT = Zeit uebrig +NO_T_LIMIT = Kein Zeitlimit +MINUTE = Minute +MINUTES = Minuten +SECOND = Sekunde +SECONDS = Sekunden + +[sr] +THE_TIME = Vreme +TIME_LEFT = Preostalo Vreme +NO_T_LIMIT = Nema Ogranicenja Vremena +MINUTE = minut +MINUTES = minute +SECOND = sekund +SECONDS = sekundi + +[tr] +THE_TIME = Saat +TIME_LEFT = Kalan zaman +NO_T_LIMIT = Suresiz zaman +MINUTE = dakika +MINUTES = dakikalar +SECOND = saniye +SECONDS = saniyeler + +[fr] +THE_TIME = Il est +TIME_LEFT = Temps Restant +NO_T_LIMIT = Aucun Temps Limite +MINUTE = minute +MINUTES = minutes +SECOND = seconde +SECONDS = secondes + +[sv] +THE_TIME = Tid +TIME_LEFT = Tid kvar +NO_T_LIMIT = Ingen tidsbegr'a'nsning +MINUTE = minut +MINUTES = minuter +SECOND = sekund +SECONDS = sekunder + +[da] +THE_TIME = Tiden +TIME_LEFT = Tid tilbage +NO_T_LIMIT = Ingen tidsbegraensning +MINUTE = minut +MINUTES = minutter +SECOND = sekund +SECONDs = sekunder + +[pl] +THE_TIME = Czas +TIME_LEFT = Pozostalo czasu +NO_T_LIMIT = Bez limitu czasu +MINUTE = minuta +MINUTES = minut +SECOND = sekunda +SECONDS = sekund + +[nl] +THE_TIME = Het is nu +TIME_LEFT = Restende Tijd +NO_T_LIMIT = Geen Tijdlimiet +MINUTE = minuut +MINUTES = minuten +SECOND = seconde +SECONDS = seconden + +[es] +THE_TIME = Hora y fecha +TIME_LEFT = Tiempo Restante +NO_T_LIMIT = Tiempo Ilimitado +MINUTE = minuto +MINUTES = minutos +SECOND = segundo +SECONDS = segundos + +[bp] +THE_TIME = Hora certa +TIME_LEFT = Tempo Restante +NO_T_LIMIT = Sem Tempo Limite +MINUTE = minuto +MINUTES = minutos +SECOND = segundo +SECONDS = segundos + +[cz] +THE_TIME = Cas +TIME_LEFT = Zbyva jeste +NO_T_LIMIT = Neni casovy limit +MINUTE = minuta +MINUTES = minut +SECOND = sekunda +SECONDS = second + +[fi] +THE_TIME = Aika +TIME_LEFT = Aikaa jaljella +NO_T_LIMIT = Ei aikarajaa +MINUTE = minuutti +MINUTES = minuuttia +SECOND = sekunti +SECONDS = sekuntia + +[ls] +THE_TIME = T3h t!m3 +TIME_LEFT = T!m3 L3ft +NO_T_LIMIT = N0 T!m3 L!m!t +MINUTE = m!nut3 +MINUTES = m!nut3z +SECOND = s3c0nd +SECONDS = s3c0ndz + +[bg] +THE_TIME = 4asa +TIME_LEFT = Ostanalo Vreme +NO_T_LIMIT = Nqma limit na vremeto +MINUTE = minuta +MINUTES = minuti +SECOND = secunda +SECONDS = secundi + +[ro] +THE_TIME = Ora +TIME_LEFT = Timp Ramas +NO_T_LIMIT = Nici o Limita a Timpului +MINUTE = minut ramas +MINUTES = minute ramase +SECOND = secunda +SECONDS = secunde + +[hu] +THE_TIME = Az ido +TIME_LEFT = Hatralevo ido +NO_T_LIMIT = NIncs idohatar +MINUTE = perc +MINUTES = perc +SECOND = masodperc +SECONDS = masodperc + +[lt] +THE_TIME = Laikas +TIME_LEFT = Liko laiko +NO_T_LIMIT = Nera laiko limito +MINUTE = minute +MINUTES = minutes +SECOND = sekunde +SECONDS = sekundes + +[sk] +THE_TIME = Cas +TIME_LEFT = Ostava este +NO_T_LIMIT = Neni casovy limit +MINUTE = minuta +MINUTES = minut +SECOND = sekunda +SECONDS = sekund + +[mk] +THE_TIME = Vreme +TIME_LEFT = Preostanato Vreme +NO_T_LIMIT = Nema Ogranicuvanje Na Vremeto +MINUTE = minuta +MINUTES = minuti +SECOND = sekunda +SECONDS = sekundi diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so new file mode 100644 index 0000000..b42c49c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/cstrike_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/cstrike_amxx_i386.so new file mode 100644 index 0000000..80f0d54 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/cstrike_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/csx_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/csx_amxx_i386.so new file mode 100644 index 0000000..0b88ef9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/csx_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/engine_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/engine_amxx_i386.so new file mode 100644 index 0000000..a9246f2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/engine_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/fakemeta_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/fakemeta_amxx_i386.so new file mode 100644 index 0000000..2639f35 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/fakemeta_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/fun_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/fun_amxx_i386.so new file mode 100644 index 0000000..75b713b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/fun_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/geoip_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/geoip_amxx_i386.so new file mode 100644 index 0000000..c11c6ab Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/geoip_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so new file mode 100644 index 0000000..a849844 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/mysql_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/mysql_amxx_i386.so new file mode 100644 index 0000000..f48d7fa Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/mysql_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/nvault_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/nvault_amxx_i386.so new file mode 100644 index 0000000..a51f477 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/nvault_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/regex_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/regex_amxx_i386.so new file mode 100644 index 0000000..3b26d95 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/regex_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/sockets_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/sockets_amxx_i386.so new file mode 100644 index 0000000..d973138 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/sockets_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/sqlite_amxx_i386.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/sqlite_amxx_i386.so new file mode 100644 index 0000000..8218ba7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/modules/sqlite_amxx_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/QuakeSounds.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/QuakeSounds.amxx new file mode 100644 index 0000000..bcb06c8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/QuakeSounds.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/abd.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/abd.amxx new file mode 100644 index 0000000..3172276 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/abd.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admin.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admin.amxx new file mode 100644 index 0000000..e4fd1b6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admin.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admin_sql.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admin_sql.amxx new file mode 100644 index 0000000..7808c31 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admin_sql.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminchat.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminchat.amxx new file mode 100644 index 0000000..d330669 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminchat.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admincmd.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admincmd.amxx new file mode 100644 index 0000000..6bd2801 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/admincmd.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminhelp.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminhelp.amxx new file mode 100644 index 0000000..1bf65c4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminhelp.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminslots.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminslots.amxx new file mode 100644 index 0000000..a9b4ea7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminslots.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminvote.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminvote.amxx new file mode 100644 index 0000000..6a1af20 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/adminvote.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/amxmod_compat.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/amxmod_compat.amxx new file mode 100644 index 0000000..46cfd89 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/amxmod_compat.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/antiflood.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/antiflood.amxx new file mode 100644 index 0000000..adbc1ee Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/antiflood.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/bullet_damage.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/bullet_damage.amxx new file mode 100644 index 0000000..da4adb7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/bullet_damage.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/cmdmenu.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/cmdmenu.amxx new file mode 100644 index 0000000..a267315 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/cmdmenu.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/imessage.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/imessage.amxx new file mode 100644 index 0000000..7e9efb1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/imessage.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/mapchooser.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/mapchooser.amxx new file mode 100644 index 0000000..e4c3fdc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/mapchooser.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/mapsmenu.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/mapsmenu.amxx new file mode 100644 index 0000000..5aafe62 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/mapsmenu.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/menufront.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/menufront.amxx new file mode 100644 index 0000000..90e3617 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/menufront.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/miscstats.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/miscstats.amxx new file mode 100644 index 0000000..40d67c2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/miscstats.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/multilingual.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/multilingual.amxx new file mode 100644 index 0000000..b9cdb20 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/multilingual.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/nextmap.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/nextmap.amxx new file mode 100644 index 0000000..e33ab47 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/nextmap.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/pausecfg.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/pausecfg.amxx new file mode 100644 index 0000000..d0040a5 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/pausecfg.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/plmenu.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/plmenu.amxx new file mode 100644 index 0000000..0482f12 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/plmenu.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/pluginmenu.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/pluginmenu.amxx new file mode 100644 index 0000000..2bf7d60 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/pluginmenu.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/restmenu.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/restmenu.amxx new file mode 100644 index 0000000..98993a6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/restmenu.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/scrollmsg.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/scrollmsg.amxx new file mode 100644 index 0000000..e6b9bda Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/scrollmsg.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/stats_logging.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/stats_logging.amxx new file mode 100644 index 0000000..fe62f0d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/stats_logging.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/statscfg.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/statscfg.amxx new file mode 100644 index 0000000..e436a3a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/statscfg.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/statsx.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/statsx.amxx new file mode 100644 index 0000000..e065cec Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/statsx.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/telemenu.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/telemenu.amxx new file mode 100644 index 0000000..dbe677a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/telemenu.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/timeleft.amxx b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/timeleft.amxx new file mode 100644 index 0000000..56af5c4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/plugins/timeleft.amxx differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/admin.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/admin.sma new file mode 100644 index 0000000..112dd44 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/admin.sma @@ -0,0 +1,866 @@ +/* AMX Mod X script. +* Admin Base Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +// Uncomment for SQL version +// #define USING_SQL + +#include <amxmodx> +#include <amxmisc> +#if defined USING_SQL +#include <sqlx> +#endif + +//new Vector:AdminList; + +new AdminCount; + +new PLUGINNAME[] = "AMX Mod X" + +#define ADMIN_LOOKUP (1<<0) +#define ADMIN_NORMAL (1<<1) +#define ADMIN_STEAM (1<<2) +#define ADMIN_IPADDR (1<<3) +#define ADMIN_NAME (1<<4) + +new g_cmdLoopback[16] +new bool:g_CaseSensitiveName[33]; + +// pcvars +new amx_mode; +new amx_password_field; +new amx_default_access; + +public plugin_init() +{ +#if defined USING_SQL + register_plugin("Admin Base (SQL)", AMXX_VERSION_STR, "AMXX Dev Team") +#else + register_plugin("Admin Base", AMXX_VERSION_STR, "AMXX Dev Team") +#endif + register_dictionary("admin.txt") + register_dictionary("common.txt") + amx_mode=register_cvar("amx_mode", "1") + amx_password_field=register_cvar("amx_password_field", "_pw") + amx_default_access=register_cvar("amx_default_access", "") + + register_cvar("amx_vote_ratio", "0.02") + register_cvar("amx_vote_time", "10") + register_cvar("amx_vote_answers", "1") + register_cvar("amx_vote_delay", "60") + register_cvar("amx_last_voting", "0") + register_cvar("amx_show_activity", "2") + register_cvar("amx_votekick_ratio", "0.40") + register_cvar("amx_voteban_ratio", "0.40") + register_cvar("amx_votemap_ratio", "0.40") + + set_cvar_float("amx_last_voting", 0.0) + +#if defined USING_SQL + register_srvcmd("amx_sqladmins", "adminSql") + register_cvar("amx_sql_table", "admins") +#endif + register_cvar("amx_sql_host", "127.0.0.1") + register_cvar("amx_sql_user", "root") + register_cvar("amx_sql_pass", "") + register_cvar("amx_sql_db", "amx") + register_cvar("amx_sql_type", "mysql") + + register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG) + register_concmd("amx_addadmin", "addadminfn", ADMIN_RCON, "<playername|auth> <accessflags> [password] [authtype] - add specified player as an admin to users.ini") + + format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z')) + + register_clcmd(g_cmdLoopback, "ackSignal") + + remove_user_flags(0, read_flags("z")) // Remove 'user' flag from server rights + + new configsDir[64] + get_configsdir(configsDir, 63) + + server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file + server_cmd("exec %s/sql.cfg", configsDir) + + // Create a vector of 5 cells to store the info. + //AdminList=vector_create(5); + + +#if defined USING_SQL + server_cmd("amx_sqladmins") +#else + format(configsDir, 63, "%s/users.ini", configsDir) + loadSettings(configsDir) // Load admins accounts +#endif +} +public client_connect(id) +{ + g_CaseSensitiveName[id] = false; +} +public addadminfn(id, level, cid) +{ + if (!cmd_access(id, level, cid, 3)) + return PLUGIN_HANDLED + + new idtype = ADMIN_STEAM | ADMIN_LOOKUP + + if (read_argc() >= 5) + { + new t_arg[16] + read_argv(4, t_arg, 15) + + if (equali(t_arg, "steam") || equali(t_arg, "steamid") || equali(t_arg, "auth")) + { + idtype = ADMIN_STEAM + } + else if (equali(t_arg, "ip")) + { + idtype = ADMIN_IPADDR + } + else if (equali(t_arg, "name") || equali(t_arg, "nick")) + { + idtype = ADMIN_NAME + + if (equali(t_arg, "name")) + idtype |= ADMIN_LOOKUP + } else { + console_print(id, "[%s] Unknown id type ^"%s^", use one of: steamid, ip, name", PLUGINNAME, t_arg) + return PLUGIN_HANDLED + } + } + + new arg[33] + read_argv(1, arg, 32) + new player = -1 + + if (idtype & ADMIN_STEAM) + { + if (containi(arg, "STEAM_0:") == -1) + { + idtype |= ADMIN_LOOKUP + player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS) + } else { + new _steamid[44] + static _players[32], _num, _pv + get_players(_players, _num) + for (new _i=0; _i<_num; _i++) + { + _pv = _players[_i] + get_user_authid(_pv, _steamid, sizeof(_steamid)-1) + if (!_steamid[0]) + continue + if (equal(_steamid, arg)) + { + player = _pv + break + } + } + if (player < 1) + { + idtype &= ~ADMIN_LOOKUP + } + } + } + else if (idtype & ADMIN_NAME) + { + player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS) + + if (player) + idtype |= ADMIN_LOOKUP + else + idtype &= ~ADMIN_LOOKUP + } + else if (idtype & ADMIN_IPADDR) + { + new len = strlen(arg) + new dots, chars + + for (new i = 0; i < len; i++) + { + if (arg[i] == '.') + { + if (!chars || chars > 3) + break + + if (++dots > 3) + break + + chars = 0 + } else { + chars++ + } + + if (dots != 3 || !chars || chars > 3) + { + idtype |= ADMIN_LOOKUP + player = find_player("dh", arg) + } + } + } + + if (idtype & ADMIN_LOOKUP && !player) + { + console_print(id, "%L", id, "CL_NOT_FOUND") + return PLUGIN_HANDLED + } + + new flags[64] + read_argv(2, flags, 63) + + new password[64] + if (read_argc() >= 4) + read_argv(3, password, 63) + + new auth[33] + new Comment[33]; // name of player to pass to comment field + if (idtype & ADMIN_LOOKUP) + { + get_user_name(player, Comment, sizeof(Comment)-1) + if (idtype & ADMIN_STEAM) + { + get_user_authid(player, auth, 32) + } + else if (idtype & ADMIN_IPADDR) + { + get_user_ip(player, auth, 32) + } + else if (idtype & ADMIN_NAME) + { + get_user_name(player, auth, 32) + } + } else { + copy(auth, 32, arg) + } + + new type[16], len + + if (idtype & ADMIN_STEAM) + len += format(type[len], 15-len, "c") + else if (idtype & ADMIN_IPADDR) + len += format(type[len], 15-len, "d") + + if (strlen(password) > 0) + len += format(type[len], 15-len, "a") + else + len += format(type[len], 15-len, "e") + + AddAdmin(id, auth, flags, password, type, Comment) + cmdReload(id, ADMIN_CFG, 0) + + if (player > 0) + { + new name[32] + get_user_info(player, "name", name, 31) + accessUser(player, name) + } + + return PLUGIN_HANDLED +} + +AddAdmin(id, auth[], accessflags[], password[], flags[], comment[]="") +{ +#if defined USING_SQL + new error[128], errno + + new Handle:info = SQL_MakeStdTuple() + new Handle:sql = SQL_Connect(info, errno, error, 127) + + if (sql == Empty_Handle) + { + server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_CON", error) + //backup to users.ini +#endif + // Make sure that the users.ini file exists. + new configsDir[64] + get_configsdir(configsDir, 63) + format(configsDir, 63, "%s/users.ini", configsDir) + + if (!file_exists(configsDir)) + { + console_print(id, "[%s] File ^"%s^" doesn't exist.", PLUGINNAME, configsDir) + return + } + + // Make sure steamid isn't already in file. + new line = 0, textline[256], len + const SIZE = 63 + new line_steamid[SIZE + 1], line_password[SIZE + 1], line_accessflags[SIZE + 1], line_flags[SIZE + 1], parsedParams + + // <name|ip|steamid> <password> <access flags> <account flags> + while ((line = read_file(configsDir, line, textline, 255, len))) + { + if (len == 0 || equal(textline, ";", 1)) + continue // comment line + + parsedParams = parse(textline, line_steamid, SIZE, line_password, SIZE, line_accessflags, SIZE, line_flags, SIZE) + + if (parsedParams != 4) + continue // Send warning/error? + + if (containi(line_flags, flags) != -1 && equal(line_steamid, auth)) + { + console_print(id, "[%s] %s already exists!", PLUGINNAME, auth) + return + } + } + + // If we came here, steamid doesn't exist in users.ini. Add it. + new linetoadd[512] + + if (comment[0]==0) + { + formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags) + } + else + { + formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ^"%s^" ^"%s^" ; %s", auth, password, accessflags, flags, comment) + } + console_print(id, "Adding:^n%s", linetoadd) + + if (!write_file(configsDir, linetoadd)) + console_print(id, "[%s] Failed writing to %s!", PLUGINNAME, configsDir) +#if defined USING_SQL + } + + new table[32] + + get_cvar_string("amx_sql_table", table, 31) + + new Handle:query = SQL_PrepareQuery(sql, "SELECT * FROM `%s` WHERE (`auth` = '%s')", table, auth) + + if (!SQL_Execute(query)) + { + SQL_QueryError(query, error, 127) + server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error) + console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error) + } else if (SQL_NumResults(query)) { + console_print(id, "[%s] %s already exists!", PLUGINNAME, auth) + } else { + console_print(id, "Adding to database:^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags) + + SQL_QueryAndIgnore(sql, "REPLACE INTO `%s` (`auth`, `password`, `access`, `flags`) VALUES ('%s', '%s', '%s', '%s')", table, auth, password, accessflags, flags) + } + + SQL_FreeHandle(query) + SQL_FreeHandle(sql) + SQL_FreeHandle(info) +#endif + +} +public plugin_cfg() +{ + set_task(6.1, "delayed_load") +} + +public delayed_load() +{ + new configFile[128], curMap[64], configDir[128] + + get_configsdir(configDir, sizeof(configDir)-1) + get_mapname(curMap, sizeof(curMap)-1) + + new i=0; + + while (curMap[i] != '_' && curMap[i++] != '^0') {/*do nothing*/} + + if (curMap[i]=='_') + { + // this map has a prefix + curMap[i]='^0'; + formatex(configFile, sizeof(configFile)-1, "%s/maps/prefix_%s.cfg", configDir, curMap); + + if (file_exists(configFile)) + { + server_cmd("exec %s", configFile); + } + } + + get_mapname(curMap, sizeof(curMap)-1) + + + formatex(configFile, sizeof(configFile)-1, "%s/maps/%s.cfg", configDir, curMap) + + if (file_exists(configFile)) + { + server_cmd("exec %s", configFile) + } + +} + +loadSettings(szFilename[]) +{ + new File=fopen(szFilename,"r"); + + if (File) + { + new Text[512]; + new Flags[32]; + new Access[32] + new AuthData[44]; + new Password[32]; + + while (!feof(File)) + { + fgets(File,Text,sizeof(Text)-1); + + trim(Text); + + // comment + if (Text[0]==';') + { + continue; + } + + Flags[0]=0; + Access[0]=0; + AuthData[0]=0; + Password[0]=0; + + // not enough parameters + if (parse(Text,AuthData,sizeof(AuthData)-1,Password,sizeof(Password)-1,Access,sizeof(Access)-1,Flags,sizeof(Flags)-1) < 2) + { + continue; + } + + admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); + + AdminCount++; + } + + fclose(File); + } + + if (AdminCount == 1) + { + server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMIN"); + } + else + { + server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount); + } + + return 1; +} + +#if defined USING_SQL +public adminSql() +{ + new table[32], error[128], type[12], errno + + new Handle:info = SQL_MakeStdTuple() + new Handle:sql = SQL_Connect(info, errno, error, 127) + + get_cvar_string("amx_sql_table", table, 31) + + SQL_GetAffinity(type, 11) + + if (sql == Empty_Handle) + { + server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_CON", error) + + //backup to users.ini + new configsDir[64] + + get_configsdir(configsDir, 63) + format(configsDir, 63, "%s/users.ini", configsDir) + loadSettings(configsDir) // Load admins accounts + + return PLUGIN_HANDLED + } + + new Handle:query + + if (equali(type, "sqlite")) + { + if (!sqlite_TableExists(sql, table)) + { + SQL_QueryAndIgnore(sql, "CREATE TABLE %s ( auth TEXT NOT NULL DEFAULT '', password TEXT NOT NULL DEFAULT '', access TEXT NOT NULL DEFAULT '', flags TEXT NOT NULL DEFAULT '' )", table) + } + + query = SQL_PrepareQuery(sql, "SELECT auth, password, access, flags FROM %s", table) + } else { + SQL_QueryAndIgnore(sql, "CREATE TABLE IF NOT EXISTS `%s` ( `auth` VARCHAR( 32 ) NOT NULL, `password` VARCHAR( 32 ) NOT NULL, `access` VARCHAR( 32 ) NOT NULL, `flags` VARCHAR( 32 ) NOT NULL ) COMMENT = 'AMX Mod X Admins'", table) + query = SQL_PrepareQuery(sql,"SELECT `auth`,`password`,`access`,`flags` FROM `%s`", table) + } + + if (!SQL_Execute(query)) + { + SQL_QueryError(query, error, 127) + server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error) + } else if (!SQL_NumResults(query)) { + server_print("[AMXX] %L", LANG_SERVER, "NO_ADMINS") + } else { + + AdminCount = 0 + + /** do this incase people change the query order and forget to modify below */ + new qcolAuth = SQL_FieldNameToNum(query, "auth") + new qcolPass = SQL_FieldNameToNum(query, "password") + new qcolAccess = SQL_FieldNameToNum(query, "access") + new qcolFlags = SQL_FieldNameToNum(query, "flags") + + new AuthData[44]; + new Password[44]; + new Access[32]; + new Flags[32]; + + while (SQL_MoreResults(query)) + { + SQL_ReadResult(query, qcolAuth, AuthData, sizeof(AuthData)-1); + SQL_ReadResult(query, qcolPass, Password, sizeof(Password)-1); + SQL_ReadResult(query, qcolAccess, Access, sizeof(Access)-1); + SQL_ReadResult(query, qcolFlags, Flags, sizeof(Flags)-1); + + admins_push(AuthData,Password,read_flags(Access),read_flags(Flags)); + + ++AdminCount; + SQL_NextRow(query) + } + + if (AdminCount == 1) + { + server_print("[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMIN") + } + else + { + server_print("[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount) + } + + SQL_FreeHandle(query) + SQL_FreeHandle(sql) + SQL_FreeHandle(info) + } + + return PLUGIN_HANDLED +} +#endif + +public cmdReload(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + //strip original flags (patch submitted by mrhunt) + remove_user_flags(0, read_flags("z")) + + admins_flush(); + +#if !defined USING_SQL + new filename[128] + + get_configsdir(filename, 127) + format(filename, 63, "%s/users.ini", filename) + + AdminCount = 0; + loadSettings(filename); // Re-Load admins accounts + + if (id != 0) + { + if (AdminCount == 1) + { + console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMIN"); + } + else + { + console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount); + } + } +#else + AdminCount = 0 + adminSql() + + if (id != 0) + { + if (AdminCount == 1) + console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMIN") + else + console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount) + } +#endif + + new players[32], num, pv + new name[32] + get_players(players, num) + for (new i=0; i<num; i++) + { + pv = players[i] + get_user_name(pv, name, 31) + accessUser(pv, name) + } + + return PLUGIN_HANDLED +} + +getAccess(id, name[], authid[], ip[], password[]) +{ + new index = -1 + new result = 0 + + static Count; + static Flags; + static Access; + static AuthData[44]; + static Password[32]; + + g_CaseSensitiveName[id] = false; + + Count=admins_num(); + for (new i = 0; i < Count; ++i) + { + Flags=admins_lookup(i,AdminProp_Flags); + admins_lookup(i,AdminProp_Auth,AuthData,sizeof(AuthData)-1); + + if (Flags & FLAG_AUTHID) + { + if (equal(authid, AuthData)) + { + index = i + break + } + } + else if (Flags & FLAG_IP) + { + new c = strlen(AuthData) + + if (AuthData[c - 1] == '.') /* check if this is not a xxx.xxx. format */ + { + if (equal(AuthData, ip, c)) + { + index = i + break + } + } /* in other case an IP must just match */ + else if (equal(ip, AuthData)) + { + index = i + break + } + } + else + { + if (Flags & FLAG_CASE_SENSITIVE) + { + if (Flags & FLAG_TAG) + { + if (contain(name, AuthData) != -1) + { + index = i + g_CaseSensitiveName[id] = true + break + } + } + else if (equal(name, AuthData)) + { + index = i + g_CaseSensitiveName[id] = true + break + } + } + else + { + if (Flags & FLAG_TAG) + { + if (containi(name, AuthData) != -1) + { + index = i + break + } + } + else if (equali(name, AuthData)) + { + index = i + break + } + } + } + } + + if (index != -1) + { + Access=admins_lookup(index,AdminProp_Access); + + if (Flags & FLAG_NOPASS) + { + result |= 8 + new sflags[32] + + get_flags(Access, sflags, 31) + set_user_flags(id, Access) + + log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip) + } + else + { + + admins_lookup(index,AdminProp_Password,Password,sizeof(Password)-1); + + if (equal(password, Password)) + { + result |= 12 + set_user_flags(id, Access) + + new sflags[32] + get_flags(Access, sflags, 31) + + log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip) + } + else + { + result |= 1 + + if (Flags & FLAG_KICK) + { + result |= 2 + log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, ip) + } + } + } + } + else if (get_pcvar_float(amx_mode) == 2.0) + { + result |= 2 + } + else + { + new defaccess[32] + + get_pcvar_string(amx_default_access, defaccess, 31) + + if (!strlen(defaccess)) + { + copy(defaccess, 32, "z") + } + + new idefaccess = read_flags(defaccess) + + if (idefaccess) + { + result |= 8 + set_user_flags(id, idefaccess) + } + } + + return result +} + +accessUser(id, name[] = "") +{ + remove_user_flags(id) + + new userip[32], userauthid[32], password[32], passfield[32], username[32] + + get_user_ip(id, userip, 31, 1) + get_user_authid(id, userauthid, 31) + + if (name[0]) + { + copy(username, 31, name) + } + else + { + get_user_name(id, username, 31) + } + + get_pcvar_string(amx_password_field, passfield, 31) + get_user_info(id, passfield, password, 31) + + new result = getAccess(id, username, userauthid, userip, password) + + if (result & 1) + { + client_cmd(id, "echo ^"* %L^"", id, "INV_PAS") + } + + if (result & 2) + { + client_cmd(id, "%s", g_cmdLoopback) + return PLUGIN_HANDLED + } + + if (result & 4) + { + client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC") + } + + if (result & 8) + { + client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET") + } + + return PLUGIN_CONTINUE +} + +public client_infochanged(id) +{ + if (!is_user_connected(id) || !get_pcvar_num(amx_mode)) + { + return PLUGIN_CONTINUE + } + + new newname[32], oldname[32] + + get_user_name(id, oldname, 31) + get_user_info(id, "name", newname, 31) + + if (g_CaseSensitiveName[id]) + { + if (!equal(newname, oldname)) + { + accessUser(id, newname) + } + } + else + { + if (!equali(newname, oldname)) + { + accessUser(id, newname) + } + } + return PLUGIN_CONTINUE +} + +public ackSignal(id) +{ + server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY") + return PLUGIN_HANDLED +} + +public client_authorized(id) + return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE + +public client_putinserver(id) +{ + if (!is_dedicated_server() && id == 1) + return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE + + return PLUGIN_CONTINUE +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminchat.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminchat.sma new file mode 100644 index 0000000..956173d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminchat.sma @@ -0,0 +1,402 @@ +/* AMX Mod X +* Admin Chat Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +new g_msgChannel + +#define MAX_CLR 10 + +new g_Colors[MAX_CLR][] = {"COL_WHITE", "COL_RED", "COL_GREEN", "COL_BLUE", "COL_YELLOW", "COL_MAGENTA", "COL_CYAN", "COL_ORANGE", "COL_OCEAN", "COL_MAROON"} +new g_Values[MAX_CLR][] = {{255, 255, 255}, {255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {255, 0, 255}, {0, 255, 255}, {227, 96, 8}, {45, 89, 116}, {103, 44, 38}} +new Float:g_Pos[4][] = {{0.0, 0.0}, {0.05, 0.55}, {-1.0, 0.2}, {-1.0, 0.7}} + +new amx_show_activity; +new g_AdminChatFlag = ADMIN_CHAT; + +public plugin_init() +{ + new admin_chat_id + + register_plugin("Admin Chat", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("adminchat.txt") + register_dictionary("common.txt") + register_clcmd("say", "cmdSayChat", ADMIN_CHAT, "@[@|@|@][w|r|g|b|y|m|c]<text> - displays hud message") + register_clcmd("say_team", "cmdSayAdmin", 0, "@<text> - displays message to admins") + register_concmd("amx_say", "cmdSay", ADMIN_CHAT, "<message> - sends message to all players") + admin_chat_id = register_concmd("amx_chat", "cmdChat", ADMIN_CHAT, "<message> - sends message to admins") + register_concmd("amx_psay", "cmdPsay", ADMIN_CHAT, "<name or #userid> <message> - sends private message") + register_concmd("amx_tsay", "cmdTsay", ADMIN_CHAT, "<color> <message> - sends left side hud message to all players") + register_concmd("amx_csay", "cmdTsay", ADMIN_CHAT, "<color> <message> - sends center hud message to all players") + + amx_show_activity = get_cvar_pointer("amx_show_activity"); + + if (amx_show_activity == 0) + { + amx_show_activity = register_cvar("amx_show_activity", "2"); + } + + new str[1] + get_concmd(admin_chat_id, str, 0, g_AdminChatFlag, str, 0, -1) +} + +public cmdSayChat(id) +{ + if (!access(id, g_AdminChatFlag)) + { + return PLUGIN_CONTINUE + } + + new said[6], i = 0 + read_argv(1, said, 5) + + while (said[i] == '@') + { + i++ + } + + if (!i || i > 3) + { + return PLUGIN_CONTINUE + } + + new message[192], a = 0 + read_args(message, 191) + remove_quotes(message) + + switch (said[i]) + { + case 'r': a = 1 + case 'g': a = 2 + case 'b': a = 3 + case 'y': a = 4 + case 'm': a = 5 + case 'c': a = 6 + case 'o': a = 7 + } + + new n, s = i + if (a) + { + n++ + s++ + } + while (said[s] && isspace(said[s])) + { + n++ + s++ + } + + + new name[32], authid[32], userid + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + userid = get_user_userid(id) + + log_amx("Chat: ^"%s<%d><%s><>^" tsay ^"%s^"", name, userid, authid, message[i + n]) + log_message("^"%s<%d><%s><>^" triggered ^"amx_tsay^" (text ^"%s^") (color ^"%L^")", name, userid, authid, message[i + n], "en", g_Colors[a]) + + if (++g_msgChannel > 6 || g_msgChannel < 3) + { + g_msgChannel = 3 + } + + new Float:verpos = g_Pos[i][1] + float(g_msgChannel) / 35.0 + + set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], g_Pos[i][0], verpos, 0, 6.0, 6.0, 0.5, 0.15, -1) + + switch ( get_pcvar_num(amx_show_activity) ) + { + case 3, 4: + { + new maxpl = get_maxplayers(); + for (new pl = 1; pl <= maxpl; pl++) + { + if (is_user_connected(pl) && !is_user_bot(pl)) + { + if (is_user_admin(pl)) + { + show_hudmessage(pl, "%s : %s", name, message[i + n]) + client_print(pl, print_notify, "%s : %s", name, message[i + n]) + } + else + { + show_hudmessage(pl, "%s", message[i + n]) + client_print(pl, print_notify, "%s", message[i + n]) + } + } + } + } + case 2: + { + show_hudmessage(0, "%s : %s", name, message[i + n]) + client_print(0, print_notify, "%s : %s", name, message[i + n]) + } + default: + { + show_hudmessage(0, "%s", message[i + n]) + client_print(0, print_notify, "%s", message[i + n]) + } + } + + return PLUGIN_HANDLED +} + +public cmdSayAdmin(id) +{ + new said[2] + read_argv(1, said, 1) + + if (said[0] != '@') + return PLUGIN_CONTINUE + + new message[192], name[32], authid[32], userid + new players[32], inum + + read_args(message, 191) + remove_quotes(message) + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + userid = get_user_userid(id) + + log_amx("Chat: ^"%s<%d><%s><>^" chat ^"%s^"", name, userid, authid, message[1]) + log_message("^"%s<%d><%s><>^" triggered ^"amx_chat^" (text ^"%s^")", name, userid, authid, message[1]) + + if (is_user_admin(id)) + format(message, 191, "(%L) %s : %s", id, "ADMIN", name, message[1]) + else + format(message, 191, "(%L) %s : %s", id, "PLAYER", name, message[1]) + + get_players(players, inum) + + for (new i = 0; i < inum; ++i) + { + // dont print the message to the client that used the cmd if he has ADMIN_CHAT to avoid double printing + if (players[i] != id && get_user_flags(players[i]) & g_AdminChatFlag) + client_print(players[i], print_chat, "%s", message) + } + + client_print(id, print_chat, "%s", message) + + return PLUGIN_HANDLED +} + +public cmdChat(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new message[192], name[32], players[32], inum, authid[32], userid + + read_args(message, 191) + remove_quotes(message) + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + userid = get_user_userid(id) + get_players(players, inum) + + log_amx("Chat: ^"%s<%d><%s><>^" chat ^"%s^"", name, userid, authid, message) + log_message("^"%s<%d><%s><>^" triggered ^"amx_chat^" (text ^"%s^")", name, userid, authid, message) + + format(message, 191, "(ADMINS) %s : %s", name, message) + console_print(id, "%s", message) + + for (new i = 0; i < inum; ++i) + { + if (access(players[i], g_AdminChatFlag)) + client_print(players[i], print_chat, "%s", message) + } + + return PLUGIN_HANDLED +} + +public cmdSay(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new message[192], name[32], authid[32], userid + + read_args(message, 191) + remove_quotes(message) + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + userid = get_user_userid(id) + client_print(0, print_chat, "%L", LANG_PLAYER, "PRINT_ALL", name, message) + console_print(id, "%L", LANG_PLAYER, "PRINT_ALL", name, message) + + log_amx("Chat: ^"%s<%d><%s><>^" say ^"%s^"", name, userid, authid, message) + log_message("^"%s<%d><%s><>^" triggered ^"amx_say^" (text ^"%s^")", name, userid, authid, message) + + return PLUGIN_HANDLED +} + +public cmdPsay(id, level, cid) +{ + if (!cmd_access(id, level, cid, 3)) + return PLUGIN_HANDLED + + new name[32] + read_argv(1, name, 31) + new priv = cmd_target(id, name, 0) + + if (!priv) + return PLUGIN_HANDLED + + new length = strlen(name) + 1 + + get_user_name(priv, name, 31); + + new message[192], name2[32], authid[32], authid2[32], userid, userid2 + + get_user_authid(id, authid, 31) + get_user_name(id, name2, 31) + userid = get_user_userid(id) + read_args(message, 191) + + if (message[0] == '"' && message[length] == '"') // HLSW fix + { + message[0] = ' ' + message[length] = ' ' + length += 2 + } + + remove_quotes(message[length]) + get_user_name(priv, name, 31) + + if (id && id != priv) + client_print(id, print_chat, "(%s) %s : %s", name, name2, message[length]) + + client_print(priv, print_chat, "(%s) %s : %s", name, name2, message[length]) + console_print(id, "(%s) %s : %s", name, name2, message[length]) + get_user_authid(priv, authid2, 31) + userid2 = get_user_userid(priv) + + log_amx("Chat: ^"%s<%d><%s><>^" psay ^"%s<%d><%s><>^" ^"%s^"", name2, userid, authid, name, userid2, authid2, message[length]) + log_message("^"%s<%d><%s><>^" triggered ^"amx_psay^" against ^"%s<%d><%s><>^" (text ^"%s^")", name2, userid, authid, name, userid2, authid2, message[length]) + + return PLUGIN_HANDLED +} + +public cmdTsay(id, level, cid) +{ + if (!cmd_access(id, level, cid, 3)) + return PLUGIN_HANDLED + + new cmd[16], color[16], color2[16], message[192], name[32], authid[32], userid = 0 + + read_argv(0, cmd, 15) + new bool:tsay = (tolower(cmd[4]) == 't') + + read_args(message, 191) + remove_quotes(message) + parse(message, color, 15) + + new found = 0, a = 0 + new lang[3], langnum = get_langsnum() + + for (new i = 0; i < MAX_CLR; ++i) + { + for (new j = 0; j < langnum; j++) + { + get_lang(j, lang) + format(color2, 15, "%L", lang, g_Colors[i]) + + if (equali(color, color2)) + { + a = i + found = 1 + break + } + } + if (found == 1) + break + } + + new length = found ? (strlen(color) + 1) : 0 + + if (++g_msgChannel > 6 || g_msgChannel < 3) + g_msgChannel = 3 + + new Float:verpos = (tsay ? 0.55 : 0.1) + float(g_msgChannel) / 35.0 + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + userid = get_user_userid(id) + set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], tsay ? 0.05 : -1.0, verpos, 0, 6.0, 6.0, 0.5, 0.15, -1) + + switch ( get_pcvar_num(amx_show_activity) ) + { + case 3, 4: + { + new maxpl = get_maxplayers(); + for (new pl = 1; pl <= maxpl; pl++) + { + if (is_user_connected(pl) && !is_user_bot(pl)) + { + if (is_user_admin(pl)) + { + show_hudmessage(pl, "%s : %s", name, message[length]) + client_print(pl, print_notify, "%s : %s", name, message[length]) + } + else + { + show_hudmessage(pl, "%s", message[length]) + client_print(pl, print_notify, "%s", message[length]) + } + } + } + console_print(id, "%s : %s", name, message[length]) + } + case 2: + { + show_hudmessage(0, "%s : %s", name, message[length]) + client_print(0, print_notify, "%s : %s", name, message[length]) + console_print(id, "%s : %s", name, message[length]) + } + default: + { + show_hudmessage(0, "%s", message[length]) + client_print(0, print_notify, "%s", message[length]) + console_print(id, "%s", message[length]) + } + } + + log_amx("Chat: ^"%s<%d><%s><>^" %s ^"%s^"", name, userid, authid, cmd[4], message[length]) + log_message("^"%s<%d><%s><>^" triggered ^"%s^" (text ^"%s^") (color ^"%s^")", name, userid, authid, cmd, message[length], color2) + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/admincmd.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/admincmd.sma new file mode 100644 index 0000000..f8bda24 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/admincmd.sma @@ -0,0 +1,1177 @@ +/* AMX Mod X +* Admin Commands Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +// This is not a dynamic array because it would be bad for 24/7 map servers. +#define OLD_CONNECTION_QUEUE 10 + +new g_pauseCon +new Float:g_pausAble +new bool:g_Paused +new bool:g_PauseAllowed = false +new g_addCvar[] = "amx_cvar add %s" + +new pausable; +new rcon_password; + +// Old connection queue +new g_Names[OLD_CONNECTION_QUEUE][32]; +new g_SteamIDs[OLD_CONNECTION_QUEUE][32]; +new g_IPs[OLD_CONNECTION_QUEUE][32]; +new g_Access[OLD_CONNECTION_QUEUE]; +new g_Tracker; +new g_Size; + +stock InsertInfo(id) +{ + + // Scan to see if this entry is the last entry in the list + // If it is, then update the name and access + // If it is not, then insert it again. + + if (g_Size > 0) + { + new ip[32] + new auth[32]; + + get_user_authid(id, auth, charsmax(auth)); + get_user_ip(id, ip, charsmax(ip), 1/*no port*/); + + new last = 0; + + if (g_Size < sizeof(g_SteamIDs)) + { + last = g_Size - 1; + } + else + { + last = g_Tracker - 1; + + if (last < 0) + { + last = g_Size - 1; + } + } + + if (equal(auth, g_SteamIDs[last]) && + equal(ip, g_IPs[last])) // need to check ip too, or all the nosteams will while it doesn't work with their illegitimate server + { + get_user_name(id, g_Names[last], charsmax(g_Names[])); + g_Access[last] = get_user_flags(id); + + return; + } + } + + // Need to insert the entry + + new target = 0; // the slot to save the info at + + // Queue is not yet full + if (g_Size < sizeof(g_SteamIDs)) + { + target = g_Size; + + ++g_Size; + + } + else + { + target = g_Tracker; + + ++g_Tracker; + // If we reached the end of the array, then move to the front + if (g_Tracker == sizeof(g_SteamIDs)) + { + g_Tracker = 0; + } + } + + get_user_authid(id, g_SteamIDs[target], charsmax(g_SteamIDs[])); + get_user_name(id, g_Names[target], charsmax(g_Names[])); + get_user_ip(id, g_IPs[target], charsmax(g_IPs[]), 1/*no port*/); + + g_Access[target] = get_user_flags(id); + +} +stock GetInfo(i, name[], namesize, auth[], authsize, ip[], ipsize, &access) +{ + if (i >= g_Size) + { + abort(AMX_ERR_NATIVE, "GetInfo: Out of bounds (%d:%d)", i, g_Size); + } + + new target = (g_Tracker + i) % sizeof(g_SteamIDs); + + copy(name, namesize, g_Names[target]); + copy(auth, authsize, g_SteamIDs[target]); + copy(ip, ipsize, g_IPs[target]); + access = g_Access[target]; + +} +public client_disconnect(id) +{ + if (!is_user_bot(id)) + { + InsertInfo(id); + } +} + +public plugin_init() +{ + register_plugin("Admin Commands", AMXX_VERSION_STR, "AMXX Dev Team") + + register_dictionary("admincmd.txt") + register_dictionary("common.txt") + register_dictionary("adminhelp.txt") + + + register_concmd("amx_kick", "cmdKick", ADMIN_KICK, "<name or #userid> [reason]") + register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<name or #userid> <minutes> [reason]") + register_concmd("amx_banip", "cmdBanIP", ADMIN_BAN, "<name or #userid> <minutes> [reason]") + register_concmd("amx_addban", "cmdAddBan", ADMIN_BAN, "<^"authid^" or ip> <minutes> [reason]") + register_concmd("amx_unban", "cmdUnban", ADMIN_BAN, "<^"authid^" or ip>") + register_concmd("amx_slay", "cmdSlay", ADMIN_SLAY, "<name or #userid>") + register_concmd("amx_slap", "cmdSlap", ADMIN_SLAY, "<name or #userid> [power]") + register_concmd("amx_leave", "cmdLeave", ADMIN_KICK, "<tag> [tag] [tag] [tag]") + register_concmd("amx_pause", "cmdPause", ADMIN_CVAR, "- pause or unpause the game") + register_concmd("amx_who", "cmdWho", ADMIN_ADMIN, "- displays who is on server") + register_concmd("amx_cvar", "cmdCvar", ADMIN_CVAR, "<cvar> [value]") + register_concmd("amx_plugins", "cmdPlugins", ADMIN_ADMIN) + register_concmd("amx_modules", "cmdModules", ADMIN_ADMIN) + register_concmd("amx_map", "cmdMap", ADMIN_MAP, "<mapname>") + register_concmd("amx_cfg", "cmdCfg", ADMIN_CFG, "<filename>") + register_concmd("amx_nick", "cmdNick", ADMIN_SLAY, "<name or #userid> <new nick>") + register_concmd("amx_last", "cmdLast", ADMIN_BAN, "- list the last few disconnected clients info"); + register_clcmd("amx_rcon", "cmdRcon", ADMIN_RCON, "<command line>") + register_clcmd("amx_showrcon", "cmdShowRcon", ADMIN_RCON, "<command line>") + register_clcmd("pauseAck", "cmdLBack") + + + rcon_password=get_cvar_pointer("rcon_password"); + pausable=get_cvar_pointer("pausable"); + + +} + +public plugin_cfg() +{ + // Cvars which can be changed only with rcon access + server_cmd(g_addCvar, "rcon_password") + server_cmd(g_addCvar, "amx_show_activity") + server_cmd(g_addCvar, "amx_mode") + server_cmd(g_addCvar, "amx_password_field") + server_cmd(g_addCvar, "amx_default_access") + server_cmd(g_addCvar, "amx_reserved_slots") + server_cmd(g_addCvar, "amx_reservation") + server_cmd(g_addCvar, "amx_sql_table"); + server_cmd(g_addCvar, "amx_sql_host"); + server_cmd(g_addCvar, "amx_sql_user"); + server_cmd(g_addCvar, "amx_sql_pass"); + server_cmd(g_addCvar, "amx_sql_db"); + server_cmd(g_addCvar, "amx_sql_type"); + +} + +public cmdKick(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[32] + read_argv(1, arg, 31) + new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF) + + if (!player) + return PLUGIN_HANDLED + + new authid[32], authid2[32], name2[32], name[32], userid2, reason[32] + + get_user_authid(id, authid, 31) + get_user_authid(player, authid2, 31) + get_user_name(player, name2, 31) + get_user_name(id, name, 31) + userid2 = get_user_userid(player) + read_argv(2, reason, 31) + remove_quotes(reason) + + log_amx("Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s><>^" (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, reason) + + show_activity_key("ADMIN_KICK_1", "ADMIN_KICK_2", name, name2); + + if (is_user_bot(player)) + server_cmd("kick #%d", userid2) + else + { + if (reason[0]) + server_cmd("kick #%d ^"%s^"", userid2, reason) + else + server_cmd("kick #%d", userid2) + } + + console_print(id, "[AMXX] Client ^"%s^" kicked", name2) + + return PLUGIN_HANDLED +} + +public cmdUnban(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[32], authid[32], name[32] + + read_argv(1, arg, 31) + + if (contain(arg, ".") != -1) + { + server_cmd("removeip ^"%s^";writeip", arg) + console_print(id, "[AMXX] %L", id, "IP_REMOVED", arg) + } else { + server_cmd("removeid %s;writeid", arg) + console_print(id, "[AMXX] %L", id, "AUTHID_REMOVED", arg) + } + + get_user_name(id, name, 31) + + show_activity_key("ADMIN_UNBAN_1", "ADMIN_UNBAN_2", name, arg); + + get_user_authid(id, authid, 31) + log_amx("Cmd: ^"%s<%d><%s><>^" unban ^"%s^"", name, get_user_userid(id), authid, arg) + + return PLUGIN_HANDLED +} + +/* amx_addban is a special command now. + * If a user with rcon uses it, it bans the user. No questions asked. + * If a user without rcon but with ADMIN_BAN uses it, it will scan the old + * connection queue, and if it finds the info for a player in it, it will + * check their old access. If they have immunity, it will not ban. + * If they do not have immunity, it will ban. If the user is not found, + * it will refuse to ban the target. + */ + +public cmdAddBan(id, level, cid) +{ + if (!cmd_access(id, level, cid, 3, true)) // check for ADMIN_BAN access + { + if (get_user_flags(id) & level) // Getting here means they didn't input enough args + { + return PLUGIN_HANDLED; + } + if (!cmd_access(id, ADMIN_RCON, cid, 3)) // If somehow they have ADMIN_RCON without ADMIN_BAN, continue + { + return PLUGIN_HANDLED; + } + } + + new arg[32], authid[32], name[32], minutes[32], reason[32] + + read_argv(1, arg, 31) + read_argv(2, minutes, 31) + read_argv(3, reason, 31) + + + if (!(get_user_flags(id) & ADMIN_RCON)) + { + new bool:canban = false; + new bool:isip = false; + // Limited access to this command + if (equali(arg, "STEAM_ID_PENDING") || + equali(arg, "STEAM_ID_LAN") || + equali(arg, "HLTV") || + equali(arg, "4294967295") || + equali(arg, "VALVE_ID_LAN") || + equali(arg, "VALVE_ID_PENDING")) + { + // Hopefully we never get here, so ML shouldn't be needed + console_print(id, "Cannot ban %s", arg); + return PLUGIN_HANDLED; + } + + if (contain(arg, ".") != -1) + { + isip = true; + } + + // Scan the disconnection queue + if (isip) + { + new IP[32]; + new Name[32]; + new dummy[1]; + new Access; + for (new i = 0; i < g_Size; i++) + { + GetInfo(i, Name, charsmax(Name), dummy, 0, IP, charsmax(IP), Access); + + if (equal(IP, arg)) + { + if (Access & ADMIN_IMMUNITY) + { + console_print(id, "[AMXX] %s : %L", IP, id, "CLIENT_IMM", Name); + + return PLUGIN_HANDLED; + } + // User did not have immunity + canban = true; + } + } + } + else + { + new Auth[32]; + new Name[32]; + new dummy[1]; + new Access; + for (new i = 0; i < g_Size; i++) + { + GetInfo(i, Name, charsmax(Name), Auth, charsmax(Auth), dummy, 0, Access); + + if (equal(Auth, arg)) + { + if (Access & ADMIN_IMMUNITY) + { + console_print(id, "[AMXX] %s : %L", Auth, id, "CLIENT_IMM", Name); + + return PLUGIN_HANDLED; + } + // User did not have immunity + canban = true; + } + } + } + + if (!canban) + { + console_print(id, "[AMXX] You may only ban recently disconnected clients. Use ^"amx_last^" to view."); + + return PLUGIN_HANDLED; + } + + } + + // User has access to ban their target + if (contain(arg, ".") != -1) + { + server_cmd("addip ^"%s^" ^"%s^";wait;writeip", minutes, arg) + console_print(id, "[AMXX] Ip ^"%s^" added to ban list", arg) + } else { + server_cmd("banid %s %s;wait;writeid", minutes, arg) + console_print(id, "[AMXX] Authid ^"%s^" added to ban list", arg) + } + + get_user_name(id, name, 31) + + show_activity_key("ADMIN_ADDBAN_1", "ADMIN_ADDBAN_2", name, arg); + + get_user_authid(id, authid, 31) + log_amx("Cmd: ^"%s<%d><%s><>^" ban ^"%s^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, arg, minutes, reason) + + return PLUGIN_HANDLED +} + +public cmdBan(id, level, cid) +{ + if (!cmd_access(id, level, cid, 3)) + return PLUGIN_HANDLED + + new target[32], minutes[8], reason[64] + + read_argv(1, target, 31) + read_argv(2, minutes, 7) + read_argv(3, reason, 63) + + new player = cmd_target(id, target, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS | CMDTARGET_ALLOW_SELF) + + if (!player) + return PLUGIN_HANDLED + + new authid[32], name2[32], authid2[32], name[32] + new userid2 = get_user_userid(player) + + get_user_authid(player, authid2, 31) + get_user_authid(id, authid, 31) + get_user_name(player, name2, 31) + get_user_name(id, name, 31) + + log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, minutes, reason) + + new temp[64], banned[16], nNum = str_to_num(minutes) + if (nNum) + format(temp, 63, "%L", player, "FOR_MIN", minutes) + else + format(temp, 63, "%L", player, "PERM") + + format(banned, 15, "%L", player, "BANNED") + + if (reason[0]) + server_cmd("kick #%d ^"%s (%s %s)^";wait;banid %s %s;wait;writeid", userid2, reason, banned, temp, minutes, authid2) + else + server_cmd("kick #%d ^"%s %s^";wait;banid %s %s;wait;writeid", userid2, banned, temp, minutes, authid2) + + + // Display the message to all clients + + new msg[256]; + new len; + new maxpl = get_maxplayers(); + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + len = formatex(msg, charsmax(msg), "%L", i, "BAN"); + len += formatex(msg[len], charsmax(msg) - len, " %s ", name2); + if (nNum) + { + len += formatex(msg[len], charsmax(msg) - len, "%L", i, "FOR_MIN", minutes); + } + else + { + len += formatex(msg[len], charsmax(msg) - len, "%L", i, "PERM"); + } + if (strlen(reason) > 0) + { + formatex(msg[len], charsmax(msg) - len, " (%L: %s)", i, "REASON", reason); + } + show_activity_id(i, id, name, msg); + } + } + + console_print(id, "[AMXX] %L", id, "CLIENT_BANNED", name2) + + return PLUGIN_HANDLED +} + +public cmdBanIP(id, level, cid) +{ + if (!cmd_access(id, level, cid, 3)) + return PLUGIN_HANDLED + + new target[32], minutes[8], reason[64] + + read_argv(1, target, 31) + read_argv(2, minutes, 7) + read_argv(3, reason, 63) + + new player = cmd_target(id, target, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS | CMDTARGET_ALLOW_SELF) + + if (!player) + { + // why is this here? + // no idea + // player = cmd_target(id, target, 9); + return PLUGIN_HANDLED + } + + new authid[32], name2[32], authid2[32], name[32] + new userid2 = get_user_userid(player) + + get_user_authid(player, authid2, 31) + get_user_authid(id, authid, 31) + get_user_name(player, name2, 31) + get_user_name(id, name, 31) + + log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, minutes, reason) + + new temp[64], banned[16], nNum = str_to_num(minutes) + if (nNum) + format(temp, 63, "%L", player, "FOR_MIN", minutes) + else + format(temp, 63, "%L", player, "PERM") + format(banned, 15, "%L", player, "BANNED") + + new address[32] + get_user_ip(player, address, 31, 1) + + if (reason[0]) + server_cmd("kick #%d ^"%s (%s %s)^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, reason, banned, temp, minutes, address) + else + server_cmd("kick #%d ^"%s %s^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, banned, temp, minutes, address) + + // Display the message to all clients + + new msg[256]; + new len; + new maxpl = get_maxplayers(); + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + len = formatex(msg, charsmax(msg), "%L", i, "BAN"); + len += formatex(msg[len], charsmax(msg) - len, " %s ", name2); + if (nNum) + { + formatex(msg[len], charsmax(msg) - len, "%L", i, "FOR_MIN", minutes); + } + else + { + formatex(msg[len], charsmax(msg) - len, "%L", i, "PERM"); + } + if (strlen(reason) > 0) + { + formatex(msg[len], charsmax(msg) - len, " (%L: %s)", i, "REASON", reason); + } + show_activity_id(i, id, name, msg); + } + } + + console_print(id, "[AMXX] %L", id, "CLIENT_BANNED", name2) + + return PLUGIN_HANDLED +} + +public cmdSlay(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[32] + + read_argv(1, arg, 31) + + new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF | CMDTARGET_ONLY_ALIVE) + + if (!player) + return PLUGIN_HANDLED + + user_kill(player) + + new authid[32], name2[32], authid2[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + get_user_authid(player, authid2, 31) + get_user_name(player, name2, 31) + + log_amx("Cmd: ^"%s<%d><%s><>^" slay ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, name2, get_user_userid(player), authid2) + + show_activity_key("ADMIN_SLAY_1", "ADMIN_SLAY_2", name, name2); + + console_print(id, "[AMXX] %L", id, "CLIENT_SLAYED", name2) + + return PLUGIN_HANDLED +} + +public cmdSlap(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[32] + + read_argv(1, arg, 31) + new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF | CMDTARGET_ONLY_ALIVE) + + if (!player) + return PLUGIN_HANDLED + + new spower[32], authid[32], name2[32], authid2[32], name[32] + + read_argv(2, spower, 31) + + new damage = str_to_num(spower) + + user_slap(player, damage) + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + get_user_authid(player, authid2, 31) + get_user_name(player, name2, 31) + + log_amx("Cmd: ^"%s<%d><%s><>^" slap with %d damage ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, damage, name2, get_user_userid(player), authid2) + + show_activity_key("ADMIN_SLAP_1", "ADMIN_SLAP_2", name, name2, damage); + + console_print(id, "[AMXX] %L", id, "CLIENT_SLAPED", name2, damage) + + return PLUGIN_HANDLED +} + +public chMap(map[]) +{ + server_cmd("changelevel %s", map) +} + +public cmdMap(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[32] + new arglen = read_argv(1, arg, 31) + + if (!is_map_valid(arg)) + { + console_print(id, "[AMXX] %L", id, "MAP_NOT_FOUND") + return PLUGIN_HANDLED + } + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + + show_activity_key("ADMIN_MAP_1", "ADMIN_MAP_2", name, arg); + + log_amx("Cmd: ^"%s<%d><%s><>^" changelevel ^"%s^"", name, get_user_userid(id), authid, arg) + + new _modName[10] + get_modname(_modName, 9) + + if (!equal(_modName, "zp")) + { + message_begin(MSG_ALL, SVC_INTERMISSION) + message_end() + } + + set_task(2.0, "chMap", 0, arg, arglen + 1) + + return PLUGIN_HANDLED +} + +stock bool:onlyRcon(const name[]) +{ + new ptr=get_cvar_pointer(name); + if (ptr && get_pcvar_flags(ptr) & FCVAR_PROTECTED) + { + return true; + } + return false; +} + +public cmdCvar(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[32], arg2[64] + + read_argv(1, arg, 31) + read_argv(2, arg2, 63) + + new pointer; + + if (equal(arg, "add") && (get_user_flags(id) & ADMIN_RCON)) + { + if ((pointer=get_cvar_pointer(arg2))!=0) + { + new flags=get_pcvar_flags(pointer); + + if (!(flags & FCVAR_PROTECTED)) + { + set_pcvar_flags(pointer,flags | FCVAR_PROTECTED); + } + } + return PLUGIN_HANDLED + } + + if ((pointer=get_cvar_pointer(arg))==0) + { + console_print(id, "[AMXX] %L", id, "UNKNOWN_CVAR", arg) + return PLUGIN_HANDLED + } + + if (onlyRcon(arg) && !(get_user_flags(id) & ADMIN_RCON)) + { + // Exception for the new onlyRcon rules: + // sv_password is allowed to be modified by ADMIN_PASSWORD + if (!(equali(arg,"sv_password") && (get_user_flags(id) & ADMIN_PASSWORD))) + { + console_print(id, "[AMXX] %L", id, "CVAR_NO_ACC") + return PLUGIN_HANDLED + } + } + + if (read_argc() < 3) + { + get_pcvar_string(pointer, arg2, 63) + console_print(id, "[AMXX] %L", id, "CVAR_IS", arg, arg2) + return PLUGIN_HANDLED + } + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + + log_amx("Cmd: ^"%s<%d><%s><>^" set cvar (name ^"%s^") (value ^"%s^")", name, get_user_userid(id), authid, arg, arg2) + set_cvar_string(arg, arg2) + + + // Display the message to all clients + + new cvar_val[64]; + new maxpl = get_maxplayers(); + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + if (get_pcvar_flags(pointer) & FCVAR_PROTECTED || equali(arg, "rcon_password")) + { + formatex(cvar_val, charsmax(cvar_val), "*** %L ***", i, "PROTECTED"); + } + else + { + copy(cvar_val, charsmax(cvar_val), arg2); + } + show_activity_id(i, id, name, "%L", i, "SET_CVAR_TO", "", arg, cvar_val); + } + } + + console_print(id, "[AMXX] %L", id, "CVAR_CHANGED", arg, arg2) + + return PLUGIN_HANDLED +} + +public cmdPlugins(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + if (id==0) // If server executes redirect this to "amxx plugins" for more in depth output + { + server_cmd("amxx plugins"); + server_exec(); + return PLUGIN_HANDLED; + } + + new name[32], version[32], author[32], filename[32], status[32] + new lName[32], lVersion[32], lAuthor[32], lFile[32], lStatus[32] + + format(lName, 31, "%L", id, "NAME") + format(lVersion, 31, "%L", id, "VERSION") + format(lAuthor, 31, "%L", id, "AUTHOR") + format(lFile, 31, "%L", id, "FILE") + format(lStatus, 31, "%L", id, "STATUS") + + new StartPLID=0; + new EndPLID; + + new Temp[96] + + new num = get_pluginsnum() + + if (read_argc() > 1) + { + read_argv(1,Temp,sizeof(Temp)-1); + StartPLID=str_to_num(Temp)-1; // zero-based + } + + EndPLID=min(StartPLID + 10, num); + + new running = 0 + + console_print(id, "----- %L -----", id, "LOADED_PLUGINS") + console_print(id, "%-18.17s %-11.10s %-17.16s %-16.15s %-9.8s", lName, lVersion, lAuthor, lFile, lStatus) + + new i=StartPLID; + while (i <EndPLID) + { + get_plugin(i++, filename, 31, name, 31, version, 31, author, 31, status, 31) + console_print(id, "%-18.17s %-11.10s %-17.16s %-16.15s %-9.8s", name, version, author, filename, status) + + if (status[0]=='d' || status[0]=='r') // "debug" or "running" + running++ + } + console_print(id, "%L", id, "PLUGINS_RUN", EndPLID-StartPLID, running) + console_print(id, "----- %L -----",id,"HELP_ENTRIES",StartPLID + 1,EndPLID,num); + + if (EndPLID < num) + { + formatex(Temp,sizeof(Temp)-1,"----- %L -----",id,"HELP_USE_MORE", EndPLID + 1); + replace_all(Temp,sizeof(Temp)-1,"amx_help","amx_plugins"); + console_print(id,"%s",Temp); + } + else + { + formatex(Temp,sizeof(Temp)-1,"----- %L -----",id,"HELP_USE_BEGIN"); + replace_all(Temp,sizeof(Temp)-1,"amx_help","amx_plugins"); + console_print(id,"%s",Temp); + } + + return PLUGIN_HANDLED +} + +public cmdModules(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + new name[32], version[32], author[32], status, sStatus[16] + new lName[32], lVersion[32], lAuthor[32], lStatus[32]; + + format(lName, 31, "%L", id, "NAME") + format(lVersion, 31, "%L", id, "VERSION") + format(lAuthor, 31, "%L", id, "AUTHOR") + format(lStatus, charsmax(lStatus), "%L", id, "STATUS") + + new num = get_modulesnum() + + console_print(id, "%L:", id, "LOADED_MODULES") + console_print(id, "%-23.22s %-11.10s %-20.19s %-11.10s", lName, lVersion, lAuthor, lStatus) + + for (new i = 0; i < num; i++) + { + get_module(i, name, 31, author, 31, version, 31, status) + + switch (status) + { + case module_loaded: copy(sStatus, 15, "running") + default: + { + copy(sStatus, 15, "bad load"); + copy(name, charsmax(name), "unknown"); + copy(author, charsmax(author), "unknown"); + copy(version, charsmax(version), "unknown"); + } + } + + console_print(id, "%-23.22s %-11.10s %-20.19s %-11.10s", name, version, author, sStatus) + } + console_print(id, "%L", id, "NUM_MODULES", num) + + return PLUGIN_HANDLED +} + +public cmdCfg(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[128] + read_argv(1, arg, 127) + + if (!file_exists(arg)) + { + console_print(id, "[AMXX] %L", id, "FILE_NOT_FOUND", arg) + return PLUGIN_HANDLED + } + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + + log_amx("Cmd: ^"%s<%d><%s><>^" execute cfg (file ^"%s^")", name, get_user_userid(id), authid, arg) + + console_print(id, "[AMXX] Executing file ^"%s^"", arg) + server_cmd("exec %s", arg) + + show_activity_key("ADMIN_CONF_1", "ADMIN_CONF_2", name, arg); + + return PLUGIN_HANDLED +} + +public cmdLBack() +{ + if (!g_PauseAllowed) + return PLUGIN_CONTINUE + + new paused[25] + + format(paused, 24, "%L", g_pauseCon, g_Paused ? "UNPAUSED" : "PAUSED") + set_cvar_float("pausable", g_pausAble) + console_print(g_pauseCon, "[AMXX] Server %s", paused) + g_PauseAllowed = false + + if (g_Paused) + g_Paused = false + else + g_Paused = true + + return PLUGIN_HANDLED +} + +public cmdPause(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + new authid[32], name[32], slayer = id + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + if (pausable!=0) + { + g_pausAble = get_pcvar_float(pausable) + } + + if (!slayer) + slayer = find_player("h") + + if (!slayer) + { + console_print(id, "[AMXX] %L", id, "UNABLE_PAUSE") + return PLUGIN_HANDLED + } + + set_cvar_float("pausable", 1.0) + g_PauseAllowed = true + client_cmd(slayer, "pause;pauseAck") + + log_amx("Cmd: ^"%s<%d><%s><>^" %s server", name, get_user_userid(id), authid, g_Paused ? "unpause" : "pause") + + console_print(id, "[AMXX] %L", id, g_Paused ? "UNPAUSING" : "PAUSING") + + // Display the message to all clients + + new maxpl = get_maxplayers(); + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + show_activity_id(i, id, name, "%L server", i, g_Paused ? "UNPAUSE" : "PAUSE"); + } + } + + g_pauseCon = id + + return PLUGIN_HANDLED +} + +public cmdShowRcon(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new password[64] + + get_pcvar_string(rcon_password, password, 63) + + if (!password[0]) + { + cmdRcon(id, level, cid) + } else { + new args[128] + + read_args(args, 127) + client_cmd(id, "rcon_password %s", password) + client_cmd(id, "rcon %s", args) + } + + return PLUGIN_HANDLED +} + +public cmdRcon(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[128], authid[32], name[32] + + read_args(arg, 127) + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + + log_amx("Cmd: ^"%s<%d><%s><>^" server console (cmdline ^"%s^")", name, get_user_userid(id), authid, arg) + + console_print(id, "[AMXX] %L", id, "COM_SENT_SERVER", arg) + server_cmd("%s", arg) + + return PLUGIN_HANDLED +} + +public cmdWho(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + new players[32], inum, cl_on_server[64], authid[32], name[32], flags, sflags[32] + new lImm[16], lRes[16], lAccess[16], lYes[16], lNo[16] + + format(lImm, 15, "%L", id, "IMMU") + format(lRes, 15, "%L", id, "RESERV") + format(lAccess, 15, "%L", id, "ACCESS") + format(lYes, 15, "%L", id, "YES") + format(lNo, 15, "%L", id, "NO") + + get_players(players, inum) + format(cl_on_server, 63, "%L", id, "CLIENTS_ON_SERVER") + console_print(id, "^n%s:^n # %-16.15s %-20s %-8s %-4.3s %-4.3s %s", cl_on_server, "nick", "authid", "userid", lImm, lRes, lAccess) + + for (new a = 0; a < inum; ++a) + { + get_user_authid(players[a], authid, 31) + get_user_name(players[a], name, 31) + flags = get_user_flags(players[a]) + get_flags(flags, sflags, 31) + console_print(id, "%2d %-16.15s %-20s %-8d %-6.5s %-6.5s %s", players[a], name, authid, + get_user_userid(players[a]), (flags&ADMIN_IMMUNITY) ? lYes : lNo, (flags&ADMIN_RESERVATION) ? lYes : lNo, sflags) + } + + console_print(id, "%L", id, "TOTAL_NUM", inum) + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + log_amx("Cmd: ^"%s<%d><%s><>^" ask for players list", name, get_user_userid(id), authid) + + return PLUGIN_HANDLED +} + +hasTag(name[], tags[4][32], tagsNum) +{ + for (new a = 0; a < tagsNum; ++a) + if (contain(name, tags[a]) != -1) + return a + return -1 +} + +public cmdLeave(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new argnum = read_argc() + new ltags[4][32] + new ltagsnum = 0 + + for (new a = 1; a < 5; ++a) + { + if (a < argnum) + read_argv(a, ltags[ltagsnum++], 31) + else + ltags[ltagsnum++][0] = 0 + } + + new nick[32], ires, pnum = get_maxplayers() + 1, count = 0, lReason[128] + + for (new b = 1; b < pnum; ++b) + { + if (!is_user_connected(b) && !is_user_connecting(b)) continue + + get_user_name(b, nick, 31) + ires = hasTag(nick, ltags, ltagsnum) + + if (ires != -1) + { + console_print(id, "[AMXX] %L", id, "SKIP_MATCH", nick, ltags[ires]) + continue + } + + if (get_user_flags(b) & ADMIN_IMMUNITY) + { + console_print(id, "[AMXX] %L", id, "SKIP_IMM", nick) + continue + } + + console_print(id, "[AMXX] %L", id, "KICK_PL", nick) + + if (is_user_bot(b)) + server_cmd("kick #%d", get_user_userid(b)) + else + { + format(lReason, 127, "%L", b, "YOU_DROPPED") + server_cmd("kick #%d ^"%s^"", get_user_userid(b), lReason) + } + count++ + } + + console_print(id, "[AMXX] %L", id, "KICKED_CLIENTS", count) + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + log_amx("Kick: ^"%s<%d><%s><>^" leave some group (tag1 ^"%s^") (tag2 ^"%s^") (tag3 ^"%s^") (tag4 ^"%s^")", name, get_user_userid(id), authid, ltags[0], ltags[1], ltags[2], ltags[3]) + + show_activity_key("ADMIN_LEAVE_1", "ADMIN_LEAVE_2", name, ltags[0], ltags[1], ltags[2], ltags[3]); + + return PLUGIN_HANDLED +} + +public cmdNick(id, level, cid) +{ + if (!cmd_access(id, level, cid, 3)) + return PLUGIN_HANDLED + + new arg1[32], arg2[32], authid[32], name[32], authid2[32], name2[32] + + read_argv(1, arg1, 31) + read_argv(2, arg2, 31) + + new player = cmd_target(id, arg1, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF) + + if (!player) + return PLUGIN_HANDLED + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + get_user_authid(player, authid2, 31) + get_user_name(player, name2, 31) + + client_cmd(player, "name ^"%s^"", arg2) + + log_amx("Cmd: ^"%s<%d><%s><>^" change nick to ^"%s^" ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, arg2, name2, get_user_userid(player), authid2) + + show_activity_key("ADMIN_NICK_1", "ADMIN_NICK_2", name, name2, arg2); + + console_print(id, "[AMXX] %L", id, "CHANGED_NICK", name2, arg2) + + return PLUGIN_HANDLED +} + +public cmdLast(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + { + return PLUGIN_HANDLED; + } + + new name[32]; + new authid[32]; + new ip[32]; + new flags[32]; + new access; + + + // This alignment is a bit weird (it should grow if the name is larger) + // but otherwise for the more common shorter name, it'll wrap in server console + // Steam client display is all skewed anyway because of the non fixed font. + console_print(id, "%19s %20s %15s %s", "name", "authid", "ip", "access"); + + for (new i = 0; i < g_Size; i++) + { + GetInfo(i, name, charsmax(name), authid, charsmax(authid), ip, charsmax(ip), access); + + get_flags(access, flags, charsmax(flags)); + + console_print(id, "%19s %20s %15s %s", name, authid, ip, flags); + } + + console_print(id, "%d old connections saved.", g_Size); + + return PLUGIN_HANDLED; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminhelp.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminhelp.sma new file mode 100644 index 0000000..9acc262 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminhelp.sma @@ -0,0 +1,129 @@ +/* AMX Mod X +* Admin Help Plugin +* +* by the AMX Mod X Development Team +* originally developed by tcquest78 +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> + +#define DISPLAY_MSG // Comment to disable message on join +#define HELPAMOUNT 10 // Number of commands per page + +public plugin_init() +{ + register_plugin("Admin Help", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("adminhelp.txt") + register_concmd("amx_help", "cmdHelp", 0, "<page> [nr of cmds (only for server)] - displays this help") +} + +#if defined DISPLAY_MSG +public client_putinserver(id) +{ + if (is_user_bot(id)) + return + + set_task(15.0, "dispInfo", id) +} + +public client_disconnect(id) +{ + remove_task(id) +} +#endif + +public cmdHelp(id, level, cid) +{ + new arg1[8], flags = get_user_flags(id) + new start = read_argv(1, arg1, 7) ? str_to_num(arg1) : 1 + new lHelpAmount = HELPAMOUNT + + // HACK: ADMIN_ADMIN is never set as a user's actual flags, so those types of commands never show + if (flags > 0 && !(flags & ADMIN_USER)) + { + flags |= ADMIN_ADMIN; + } + + if (id == 0 && read_argc() == 3) + lHelpAmount = read_argv(2, arg1, 7) ? str_to_num(arg1) : HELPAMOUNT + + if (--start < 0) + start = 0 + + new clcmdsnum = get_concmdsnum(flags, id) + + if (start >= clcmdsnum) + start = clcmdsnum - 1 + + console_print(id, "^n----- %L -----", id, "HELP_COMS") + + new info[128], cmd[32], eflags + new end = start + lHelpAmount // HELPAMOUNT + + if (end > clcmdsnum) + end = clcmdsnum + + for (new i = start; i < end; i++) + { + get_concmd(i, cmd, 31, eflags, info, 127, flags, id) + console_print(id, "%3d: %s %s", i + 1, cmd, info) + } + + console_print(id, "----- %L -----", id, "HELP_ENTRIES", start + 1, end, clcmdsnum) + + if (end < clcmdsnum) + console_print(id, "----- %L -----", id, "HELP_USE_MORE", end + 1) + else + console_print(id, "----- %L -----", id, "HELP_USE_BEGIN") + + return PLUGIN_HANDLED +} + +#if defined DISPLAY_MSG +public dispInfo(id) +{ + client_print(id, print_chat, "%L", id, "TYPE_HELP") + + new nextmap[32] + get_cvar_string("amx_nextmap", nextmap, 31) + + if (get_cvar_float("mp_timelimit")) + { + new timeleft = get_timeleft() + + if (timeleft > 0) + { + client_print(id, print_chat, "%L", id, "TIME_INFO_1", timeleft / 60, timeleft % 60, nextmap) + } else { + client_print(id, print_chat, "%L", id, "TIME_INFO_2", nextmap) + } + } +} +#endif diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminslots.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminslots.sma new file mode 100644 index 0000000..ee08c00 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminslots.sma @@ -0,0 +1,107 @@ +/* AMX Mod X +* Slots Reservation Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +new g_ResPtr +new g_HidePtr + +public plugin_init() +{ + register_plugin("Slots Reservation", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("adminslots.txt") + register_dictionary("common.txt") + g_ResPtr = register_cvar("amx_reservation", "0") + g_HidePtr = register_cvar("amx_hideslots", "0") +} + +public plugin_cfg() +{ + set_task(3.0, "MapLoaded") +} + +public MapLoaded() +{ + if (!get_pcvar_num(g_HidePtr)) + return + + new maxplayers = get_maxplayers() + new players = get_playersnum(1) + new limit = maxplayers - get_pcvar_num(g_ResPtr) + setVisibleSlots(players, maxplayers, limit) +} + +public client_authorized(id) +{ + new maxplayers = get_maxplayers() + new players = get_playersnum(1) + new limit = maxplayers - get_pcvar_num(g_ResPtr) + + if (access(id, ADMIN_RESERVATION) || (players <= limit)) + { + if (get_pcvar_num(g_HidePtr) == 1) + setVisibleSlots(players, maxplayers, limit) + return PLUGIN_CONTINUE + } + + new lReason[64] + format(lReason, 63, "%L", id, "DROPPED_RES") + server_cmd("kick #%d ^"%s^"", get_user_userid(id), lReason) + + return PLUGIN_HANDLED +} + +public client_disconnect(id) +{ + if (!get_pcvar_num(g_HidePtr)) + return PLUGIN_CONTINUE + + new maxplayers = get_maxplayers() + + setVisibleSlots(get_playersnum(1) - 1, maxplayers, maxplayers - get_pcvar_num(g_ResPtr)) + return PLUGIN_CONTINUE +} + +setVisibleSlots(players, maxplayers, limit) +{ + new num = players + 1 + + if (players == maxplayers) + num = maxplayers + else if (players < limit) + num = limit + + set_cvar_num("sv_visiblemaxplayers", num) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminvote.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminvote.sma new file mode 100644 index 0000000..834af11 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/adminvote.sma @@ -0,0 +1,570 @@ +/* AMX Mod X +* Admin Votes Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + + +new g_Answer[128] +new g_optionName[4][64] +new g_voteCount[4] +new g_validMaps +new g_yesNoVote +new g_coloredMenus +new g_voteCaller +new g_Execute[256] +new g_execLen + +new bool:g_execResult +new Float:g_voteRatio + +public plugin_init() +{ + register_plugin("Admin Votes", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("adminvote.txt") + register_dictionary("common.txt") + register_dictionary("mapsmenu.txt") + register_menucmd(register_menuid("Change map to "), MENU_KEY_1|MENU_KEY_2, "voteCount") + register_menucmd(register_menuid("Choose map: "), MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4, "voteCount") + register_menucmd(register_menuid("Kick "), MENU_KEY_1|MENU_KEY_2, "voteCount") + register_menucmd(register_menuid("Ban "), MENU_KEY_1|MENU_KEY_2, "voteCount") + register_menucmd(register_menuid("Vote: "), MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4, "voteCount") + register_menucmd(register_menuid("The result: "), MENU_KEY_1|MENU_KEY_2, "actionResult") + register_concmd("amx_votemap", "cmdVoteMap", ADMIN_VOTE, "<map> [map] [map] [map]") + register_concmd("amx_votekick", "cmdVoteKickBan", ADMIN_VOTE, "<name or #userid>") + register_concmd("amx_voteban", "cmdVoteKickBan", ADMIN_VOTE, "<name or #userid>") + register_concmd("amx_vote", "cmdVote", ADMIN_VOTE, "<question> <answer#1> <answer#2>") + register_concmd("amx_cancelvote", "cmdCancelVote", ADMIN_VOTE, "- cancels last vote") + + g_coloredMenus = colored_menus() +} + +public cmdCancelVote(id, level, cid) +{ + if (!cmd_access(id, level, cid, 0)) + return PLUGIN_HANDLED + + if (task_exists(99889988, 1)) + { + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + log_amx("Vote: ^"%s<%d><%s><>^" cancel vote session", name, get_user_userid(id), authid) + + + new maxpl=get_maxplayers(); + new msg[256]; + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + // HACK: ADMIN_CANC_VOTE_{1,2} keys were designed very poorly. Remove all : and %s in it. + LookupLangKey(msg, charsmax(msg), "ADMIN_CANC_VOTE_1", i); + replace_all(msg, charsmax(msg), "%s", ""); + replace_all(msg, charsmax(msg), ":", ""); + trim(msg); + show_activity_id(i, id, name, msg); + } + } + + console_print(id, "%L", id, "VOTING_CANC") + client_print(0,print_chat,"%L",LANG_PLAYER,"VOTING_CANC") + remove_task(99889988, 1) + set_cvar_float("amx_last_voting", get_gametime()) + } + else + console_print(id, "%L", id, "NO_VOTE_CANC") + + return PLUGIN_HANDLED +} + +public delayedExec(cmd[]) + server_cmd("%s", cmd) + +public autoRefuse() +{ + log_amx("Vote: %L", "en", "RES_REF") + client_print(0, print_chat, "%L", LANG_PLAYER, "RES_REF") +} + +public actionResult(id, key) +{ + remove_task(4545454) + + switch (key) + { + case 0: + { + set_task(2.0, "delayedExec", 0, g_Execute, g_execLen) + log_amx("Vote: %L", "en", "RES_ACCEPTED") + client_print(0, print_chat, "%L", LANG_PLAYER, "RES_ACCEPTED") + } + case 1: autoRefuse() + } + + return PLUGIN_HANDLED +} + +public checkVotes() +{ + new best = 0 + + if (!g_yesNoVote) + { + for (new a = 0; a < 4; ++a) + if (g_voteCount[a] > g_voteCount[best]) + + best = a + } + + new votesNum = g_voteCount[0] + g_voteCount[1] + g_voteCount[2] + g_voteCount[3] + new iRatio = votesNum ? floatround(g_voteRatio * float(votesNum), floatround_ceil) : 1 + new iResult = g_voteCount[best] + new players[32], pnum, i + + get_players(players, pnum, "c") + + if (iResult < iRatio) + { + new lVotingFailed[64] + + for (i = 0; i < pnum; i++) + { + format(lVotingFailed, 63, "%L", players[i], "VOTING_FAILED") + if (g_yesNoVote) + client_print(players[i], print_chat, "%L", players[i], "VOTING_RES_1", lVotingFailed, g_voteCount[0], g_voteCount[1], iRatio) + else + client_print(players[i], print_chat, "%L", players[i], "VOTING_RES_2", lVotingFailed, iResult, iRatio) + } + + format(lVotingFailed, 63, "%L", "en", "VOTING_FAILED") + log_amx("Vote: %s (got ^"%d^") (needed ^"%d^")", lVotingFailed, iResult, iRatio) + + return PLUGIN_CONTINUE + } + + g_execLen = format(g_Execute, 255, g_Answer, g_optionName[best]) + 1 + + if (g_execResult) + { + g_execResult = false + + if (is_user_connected(g_voteCaller)) + { + new menuBody[512], lTheResult[32], lYes[16], lNo[16] + + format(lTheResult, 31, "%L", g_voteCaller, "THE_RESULT") + format(lYes, 15, "%L", g_voteCaller, "YES") + format(lNo, 15, "%L", g_voteCaller, "NO") + + new len = format(menuBody, 511, g_coloredMenus ? "\y%s: \w%s^n^n" : "%s: %s^n^n", lTheResult, g_Execute) + + len += format(menuBody[len], 511 - len, g_coloredMenus ? "\y%L^n\w" : "%L^n", g_voteCaller, "WANT_CONTINUE") + format(menuBody[len], 511 - len, "^n1. %s^n2. %s", lYes, lNo) + show_menu(g_voteCaller, 0x03, menuBody, 10, "The result: ") + set_task(10.0, "autoRefuse", 4545454) + } + else + set_task(2.0, "delayedExec", 0, g_Execute, g_execLen) + } + + new lVotingSuccess[32] + + for (i = 0; i < pnum; i++) + { + format(lVotingSuccess, 31, "%L", players[i], "VOTING_SUCCESS") + client_print(players[i], print_chat, "%L", players[i], "VOTING_RES_3", lVotingSuccess, iResult, iRatio, g_Execute) + } + + format(lVotingSuccess, 31, "%L", "en", "VOTING_SUCCESS") + log_amx("Vote: %s (got ^"%d^") (needed ^"%d^") (result ^"%s^")", lVotingSuccess, iResult, iRatio, g_Execute) + + return PLUGIN_CONTINUE +} + +public voteCount(id, key) +{ + if (get_cvar_num("amx_vote_answers")) + { + new name[32] + get_user_name(id, name, 31) + + if (g_yesNoVote) + client_print(0, print_chat, "%L", LANG_PLAYER, key ? "VOTED_AGAINST" : "VOTED_FOR", name) + else + client_print(0, print_chat, "%L", LANG_PLAYER, "VOTED_FOR_OPT", name, key + 1) + } + ++g_voteCount[key] + + return PLUGIN_HANDLED +} + +public cmdVoteMap(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new Float:voting = get_cvar_float("amx_last_voting") + if (voting > get_gametime()) + { + console_print(id, "%L", id, "ALREADY_VOTING") + return PLUGIN_HANDLED + } + + if (voting && voting + get_cvar_float("amx_vote_delay") > get_gametime()) + { + console_print(id, "%L", id, "VOTING_NOT_ALLOW") + return PLUGIN_HANDLED + } + + new argc = read_argc() + if (argc > 5) argc = 5 + + g_validMaps = 0 + g_optionName[0][0] = 0 + g_optionName[1][0] = 0 + g_optionName[2][0] = 0 + g_optionName[3][0] = 0 + + for (new i = 1; i < argc; ++i) + { + read_argv(i, g_optionName[g_validMaps], 31) + + if (is_map_valid(g_optionName[g_validMaps])) + g_validMaps++ + } + + if (g_validMaps == 0) + { + new lMaps[16] + + format(lMaps, 15, "%L", id, (argc == 2) ? "MAP_IS" : "MAPS_ARE") + console_print(id, "%L", id, "GIVEN_NOT_VALID", lMaps) + return PLUGIN_HANDLED + } + + new menu_msg[256], len = 0 + new keys = 0 + + if (g_validMaps > 1) + { + keys = MENU_KEY_0 + len = format(menu_msg, 255, g_coloredMenus ? "\y%L: \w^n^n" : "%L: ^n^n", LANG_SERVER, "CHOOSE_MAP") + new temp[128] + + for (new a = 0; a < g_validMaps; ++a) + { + format(temp, 127, "%d. %s^n", a+1, g_optionName[a]) + len += copy(menu_msg[len], 255-len, temp) + keys |= (1<<a) + } + + format(menu_msg[len], 255-len, "^n0. %L", LANG_SERVER, "NONE") + g_yesNoVote = 0 + } else { + new lChangeMap[32], lYes[16], lNo[16] + + format(lChangeMap, 31, "%L", LANG_SERVER, "CHANGE_MAP_TO") + format(lYes, 15, "%L", LANG_SERVER, "YES") + format(lNo, 15, "%L", LANG_SERVER, "NO") + format(menu_msg, 255, g_coloredMenus ? "\y%s %s?\w^n^n1. %s^n2. %s" : "%s %s?^n^n1. %s^n2. %s", lChangeMap, g_optionName[0], lYes, lNo) + keys = MENU_KEY_1|MENU_KEY_2 + g_yesNoVote = 1 + } + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + + if (argc == 2) + log_amx("Vote: ^"%s<%d><%s><>^" vote map (map ^"%s^")", name, get_user_userid(id), authid, g_optionName[0]) + else + log_amx("Vote: ^"%s<%d><%s><>^" vote maps (map#1 ^"%s^") (map#2 ^"%s^") (map#3 ^"%s^") (map#4 ^"%s^")", name, get_user_userid(id), authid, g_optionName[0], g_optionName[1], g_optionName[2], g_optionName[3]) + + new maxpl=get_maxplayers(); + new msg[256]; + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + // HACK: ADMIN_VOTE_MAP_{1,2} keys were designed very poorly. Remove all : and %s in it. + LookupLangKey(msg, charsmax(msg), "ADMIN_VOTE_MAP_1", i); + replace_all(msg, charsmax(msg), "%s", ""); + replace_all(msg, charsmax(msg), ":", ""); + trim(msg); + show_activity_id(i, id, name, msg); + } + } + + g_execResult = true + new Float:vote_time = get_cvar_float("amx_vote_time") + 2.0 + + set_cvar_float("amx_last_voting", get_gametime() + vote_time) + g_voteRatio = get_cvar_float("amx_votemap_ratio") + g_Answer = "changelevel %s" + show_menu(0, keys, menu_msg, floatround(vote_time), (g_validMaps > 1) ? "Choose map: " : "Change map to ") + set_task(vote_time, "checkVotes", 99889988) + g_voteCaller = id + console_print(id, "%L", id, "VOTING_STARTED") + g_voteCount = {0, 0, 0, 0} + + return PLUGIN_HANDLED +} + +public cmdVote(id, level, cid) +{ + if (!cmd_access(id, level, cid, 4)) + return PLUGIN_HANDLED + + new Float:voting = get_cvar_float("amx_last_voting") + if (voting > get_gametime()) + { + console_print(id, "%L", id, "ALREADY_VOTING") + return PLUGIN_HANDLED + } + + if (voting && voting + get_cvar_float("amx_vote_delay") > get_gametime()) + { + console_print(id, "%L", id, "VOTING_NOT_ALLOW") + return PLUGIN_HANDLED + } + + new quest[48] + read_argv(1, quest, 47) + + if (contain(quest, "sv_password") != -1 || contain(quest, "rcon_password") != -1) + { + console_print(id, "%L", id, "VOTING_FORBIDDEN") + return PLUGIN_HANDLED + } + + new count=read_argc(); + + for (new i=0;i<4 && (i+2)<count;i++) + { + read_argv(i+2, g_optionName[i], sizeof(g_optionName[])-1); + } + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + log_amx("Vote: ^"%s<%d><%s><>^" vote custom (question ^"%s^") (option#1 ^"%s^") (option#2 ^"%s^")", name, get_user_userid(id), authid, quest, g_optionName[0], g_optionName[1]) + + new maxpl=get_maxplayers(); + new msg[256]; + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + // HACK: ADMIN_VOTE_CUS_{1,2} keys were designed very poorly. Remove all : and %s in it. + LookupLangKey(msg, charsmax(msg), "ADMIN_VOTE_CUS_1", i); + replace_all(msg, charsmax(msg), "%s", ""); + replace_all(msg, charsmax(msg), ":", ""); + trim(msg); + show_activity_id(i, id, name, msg); + } + } + + new menu_msg[512], lVote[16] + + format(lVote, 15, "%L", LANG_SERVER, "VOTE") + + count-=2; + if (count>4) + { + count=4; + } + // count now shows how many options were listed + new keys=0; + for (new i=0;i<count;i++) + { + keys |= (1<<i); + } + + new len=formatex(menu_msg, sizeof(menu_msg)-1, g_coloredMenus ? "\y%s: %s\w^n^n" : "%s: %s^n^n", lVote, quest); + + for (new i=0;i<count;i++) + { + len+=formatex(menu_msg[len], sizeof(menu_msg) - 1 - len ,"%d. %s^n",i+1,g_optionName[i]); + } + g_execResult = false + + new Float:vote_time = get_cvar_float("amx_vote_time") + 2.0 + + set_cvar_float("amx_last_voting", get_gametime() + vote_time) + g_voteRatio = get_cvar_float("amx_vote_ratio") + replace_all(quest,sizeof(quest)-1,"%",""); + format(g_Answer, 127, "%s - %%s", quest) + show_menu(0, keys, menu_msg, floatround(vote_time), "Vote: ") + set_task(vote_time, "checkVotes", 99889988) + g_voteCaller = id + console_print(id, "%L", id, "VOTING_STARTED") + g_voteCount = {0, 0, 0, 0} + g_yesNoVote = 0 + + return PLUGIN_HANDLED +} + +public cmdVoteKickBan(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new Float:voting = get_cvar_float("amx_last_voting") + if (voting > get_gametime()) + { + console_print(id, "%L", id, "ALREADY_VOTING") + return PLUGIN_HANDLED + } + + if (voting && voting + get_cvar_float("amx_vote_delay") > get_gametime()) + { + console_print(id, "%L", id, "VOTING_NOT_ALLOW") + return PLUGIN_HANDLED + } + + new cmd[32] + + read_argv(0, cmd, 31) + + new voteban = equal(cmd, "amx_voteban") + new arg[32] + read_argv(1, arg, 31) + + new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF) + + if (!player) + return PLUGIN_HANDLED + + if (voteban && is_user_bot(player)) + { + new imname[32] + + get_user_name(player, imname, 31) + console_print(id, "%L", id, "ACTION_PERFORMED", imname) + return PLUGIN_HANDLED + } + + new keys = MENU_KEY_1|MENU_KEY_2 + new menu_msg[256], lYes[16], lNo[16], lKickBan[16] + + format(lYes, 15, "%L", LANG_SERVER, "YES") + format(lNo, 15, "%L", LANG_SERVER, "NO") + format(lKickBan, 15, "%L", LANG_SERVER, voteban ? "BAN" : "KICK") + ucfirst(lKickBan) + get_user_name(player, arg, 31) + format(menu_msg, 255, g_coloredMenus ? "\y%s %s?\w^n^n1. %s^n2. %s" : "%s %s?^n^n1. %s^n2. %s", lKickBan, arg, lYes, lNo) + g_yesNoVote = 1 + + new bool:ipban=false; + + if (voteban) + { + get_user_authid(player, g_optionName[0], sizeof(g_optionName[])-1); + + // Do the same check that's in plmenu to determine if this should be an IP ban instead + if (equal("4294967295", g_optionName[0]) + || equal("HLTV", g_optionName[0]) + || equal("STEAM_ID_LAN", g_optionName[0]) + || equali("VALVE_ID_LAN", g_optionName[0])) + { + get_user_ip(player, g_optionName[0], sizeof(g_optionName[])-1, 1); + + ipban=true; + } + + } + else + { + num_to_str(get_user_userid(player), g_optionName[0], 31) + } + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + log_amx("Vote: ^"%s<%d><%s><>^" vote %s (target ^"%s^")", name, get_user_userid(id), authid, voteban ? "ban" : "kick", arg) + + new maxpl=get_maxplayers(); + new msg[256]; + new right[256]; + new dummy[1]; + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + formatex(lKickBan, charsmax(lKickBan), "%L", i, voteban ? "BAN" : "KICK"); + + // HACK: ADMIN_VOTE_FOR{1,2} keys are really weird. Tokenize and ignore the text before the : + LookupLangKey(msg, charsmax(msg), "ADMIN_VOTE_FOR_1", i); + strtok(msg, dummy, 0, right, charsmax(right), ':'); + trim(right); + show_activity_id(i, id, name, right, lKickBan, arg); + } + } + + g_execResult = true + + new Float:vote_time = get_cvar_float("amx_vote_time") + 2.0 + + set_cvar_float("amx_last_voting", get_gametime() + vote_time) + g_voteRatio = get_cvar_float(voteban ? "amx_voteban_ratio" : "amx_votekick_ratio") + + if (voteban) + { + if (ipban==true) + { + g_Answer = "addip 30.0 %s"; + } + else + { + g_Answer = "banid 30.0 %s kick"; + + } + } + else + { + g_Answer = "kick #%s"; + } + show_menu(0, keys, menu_msg, floatround(vote_time), voteban ? "Ban " : "Kick ") + set_task(vote_time, "checkVotes", 99889988) + g_voteCaller = id + console_print(id, "%L", id, "VOTING_STARTED") + g_voteCount = {0, 0, 0, 0} + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/amxmod_compat.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/amxmod_compat.sma new file mode 100644 index 0000000..080d747 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/amxmod_compat.sma @@ -0,0 +1,75 @@ +/** + * AMX Mod Compatibility engine + * by the AMX Mod X Development Team + */ + +#include <amxmodx> +#include <fun> //we want fun running for extra compatibility +#include <engine> //we want engine running for extra compatibility +#include <fakemeta> +#include <translator> +#define AMXMODX_NOAUTOLOAD +#include <cstrike> +#include <sqlx> + +#define MOD_NORMAL 0 +#define MOD_CSTRIKE 1 + +new g_ModType = MOD_NORMAL +new g_MaxPlayers + +#include "core.sma" +#include "vexdum.sma" +#include "mysql.sma" + +public plugin_init() +{ + register_plugin("AMX Mod Compat Engine", "1.76.rc4", "AMXX Dev Team") + + g_MaxPlayers = get_maxplayers() + + VexdUM_Register() +} + +public plugin_natives() +{ + set_module_filter("Plugin_ModuleFilter") + set_native_filter("Plugin_NativeFilter") + + new modname[32] + get_modname(modname, 31) + if (equali(modname, "cstrike") || equali(modname, "czero")) + { + g_ModType = MOD_CSTRIKE + } + + Core_Natives() + VexdUM_Natives() + MySQL_Natives() +} + +public Plugin_ModuleFilter(const module[]) +{ + if (equali(module, "sqlx") || equali(module, "cstrike")) + { + return PLUGIN_HANDLED + } + + return PLUGIN_CONTINUE +} + +public Plugin_NativeFilter(const name[], index, trap) +{ + if (!trap) + { + return PLUGIN_HANDLED + } + + return PLUGIN_CONTINUE +} + +public client_connect(id) +{ + VexdUM_ClientConnect(id) +} + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/core.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/core.sma new file mode 100644 index 0000000..92fead4 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/core.sma @@ -0,0 +1,301 @@ +/** + * AMX Mod Compatibility engine + * by the AMX Mod X Development Team + */ + +Core_Natives() +{ + /* implicit compatibility */ + register_native("VelocityByAim", "__VelocityByAim") + register_native("load_translations", "__load_translations") + register_native("is_user_authorized", "__is_user_authorized") + register_native("get_user_money", "__get_user_money") + register_native("set_user_money", "__set_user_money") + register_native("angle_to_vector", "__angle_to_vector") + register_native("fabs", "__fabs") + register_native("asin", "__asin") + register_native("sin", "__sin") + register_native("sinh", "__sinh") + register_native("acos", "__acos") + register_native("cos", "__cos") + register_native("cosh", "__cosh") + register_native("atan", "__atan") + register_native("atan2", "__atan2") + register_native("tan", "__tan") + register_native("tanh", "__tanh") + register_native("fsqroot", "__fsqroot") + register_native("fpower", "__fpower") + register_native("flog", "__flog") + register_native("get_cmdaccess", "__get_cmdaccess") + register_native("is_translated", "__is_translated") + register_native("get_plugincmdsnum", "__get_plugincmdsnum") + register_native("get_plugincmd", "__get_plugincmd") + register_native("get_plugincvarsnum", "__get_plugincvarsnum") + register_native("get_plugincvar", "__get_plugincvar") + register_native("is_module_running", "__is_module_running") + register_native("is_plugin_running", "__is_plugin_running") +} + +public __VelocityByAim(plid, num) +{ + new iIndex + new iVelocity + new Float:vRetValue[3] + + iIndex = get_param(1) + iVelocity = get_param(2) + + new ret = velocity_by_aim(iIndex, iVelocity, vRetValue) + set_array_f(3, vRetValue, 3) + + return ret +} + +public __load_translations(plid, num) +{ + static file[255] + + get_string(1, file, 254) + + return load_translations(file) +} + +public __is_user_authorized(plid, num) +{ + return is_user_authorized(get_param(1)) +} + +public __get_user_money(plid, num) +{ + return get_user_money(get_param(1)) +} + +public __set_user_money(plid, num) +{ + return set_user_money(get_param(1), get_param(2), get_param(3)) +} + +public __angle_to_vector(plid, num) +{ + new Float:angle[3] + new Float:vRetValue[3] + + get_array_f(1, angle, 3) + + new ret = angle_vector(angle, get_param(2), vRetValue) + set_array_f(3, vRetValue, 3) + + return ret +} + +public Float:__fabs(plid, num) +{ + new Float:value = get_param_f(1) + + return floatabs(value) +} + +public Float:__asin(plid, num) +{ + new Float:value = get_param_f(1) + + return floatasin(value, radian) +} + +public Float:__sin(plid, num) +{ + new Float:value = get_param_f(1) + + return floatsin(value, radian) +} + +public Float:__sinh(plid, num) +{ + new Float:value = get_param_f(1) + + return floatsinh(value, radian) +} + +public Float:__acos(plid, num) +{ + new Float:value = get_param_f(1) + + return floatacos(value, radian) +} + +public Float:__cos(plid, num) +{ + new Float:value = get_param_f(1) + + return floatcos(value, radian) +} + +public Float:__cosh(plid, num) +{ + new Float:value = get_param_f(1) + + return floatcosh(value, radian) +} + +public Float:__atan(plid, num) +{ + new Float:value = get_param_f(1) + + return floatatan(value, radian) +} + +public Float:__atan2(plid, num) +{ + new Float:value1 = get_param_f(1) + new Float:value2 = get_param_f(2) + + return floatatan2(value1, value2, radian) +} + +public Float:__tan(plid, num) +{ + new Float:value = get_param_f(1) + + return floattan(value, radian) +} + +public Float:__tanh(plid, num) +{ + new Float:value = get_param_f(1) + + return floattanh(value, radian) +} + +public Float:__fsqroot(plid, num) +{ + new Float:value = get_param_f(1) + + return floatsqroot(value) +} + +public Float:__fpower(plid, num) +{ + new Float:value = get_param_f(1) + new Float:exponent = get_param_f(2) + + return floatpower(value, exponent) +} + +public Float:__flog(plid, num) +{ + new Float:value = get_param_f(1) + new Float:base = get_param_f(2) + + return floatlog(value, base) +} + +//get_cmdaccess(cmd[], accessflags[], len) +public __get_cmdaccess(plid, num) +{ + static command[32], accessflags[32] + new ret + + get_string(1, command, 31) + + if ((ret=get_cmdaccess(command, accessflags, 31))) + { + set_string(2, accessflags, get_param(3)) + } + + return ret +} + +public __is_translated(plid, num) +{ + static string[512] + + get_string(1, string, 511) + + return is_translated(string) +} + +public __get_plugincmdsnum(plid, num) +{ + static plugin[64] + + get_string(1, plugin, 63) + + return get_plugincmdsnum(plugin, get_param(2)) +} + +public __get_plugincmd(plid, num) +{ + static plugin[64] + static command[32] + static accessflags[32] + static info[512] + + get_string(1, plugin, 63) + + if (get_plugincmd(plugin, + get_param(2), + command, + 31, + accessflags, + 31, + info, + 511, + get_param(9), + get_param(10))) + { + set_string(3, command, get_param(4)) + set_string(5, accessflags, get_param(6)) + set_string(7, info, get_param(8)) + + return 1 + } + + return 0 +} + +public __get_plugincvarsnum(plid, num) +{ + static plugin[64] + + get_string(1, plugin, 63) + + return get_plugincvarsnum(plugin, get_param(2)) +} + +//stock get_plugincvar(plugin[], index, cvar[], len1, value[], len2, flags=0) +public __get_plugincvar(plid, num) +{ + static plugin[64] + static cvar[32] + static value[512] + + get_string(1, plugin, 63) + + if (get_plugincvar(plugin, get_param(2), cvar, 31, value, 511, get_param(7))) + { + set_string(3, cvar, get_param(4)) + set_string(5, value, get_param(6)) + + return 1 + } + + return 0 +} + +public __is_module_running(plid, num) +{ + static module[64] + + get_string(1, module, 63) + + return is_module_running(module) +} + +public __is_plugin_running(plid, num) +{ + static plugin[64] + + get_string(1, plugin, 63) + + return is_plugin_running(plugin) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/mysql.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/mysql.sma new file mode 100644 index 0000000..d17079d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/mysql.sma @@ -0,0 +1,415 @@ +/** + * AMX Mod Compatibility engine + * by the AMX Mod X Development Team + */ + +#define MAX_CONNECTIONS 64 + +new Connections[MAX_CONNECTIONS+1] = {0} +new ConnectionTracker[MAX_CONNECTIONS+1] = {0} +new ConnectionErrors[MAX_CONNECTIONS+1][255] +new ConnectionQueries[MAX_CONNECTIONS+1] = {0} +new QueryPositions[MAX_CONNECTIONS+1] + +MySQL_Natives() +{ + register_native("mysql_connect", "__mysql_connect") + register_native("mysql_query", "__mysql_query") + register_native("mysql_error", "__mysql_error") + register_native("mysql_close", "__mysql_close") + register_native("mysql_nextrow", "__mysql_nextrow") + register_native("mysql_getfield", "__mysql_getfield") + register_native("mysql_getresult", "__mysql_getresult") + register_native("mysql_affected_rows", "__mysql_affected_rows") + register_native("mysql_num_fields", "__mysql_num_fields") + register_native("mysql_num_rows", "__mysql_num_rows") + register_native("mysql_field_name", "__mysql_field_name") + register_native("mysql_insert_id", "__mysql_insert_id") +} + +MakeConnectionIndex(Handle:cn) +{ + if (ConnectionTracker[0]) + { + new idx = ConnectionTracker[ConnectionTracker[0]] + ConnectionTracker[0]-- + Connections[idx] = _:cn + return idx + } else { + Connections[0]++ + if (Connections[0] > MAX_CONNECTIONS) + { + return 0 + } + + Connections[Connections[0]] = _:cn + return Connections[0] + } + + return 0 +} + +Handle:GetConnectionIndex(idx) +{ + if (idx < 1 || idx > MAX_CONNECTIONS || !Connections[idx]) + { + return Empty_Handle + } + + return Handle:Connections[idx] +} + +FreeConnectionIndex(idx) +{ + Connections[idx] = 0 + ConnectionTracker[0]++ + ConnectionTracker[ConnectionTracker[0]] = idx + ConnectionErrors[idx][0] = 0 + ConnectionQueries[idx] = 0 + QueryPositions[idx] = 0 +} + +/* + * Unlike the previous this does not check for a matching connection. + * Unless a plugin breaks I'm not going to take that step. + */ + +public __mysql_connect(plid, num) +{ + static host[255], user[128], pass[128], dbname[128], error[512] + new errcode + + get_string(1, host, 254) + get_string(2, user, 127) + get_string(3, pass, 127) + get_string(4, dbname, 127) + + new Handle:info = SQL_MakeDbTuple(host, user, pass, dbname) + new Handle:cn = SQL_Connect(info, errcode, error, 511) + + if (cn == Empty_Handle) + { + set_string(5, error, get_param(6)) + return 0 + } + + SQL_FreeHandle(info) + + new idx = MakeConnectionIndex(cn) + if (idx == 0) + { + set_string(5, "Reached max unclosed connections", get_param(6)) + return 0 + } + + ConnectionQueries[idx] = 0 + + return idx +} + +public __mysql_query(plid, num) +{ + static queryString[4096] + new cn_idx = get_param(1) + new Handle:cn + + if ((cn=GetConnectionIndex(cn_idx)) == Empty_Handle) + { + return 0 + } + + vdformat(queryString, 4095, 2, 3) + + new Handle:query = SQL_PrepareQuery(cn, "%s", queryString) + + if (!SQL_Execute(query)) + { + SQL_QueryError(query, ConnectionErrors[cn_idx], 254) + SQL_FreeHandle(query) + return 0 + } + + if (ConnectionQueries[cn_idx]) + { + SQL_FreeHandle(Handle:ConnectionQueries[cn_idx]) + } + + ConnectionQueries[cn_idx] = _:query + QueryPositions[cn_idx] = 0 + + return 1 +} + +public __mysql_error(plid, num) +{ + new cn_idx = get_param(1) + + if (Connections[cn_idx] < 1) + { + static error[255] + format(error, 254, "Invalid connection index: %d", cn_idx) + set_string(2, error, get_param(3)) + return 1 + } + + set_string(2, ConnectionErrors[cn_idx], get_param(3)) + + return 1 +} + +public __mysql_close(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + + if (query != Empty_Handle) + { + SQL_FreeHandle(query) + } + + SQL_FreeHandle(cn) + + FreeConnectionIndex(cn_idx) + + return 1 +} + +public __mysql_nextrow(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + if (QueryPositions[cn_idx] != 0) + { + SQL_NextRow(query) + } + + if (SQL_MoreResults(query)) + { + return ++QueryPositions[cn_idx] + } + + return 0 +} + +public __mysql_getresult(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + if (!SQL_MoreResults(query)) + { + return 0 + } + + static name[64] + get_string(2, name, 63) + new column = SQL_FieldNameToNum(query, name) + if (column == -1) + { + log_error(AMX_ERR_NATIVE, "Invalid column name: %s", name) + return 0 + } + + switch (num) + { + case 2: + { + return SQL_ReadResult(query, column) + } + case 3: + { + new Float:fma + SQL_ReadResult(query, column, fma) + set_param_byref(3, _:fma) + } + case 4: + { + static str[2048] + SQL_ReadResult(query, column, str, 2047) + set_string(3, str, get_param_byref(4)) + } + } + + return 1 +} + +public __mysql_getfield(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + if (!SQL_MoreResults(query)) + { + return 0 + } + + switch (num) + { + case 2: + { + return SQL_ReadResult(query, get_param(2)-1) + } + case 3: + { + new Float:fma + SQL_ReadResult(query, get_param(2)-1, fma) + set_param_byref(3, _:fma) + } + case 4: + { + static str[2048] + SQL_ReadResult(query, get_param(2)-1, str, 2047) + set_string(3, str, get_param_byref(4)) + } + } + + return 1 +} + +public __mysql_affected_rows(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + return SQL_AffectedRows(query) +} + +public __mysql_num_fields(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + return SQL_NumColumns(query) +} + +public __mysql_insert_id(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + return SQL_GetInsertId(query) +} + +public __mysql_num_rows(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + return SQL_NumResults(query) +} + +public __mysql_field_name(plid, num) +{ + new cn_idx = get_param(1) + + new Handle:cn = GetConnectionIndex(cn_idx) + if (cn == Empty_Handle) + { + return 0 + } + + new Handle:query = Handle:ConnectionQueries[cn_idx] + if (query == Empty_Handle) + { + return 0 + } + + new column = get_param(2) - 1 + if (column < 0 || column >= SQL_NumColumns(query)) + { + return 0 + } + + new field[64] + SQL_FieldNumToName(query, column, field, 63) + + set_string(3, field, get_param(4)) + + return 1 +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/vexdum.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/vexdum.sma new file mode 100644 index 0000000..fa95055 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxmod_compat/vexdum.sma @@ -0,0 +1,730 @@ +/** + * AMX Mod Compatibility engine + * by the AMX Mod X Development Team + */ + +#include <VexdUM_const> +#include <VexdUM_stock> + +/* Forwards */ +new g_FwdTouch +new g_FwdThink +new g_FwdSpawn +new g_FwdClientPreThink +new g_FwdClientPostThink +new g_FwdEmitSound +new g_FwdEmitAmbientSound +new g_FwdSetModel +new g_FwdTraceLine +new g_FwdSetCliKeyValue +new g_FwdKeyValue +new g_PlayerModels[33][64] +new g_PlayerModeled[33] + +/* User Messages */ +new g_msgDamage +new g_msgDeathMsg +new g_msgScoreInfo + +new g_LastTrace = 0 + +VexdUM_Register() +{ + /* Fakemeta Hooks */ + register_forward(FM_EmitSound, "Hook_FM_EmitSound") + register_forward(FM_EmitAmbientSound, "Hook_FM_EmitAmbientSound") + register_forward(FM_SetModel, "Hook_FM_SetModel") + register_forward(FM_SetClientKeyValue, "Hook_FM_SetClientKeyValue") + register_forward(FM_KeyValue, "Hook_FM_KeyValue") + register_forward(FM_Touch, "Hook_FM_Touch") + register_forward(FM_Think, "Hook_FM_Think") + register_forward(FM_Spawn, "Hook_FM_Spawn") + register_forward(FM_PlayerPreThink, "Hook_FM_PlayerPreThink") + register_forward(FM_PlayerPostThink, "Hook_FM_PlayerPostThink") + register_forward(FM_ClientUserInfoChanged, "Hook_ClientUserInfoChanged") + + // Only register the traceline forward if there actually is a plugin + // that needs it. Otherwise this will mess with set_user_hitzones + + new pluginnum = get_pluginsnum(); + for (new i = 0; i < pluginnum; i++) + { + if (plugin_flags(0, i) & AMX_FLAG_OLDFILE && // plugin is an AMX plugin being emulated + get_func_id("traceline", i) != -1) // plugin needs traceline + { + register_forward(FM_TraceLine, "Hook_FM_TraceLine") + break; + } + + } + /* Global Forwards */ + g_FwdTouch = CreateMultiForwardEx("entity_touch", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_CELL) + g_FwdThink = CreateMultiForwardEx("entity_think", ET_STOP, FORWARD_ONLY_OLD, FP_CELL) + g_FwdSpawn = CreateMultiForwardEx("entity_spawn", ET_STOP, FORWARD_ONLY_OLD, FP_CELL) + g_FwdClientPreThink = CreateMultiForwardEx("client_prethink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL) + g_FwdClientPostThink = CreateMultiForwardEx("client_postthink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL) + g_FwdEmitSound = CreateMultiForwardEx("emitsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING) + g_FwdEmitAmbientSound = CreateMultiForwardEx("emitambientsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING) + g_FwdSetModel = CreateMultiForwardEx("set_model", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING) + g_FwdTraceLine = CreateMultiForwardEx("traceline", ET_STOP, FORWARD_ONLY_OLD, FP_CELL) + g_FwdSetCliKeyValue = CreateMultiForwardEx("setclientkeyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING, FP_STRING) + g_FwdKeyValue = CreateMultiForwardEx("keyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL) + + /* User Messages */ + g_msgDamage = get_user_msgid("Damage") + g_msgDeathMsg = get_user_msgid("DeathMsg") + g_msgScoreInfo = get_user_msgid("ScoreInfo") +} + +VexdUM_Natives() +{ + /* implicit compatibility */ + register_native("is_entity", "__is_entity") + register_native("find_entity", "__find_entity") + register_native("find_entity_sphere", "__find_entity_sphere") + register_native("in_view_cone", "__in_view_cone") + register_native("get_offset_int", "__get_offset_int") + register_native("set_offset_int", "__set_offset_int") + register_native("trace_line", "__trace_line") + register_native("traceline_get_int", "__traceline_get_int") + register_native("traceline_set_int", "__traceline_set_int") + register_native("traceline_get_edict", "__traceline_get_edict") + register_native("traceline_set_edict", "__traceline_set_edict") + register_native("traceline_set_float", "__traceline_set_float") + register_native("can_see", "__can_see") + register_native("user_spawn", "__user_spawn") + register_native("get_maxentities", "__get_maxentities") + register_native("PointContents", "__PointContents") + register_native("DispatchKeyValue", "__DispatchKeyValue") + register_native("entity_use","__entity_use") + register_native("get_num_ents","__get_num_ents") + register_native("take_damage","__take_damage") + + if (g_ModType == MOD_CSTRIKE) + { + register_native("set_user_model", "__cs_set_user_model") + } else { + register_native("set_user_model", "__set_user_model") + } +} + +VexdUM_ClientConnect(id) +{ + g_PlayerModels[id][0] = 0 + g_PlayerModeled[id] =0 +} + +SetClientKeyValue(id, const key[], const value[]) +{ + new buffer = engfunc(EngFunc_GetInfoKeyBuffer, id) + + return engfunc(EngFunc_SetClientKeyValue, id, buffer, key, value) +} + +GetClientKeyValue(id, const key[], value[], maxlen) +{ + new buffer = engfunc(EngFunc_GetInfoKeyBuffer, id) + + engfunc(EngFunc_InfoKeyValue, buffer, key, value, maxlen) +} + +Death(victim, killer, weapon[64], hs) +{ + if(pev(victim,pev_takedamage) > DAMAGE_NO) + { + new inflictor = pev(killer,pev_owner) + if(pev(killer,pev_flags) & (FL_CLIENT | FL_FAKECLIENT)) + { + if(equal(weapon,"")) + { + pev(killer,pev_viewmodel2,weapon,63) + + replace(weapon,63,"models/v_","") + weapon[strlen(weapon) - 4] = '^0' + } + } + else if(inflictor > 0 && inflictor < get_maxplayers()) + { + if(equal(weapon,"")) + { + pev(killer,pev_viewmodel2,weapon,63) + + replace(weapon,63,"weapon_","") + replace(weapon,63,"monster_","") + replace(weapon,63,"func_","") + } + + if(inflictor == victim) + { + killer = victim + } else { + killer = inflictor + } + } + + message_begin(MSG_ALL,g_msgDeathMsg) + write_byte(killer) + write_byte(victim) + write_byte(hs) + write_string(weapon) + message_end() + + new vname[32],vauthid[32],vteam[32] + get_user_name(victim,vname,31) + get_user_authid(victim,vauthid,31) + get_user_team(victim,vteam,31) + + if(victim == killer) + { + log_message("^"%s<%i><%s><%s>^" killed self with ^"%s^"^n",vname,get_user_userid(victim), + vauthid,vteam,weapon) + } + else if(pev(killer,pev_flags) & (FL_CLIENT | FL_FAKECLIENT)) + { + new kname[32],kauthid[32],kteam[32],team + get_user_name(killer,kname,31) + get_user_authid(killer,kauthid,31) + team = get_user_team(killer,kteam,31) + + log_message("^"%s<%i><%s><%s>^" killed ^"%s<%i><%s><%s>^" with ^"%s^"^n",kname,get_user_userid(killer), + kauthid,kteam,vname,get_user_userid(victim),vauthid,vteam,weapon) + + new Float:frags + pev(killer,pev_frags,frags) + set_pev(killer,pev_frags,frags+1.0) + + message_begin(MSG_ALL,g_msgScoreInfo) + write_byte(killer) + write_short(floatround(frags)) + write_short(get_user_deaths(killer)) + write_short(0) + write_short(team) + message_end() + + pev(victim,pev_frags,frags) + set_pev(victim,pev_frags,frags+1.0) + } else { + log_message("^"%s<%i><%s><%s>^" killed by ^"%s^"^n",vname,get_user_userid(victim),vauthid,vteam,weapon) + } + + set_msg_block(g_msgDeathMsg,BLOCK_ONCE) + dllfunc(DLLFunc_ClientKill,victim) + } +} + +public __is_entity(plid, num) +{ + new ent = get_param(1) + return is_entity(ent) +} + +public __find_entity(plid, num) +{ + static entstr[256] + new startEnt, type + + startEnt = get_param(1) + get_string(2, entstr, 255) + type = get_param(3) + + return find_entity(startEnt, entstr, type) +} + +public __find_entity_sphere(plid, num) +{ + new ent + new Float:orig[3] + new Float:radius + + ent = get_param(1) + get_array_f(2, orig, 3) + radius = get_param_f(3) + + return find_entity_sphere(ent, orig, radius) +} + +public __in_view_cone(plid, num) +{ + new ent + new Float:orig[3] + + ent = get_param(1) + get_array_f(2, orig, 3) + + return in_view_cone(ent, orig) +} + +public __get_offset_int(plid, num) +{ + new ent = get_param(1) + new offs = get_param(2) + new linux = get_param(3) + + return get_pdata_int(ent, offs, linux) +} + +public __set_offset_int(plid, num) +{ + return set_offset_int(get_param(1), get_param(2), get_param(3), get_param(4)) +} + +public __trace_line(plid, num) +{ + new ent = get_param(1) + + new Float:vStart[3], Float:vEnd[3], Float:vReturn[3] + + get_array_f(2, vStart, 3) + get_array_f(3, vEnd, 3) + + if (ent == FM_NULLENT) + engfunc(EngFunc_TraceLine, vStart, vEnd, IGNORE_MONSTERS, 0, 0) + else + engfunc(EngFunc_TraceLine, vStart, vEnd, DONT_IGNORE_MONSTERS, ent, 0) + + get_tr2(0, TraceResult:TR_vecEndPos, vReturn) + + set_array_f(4, vReturn, 3) + + new traceHit = get_tr2(0, TraceResult:TR_pHit) + + if (!pev_valid(traceHit)) + return FM_NULLENT + + return traceHit +} + +public __traceline_get_int(plid, num) +{ + new iSet = get_param(1) + new iValue = 0 + + switch (iSet) + { + case TR_INT_fAllSolid: + iValue = get_tr2(g_LastTrace, TraceResult:TR_AllSolid) + case TR_INT_fStartSolid: + iValue = get_tr2(g_LastTrace, TraceResult:TR_StartSolid) + case TR_INT_fInOpen: + iValue = get_tr2(g_LastTrace, TraceResult:TR_InOpen) + case TR_INT_fInWater: + iValue = get_tr2(g_LastTrace, TraceResult:TR_InWater) + case TR_INT_iHitgroup: + iValue = get_tr2(g_LastTrace, TraceResult:TR_iHitgroup) + default: + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + } + + return iValue +} + +public __traceline_set_int(plid, num) +{ + new iSet = get_param(1) + new iValue = get_param(2) + + switch (iSet) + { + case TR_INT_fAllSolid: + set_tr2(g_LastTrace, TraceResult:TR_AllSolid, iValue) + case TR_INT_fStartSolid: + set_tr2(g_LastTrace, TraceResult:TR_StartSolid, iValue) + case TR_INT_fInOpen: + set_tr2(g_LastTrace, TraceResult:TR_InOpen, iValue) + case TR_INT_fInWater: + set_tr2(g_LastTrace, TraceResult:TR_InWater, iValue) + case TR_INT_iHitgroup: + set_tr2(g_LastTrace, TraceResult:TR_iHitgroup, iValue) + default: + { + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + return 0 + } + } + + return 1 +} + +public __traceline_get_edict(plid, num) +{ + new iSet = get_param(1) + new iValue = 0 + + switch (iSet) + { + case TR_ENT_pHit: + iValue = get_tr2(g_LastTrace, TraceResult:TR_pHit) + default: + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + } + + return iValue +} + +public __traceline_set_edict(plid, num) +{ + new iSet = get_param(1) + new iValue = get_param(2) + + switch (iSet) + { + case TR_ENT_pHit: + set_tr2(g_LastTrace, TraceResult:TR_pHit, iValue) + default: + { + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + return 0 + } + } + + return 1 +} + +public Float:__traceline_get_float(plid, num) +{ + new iSet = get_param(1) + new Float:fValue = 0.0 + + switch (iSet) + { + case TR_FL_flFraction: + get_tr2(g_LastTrace, TraceResult:TR_flFraction, fValue) + case TR_FL_flPlaneDist: + get_tr2(g_LastTrace, TraceResult:TR_flPlaneDist, fValue) + default: + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + } + + return fValue +} + +public __traceline_set_float(plid, num) +{ + new iSet = get_param(1) + new Float:fValue = get_param_f(2) + + switch (iSet) + { + case TR_FL_flFraction: + set_tr2(g_LastTrace, TraceResult:TR_flFraction, fValue) + case TR_FL_flPlaneDist: + set_tr2(g_LastTrace, TraceResult:TR_flPlaneDist, fValue) + default: + { + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + return 0 + } + } + + return 1 +} + +public __traceline_get_vector(plid, num) +{ + new iSet = get_param(1) + new Float:vValue[3] + + switch (iSet) + { + case TR_VEC_vecEndPos: + get_tr2(g_LastTrace, TraceResult:TR_vecEndPos, vValue) + case TR_VEC_vecPlaneNormal: + get_tr2(g_LastTrace, TraceResult:TR_vecPlaneNormal, vValue) + default: + { + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + return 0 + } + } + + set_array_f(2, vValue, 3) + + return 1 +} + +public __traceline_set_vector(plid, num) +{ + new iSet = get_param(1) + new Float:vValue[3] + + get_array_f(2, vValue, 3) + + switch (iSet) + { + case TR_VEC_vecEndPos: + set_tr2(g_LastTrace, TraceResult:TR_vecEndPos, vValue) + case TR_VEC_vecPlaneNormal: + set_tr2(g_LastTrace, TraceResult:TR_vecPlaneNormal, vValue) + default: + { + log_error(AMX_ERR_NATIVE, "Invalid TR_ parameter") + return 0 + } + } + + return 1 +} + +public __can_see(plid, num) +{ + return can_see(get_param(1), get_param(2)) +} + +public __user_spawn(plid, num) +{ + return dllfunc(DLLFunc_Spawn, get_param(1)) +} + +public __set_user_model(plid, num) +{ + new id = get_param(1) + if (id < 1 || id > g_MaxPlayers) + { + return 0 + } + + new model[64] + get_string(2, model, 63) + if (model[0] == 0) + { + if (!g_PlayerModeled[id]) + { + return 0 + } + g_PlayerModeled[id] = 0 + g_PlayerModels[id][0] = 0 + dllfunc(DLLFunc_ClientUserInfoChanged, id) + } else { + copy(g_PlayerModels[id], 63, model) + g_PlayerModeled[id] = 1 + SetClientKeyValue(id, "model", model) + } + + return 1 +} + +public __cs_set_user_model(plid, num) +{ + new id = get_param(1) + new model[64] + + get_string(2, model, 63) + + return cs_set_user_model(id, model) +} + +public __get_maxentities(plid, num) +{ + return get_maxentities() +} + +public __PointContents(plid, num) +{ + new Float:vCheckAt[3] + + get_array_f(1, vCheckAt, 3) + + return point_contents(vCheckAt) +} + +public __DispatchKeyValue(plid, num) +{ + new ent = get_param(1) + + new szClassname[32], szKey[32], szValue[32] + + if (pev_valid(ent)) + { + get_string(2, szKey, 31) + get_string(3, szValue, 31) + pev(ent, pev_classname, szClassname, 31) + + set_kvd(0, KV_ClassName, szClassname) + set_kvd(0, KV_KeyName, szKey) + set_kvd(0, KV_Value, szValue) + set_kvd(0, KV_fHandled, 0) + + dllfunc(DLLFunc_KeyValue, ent, 0) + } + + return 1 +} + +public __entity_use(plid, num) +{ + new entUsed = get_param(1) + new entOther = get_param(2) + return dllfunc(DLLFunc_Use,entUsed,entOther) +} + +public __get_num_ents(plid, num) +{ + return engfunc(EngFunc_NumberOfEntities) +} + +public __take_damage(plid, num) +{ + new victim = get_param(1) + new attacker = get_param(2) + new Float:orig[3] + get_array_f(3,orig,3) + new Float:dmg = get_param_f(4) + new bit = get_param(5) + new wpnName[64] + get_string(6,wpnName,63) + new hs = get_param(7) + + if(pev(victim,pev_takedamage) > DAMAGE_NO) + { + set_pev(victim,pev_dmg_inflictor,attacker) + + new Float:olddmg + pev(victim,pev_dmg_take,olddmg) + set_pev(victim,pev_dmg_take,olddmg+dmg) + + message_begin(MSG_ONE, g_msgDamage, {0,0,0} , victim) + write_byte(0) + write_byte(floatround(olddmg+dmg)) + write_long(bit) + write_coord(floatround(orig[0])) + write_coord(floatround(orig[1])) + write_coord(floatround(orig[2])) + message_end() + + new Float:health + pev(victim,pev_health,health) + if((dmg >= health) && (health > 0.0)) + { + Death(victim,attacker,wpnName,hs) + } else { + set_pev(victim,pev_health,health-dmg) + } + } +} + +/********************************* + ***** HOOKS ********************* + *********************************/ + +public Hook_ClientUserInfoChanged(id, buffer) +{ + if (g_PlayerModeled[id] && (pev(id, pev_deadflag) == DEAD_NO)) + { + return FMRES_SUPERCEDE + } + + return FMRES_IGNORED +} + +public Hook_FM_EmitSound(entid, channel, const sample[]) //we don't care about the rest +{ + new ret + + ExecuteForward(g_FwdEmitSound, ret, entid, sample) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_EmitAmbientSound(entid, Float:pos[3], const sample[]) //we don't care about the rest +{ + new ret + + ExecuteForward(g_FwdEmitAmbientSound, ret, entid, sample) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_SetModel(entid, const model[]) +{ + new ret + + ExecuteForward(g_FwdSetModel, ret, entid, model) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_TraceLine(Float:v1[3], Float:v2[3], noMonsters, skip_ent, ptr) +{ + g_LastTrace = ptr + + engfunc(EngFunc_TraceLine, v1, v2, noMonsters, skip_ent, ptr) + + new ret + + ExecuteForward(g_FwdTraceLine, ret, skip_ent) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_SetClientKeyValue(id, const infobuffer[], const key[], const value[]) +{ + new ret + + ExecuteForward(g_FwdSetCliKeyValue, ret, id, key, value) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_KeyValue(ent, kvd) +{ + new ret + + ExecuteForward(g_FwdKeyValue, ret, ent) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_Touch(ent1, ent2) +{ + new ret + + ExecuteForward(g_FwdTouch, ret, ent1, ent2) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_Think(entid) +{ + new ret + + ExecuteForward(g_FwdThink, ret, entid) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_Spawn(entid) +{ + new ret + + ExecuteForward(g_FwdSpawn, ret, entid) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_PlayerPreThink(id) +{ + new ret + + ExecuteForward(g_FwdClientPreThink, ret, id) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} + +public Hook_FM_PlayerPostThink(id) +{ + new ret + + if (g_PlayerModeled[id]) + { + new model[64] + GetClientKeyValue(id, "model", model, 63) + if (!equal(g_PlayerModels[id], model)) + { + SetClientKeyValue(id, "model", g_PlayerModels[id]) + } + } + + ExecuteForward(g_FwdClientPostThink, ret, id) + + return (ret == PLUGIN_HANDLED) ? FMRES_SUPERCEDE : FMRES_IGNORED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxxpc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxxpc new file mode 100644 index 0000000..5f060f0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxxpc differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxxpc32.so b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxxpc32.so new file mode 100644 index 0000000..c6aa6b7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/amxxpc32.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/antiflood.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/antiflood.sma new file mode 100644 index 0000000..a96e30d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/antiflood.sma @@ -0,0 +1,78 @@ +/* AMX Mod X +* Anti Flood Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> + +new Float:g_Flooding[33] = {0.0, ...} +new g_Flood[33] = {0, ...} + +new amx_flood_time; + +public plugin_init() +{ + register_plugin("Anti Flood", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("antiflood.txt") + register_clcmd("say", "chkFlood") + register_clcmd("say_team", "chkFlood") + amx_flood_time=register_cvar("amx_flood_time", "0.75") +} + +public chkFlood(id) +{ + new Float:maxChat = get_pcvar_float(amx_flood_time) + + if (maxChat) + { + new Float:nexTime = get_gametime() + + if (g_Flooding[id] > nexTime) + { + if (g_Flood[id] >= 3) + { + client_print(id, print_notify, "** %L **", id, "STOP_FLOOD") + g_Flooding[id] = nexTime + maxChat + 3.0 + return PLUGIN_HANDLED + } + g_Flood[id]++ + } + else if (g_Flood[id]) + { + g_Flood[id]-- + } + + g_Flooding[id] = nexTime + maxChat + } + + return PLUGIN_CONTINUE +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/cmdmenu.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/cmdmenu.sma new file mode 100644 index 0000000..f9de98a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/cmdmenu.sma @@ -0,0 +1,494 @@ +/* AMX Mod X +* Commands Menu Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +// Precache sounds from speech.ini - comment this line to disable +#define PRECACHE_SPEECHINI + +/* Commands Menus */ + +#define MAX_CMDS_LAYERS 3 + +new g_cmdMenuName[MAX_CMDS_LAYERS][] = +{ + "CMD_MENU", + "CONF_MENU", + "SPE_MENU" +} + +new g_cmdMenuCmd[MAX_CMDS_LAYERS][] = +{ + "amx_cmdmenu", + "amx_cfgmenu", + "amx_speechmenu" +} + +new g_cmdMenuCfg[MAX_CMDS_LAYERS][] = +{ + "cmds.ini", + "configs.ini", + "speech.ini" +} + +new g_cmdMenuHelp[MAX_CMDS_LAYERS][] = +{ + "- displays commands menu", + "- displays configs menu", + "- displays speech menu" +} + +/* End of Commands Menu */ + +#define MAX_CMDS 64 +#define MAX_CVARS 48 + +new g_cmdName[MAX_CMDS*MAX_CMDS_LAYERS][32] +new g_cmdCmd[MAX_CMDS*MAX_CMDS_LAYERS][64] +new g_cmdMisc[MAX_CMDS*MAX_CMDS_LAYERS][2] +new g_cmdNum[MAX_CMDS_LAYERS] + +new g_cvarNames[MAX_CVARS][32] +new g_cvarMisc[MAX_CVARS][3] +new g_cvarCmd[MAX_CVARS*5][32] +new g_cvarCmdNum +new g_cvarNum + +new g_menuPosition[33] +new g_menuSelect[33][MAX_CMDS] +new g_menuSelectNum[33] +new g_menuLayer[33] + +new g_coloredMenus + + +public plugin_init() +{ + register_plugin("Commands Menu", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("cmdmenu.txt") + register_dictionary("common.txt") + + new configsDir[64], config[64] + get_configsdir(configsDir, 63) + + for (new a = 0; a < MAX_CMDS_LAYERS; ++a) + { + new MenuName[64] + + format(MenuName, 63, "%L", "en", g_cmdMenuName[a]) + register_menucmd(register_menuid(MenuName), 1023, "actionCmdMenu") + register_clcmd(g_cmdMenuCmd[a], "cmdCmdMenu", ADMIN_MENU, g_cmdMenuHelp[a]) + format(config, 63, "%s/%s", configsDir, g_cmdMenuCfg[a]) + loadCmdSettings(config, a) + } + + register_menucmd(register_menuid("Cvars Menu"), 1023, "actionCvarMenu") + register_clcmd("amx_cvarmenu", "cmdCvarMenu", ADMIN_CVAR, "- displays cvars menu") + + new cvars_ini_file[64]; + format(cvars_ini_file, 63, "%s/%s", configsDir, "cvars.ini"); + loadCvarSettings(cvars_ini_file) + + g_coloredMenus = colored_menus() +} + +#if defined PRECACHE_SPEECHINI +public plugin_precache( ) +{ + new configsDir[64], config[64]; + get_configsdir( configsDir, 63 ); + formatex( config, 63, "%s/%s", configsDir, "speech.ini" ); + + new fp = fopen( config, "rt" ); // Read file as text + + if ( ! fp ) // File doesn't exists + return 0; + + new szText[256]; + new line = 0; + new szName[32], szSound[128], sndExt[5]; + new field1[32], field2[64], field3[64]; + new fieldNums = 0; + + while ( line < MAX_CMDS && ! feof( fp ) ) // Loop till MAX_CMDS or EOF + { + fgets( fp, szText, 255 ); // Store line content + + /* Strips newline */ + new len = strlen( szText ); + if ( len != 0 && szText[len-1] == '^n' ) // len != 0 because if the last line of the file is empty, there's no newline + szText[--len] = 0; + + if ( len == 0 || szText[0] == ';' || szText[0] == '/' ) // Line is empty or a comment + continue; + + parse( szText, szName, 31, szSound, 127 ); + fieldNums = parse( szSound, field1, 31, field2, 63, field3, 63 ); + if ( fieldNums == 2 && field1[0] == 's' ) // .wav (spk) + { + copy( szSound, 127, field2 ); + copy( sndExt, 4, ".wav" ); + } + else if ( fieldNums == 3 && field1[0] == 'm' && ( field2[0] == 'p' || field2[0] == 'l' ) ) // .mp3 (mp3 play | mp3 loop) + { + copy( szSound, 127, field3 ); + copy( sndExt, 4, ".mp3" ); + } + else // WTH is this sound, drop it. + continue; + + replace_all( szSound, 127, "\'", "" ); // Strips all ugly (and sometimes useless) \' + + if ( szSound[0] == '/' ) + replace( szSound, 127, "/", "" ); // Strip leading slash + + if ( sndExt[1] == 'm' || ( ! equali( szSound, "vox", 3 ) && ! equali( szSound, "fvox", 4 ) && ! equali( szSound, "barney", 6 ) && ! equali( szSound, "hgrunt", 6 ) ) ) + { + // SzSound is a mp3, or a custom wav (not a vox, fvox, or default sound from HL pak) + if ( !equali( szSound[strlen(szSound)-4], sndExt ) ) + add( szSound, 127, sndExt ); // Add filetype extension if it isn't already specified + if ( sndExt[1] == 'w' ) + format( szSound, 127, "sound/%s", szSound ); // spk basedir is $moddir/sound, but mp3 play is $moddir, fix this for the file_exists check + if ( file_exists( szSound ) ) + { + if ( sndExt[1] == 'm') + { + precache_generic( szSound ); // mp3 + } + else + { + replace( szSound, 127, "sound/", "" ); // wav, strip the leading sound/ we added for our file_exists check + precache_sound( szSound ); + } + } + } + line++ + } + fclose( fp ); // Close file + return line; +} +#endif + +/* Commands menu */ + +public actionCmdMenu(id, key) +{ + switch (key) + { + case 8: displayCmdMenu(id, ++g_menuPosition[id]) + case 9: displayCmdMenu(id, --g_menuPosition[id]) + default: + { + new option = g_menuSelect[id][g_menuPosition[id] * 8 + key] + new flags = g_cmdMisc[option][1] + + if (flags & 1) + server_cmd("%s", g_cmdCmd[option]) + else if (flags & 2) + client_cmd(id, "%s", g_cmdCmd[option]) + else if (flags & 4) + client_cmd(0, "%s", g_cmdCmd[option]) + + if (flags & 8) + displayCmdMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displayCmdMenu(id, pos) +{ + if (pos < 0) + return + + new menuBody[512] + new b = 0 + new start = pos * 8 + + if (start >= g_menuSelectNum[id]) + start = pos = g_menuPosition[id] = 0 + + new limit = (g_menuSelectNum[id] / 8 + ((g_menuSelectNum[id] % 8))) + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, g_cmdMenuName[g_menuLayer[id]], pos + 1, (limit == 0) ? 1 : limit) + new end = start + 8 + new keys = MENU_KEY_0 + + if (end > g_menuSelectNum[id]) + end = g_menuSelectNum[id] + + for (new a = start; a < end; ++a) + { + if (g_cmdCmd[g_menuSelect[id][a]][0] == '-') + { + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%s^n\w", g_cmdName[g_menuSelect[id][a]]) + else + len += format(menuBody[len], 511-len, "%s^n", g_cmdName[g_menuSelect[id][a]]) + ++b + } else { + keys |= (1<<b) + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, g_cmdName[g_menuSelect[id][a]]) + } + } + + if (end != g_menuSelectNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + new MenuName[64] + + format(MenuName, 63, "%L", "en", g_cmdMenuName[g_menuLayer[id]]) + show_menu(id, keys, menuBody, -1, MenuName) +} + +public cmdCmdMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + new szCmd[32] + read_argv(0, szCmd, 31) + new lvl = 0 + + while (lvl < MAX_CMDS_LAYERS) + { + if (equal(g_cmdMenuCmd[lvl], szCmd)) + break + ++lvl + } + + g_menuLayer[id] = lvl + g_menuSelectNum[id] = 0 + + new a = lvl * MAX_CMDS + new d, c = 0 + + while (c < g_cmdNum[lvl]) + { + d = a + c + + if (access(id, g_cmdMisc[d][0])) + { + g_menuSelect[id][g_menuSelectNum[id]++] = d + } + + ++c + } + + displayCmdMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +loadCmdSettings(szFilename[], level) +{ + if (!file_exists(szFilename)) + return 0 + + new text[256], szFlags[32], szAccess[32] + new a, pos = 0, c, d = level * MAX_CMDS + + while (g_cmdNum[level] < MAX_CMDS && read_file(szFilename, pos++, text, 255, a)) + { + if (text[0] == ';') continue + c = d + g_cmdNum[level] + + if (parse(text, g_cmdName[c], 31, g_cmdCmd[c], 63, szFlags, 31, szAccess, 31) > 3) + { + while (replace(g_cmdCmd[c], 63, "\'", "^"")) + { + // do nothing + } + + g_cmdMisc[c][1] = read_flags(szFlags) + g_cmdMisc[c][0] = read_flags(szAccess) + g_cmdNum[level]++ + } + } + + return 1 +} + +/* Cvars menu */ + +public actionCvarMenu(id, key) +{ + switch (key) + { + case 8: displayCvarMenu(id, ++g_menuPosition[id]) + case 9: displayCvarMenu(id, --g_menuPosition[id]) + default: + { + new option = g_menuSelect[id][g_menuPosition[id] * 8 + key] + new szValue[32] + + get_cvar_string(g_cvarNames[option], szValue, 31) + + new end = g_cvarMisc[option][2] + new start = g_cvarMisc[option][1] + + for (new i = start; ; ++i) + { + if (i < end) + { + if (equal(szValue, g_cvarCmd[i])) + { + if (++i >= end) + { + i = start + } + + set_cvar_string(g_cvarNames[option], g_cvarCmd[i]) + break + } + } else { + set_cvar_string(g_cvarNames[option], g_cvarCmd[start]) + break + } + } + displayCvarMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displayCvarMenu(id, pos) +{ + if (pos < 0) + return + + new menuBody[512] + new b = 0 + new start = pos * 8 + + if (start >= g_menuSelectNum[id]) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\yCvars Menu\R%d/%d^n\w^n" : "Cvars Menu %d/%d^n^n", pos + 1, (g_menuSelectNum[id] / 8 + ((g_menuSelectNum[id] % 8) ? 1 : 0))) + + new end = start + 8 + new keys = MENU_KEY_0 + new szValue[64] + + if (end > g_menuSelectNum[id]) + end = g_menuSelectNum[id] + + for (new a = start; a < end; ++a) + { + get_cvar_string(g_cvarNames[g_menuSelect[id][a]], szValue, 31) + keys |= (1<<b) + ++b + + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "%d. %s\R%s^n\w", b, g_cvarNames[g_menuSelect[id][a]], szValue) + else + len += format(menuBody[len], 511-len, "%d. %s %s^n", b, g_cvarNames[g_menuSelect[id][a]], szValue) + } + + if (end != g_menuSelectNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menuBody) +} + +public cmdCvarMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + g_menuSelectNum[id] = 0 + + for (new a = 0; a < g_cvarNum; ++a) + if (access(id, g_cvarMisc[a][0])) + g_menuSelect[id][g_menuSelectNum[id]++] = a + + displayCvarMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +loadCvarSettings(szFilename[]) +{ + if (!file_exists(szFilename)) + return 0 + + new text[256], szValues[12][32] + new inum, a, pos = 0 + new cvar_values = MAX_CVARS * 5 + + // a b c d + while (g_cvarNum < MAX_CVARS && read_file(szFilename, pos++, text, 255, a)) + { + if (text[0] == ';') continue + + inum = parse(text, g_cvarNames[g_cvarNum], 31, + szValues[0], 31, szValues[1], 31, szValues[2], 31, + szValues[3], 31, szValues[4], 31, szValues[5], 31, + szValues[6], 31, szValues[7], 31, szValues[8], 31, + szValues[9], 31, szValues[10], 31, szValues[11], 31) + + inum -= 2 + if (inum < 2) continue + g_cvarMisc[g_cvarNum][1] = g_cvarCmdNum + + for (a = 0; a < inum && g_cvarCmdNum < cvar_values; ++a) + { + while (replace(szValues[a], 31, "\'", "^"")) + { + // do nothing + } + + copy(g_cvarCmd[g_cvarCmdNum], 31, szValues[a]) + g_cvarCmdNum++ + } + + g_cvarMisc[g_cvarNum][2] = g_cvarCmdNum + g_cvarMisc[g_cvarNum][0] = read_flags(szValues[inum]) + g_cvarNum++ + } + + return 1 +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/compile.sh b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/compile.sh new file mode 100644 index 0000000..02dc4c6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/compile.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# AMX Mod X +# +# by the AMX Mod X Development Team +# originally developed by OLO +# +# This file is part of AMX Mod X. + +# new code contributed by \malex\ + +test -e compiled || mkdir compiled +rm -f temp.txt + +# Choose compiler binary +if test `uname` = "Darwin"; then + pc=./amxxpc_osx +else + pc=./amxxpc +fi + +for sourcefile in *.sma +do + amxxfile="`echo $sourcefile | sed -e 's/\.sma$/.amxx/'`" + echo -n "Compiling $sourcefile ..." + $pc $sourcefile -ocompiled/$amxxfile >> temp.txt + echo "done" +done + +less temp.txt +rm temp.txt diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/csstats.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/csstats.sma new file mode 100644 index 0000000..d497448 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/csstats.sma @@ -0,0 +1,58 @@ +/* AMX Mod X +* Rank Calculation +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +/* File location: $moddir/addons/amxmodx/data/csstats.amxx */ + +#include <amxmodx> + +/* Function calculates position in rank. +* +* Stats: +* 0 - kills +* 1 - deaths +* 2 - headshots +* 3 - teamkills +* 4 - shots +* 5 - hits +* 6 - damage +* 7 - defusions +* 8 - defused +* 9 - plants +* 10 - explosions +* +* Returning cellmin as value in get_score function +* makes that rank won't be saved. */ + +public get_score(stats[11], body[8]) + return stats[0] - stats[1] - stats[3] // kills - deaths - teamkills diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/imessage.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/imessage.sma new file mode 100644 index 0000000..afe495c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/imessage.sma @@ -0,0 +1,143 @@ +/* AMX Mod X +* Info. Messages Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +#define X_POS -1.0 +#define Y_POS 0.20 +#define HOLD_TIME 12.0 + +new Array:g_Values +new Array:g_Messages +new g_MessagesNum +new g_Current + +#define charsof(%1) (sizeof(%1)-1) + +new amx_freq_imessage; + +public plugin_init() +{ + g_Messages=ArrayCreate(384); + g_Values=ArrayCreate(3); + register_plugin("Info. Messages", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("imessage.txt") + register_dictionary("common.txt") + register_srvcmd("amx_imessage", "setMessage") + amx_freq_imessage=register_cvar("amx_freq_imessage", "10") + + new lastinfo[8] + get_localinfo("lastinfomsg", lastinfo, 7) + g_Current = str_to_num(lastinfo) + set_localinfo("lastinfomsg", "") +} + +public infoMessage() +{ + if (g_Current >= g_MessagesNum) + g_Current = 0 + + // No messages, just get out of here + if (g_MessagesNum==0) + { + return; + } + + new values[3]; + new Message[384]; + + ArrayGetString(g_Messages, g_Current, Message, charsof(Message)); + ArrayGetArray(g_Values, g_Current, values); + + new hostname[64]; + + get_cvar_string("hostname", hostname, 63); + replace(Message, 380, "%hostname%", hostname); + + set_hudmessage(values[0], values[1], values[2], X_POS, Y_POS, 0, 0.5, HOLD_TIME, 2.0, 2.0, -1); + + show_hudmessage(0, "%s", Message); + + client_print(0, print_console, "%s", Message); + ++g_Current; + + new Float:freq_im = get_pcvar_float(amx_freq_imessage); + + if (freq_im > 0.0) + set_task(freq_im, "infoMessage", 12345); +} + +public setMessage() +{ + + new Message[384]; + + remove_task(12345) + read_argv(1, Message, 380) + + while (replace(Message, 380, "\n", "^n")) {} + + new mycol[12] + new vals[3]; + + read_argv(2, mycol, 11) // RRRGGGBBB + vals[2] = str_to_num(mycol[6]) + + mycol[6] = 0 + vals[1] = str_to_num(mycol[3]) + + mycol[3] = 0 + vals[0] = str_to_num(mycol[0]) + + g_MessagesNum++ + + new Float:freq_im = get_pcvar_float(amx_freq_imessage) + + ArrayPushString(g_Messages, Message); + ArrayPushArray(g_Values, vals); + + if (freq_im > 0.0) + set_task(freq_im, "infoMessage", 12345) + + return PLUGIN_HANDLED +} + +public plugin_end() +{ + new lastinfo[8] + + num_to_str(g_Current, lastinfo, 7) + set_localinfo("lastinfomsg", lastinfo) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxconst.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxconst.inc new file mode 100644 index 0000000..ede4d88 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxconst.inc @@ -0,0 +1,302 @@ +/* AMX Mod X constants +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _amxconst_included + #endinput +#endif +#define _amxconst_included + +#include <svn_version> + +#define M_PI 3.1415926535 + +#define ADMIN_ALL 0 /* everyone */ +#define ADMIN_IMMUNITY (1<<0) /* flag "a" */ +#define ADMIN_RESERVATION (1<<1) /* flag "b" */ +#define ADMIN_KICK (1<<2) /* flag "c" */ +#define ADMIN_BAN (1<<3) /* flag "d" */ +#define ADMIN_SLAY (1<<4) /* flag "e" */ +#define ADMIN_MAP (1<<5) /* flag "f" */ +#define ADMIN_CVAR (1<<6) /* flag "g" */ +#define ADMIN_CFG (1<<7) /* flag "h" */ +#define ADMIN_CHAT (1<<8) /* flag "i" */ +#define ADMIN_VOTE (1<<9) /* flag "j" */ +#define ADMIN_PASSWORD (1<<10) /* flag "k" */ +#define ADMIN_RCON (1<<11) /* flag "l" */ +#define ADMIN_LEVEL_A (1<<12) /* flag "m" */ +#define ADMIN_LEVEL_B (1<<13) /* flag "n" */ +#define ADMIN_LEVEL_C (1<<14) /* flag "o" */ +#define ADMIN_LEVEL_D (1<<15) /* flag "p" */ +#define ADMIN_LEVEL_E (1<<16) /* flag "q" */ +#define ADMIN_LEVEL_F (1<<17) /* flag "r" */ +#define ADMIN_LEVEL_G (1<<18) /* flag "s" */ +#define ADMIN_LEVEL_H (1<<19) /* flag "t" */ +#define ADMIN_MENU (1<<20) /* flag "u" */ +#define ADMIN_ADMIN (1<<24) /* flag "y" */ +#define ADMIN_USER (1<<25) /* flag "z" */ + +#define FLAG_KICK (1<<0) /* flag "a" */ +#define FLAG_TAG (1<<1) /* flag "b" */ +#define FLAG_AUTHID (1<<2) /* flag "c" */ +#define FLAG_IP (1<<3) /* flag "d" */ +#define FLAG_NOPASS (1<<4) /* flag "e" */ +#define FLAG_CASE_SENSITIVE (1<<10) /* flag "k" */ + +#define PLUGIN_CONTINUE 0 /* Results returned by public functions */ +#define PLUGIN_HANDLED 1 /* stop other plugins */ +#define PLUGIN_HANDLED_MAIN 2 /* to use in client_command(), continue all plugins but stop the command */ + +/* Flags for register_cvar() */ +#define FCVAR_ARCHIVE 1 /* set to cause it to be saved to vars.rc */ +#define FCVAR_USERINFO 2 /* changes the client's info string */ +#define FCVAR_SERVER 4 /* notifies players when changed */ +#define FCVAR_EXTDLL 8 /* defined by external DLL */ +#define FCVAR_CLIENTDLL 16 /* defined by the client dll */ +#define FCVAR_PROTECTED 32 /* It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value */ +#define FCVAR_SPONLY 64 /* This cvar cannot be changed by clients connected to a multiplayer server. */ +#define FCVAR_PRINTABLEONLY 128 /* This cvar's string cannot contain unprintable characters ( e.g., used for player name etc ). */ +#define FCVAR_UNLOGGED 256 /* If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log */ + + +/* Id of weapons in CS */ +#define CSW_P228 1 +#define CSW_SCOUT 3 +#define CSW_HEGRENADE 4 +#define CSW_XM1014 5 +#define CSW_C4 6 +#define CSW_MAC10 7 +#define CSW_AUG 8 +#define CSW_SMOKEGRENADE 9 +#define CSW_ELITE 10 +#define CSW_FIVESEVEN 11 +#define CSW_UMP45 12 +#define CSW_SG550 13 +#define CSW_GALI 14 +#define CSW_GALIL 14 +#define CSW_FAMAS 15 +#define CSW_USP 16 +#define CSW_GLOCK18 17 +#define CSW_AWP 18 +#define CSW_MP5NAVY 19 +#define CSW_M249 20 +#define CSW_M3 21 +#define CSW_M4A1 22 +#define CSW_TMP 23 +#define CSW_G3SG1 24 +#define CSW_FLASHBANG 25 +#define CSW_DEAGLE 26 +#define CSW_SG552 27 +#define CSW_AK47 28 +#define CSW_KNIFE 29 +#define CSW_P90 30 +#define CSW_VEST 31 +#define CSW_VESTHELM 32 + +#define HIW_BERETTA 1 +#define HIW_SPAS12 2 +#define HIW_M4A1 3 +#define HIW_MP5A4 4 +#define HIW_MP5SD5 5 +#define HIW_AK47 6 +#define HIW_AKS74U 7 +#define HIW_GLOCK 8 +#define HIW_M11 9 +#define HIW_M11SD 10 +#define HIW_PSG1 11 +#define HIW_ZASTAVA 12 +#define HIW_M16A2 13 +#define HIW_REMINGTON 14 +#define HIW_NATOGREN 15 +#define HIW_TANGOGREN 16 +#define HIW_FLASHBANG 17 + +/* Parts of body for hits */ +#define HIT_GENERIC 0 /* none */ +#define HIT_HEAD 1 +#define HIT_CHEST 2 +#define HIT_STOMACH 3 +#define HIT_LEFTARM 4 +#define HIT_RIGHTARM 5 +#define HIT_LEFTLEG 6 +#define HIT_RIGHTLEG 7 + +/* Constants for emit_sound() */ +/* Channels */ +#define CHAN_AUTO 0 +#define CHAN_WEAPON 1 +#define CHAN_VOICE 2 +#define CHAN_ITEM 3 +#define CHAN_BODY 4 +#define CHAN_STREAM 5 /* allocate stream channel from the static or dynamic area */ +#define CHAN_STATIC 6 /* allocate channel from the static area */ +#define CHAN_NETWORKVOICE_BASE 7 /* voice data coming across the network */ +#define CHAN_NETWORKVOICE_END 500 /* network voice data reserves slots (CHAN_NETWORKVOICE_BASE through CHAN_NETWORKVOICE_END). */ + +/* Attenuation values */ +#define ATTN_NONE 0.00 +#define ATTN_NORM 0.80 +#define ATTN_IDLE 2.00 +#define ATTN_STATIC 1.25 + +/* Pitch values */ +#define PITCH_NORM 100 /* non-pitch shifted */ +#define PITCH_LOW 95 /* other values are possible - 0-255, where 255 is very high */ +#define PITCH_HIGH 120 + +/* Volume values */ +#define VOL_NORM 1.0 + +/* Menu keys */ +#define MENU_KEY_1 (1<<0) +#define MENU_KEY_2 (1<<1) +#define MENU_KEY_3 (1<<2) +#define MENU_KEY_4 (1<<3) +#define MENU_KEY_5 (1<<4) +#define MENU_KEY_6 (1<<5) +#define MENU_KEY_7 (1<<6) +#define MENU_KEY_8 (1<<7) +#define MENU_KEY_9 (1<<8) +#define MENU_KEY_0 (1<<9) + +#define LANG_SERVER 0 +#define LANG_PLAYER -1 + +/* Destination types for client_print() */ +enum { + print_notify = 1, + print_console, + print_chat, + print_center, +}; + +/* Destination types for engclient_print() */ +enum { + engprint_console = 0, + engprint_center, + engprint_chat, +}; + +/* Render for set_user_rendering() */ +enum { + kRenderNormal = 0, /* src */ + kRenderTransColor, /* c*a+dest*(1-a) */ + kRenderTransTexture, /* src*a+dest*(1-a) */ + kRenderGlow, /* src*a+dest -- No Z buffer checks */ + kRenderTransAlpha, /* src*srca+dest*(1-srca) */ + kRenderTransAdd, /* src*a+dest */ +}; + +/* Fx for set_user_rendering() */ +enum { + kRenderFxNone = 0, + kRenderFxPulseSlow, + kRenderFxPulseFast, + kRenderFxPulseSlowWide, + kRenderFxPulseFastWide, + kRenderFxFadeSlow, + kRenderFxFadeFast, + kRenderFxSolidSlow, + kRenderFxSolidFast, + kRenderFxStrobeSlow, + kRenderFxStrobeFast, + kRenderFxStrobeFaster, + kRenderFxFlickerSlow, + kRenderFxFlickerFast, + kRenderFxNoDissipation, + kRenderFxDistort, /* Distort/scale/translate flicker */ + kRenderFxHologram, /* kRenderFxDistort + distance fade */ + kRenderFxDeadPlayer, /* kRenderAmt is the player index */ + kRenderFxExplode, /* Scale up really big! */ + kRenderFxGlowShell, /* Glowing Shell */ + kRenderFxClampMinScale, /* Keep this sprite from getting very small (SPRITES only!) */ +}; + +/* Type for force_unmodified() */ +enum { + force_exactfile = 0, /* File on client must exactly match server's file */ + force_model_samebounds, /* For model files only, the geometry must fit in the same bbox */ + force_model_specifybounds, /* For model files only, the geometry must fit in the specified bbox */ +}; + +/* Status for get_module() */ +enum { + module_none = 0, + module_query, + module_badload, + module_loaded, + module_noinfo, + module_noquery, + module_noattach, + module_old, +}; + +#define AMX_FLAG_DEBUG 0x02 /* symbolic info. available */ +#define AMX_FLAG_COMPACT 0x04 /* compact encoding */ +#define AMX_FLAG_BYTEOPC 0x08 /* opcode is a byte (not a cell) */ +#define AMX_FLAG_NOCHECKS 0x10 /* no array bounds checking; no STMT opcode */ +#define AMX_FLAG_OLDFILE 0x20 /* Old AMX Mod plugin */ +#define AMX_FLAG_NTVREG 0x1000 /* all native functions are registered */ +#define AMX_FLAG_JITC 0x2000 /* abstract machine is JIT compiled */ +#define AMX_FLAG_BROWSE 0x4000 /* busy browsing */ +#define AMX_FLAG_RELOC 0x8000 /* jump/call addresses relocated */ + +#define INVALID_PLUGIN_ID -1 + +#define MENU_EXIT -3 +#define MENU_BACK -2 +#define MENU_MORE -1 +#define ITEM_IGNORE 0 +#define ITEM_ENABLED 1 +#define ITEM_DISABLED 2 + +#define AMX_ERR_NATIVE 10 +#define AMX_ERR_MEMACCESS 5 +#define AMX_ERR_NONE 0 +#define AMX_ERR_BOUNDS 4 +#define AMX_ERR_STACKERR 3 +#define AMX_ERR_STACKLOW 7 +#define AMX_ERR_HEAPLOW 8 +#define AMX_ERR_DIVIDE 11 +#define AMX_ERR_NOTFOUND 19 +#define AMX_ERR_PARAMS 25 +#define AMX_ERR_GENERAL 27 + +#define INVALID_HANDLE -1 + +#define ET_IGNORE 0 //ignore return val +#define ET_STOP 1 //stop on PLUGIN_HANDLED +#define ET_STOP2 2 //same, except return biggest +#define ET_CONTINUE 3 //no stop, return biggest + +#define FP_CELL 0 +#define FP_FLOAT 1 +#define FP_STRING 2 +#define FP_ARRAY 4 + +#define FORWARD_ONLY_OLD 1 +#define FORWARD_ONLY_NEW 2 +#define FORWARD_ALL 3 + +#define SND_SPAWNING (1<<8) // we're spawing, used in some cases for ambients +#define SND_STOP (1<<5) // stop sound +#define SND_CHANGE_VOL (1<<6) // change sound vol +#define SND_CHANGE_PITCH (1<<7) // change sound pitch + +enum LibType +{ + LibType_Library, + LibType_Class +}; + +enum AdminProp +{ + AdminProp_Auth = 0, + AdminProp_Password, + AdminProp_Access, + AdminProp_Flags +}; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmisc.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmisc.inc new file mode 100644 index 0000000..3f307a2 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmisc.inc @@ -0,0 +1,622 @@ +/* AMX Mod X misc. +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _amxmisc_included + #endinput +#endif +#define _amxmisc_included + +#if !defined _amxmodx_included + #if defined AMXMOD_BCOMPAT + #include <amxmod> + #else + #include <amxmodx> + #endif +#endif + +#if defined AMXMOD_BCOMPAT +#if defined _translator_included +#define SIMPLE_T(%1) _T(%1) +#else +#define SIMPLE_T(%1) %1 +#endif +#endif + +stock is_user_admin(id) +{ + new __flags=get_user_flags(id); + return (__flags>0 && !(__flags&ADMIN_USER)); +} + +stock cmd_access(id, level, cid, num, bool:accesssilent = false) +{ + new has_access = 0; + if ( id==(is_dedicated_server()?0:1) ) + { + has_access = 1; + } + else if ( level==ADMIN_ADMIN ) + { + if ( is_user_admin(id) ) + { + has_access = 1; + } + } + else if ( get_user_flags(id) & level ) + { + has_access = 1; + } + else if (level == ADMIN_ALL) + { + has_access = 1; + } + + if ( has_access==0 ) + { + if (!accesssilent) + { +#if defined AMXMOD_BCOMPAT + console_print(id, SIMPLE_T("You have no access to that command.")); +#else + console_print(id,"%L",id,"NO_ACC_COM"); +#endif + } + return 0; + } + if (read_argc() < num) + { + new hcmd[32], hinfo[128], hflag; + get_concmd(cid,hcmd,31,hflag,hinfo,127,level); +#if defined AMXMOD_BCOMPAT + console_print(id, SIMPLE_T("Usage: %s %s"), hcmd, SIMPLE_T(hinfo)); +#else + console_print(id,"%L: %s %s",id,"USAGE",hcmd,hinfo); +#endif + return 0; + } + + return 1; +} + +stock access(id,level) +{ + if (level==ADMIN_ADMIN) + { + return is_user_admin(id); + } + else if (level==ADMIN_ALL) + { + return 1; + } + + return (get_user_flags(id) & level); +} + +/* Flags: +* 1 - obey immunity +* 2 - allow yourself +* 4 - must be alive +* 8 - can't be bot */ +#define CMDTARGET_OBEY_IMMUNITY (1<<0) +#define CMDTARGET_ALLOW_SELF (1<<1) +#define CMDTARGET_ONLY_ALIVE (1<<2) +#define CMDTARGET_NO_BOTS (1<<3) +stock cmd_target(id,const arg[],flags = CMDTARGET_OBEY_IMMUNITY) +{ + new player = find_player("bl",arg); + if (player) + { + if ( player != find_player("blj",arg) ) + { +#if defined AMXMOD_BCOMPAT + console_print(id, SIMPLE_T("There are more clients matching to your argument")); +#else + console_print(id,"%L",id,"MORE_CL_MATCHT"); +#endif + return 0; + } + } + else if ( ( player = find_player("c",arg) )==0 && arg[0]=='#' && arg[1] ) + { + player = find_player("k",str_to_num(arg[1])); + } + if (!player) + { +#if defined AMXMOD_BCOMPAT + console_print(id, SIMPLE_T("Client with that name or userid not found")); +#else + console_print(id,"%L",id,"CL_NOT_FOUND"); +#endif + return 0; + } + if (flags & CMDTARGET_OBEY_IMMUNITY) + { + if ((get_user_flags(player) & ADMIN_IMMUNITY) && + ((flags & CMDTARGET_ALLOW_SELF) ? (id != player) : true) ) + { + new imname[32]; + get_user_name(player,imname,31); +#if defined AMXMOD_BCOMPAT + console_print(id, SIMPLE_T("Client ^"%s^" has immunity"), imname); +#else + console_print(id,"%L",id,"CLIENT_IMM",imname); +#endif + return 0; + } + } + if (flags & CMDTARGET_ONLY_ALIVE) + { + if (!is_user_alive(player)) + { + new imname[32]; + get_user_name(player,imname,31); +#if defined AMXMOD_BCOMPAT + console_print(id, SIMPLE_T("That action can't be performed on dead client ^"%s^""), imname); +#else + console_print(id,"%L",id,"CANT_PERF_DEAD",imname); +#endif + return 0; + } + } + if (flags & CMDTARGET_NO_BOTS) + { + if (is_user_bot(player)) + { + new imname[32]; + get_user_name(player,imname,31); +#if defined AMXMOD_BCOMPAT + console_print(id, SIMPLE_T("That action can't be performed on bot ^"%s^""), imname); +#else + console_print(id,"%L",id,"CANT_PERF_BOT",imname); +#endif + return 0; + } + } + return player; +} + +/** + * Standard method to show activity to clients connected to the server. + * This depends on the amx_show_activity cvar. See documentation for more details. + * + * @param id The user id of the person doing the action. + * @param name The name of the person doing the action. + * @param fmt The format string to display. Do not put the "ADMIN:" prefix in this. + */ +stock show_activity( id, const name[], const fmt[], any:... ) +{ + static __amx_show_activity; + if (__amx_show_activity == 0) + { + __amx_show_activity = get_cvar_pointer("amx_show_activity"); + + // if still not found, then register the cvar as a dummy + if (__amx_show_activity == 0) + { + __amx_show_activity = register_cvar("amx_show_activity", "2"); + } + } +#if defined AMXMOD_BCOMPAT + new buffer[128]; + format_args( buffer , 127 , 2 ); +#else + new prefix[10]; + if (is_user_admin(id)) + { + copy(prefix, charsmax(prefix), "ADMIN"); + } + else + { + copy(prefix, charsmax(prefix), "PLAYER"); + } + new buffer[512]; + vformat(buffer, charsmax(buffer), fmt, 4); +#endif + switch(get_pcvar_num(__amx_show_activity)) + { +#if defined AMXMOD_BCOMPAT + case 2: // show name to all + { + client_print(0, print_chat, "%s %s: %s", is_user_admin(id) ? SIMPLE_T("ADMIN") : SIMPLE_T("PLAYER"), name, buffer); + } + case 1: // hide name to all + { + client_print(0, print_chat, "%s: %s", is_user_admin(id) ? SIMPLE_T("ADMIN") : SIMPLE_T("PLAYER"), buffer); + } +#else + case 5: // hide name only to admins, show nothing to normal users + { + new __maxclients=get_maxplayers(); + + + for (new i=1; i<=__maxclients; i++) + { + if (is_user_connected(i)) + { + if (is_user_admin(i)) + { + client_print(i, print_chat, "%L: %s", i, prefix, buffer); + } + } + } + } + case 4: // show name only to admins, show nothing to normal users + { + new __maxclients=get_maxplayers(); + + for (new i=1; i<=__maxclients; i++) + { + if (is_user_connected(i)) + { + if (is_user_admin(i)) + { + client_print(i, print_chat, "%L %s: %s", i, prefix, name, buffer); + } + } + } + } + case 3: // show name only to admins, hide name from normal users + { + new __maxclients=get_maxplayers(); + + for (new i=1; i<=__maxclients; i++) + { + if (is_user_connected(i)) + { + if (is_user_admin(i)) + { + client_print(i, print_chat, "%L %s: %s", i, prefix, name, buffer); + } + else + { + client_print(i, print_chat, "%L: %s", i, prefix, buffer); + } + } + } + } + case 2: // show name to all + { + client_print(0, print_chat, "%L %s: %s", LANG_PLAYER, prefix , name , buffer ); + } + case 1: // hide name to all + { + client_print(0, print_chat, "%L: %s", LANG_PLAYER, prefix, buffer ); + } +#endif + } +} + +/** + * Standard method to show activity to one single client. + * This is useful for messages that get pieced together by many language keys. + * This depends on the amx_show_activity cvar. See documentation for more details. + * + * @param idtarget The user id of the person to display to. 0 is invalid. + * @param idadmin The user id of the person doing the action. + * @param name The name of the person doing the action. + * @param fmt The format string to display. Do not put the "ADMIN:" prefix in this. + */ +stock show_activity_id(idtarget, idadmin, const name[], const fmt[], any:...) +{ + if (idtarget == 0 || + !is_user_connected(idtarget) ) + { + return; + } + + static __amx_show_activity; + if (__amx_show_activity == 0) + { + __amx_show_activity = get_cvar_pointer("amx_show_activity"); + + // if still not found, then register the cvar as a dummy + if (__amx_show_activity == 0) + { + __amx_show_activity = register_cvar("amx_show_activity", "2"); + } + } + + static prefix[10]; + if (is_user_admin(idadmin)) + { + copy(prefix, charsmax(prefix), "ADMIN"); + } + else + { + copy(prefix, charsmax(prefix), "PLAYER"); + } + + static buffer[512]; + vformat(buffer, charsmax(buffer), fmt, 5); + + + switch(get_pcvar_num(__amx_show_activity)) + { + case 5: // hide name only to admins, show nothing to normal users + { + if ( is_user_admin(idtarget) ) + { + client_print(idtarget, print_chat, "%L: %s", idtarget, prefix, buffer); + } + } + case 4: // show name only to admins, show nothing to normal users + { + if ( is_user_admin(idtarget) ) + { + client_print(idtarget, print_chat, "%L %s: %s", idtarget, prefix, name, buffer); + } + } + case 3: // show name only to admins, hide name from normal users + { + if ( is_user_admin(idtarget) ) + { + client_print(idtarget, print_chat, "%L %s: %s", idtarget, prefix, name, buffer); + } + else + { + client_print(idtarget, print_chat, "%L: %s", idtarget, prefix, buffer); + } + } + case 2: // show name to all + { + client_print(idtarget, print_chat, "%L %s: %s", idtarget, prefix, name, buffer); + } + case 1: // hide name to all + { + client_print(idtarget, print_chat, "%L: %s", idtarget, prefix, buffer); + } + } +} +/** + * Standard method to show activity to one single client with normal language keys. + * These keys need to be in the format of standard AMXX keys: + * eg: ADMIN_KICK_1 = ADMIN: kick %s + * ADMIN_KICK_2 = ADMIN %s: kick %s + * This depends on the amx_show_activity cvar. See documentation for more details. + * + * @param KeyWithoutName The language key that does not have the name field. + * @param KeyWithName The language key that does have the name field. + * @param __AdminName The name of the person doing the action. + * @extra Pass any extra format arguments for the language key in the variable arguments list. + */ +stock show_activity_key(const KeyWithoutName[], const KeyWithName[], const ___AdminName[], any:...) +{ +// The variable gets used via vformat, but the compiler doesn't know that, so it still cries. +#pragma unused ___AdminName + static __amx_show_activity; + if (__amx_show_activity == 0) + { + __amx_show_activity = get_cvar_pointer("amx_show_activity"); + + // if still not found, then register the cvar as a dummy + if (__amx_show_activity == 0) + { + __amx_show_activity = register_cvar("amx_show_activity", "2"); + } + } + + new buffer[512]; + new keyfmt[256]; + new i; + + new __maxclients=get_maxplayers(); + + switch( get_pcvar_num(__amx_show_activity) ) + { + case 5: // hide name to admins, display nothing to normal players + while (i++ < __maxclients) + { + if ( is_user_connected(i) ) + { + if ( is_user_admin(i) ) + { + LookupLangKey(keyfmt, charsmax(keyfmt), KeyWithoutName, i); + + // skip the "adminname" argument if not showing name + vformat(buffer, charsmax(buffer), keyfmt, 4); + client_print(i, print_chat, "%s", buffer); + } + } + } + case 4: // show name only to admins, display nothing to normal players + while (i++ < __maxclients) + { + if ( is_user_connected(i) ) + { + if ( is_user_admin(i) ) + { + LookupLangKey(keyfmt, charsmax(keyfmt), KeyWithName, i); + vformat(buffer, charsmax(buffer), keyfmt, 3); + client_print(i, print_chat, "%s", buffer); + } + } + } + case 3: // show name only to admins, hide name from normal users + while (i++ < __maxclients) + { + if ( is_user_connected(i) ) + { + if ( is_user_admin(i) ) + { + LookupLangKey(keyfmt, charsmax(keyfmt), KeyWithName, i); + vformat(buffer, charsmax(buffer), keyfmt, 3); + } + else + { + LookupLangKey(keyfmt, charsmax(keyfmt), KeyWithoutName, i); + + // skip the "adminname" argument if not showing name + vformat(buffer, charsmax(buffer), keyfmt, 4); + } + client_print(i, print_chat, "%s", buffer); + } + } + case 2: // show name to all users + while (i++ < __maxclients) + { + if ( is_user_connected(i) ) + { + LookupLangKey(keyfmt, charsmax(keyfmt), KeyWithName, i); + vformat(buffer, charsmax(buffer), keyfmt, 3); + client_print(i, print_chat, "%s", buffer); + } + } + case 1: // hide name from all users + while (i++ < __maxclients) + { + if ( is_user_connected(i) ) + { + LookupLangKey(keyfmt, charsmax(keyfmt), KeyWithoutName, i); + + // skip the "adminname" argument if not showing name + vformat(buffer, charsmax(buffer), keyfmt, 4); + client_print(i, print_chat, "%s", buffer); + } + } + + } +} + +stock colored_menus() +{ + new mod_name[32]; + get_modname(mod_name,31); + + return ( equal(mod_name,"cstrike") || equal(mod_name,"czero") || equal(mod_name,"dod") ); +} + +stock cstrike_running() +{ + new mod_name[32]; + get_modname(mod_name,31); + + return ( equal(mod_name,"cstrike") || equal(mod_name,"czero") || equal(mod_name,"csv15") || equal(mod_name,"cs13") ); +} + +stock is_running(const mod[]) +{ + new mod_name[32]; + get_modname(mod_name,31); + + return equal(mod_name,mod); +} + +stock get_basedir(name[],len) +{ + return get_localinfo("amxx_basedir",name,len); +} + +stock get_configsdir(name[],len) +{ + return get_localinfo("amxx_configsdir",name,len); +} + +stock get_datadir(name[],len) +{ + return get_localinfo("amxx_datadir",name,len); +} + +stock register_menu(const title[],keys,const function[],outside=0) +{ + register_menucmd(register_menuid(title,outside),keys,function); +} + +/* Backwards Compatibility +* don't use it! */ +stock get_customdir(name[],len) +{ + return get_localinfo("amxx_configsdir",name,len); +} + +/* Add a menu item to Menus Front-End plugin ("amxmodmenu"): +* MENU_TEXT: Text that will be shown for this item in menu +* MENU_CMD: Command that should be executed to start menu +* MENU_ACCESS: Access required for menu +* MENU_PLUGIN: The exact case-insensitive name of plugin holding the menu command +*/ +stock AddMenuItem(const MENU_TEXT[], const MENU_CMD[], const MENU_ACCESS, const MENU_PLUGIN[]) +{ + AddMenuItem_call(MENU_TEXT, MENU_CMD, MENU_ACCESS, MENU_PLUGIN, false); +} +/* Just like above, but add menu item to "amx_menu", that should also be accessible by non-admins. +*/ +stock AddClientMenuItem(const MENU_TEXT[], const MENU_CMD[], const MENU_ACCESS, const MENU_PLUGIN[]) +{ + AddMenuItem_call(MENU_TEXT, MENU_CMD, MENU_ACCESS, MENU_PLUGIN, true); +} + +// Internal function used by above stocks. +stock AddMenuItem_call(const MENU_TEXT[], const MENU_CMD[], const MENU_ACCESS, const MENU_PLUGIN[], const bool:ADD_TO_CLIENT_MENU) +{ + new pluginid = is_plugin_loaded("Menus Front-End"); + if (pluginid == -1) { + log_amx("Can't add menu item ^"%s^" from plugin ^"%s^" to menu set because the Menus Front-End plugin itself is not loaded!", MENU_TEXT, MENU_PLUGIN); + return; // Menus Front-End doesn't exist, return. + } + + new filename[64], b[1]; + get_plugin(pluginid, filename, 63, b, 0, b, 0, b, 0, b, 0); + + new status = callfunc_begin(ADD_TO_CLIENT_MENU ? "AddClientMenu" : "AddMenu", filename); + new bool:failed = true; + switch (status) + { + case 1: failed = false; + case 0: log_amx("Run time error! (AddMenuItem_call failed)"); + case -2: log_amx("Function not found! (AddMenuItem_call failed)"); + case -1: log_amx("Plugin not found! (AddMenuItem_call failed)"); + } + if (failed) + { + return; + } + // Item text + callfunc_push_str(MENU_TEXT); + // Cmd + callfunc_push_str(MENU_CMD); + // Access + callfunc_push_int(MENU_ACCESS); + // Menu exists in this plugin + callfunc_push_str(MENU_PLUGIN); + + callfunc_end(); +} + + +stock constraint_offset(low, high, seed, offset) +{ + new numElements = high - low + 1; + offset += seed - low; + + if (offset >= 0) + { + return low + (offset % numElements); + } + else + { + return high - (abs(offset) % numElements) + 1; + } + + return 0; // Makes the compiler happy -_- +} + +/* Returns true if the user has ANY of the provided flags + * false if they have none + */ +stock has_flag(id, const flags[]) +{ + return (get_user_flags(id) & read_flags(flags)); +} +/* Returns true if the user has ALL of the provided flags + * false otherwise + */ +stock has_all_flags(id, const flags[]) +{ + new FlagsNumber=read_flags(flags); + return ((get_user_flags(id) & FlagsNumber)==FlagsNumber); +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM.inc new file mode 100644 index 0000000..ee861d3 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM.inc @@ -0,0 +1,89 @@ +/* VexdUM backwards compatibility + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + + +#if !defined _fakemeta_included + #include <fakemeta> +#endif + +#if !defined _engine_included + #include <engine> +#endif + +#if defined _vexd_bcompat_included + #endinput +#endif +#define _vexd_bcompat_included + +#include <VexdUM_const> + +native radius_damage(inflictor, Float:dmg, Float:orig[3], Float:rad, bit = DMG_BULLET, wpnName[]="", hs = 0); +native take_damage(victim, attacker, Float:orig[3], Float:dmg, bit = DMG_BULLET, wpnName[]="", hs = 0); +native set_user_model(id, const Model[]=""); +native entity_use(eUsed, eOther); +native get_num_ents(); + +native DispatchKeyValue(ent, szKey[], szValue[]); + +// Trace a line from Start(X, Y, Z) to End(X, Y, Z), will return the point hit in vReturn[3] +// Will return an entindex if an entity is hit. +native trace_line(ent, Float:vStart[3], Float:vEnd[3], Float:vReturn[3]); + +native traceline_get_int(iVar); +native traceline_set_int(iVar, iVal); +native Float:traceline_get_float(iVar); +native traceline_set_float(iVar, Float:fVal); +native traceline_get_vector(iVar, Float:vVal[3]); +native traceline_set_vector(iVar, Float:vVal[3]); +native traceline_get_edict(iVar); +native traceline_set_edict(iVar, iEnt); + +/* Wrapper around pfn_touch */ +forward entity_touch(entity1, entity2); + +/* Wrapper around pfn_think */ +forward entity_think(entity); + +/* Wrapper around pfn_spawn */ +forward entity_spawn(entity); + +/* Wrapper around client_PreThink */ +forward client_prethink(id); + +/* Wrapper around client_PostThink */ +forward client_postthink(id); + +//From AMX Mod: +// Called when an Emitting Sound is played Server-Side +forward emitsound(entity, const sample[]); + +//From AMX Mod: +// Called when an Emitting Ambient Sound is played Server-Side +forward emitambientsound(entity, const sample[]); + +//From AMX Mod: +// Called when a model spawns +forward set_model(entity, const model[]); + +//From AMX Mod: +// Called whatever an entity looks at +forward traceline(entity); + +//:TODO: ? +// Called when a monster is hurt by VexdUM damage natives +// forward monster_hurt(monster, attacker, damage); + +//From AMX Mod: +// Called when a keyvalue is set on a player +forward setclientkeyvalue(id, key[], value[]); + +//From AMX Mod: +// Called when an entity gets a keyvalue set on it from the engine. +// Use copy_keyvalue to get the keyvalue information +forward keyvalue(entity); + +#include <VexdUM_stock> diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_const.inc new file mode 100644 index 0000000..57b5684 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_const.inc @@ -0,0 +1,30 @@ +#if defined _vexdum_const_included + #endinput +#endif +#define _vexdum_const_included + +// TraceLine Integer +enum { + TR_INT_fAllSolid, // if true, plane is not valid + TR_INT_fStartSolid, // if true, the initial point was in a solid area + TR_INT_fInOpen, + TR_INT_fInWater, + TR_INT_iHitgroup, // 0 == generic, non zero is specific body part +}; + +// TraceLine Float +enum { + TR_FL_flFraction, // time completed, 1.0 = didn't hit anything + TR_FL_flPlaneDist, +}; + +// TraceLine Vector +enum { + TR_VEC_vecEndPos, // final position + TR_VEC_vecPlaneNormal, // surface normal at impact +}; + +// TraceLine Edict +enum { + TR_ENT_pHit, // entity the surface is on +}; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_stock.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_stock.inc new file mode 100644 index 0000000..a93b43e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/VexdUM_stock.inc @@ -0,0 +1,135 @@ +/* VexdUM stocks backwards compatibility + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + +#if defined _vexd_bcompat_stocks_included + #endinput +#endif +#define _vexd_bcompat_stocks_included + +#if !defined _engine_included + #include <engine> +#endif + +stock is_entity(ent) +{ + return pev_valid(ent); +} + +stock get_offset_int(ent, offset, linos = 5) +{ + return get_pdata_int(ent, offset, linos); +} + +stock set_offset_int(ent, offset, value, linos = 5) +{ + return set_pdata_int(ent, offset, value, linos); +} + +stock in_view_cone(ent, Float:Orig[3]) +{ + return is_in_viewcone(ent, Orig); +} + +stock get_maxentities() +{ + return global_get(glb_maxEntities); +} + +stock can_see(ent1, ent2) +{ + if (is_entity(ent1) && is_entity(ent2)) + { + new flags = pev(ent1, pev_flags); + if (flags & EF_NODRAW || flags & FL_NOTARGET) + { + return 0; + } + + new Float:lookerOrig[3]; + new Float:targetOrig[3]; + new Float:temp[3]; + + pev(ent1, pev_origin, lookerOrig); + pev(ent1, pev_view_ofs, temp); + lookerOrig[0] += temp[0]; + lookerOrig[1] += temp[1]; + lookerOrig[2] += temp[2]; + + pev(ent2, pev_origin, targetOrig); + pev(ent2, pev_view_ofs, temp); + targetOrig[0] += temp[0]; + targetOrig[1] += temp[1]; + targetOrig[2] += temp[2]; + + engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, ent1, 0); + if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater)) + { + return 0; + } else { + new Float:flFraction; + get_tr2(0, TraceResult:TR_flFraction, flFraction); + if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == ent2)) + { + return 1; + } + } + } + + return 0; +} + +//From AMX Mod: +// Find an entity in the world, will return -1 if nothing is found +// type = 0: "classname" +// type = 1: "globalname" +// type = 2: "model" +// type = 3: "target" +// type = 4: "targetname" +// type = 5: "netname" +// type = 6: "message" +// type = 7: "noise" +// type = 8: "noise1" +// type = 9: "noise2" +// type = 10: "noise3" +// type = 11: "viewmodel" +// type = 12: "weaponmodel" + +stock vexd_find_entity(ent, szValue[], type=0) +{ + static _g_FindEntTypes[13][] = + { + "classname", + "globalname", + "model", + "target", + "targetname", + "netname", + "messages", + "noise", + "noise1", + "noise2", + "noise3", + "viewmodel", + "weaponmodel" + }; + + if (type < 0 || type >= 13) + { + type = 0; + } + + return engfunc(EngFunc_FindEntityByString, ent, _g_FindEntTypes[type], szValue); +} + +#define find_entity vexd_find_entity + +//From AMX Mod: +// Find an entity within a given origin and radius +stock find_entity_sphere(ent, Float:Orig[3], Float:Rad) +{ + return engfunc(EngFunc_FindEntityInSphere, ent, Orig, Rad); +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/Vexd_Utilities.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/Vexd_Utilities.inc new file mode 100644 index 0000000..5834f57 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/Vexd_Utilities.inc @@ -0,0 +1,109 @@ +/* Vexd Utility backwards compatibility +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _Vexd_Utilities_included + #endinput +#endif +#define _Vexd_Utilities_included + +#include <engine> +#if defined AMXMOD_BCOMPAT +#if !defined _vexd_bcompat_included +#include <VexdUM> +#endif +#endif + +stock Entvars_Get_Int(iIndex, iVariable) + return entity_get_int(iIndex, iVariable); + +stock Entvars_Set_Int(iIndex, iVariable, iNewValue) + return entity_set_int(iIndex, iVariable, iNewValue); + +stock Float:Entvars_Get_Float(iIndex, iVariable) + return entity_get_float(iIndex, iVariable); + +stock Entvars_Set_Float(iIndex, iVariable, Float:fNewValue) + return entity_set_float(iIndex, iVariable, fNewValue); + +stock Entvars_Get_Vector(iIndex, iVariable, Float:vRetVector[3]) + return entity_get_vector(iIndex, iVariable, vRetVector); + +stock Entvars_Set_Vector(iIndex, iVariable, Float:vNewVector[3]) + return entity_set_vector(iIndex, iVariable, vNewVector); + +stock Entvars_Get_Edict(iIndex, iVariable) + return entity_get_edict(iIndex, iVariable); + +stock Entvars_Set_Edict(iIndex, iVariable, iNewIndex) + return entity_set_edict(iIndex, iVariable, iNewIndex); + +stock Entvars_Get_String(iIndex, iVariable, szReturnValue[], iReturnLen) + return entity_get_string(iIndex, iVariable, szReturnValue, iReturnLen); + +stock Entvars_Set_String(iIndex, iVariable, szNewValue[]) + return entity_set_string(iIndex, iVariable, szNewValue); + +stock Entvars_Get_Byte(iIndex, iVariable) + return entity_get_byte(iIndex, iVariable); + +stock Entvars_Set_Byte(iIndex, iVariable, iNewValue) + return entity_set_byte(iIndex, iVariable, iNewValue); + +stock CreateEntity(szClassname[]) + return create_entity(szClassname); + +stock ENT_SetModel(iIndex, szModel[]) + return entity_set_model(iIndex, szModel); + +stock ENT_SetOrigin(iIndex, Float:fNewOrigin[3]) + return entity_set_origin(iIndex, fNewOrigin); + +stock FindEntity(iIndex, szValue[]) + return find_ent_by_class(iIndex, szValue); + +stock RemoveEntity(iIndex) + return remove_entity(iIndex); + +stock TraceLn(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]) + return trace_line(iIgnoreEnt, fStart, fEnd, vReturn); + +stock TraceNormal(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]) + return trace_normal(iIgnoreEnt, fStart, fEnd, vReturn); + +stock VecToAngles(Float:fVector[3], Float:vReturn[3]) + return vector_to_angle(fVector, vReturn); + +stock Float:VecLength(Float:vVector[3]) + return vector_length(vVector); + +stock Float:VecDist(Float:vVector[3], Float:vVector2[3]) + return vector_distance(vVector, vVector2); + +stock MessageBlock(iMessage, iMessageFlags) + return set_msg_block(iMessage, iMessageFlags); + +stock GetMessageBlock(iMessage) + return get_msg_block(iMessage); + +stock Float:HLTime() + return halflife_time(); + +stock FakeTouch(iToucher, iTouched) + return fake_touch(iToucher, iTouched); + +stock AttachView(iIndex, iTargetIndex) + return attach_view(iIndex, iTargetIndex); + +stock SetView(iIndex, ViewType) + return set_view(iIndex, ViewType); + +stock SetSpeak(iIndex, iSpeakFlags) + return set_speak(iIndex, iSpeakFlags); + +forward vexd_pfntouch(pToucher, pTouched); + +forward ServerFrame(); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/amxmod.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/amxmod.inc new file mode 100644 index 0000000..a92ef5e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/amxmod.inc @@ -0,0 +1,318 @@ +/* AMX Mod X Backwards Compatibility + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + +#if defined _amxmod_included + #endinput +#endif +#define _amxmod_included + +#if !defined AMXMOD_BCOMPAT + #define AMXMOD_BCOMPAT +#endif + +#include <amxmodx> +#include <cstrike> +#include <engine> +#include <fun> +#include <maths> + +stock AMX_VERSION[] = "1.76-BC"; + +#define ADMIN_PERMBAN ADMIN_BAN //AMX Mod admin flag for permanent ban +#define ADMIN_UNBAN ADMIN_BAN //AMX Mod admin flag for unbanning +#define ADMIN_SUPREME ADMIN_IMMUNITY //AMX Mod admin flag for "super admin" (can kick, slap, ban, slay admins with Immunity) + +/* Core will identify us as an "old plugin" this way. */ +public __b_old_plugin = 1; + +public __b_ident_vers() +{ + return __b_old_plugin; +} + +stock user_spawn(index) + return spawn(index); + +stock get_logfile( name[], len ) + return get_time("admin%m%d.log",name,len); + +stock get_user_money(index) + return cs_get_user_money(index); + +stock set_user_money(index,money,flash=1) + return cs_set_user_money(index,money,flash); + +stock numtostr(num,string[],len) + return num_to_str(num,string,len); + +stock strtonum(const string[]) + return str_to_num(string); + +stock build_path(path[], len, {Float,_}:... ) +{ + format_args(path, len, 2); + new pathlen = strlen(path); + new basedir[32]; + if (containi(path, "$basedir") != -1) + { + get_localinfo("amxx_basedir", basedir, 31); + if (!basedir[0]) + { + copy(basedir, 31, "addons/amxmodx"); + } + if ((pathlen+strlen(basedir)-strlen("$basedir")) < len) + { + replace(path, len, "$basedir", basedir); + } + } + new dir[64], subdir[63]; + if (containi(path, "$configdir") != -1) + { + get_localinfo("amxx_configsdir", dir, 63); + if (!dir[0]) + { + format(dir, 63, "%s/configs", basedir); + } + if ((pathlen+strlen(basedir)-strlen("$configdir")) < len) + { + replace(path, len, "$configdir", dir); + } + dir[0] = '^0'; + } + if (containi(path, "$langdir") != -1) + { + get_localinfo("amxx_datadir", subdir, 63); + if (!subdir[0]) + { + format(subdir, 63, "%s/data", basedir); + } + format(dir, 63, "%s/amxmod-lang", subdir); + if ((pathlen+strlen(basedir)-strlen("$langdir")) < len) + { + replace(path, len, "$langdir", dir); + } + dir[0] = '^0'; + } + if (containi(path, "$modulesdir") != -1) + { + get_localinfo("amxx_modules", dir, 63); + if (!dir[0]) + { + format(dir, 63, "%s/modules", basedir); + } + if ((pathlen+strlen(basedir)-strlen("$modulesdir")) < len) + { + replace(path, len, "$modulesdir", dir); + } + dir[0] = '^0'; + } + if (containi(path, "$pluginsdir") != -1) + { + get_localinfo("amx_pluginsdir", dir, 63); + if( !dir[0]) + { + format(dir, 63, "%s/plugins", basedir); + } + if ((pathlen+strlen(basedir)-strlen("$pluginsdir")) < len) + { + replace(path, len, "$pluginsdir", dir); + } + dir[0] = '^0'; + } + if (containi(path, "$logdir") != -1) + { + get_localinfo("amx_logs", dir, 63); + if (!dir[0]) + { + format(dir, 63, "%s/logs", basedir); + } + if ((pathlen+strlen(basedir)-strlen("$logdir")) < len) + { + replace(path, len, "$logdir", dir); + } + } + return 1; +} + +stock is_user_authorized(id) +{ + static auth[32]; + + get_user_authid(id, auth, 31); + if (auth[0] == 0 || equali(auth, "STEAM_ID_PENDING")) + { + return 0; + } + + return 1; +} + +/* Vector AMX Mod compatibility */ +#define ANGLEVECTORS_FORWARD 1 +#define ANGLEVECTORS_RIGHT 2 +#define ANGLEVECTORS_UP 3 + +stock angle_to_vector(Float:vector[3], FRU, Float:ret[3]) +{ + return angle_vector(vector, FRU, ret); +} + +stock get_cmdaccess(cmd[], accessflags[], len) +{ + new num = get_concmdsnum(-1); + new command[32], info[3]; + new flags; + + for (new i=0; i<num; i++) + { + get_concmd(i, command, 31, flags, info, 2, -1); + if (equal(command, cmd)) + { + get_flags(flags, accessflags, len); + return 1; + } + } + + return 0; +} + +stock is_translated(const sentence[]) +{ + return (GetLangTransKey(sentence) != TransKey_Bad); +} + +stock get_plugincmdsnum(plugin[], type=7) +{ + new plid = find_plugin_byfile(plugin); + new our_type; + + /** + * Whoever wrote this was a bit confused about the type stuff... + */ + if (type == 1) { + our_type = 1; + } else if (type == 4) { + our_type = 0; + } else { + our_type = -1; + } + + new found = 0; + new total = get_concmdsnum(-1, our_type); + for (new i=0; i<total; i++) + { + if (plid == get_concmd_plid(i, -1, our_type)) + { + found++; + } + } + + return found; +} + +stock get_plugincmd(plugin[], index, cmd[], len1, accessflags[], len2, info[], len3, destid=-1, type=7) +{ + new plid = find_plugin_byfile(plugin); + new our_type; + + /** + * Whoever wrote this was a bit confused about the type stuff... + */ + if (type == 1) { + our_type = 1; + } else if (type == 4) { + our_type = 0; + } else { + our_type = -1; + } + + new found_iter = 0; + new total = get_concmdsnum(-1, our_type); + for (new i=0; i<total; i++) + { + if (plid == get_concmd_plid(i, -1, our_type)) + { + if (found_iter == index) + { + new flags, result; + result = get_concmd(i, cmd, len1, flags, info, len3, -1, our_type); + get_flags(flags, accessflags, len2); + return result; + } + found_iter++; + } + } + + /* get rid of a compiler warning */ + destid = -1; + return (++destid); +} + +stock get_plugincvar(plugin[], index, cvar[], len1, value[], len2, flags=0) +{ + new plid = find_plugin_byfile(plugin); + + new total = get_plugins_cvarsnum(); + new cvar_flags, plugin_id, pcvar_handle; + new iter_id = 0; + for (new i=0; i<total; i++) + { + get_plugins_cvar(i, cvar, len1, cvar_flags, plugin_id, pcvar_handle); + if ((plugin_id == plid) + && (!flags || (cvar_flags & flags))) + { + if (iter_id == index) + { + get_pcvar_string(pcvar_handle, value, len2); + return 1; + } + iter_id++; + } + } + + return 0; +} + +stock get_plugincvarsnum(plugin[], flags=0) +{ + new plid = find_plugin_byfile(plugin); + + new total = get_plugins_cvarsnum(); + new cvar_flags, plugin_id; + new cvars_total = 0; + for (new i=0; i<total; i++) + { + get_plugins_cvar(i, "", 0, cvar_flags, plugin_id); + if ((plugin_id == plid) + && (!flags || (cvar_flags & flags))) + { + cvars_total++; + } + } + + return cvars_total; +} + +stock is_module_running(const module[]) +{ + if (strcmp(module, "MySQL Access") == 0) + return LibraryExists("sqlx", LibType_Class); + + return is_module_loaded(module) == -1 ? 0 : 1; +} + +stock is_plugin_running(const plugin[]) +{ + new status[8]; + new id, filename[1], name[1], version[1], author[1]; + + id = is_plugin_loaded(plugin); + + get_plugin(id, filename, 0, name, 0, version, 0, author, 0, status, 7); + + return strcmp(status, "running") == 0 ? id + 1 : 0; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/maths.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/maths.inc new file mode 100644 index 0000000..5065651 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/maths.inc @@ -0,0 +1,85 @@ +/* AMX Mod math functions backwards compatibility + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + +#if defined _maths_bcompat_included + #endinput +#endif +#define _maths_bcompat_included + +#if !defined _float_included + #include <float> +#endif + +stock Float:fabs(Float:value) +{ + return floatabs(value); +} + +stock Float:asin(Float:value) +{ + return floatasin(value, radian); +} + +stock Float:sin(Float:value) +{ + return floatsin(value, radian); +} + +stock Float:sinh(Float:value) +{ + return floatsinh(value, radian); +} + +stock Float:acos(Float:value) +{ + return floatacos(value, radian); +} + +stock Float:cos(Float:value) +{ + return floatcos(value, radian); +} + +stock Float:cosh(Float:value) +{ + return floatcosh(value, radian); +} + +stock Float:atan(Float:value) +{ + return floatatan(value, radian); +} + +stock Float:atan2(Float:value1, Float:value2) +{ + return floatatan2(value1, value2, radian); +} + +stock Float:tan(Float:value) +{ + return floattan(value, radian); +} + +stock Float:tanh(Float:value) +{ + return floattanh(value, radian); +} + +stock Float:fsqroot(Float:value) +{ + return floatsqroot(value); +} + +stock Float:fpower(Float:value, Float:exponent) +{ + return floatpower(value, exponent); +} + +stock Float:flog(Float:value, Float:base=10.0) +{ + return floatlog(value, base); +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/mysql.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/mysql.inc new file mode 100644 index 0000000..df24a2f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/mysql.inc @@ -0,0 +1,20 @@ + +#if defined _mysql_included + #endinput +#endif +#define _mysql_included + +#include <sqlx> + +native mysql_connect(host[], user[], pass[], dbname[], error[], maxlength); +native mysql_query(sql, query[], {Float,_}:... ); +native mysql_error(sql, dest[], maxlength); +native mysql_close(sql); +native mysql_nextrow(sql); +native mysql_getfield(sql, fieldnum, {Float,_}:... ); +native mysql_getresult(sql, field[], {Float,_}:... ); +native mysql_affected_rows(sql); +native mysql_num_fields(sql); +native mysql_num_rows(sql); +native mysql_field_name(sql, field, name[], length); +native mysql_insert_id(sql); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/translator.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/translator.inc new file mode 100644 index 0000000..0c6aea0 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/translator.inc @@ -0,0 +1,86 @@ +/* AMX Mod X Backwards Compatibility + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + +#if defined _amxmod_translator_included + #endinput +#endif +#define _amxmod_translator_included + +#define _translator_included + +#include <amxmodx> +#include <amxmod> +#include <amxmisc> + +//From AMX Mod. This is implemented in Core due to the nature of the +// translation engine and what AMX Mod did. +/* Translation backend, used by _T (since natives can't return arrays). */ +native translate(const string[], destid=-1, forcelang=-1); + +stock _T(const string[], destid=-1, forcelang=-1) +{ + new TranslationResult[2] = {0, 0}; + TranslationResult[0] = translate(string, destid, forcelang); + return TranslationResult; +} + +stock load_translations(const file[]) +{ + static dir[255], path[255]; + get_datadir(dir, 254); + + format(path, 254, "%s/amxmod-lang/%s.txt", dir, file); + new fp + if (!(fp=fopen(path, "r"))) + { + abort(AMX_ERR_NATIVE, "Could not find file: %s", path); + return 0; + } + + static buffer[1024]; + new lang[3]; + new TransKey:bad_key = TransKey:-1; + new TransKey:cur_key = bad_key; + new len; + while (!feof(fp)) + { + buffer[0] = 0; + fgets(fp, buffer, 1023); + len = strlen(buffer); + if (len == 0) + { + continue; + } + if (isspace(buffer[len-1])) + { + buffer[--len] = 0; + } + if (buffer[0] == '"') + { + remove_quotes(buffer); + cur_key = CreateLangKey(buffer); + AddTranslation("en", cur_key, buffer); + continue; + } + if (isspace(buffer[0])) + { + continue; + } + if ((cur_key != bad_key) && (buffer[2] == ':' && buffer[3] == '"')) + { + lang[0] = buffer[0]; + lang[1] = buffer[1]; + lang[2] = 0; + remove_quotes(buffer[3]); + AddTranslation(lang, cur_key, buffer[3]); + } + } + + fclose(fp); + + return 1; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/xtrafun.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/xtrafun.inc new file mode 100644 index 0000000..e7caa49 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmod_compat/xtrafun.inc @@ -0,0 +1,97 @@ +/* Xtrafun backwards compatibility +* +* by the AMX Mod X Development Team +* These natives were originally made by SpaceDude, EJ, and JustinHoMi. +* +* This file is provided as is (no warranties). +*/ + +#if !defined _xtrafun_included + #define _xtrafun_included + +#if !defined _engine_included + #include <engine.inc> +#endif + +/* Gets the velocity of an entity */ +stock get_entity_velocity(index, velocity[3]) { + new Float:vector[3]; + entity_get_vector(index, EV_VEC_velocity, vector); + FVecIVec(vector, velocity); +} + +/* Sets the velocity of an entity */ +stock set_entity_velocity(index, velocity[3]) { + new Float:vector[3]; + IVecFVec(velocity, vector); + entity_set_vector(index, EV_VEC_velocity, vector); +} + +/* Gets the origin of an entity */ +stock get_entity_origin(index, origin[3]) { + new Float:vector[3]; + entity_get_vector(index, EV_VEC_origin, vector); + FVecIVec(vector, origin); +} + +/* Sets the origin of an entity */ +stock set_entity_origin(index, origin[3]) { + new Float:vector[3]; + IVecFVec(origin, vector); + entity_set_vector(index, EV_VEC_origin, vector); +} + +/* Get the index of the grenade belonging to index. + * Model of grenade is returned in model[]. + * Specify the grenadeindex to start searching from, + * or leave it at 0 to search from the start. + * Returns grenade index. + * Paths + models of grenades in Counter-Strike: + * HEGRENADE = "models/w_hegrenade.mdl" + * FLASHBANG = "models/w_flashbang.mdl" + * SMOKEGRENADE = "models/w_smokegrenade.mdl" */ +stock get_grenade_index(index, model[], len, grenadeindex = 0) { + new entfind = grenadeindex; + new entowner = index; + + for (;;) { + entfind = find_ent_by_class(entfind, "grenade"); + + if (entfind && is_valid_ent(entfind)) { + if (entity_get_edict(entFind, EV_ENT_owner) == entowner) { + entity_get_string(entfind, EV_SZ_model, model); + return entfind; + } + } + else { + // Eventually comes here if loop fails to find a grenade with specified owner. + return 0; + } + } +} + +/* Find the number of entities in the game */ +stock current_num_ents() { + return entity_count(); +} + +enum { + classname = 0, + target, + targetname +}; + +#if !defined _vexd_bcompat_included +/* Find an entity ID from start_from_ent id (use 0 to start from + * the beginning, category is either "classname", "target" or + * "targetname", value is the name you are searching for */ +stock find_entity(start_from_ent, category, value[]) { + switch (category) { + case target: return find_ent_by_target(start_from_ent, value); + case targetname: return find_ent_by_tname(start_from_ent, value); + } + return find_ent_by_class(start_from_ent, value); +} +#endif + +#endif // _xtrafun_included \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmodx.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmodx.inc new file mode 100644 index 0000000..a2af76a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/amxmodx.inc @@ -0,0 +1,1081 @@ +/* AMX Mod X functions +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _amxmodx_included + #endinput +#endif +#define _amxmodx_included + +#include <core> +#include <float> +#include <amxconst> +#include <string> +#include <file> +#include <vault> +#include <lang> +#include <messages> +#include <vector> +#include <sorting> +#include <cellarray> +#include <celltrie> +#include <newmenus> + +/* Function is called just after server activation. +* Good place for configuration loading, commands and cvars registration. */ +forward plugin_init(); + +/* Called when the plugin is paused. */ +forward plugin_pause(); + +/* Called when the plugin is unpaused. */ +forward plugin_unpause(); + +/* Called when the mod tries to change the map. */ +forward server_changelevel(map[]); + +/* Function is called when all plugin_init from plugins +* were called, so all commmands and cvars should be already registered. */ +forward plugin_cfg(); + +/* Function called before plugin unloading (server deactivation) */ +forward plugin_end(); + +/* Called on log message. */ +forward plugin_log(); + +/* Use here model_precache() and sound_precache() functions. */ +forward plugin_precache(); + +/* Whenever player info is changed, this function is called. */ +forward client_infochanged(id); + +/* Called on client connection. */ +forward client_connect(id); + +/* Called when client gets valid STEAM id (usually +* between client_connect() and client_putinserver()). */ +forward client_authorized(id); + +/* Called when client is disconnecting from server. */ +forward client_disconnect(id); + +/* Called when client is sending command. */ +forward client_command(id); + +/* Called when client is entering to a game. */ +forward client_putinserver(id); + +/* Sets informations about plugin. Returns the plugin id of the calling plugin. */ +native register_plugin(const plugin_name[],const version[],const author[]); + +/* Precache model. Can be used only in plugin_precache() function.*/ +native precache_model(const name[]); + +/* Precache sound. Can be used only in plugin_precache() function.*/ +native precache_sound(const name[]); + +/* Precaches any file. */ +native precache_generic(const szFile[]); + +/* Sets info for player. */ +native set_user_info(index,const info[],const value[]); + +/* Gets info from player. */ +native get_user_info(index,const info[],output[],len); + +/* Sets info for server. */ +native set_localinfo(const info[],const value[]); + +/* Gets info from server. */ +native get_localinfo(const info[],output[],len); + +/* Shows text in MOTD window. When there is no header, the MOTD title +* will be the name of server. If message is filename, then a contents +* of this file will be displayed as MOTD. */ +native show_motd(player,const message[],const header[]=""); + +/* Sends message to player. Set index to 0 to send text globaly. */ +native client_print(index,type,const message[],any:...); + +/* Sends message to player by engine. Set index to 0 to send text globaly. */ +native engclient_print(player,type,const message[],any:...); + +/* Sends message to console. */ +native console_print(id,const message[],any:...); + +/* Sends command to console. */ +native console_cmd(id,const cmd[],any:...); + +/* Registers event on which a given function will be called +* Flags: +* "a" - global event. +* "b" - specified. +* "c" - send only once when repeated to other players. +* "d" - call if is send to dead player. +* "e" - to alive. +* NOTE: Due to a long-standing bug that would break compatibility with old plugins, +* the client id should be checked for alive/dead state if you use d or e. +* Examples for conditions: +* "2=c4" - 2nd parameter of message must be sting "c4". +* "3>10" - 3rd parameter must be greater then 10. +* "3!4" - 3rd must be different from 4. +* "2&Buy" - 2nd parameter of message must contain "Buy" substring. +* "2!Buy" - 2nd parameter of message can't contain "Buy" substring. */ +native register_event(const event[],const function[],const flags[],const cond[]="", ... ); + +/* Registers log event on which the given function will be called +* Examples for conditions: +* "0=World triggered" "1=Game_Commencing" +* "1=say" +* "3=Terrorists_Win" +* "1=entered the game" +* "0=Server cvar" +*/ +native register_logevent(const function[], argsnum, ... ); + +/** + * Sets format for hudmessage. + * Note - as of AMX Mod X 1.61, setting the channel to -1 + * will automatically choose the next available HUD channel for a player. + */ +native set_hudmessage(red=200, green=100, blue=0, Float:x=-1.0, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2,channel=4); + +/* Displays HUD message to given player. */ +native show_hudmessage(index,const message[],any:...); + +/* Displays menu. Keys have bit values (key 1 is (1<<0), key 5 is (1<<4) etc.). */ +native show_menu(index,keys,const menu[], time = -1, const title[] = ""); + +/* Gets value from client messages. +* When you are asking for string the array and length is needed (read_data(2,name,len)). +* Integer is returned by function (new me = read_data(3)). +* Float is set in second parameter (read_data(3,value)). */ +native read_data(value, any:... ); + +/* Returns number of values in client message. */ +native read_datanum(); + +/* Gets log message. Can be called only in plugin_log() forward function. */ +native read_logdata(output[],len); + +/* Returns number of log arguments. +* Can be called only in plugin_log() forward function. */ +native read_logargc(); + +/* Gets log argument indexed from 0. +* Can be called only in plugin_log() forward function. */ +native read_logargv(id,output[],len); + +/* Parse log data about user ( "Butcher<5><BOT><TERRORIST>" etc. ). */ +native parse_loguser(const text[], name[], nlen, &userid = -2, authid[] = "", alen = 0, team[]="", tlen=0); + +/* Prints message to server console. +* You may use text formating (f.e. server_print("%-32s %.2f!","hello",7.345)) */ +native server_print(const message[], any:...); + +/* Returns 1 or 0. */ +native is_map_valid(const mapname[]); + +/* Returns 1 or 0. */ +native is_user_bot(index); + +/* Returns 1 or 0. */ +native is_user_hltv(index); + +/* Returns 1 or 0. */ +native is_user_connected(index); + +/* Returns 1 or 0. */ +native is_user_connecting(index); + +/* Returns 1 or 0. */ +native is_user_alive(index); + +/* Returns 1 or 0. */ +native is_dedicated_server(); + +/* Returns 1 or 0. */ +native is_linux_server(); + +/* Returns 1 or 0. */ +native is_jit_enabled(); + +/* Returns AMXX's version string of the current gameserver */ +native get_amxx_verstring(buffer[], length); + +/* If player is not attacked function returns 0, in other + * case returns index of attacking player. On second and third + * parameter you may get info about weapon and body hit place. + * As of 1.75, get_user_attacker can return a non-player index if the player was attacked by a non-player entity. + */ +native get_user_attacker(index,...); + +/* If player doesn't hit at anything function returns 0.0, +* in other case the distance between hit point and player is returned. +* If player is aiming at another player then the id and part of body are set. */ +native Float:get_user_aiming(index,&id,&body,dist=9999); + +/* Returns player frags. */ +native get_user_frags(index); + +/* Returns player armor. */ +native get_user_armor(index); + +/* Returns player deaths. */ +native get_user_deaths(index); + +/* Returns player health. */ +native get_user_health(index); + +/* Returns index. */ +native get_user_index(const name[]); + +/* Returns ip. */ +native get_user_ip(index,ip[],len, without_port = 0); + +/* Returns if the player has the weapon or not in their pev->weapons field. + set "setweapon" to 0 to turn the bit off, set to 1 to turn it on. */ +native user_has_weapon(index,weapon,setweapon=-1); + +/* Returns id of currently carried weapon. Gets also +* ammount of ammo in clip and backpack. */ +native get_user_weapon(index,&clip=0,&ammo=0); + +/* Gets ammo and clip from current weapon. */ +native get_user_ammo(index,weapon,&clip,&ammo); + +/* Converts numbers from range 0 - 999 to words. */ +native num_to_word(num,output[],len); + +/* Returns team id. When length is greater then 0 +* then a name of team is set. */ +native get_user_team(index, team[]="", len = 0); + +/* Returns player playing time in seconds. +* If flag is set then result is without connection time. */ +native get_user_time(index, flag = 0); + +/* Gets ping and loss at current time. */ +native get_user_ping(index, &ping, &loss); + +/* Gets origin from player. +* Modes: +* 0 - current position. +* 1 - position from eyes (weapon aiming). +* 2 - end position from player position. +* 3 - end position from eyes (hit point for weapon). +* 4 - position of last bullet hit (only CS). */ +native get_user_origin(index, origin[3], mode = 0); + +/* Returns all carried weapons as bit sum. Gets + * also theirs indexes. + * Note that num is incremental - if you pass 0, you get + * 32 weapons towards the total. Afterwards, num will + * will contain the number of weapons retrieved. + * However, subsequent calls to get_user_weapons() will + * return the next batch of weapons, in case the mod + * supports more than 32 weapons. + * This means to call get_user_weapons() on the same + * inputs twice, you must reset num to 0 to get the + * original output again. + */ +native get_user_weapons(index,weapons[32],&num); + +/* Returns weapon name. */ +native get_weaponname(id,weapon[],len); + +/* Returns player name. */ +native get_user_name(index,name[],len); + +/* Gets player authid. */ +native get_user_authid(index, authid[] ,len); + +/* Returns player userid. */ +native get_user_userid(index); + +/* Slaps player with given power. */ +native user_slap(index,power,rnddir=1); + +/* Kills player. When flag is set to 1 then death won't decrase frags. */ +native user_kill(index,flag=0); + +/* Logs something into the current amx logfile +* Parameters: +* string[] - format string +* ... - optional parameters +* Return value: +* always 0 */ +native log_amx(const string[], any:...); + +/* Sends message to standard HL logs. */ +native log_message(const message[],any:...); + +/* Sends log message to specified file. */ +native log_to_file(const file[],const message[],any:...); + +/* Returns number of players put in server. +* If flag is set then also connecting are counted. */ +native get_playersnum(flag=0); + +/* Sets indexes of players. +* Flags: +* "a" - don't collect dead players. +* "b" - don't collect alive players. +* "c" - skip bots. +* "d" - skip real players. +* "e" - match with team. +* "f" - match with part of name. +* "g" - ignore case sensitivity. +* "h" - skip HLTV. +* Example: Get all alive CTs: get_players(players,num,"ae","CT") */ +native get_players(players[32], &num ,const flags[]="", const team[]=""); + +/* Gets argument from command. */ +native read_argv(id,output[],len); + +/* Gets line of all arguments. */ +native read_args(output[],len); + +/* Returns number of arguments (+ one as command). */ +native read_argc(); + +/* Converts string to sum of bits. +* Example: "abcd" is a sum of 1, 2, 4 and 8. */ +native read_flags(const flags[]); + +/* Converts sum of bits to string. +* Example: 3 will return "ab". */ +native get_flags(flags,output[],len); + +/* Find player. +* Flags: +* "a" - with given name. +* "b" - with given part of name. +* "c" - with given authid. +* "d" - with given ip. +* "e" - with given team name. +* "f" - don't look in dead players. +* "g" - don't look in alive players. +* "h" - skip bots. +* "i" - skip real players. +* "j" - return index of last found player. +* "k" - with given userid. +* "l" - ignore case sensitivity. */ +native find_player(const flags[], ... ); + +/* Removes quotes from sentence. */ +native remove_quotes(text[]); + +/* Executes command on player. */ +native client_cmd(index,const command[],any:...); + +/* This is an emulation of a client command (commands aren't send to client!). +* It allows to execute some commands on players and bots. +* Function is excellent for forcing to do an action related to a game (not settings!). +* The command must stand alone but in arguments you can use spaces. */ +native engclient_cmd(index,const command[],const arg1[]="",const arg2[]=""); + +/* Executes command on a server console. */ +native server_cmd(const command[],any:...); + +/* Sets a cvar to given value. */ +native set_cvar_string(const cvar[],const value[]); + +/* If a cvar exists returns 1, in other case 0 */ +native cvar_exists(const cvar[]); + +/* Removes a cvar flags (not allowed for amx_version, +* fun_version and sv_cheats cvars). */ +native remove_cvar_flags(const cvar[],flags = -1); + +/* Sets a cvar flags (not allowed for amx_version, +* fun_version and sv_cheats cvars). */ +native set_cvar_flags(const cvar[],flags); + +/* Returns a cvar flags. */ +native get_cvar_flags(const cvar[]); + +/* Sets a cvar to given float. */ +native set_cvar_float(const cvar[],Float:value); + +/* Gets a cvar float. */ +native Float:get_cvar_float(const cvarname[]); + +/* Gets a cvar integer value. */ +native get_cvar_num(const cvarname[]); + +/* Sets a cvar with integer value. */ +native set_cvar_num(const cvarname[],value); + +/* Reads a cvar value. */ +native get_cvar_string(const cvarname[],output[],iLen); + +/* Returns a name of currently played map. */ +native get_mapname(name[],len); + +/* Returns time remaining on map in seconds. */ +native get_timeleft(); + +/* Returns a game time. */ +native Float:get_gametime(); + +/* Returns maxplayers setting. */ +native get_maxplayers(); + +/* Returns a name of currently played mod. */ +native get_modname(name[],len); + +/* Returns time in given format. The most popular is: "%m/%d/%Y - %H:%M:%S". */ +native get_time(const format[],output[],len); + +/* Returns time in given format. The most popular is: "%m/%d/%Y - %H:%M:%S". +* Last parameter sets time to format. */ +native format_time(output[],len, const format[],time = -1); + +/* Returns system time in seconds elapsed since 00:00:00 on January 1, 1970. +* Offset is given in seconds.*/ +native get_systime(offset = 0); + +/* Returns time in input and additionaly fills missing information +* with current time and date. If time is different than -1 then parsed +* time is added to given time. +* Example: +* parset_time( "10:32:54 04/02/2003", "%H:%M:%S %m:%d:%Y" ) +* For more information see strptime(...) function from C libraries. */ +native parse_time(const input[],const format[], time = -1); + +/* Calls function on specified time. +* Flags: +* "a" - repeat. +* "b" - loop task. +* "c" - do task on time after a map timeleft. +* "d" - do task on time before a map timelimit. */ +native set_task(Float:time,const function[],id = 0,const parameter[]="",len = 0,const flags[]="", repeat = 0); + +/* Removes all tasks with given id. If outside var is +* set then a task can be removed also when +* was set in another plugin. */ +native remove_task(id = 0, outside = 0); + +/* Changes the time of a task */ +native change_task(id = 0, Float:newTime=1.0, outside = 0); + +/* Returns 1 if task under given id exists. */ +native task_exists(id = 0, outside = 0); + +/* Sets the users flags with the assignment by bitwise OR operator. */ +native set_user_flags(index,flags=-1,id=0); + +/* Gets flags from player. Set index to 0 if you want to read flags from server. */ +native get_user_flags(index,id=0); + +/* Removes flags for player. */ +native remove_user_flags(index,flags=-1,id=0); + +/* Registers function which will be called from client console. + * Set FlagManager to 1 to make FlagManager always include this command + * Set FlagManager to 0 to make FlagManager never include this command + * Returns the command ID. + */ +native register_clcmd(const client_cmd[],const function[],flags=-1, const info[]="", FlagManager=-1); + +/* Registers function which will be called from any console. + * Set FlagManager to 1 to make FlagManager always include this command + * Set FlagManager to 0 to make FlagManager never include this command + * Returns the command ID. + */ +native register_concmd(const cmd[],const function[],flags=-1, const info[]="", FlagManager=-1); + +/* Registers function which will be called from server console. + * Returns the command ID. + */ +native register_srvcmd(const server_cmd[],const function[],flags=-1, const info[]=""); + +/* Gets info about client command. */ +native get_clcmd(index, command[], len1, &flags, info[], len2, flag); + +/* Returns number of registered client commands. */ +native get_clcmdsnum(flag); + +/* Gets info about server command. */ +native get_srvcmd(index,server_cmd[],len1,&flags, info[],len2, flag); + +/* Returns number of registered server commands. */ +native get_srvcmdsnum(flag); + +/* Gets info about console command. If id is set to 0, +then function returns only server cmds, if positive then +returns only client cmds. in other case returns all console commands. */ +native get_concmd(index,cmd[],len1,&flags, info[],len2, flag, id = -1); + +/* Gets the parent plugin id of a console command. */ +native get_concmd_plid(cid, flag_mask, id_type); + +/* Returns number of registered console commands. */ +native get_concmdsnum(flag,id = -1); + +/* Returns the number of plugin-registered cvars. */ +native get_plugins_cvarsnum(); + +/* Returns information about a plugin-registered cvar. */ +native get_plugins_cvar(num, name[], namelen, &flags=0, &plugin_id=0, &pcvar_handle=0); + +/* Gets unique id of menu. Outside set to 1 allows +* to catch menus outside a plugin where register_menuid is called. */ +native register_menuid(const menu[], outside=0 ); + +/* Calls function when player uses specified menu and proper keys. */ +native register_menucmd(menuid,keys, const function[] ); + +/* Gets what menu the player is watching and what keys for menu he have. +* When there is no menu the index is 0. If the id is negative then the menu +* is VGUI in other case the id is from register_menuid() function. */ +native get_user_menu(index,&id,&keys); + +/* Forces server to execute sent server command at current time. +* Very useful for map changes, setting cvars and other activities. */ +native server_exec(); + +/* Emits sound. Sample must be precached. */ +native emit_sound(index, channel, const sample[], Float:vol, Float:att,flags, pitch); + +/* Registers new cvar for HL engine. + * Returns the cvar pointer for get/set_pcvar functions. + */ +native register_cvar(const name[],const string[],flags = 0,Float:fvalue = 0.0); + +/* Generates random floating point number from a to b. */ +native Float:random_float(Float:a,Float:b); + +/* Generates random integer from a to b. */ +native random_num(a,b); + +/* Returns id of client message. +* Example: get_user_msgid("TextMsg"). */ +native get_user_msgid(const name[]); + +/* Gets name of client message index. Return value is number of +* characters copied into name. Returns 0 on invalid msgid. */ +native get_user_msgname(msgid, name[], len); + +/* Checks if public variable with given name exists in loaded plugins. */ +native xvar_exists( const name[] ); + +/* Returns an unique id for public variable specified by name. If such +* variable doesn't exist then returned value is -1. */ +native get_xvar_id( const name[] ); + +/* Returns an integer value of a public variable. Id is a value +* returned by get_xvar_id(...) native. */ +native get_xvar_num( id ); + +/* Returns a float value of a public variable. Id is a value +* returned by get_xvar_id(...) native. */ +native Float:get_xvar_float( id ); + +/* Sets a value of a public variable. Id is a value +* returned by get_xvar_id(...) native. */ +native set_xvar_num( id, value = 0 ); + +/* Sets a float value of a public variable. Id is a value +* returned by get_xvar_id(...) native. */ +native set_xvar_float( id, Float:value = 0.0 ); + +/* Checks whether a module is loaded. If it is not, the return value is -1, otherwise +* the return value is the module id. The function is case insensitive. */ +native is_module_loaded(const name[]); + +/* Gets info about a module. +* Parameters: +* id - the id of the module +* name[] - The name of the module will be stored here +* nameLen - maximal length of the name +* author[] - the author will be stored here +* authorLen - maximal length of the author +* version[] - the version of the module will be stored here +* versionLen - maximal length of the version +* status - the status of the module will be stored here +* Return value: +* id - success +* -1 - module not found */ +native get_module(id, name[], nameLen, author[], authorLen, version[], versionLen, &status); + +/* Returns number of currently registered modules */ +native get_modulesnum(); + +/** + * Checks whether a plugin is loaded by the given registered name (such as "Admin Base"), or, optionally + * the given filename ("admin.amxx"). + * + * @param name Either the plugin name to lookup, or the plugin filename to lookup. + * @param usefilename Set to true if you want to search for the plugin by the filename, false to search + * by the plugin's registered name. + * + * @return Plugin ID of the matching plugin on a successful search, -1 on a failed search. + * + * @note Prior to 1.8, this function would only search for plugins registered names, not + * the filename. + * + * @note The plugin registered name search is a case insensitive search, however, the plugin + * filename search is case sensitive. + */ +native is_plugin_loaded(const name[], bool:usefilename=false); + +/* Gets info about plugin by given index. + * Function returns -1 if plugin doesn't exist with given index. + * Note: the [...] portion should not be used, and is only for backward compatibility. + * Use index of -1 to use the calling plugin's ID. + */ +native get_plugin(index,filename[]="",len1=0,name[]="",len2=0,version[]="",len3=0,author[]="",len4=0,status[]="",len5=0,...); + +/* Returns number of all loaded plugins. */ +native get_pluginsnum(); + +/* Pauses function or plugin so it won't be executed. +* In most cases param1 is name of function and +* param2 name of plugin (all depends on flags). +* Flags: +* "a" - pause whole plugin. +* "c" - look outside the plugin (by given plugin name). +* "d" - set "stopped" status when pausing whole plugin. +* In this status plugin is unpauseable. +* Example: pause("ac","myplugin.amxx") +* +* Note: There used to be the b and e flags as well, +* which have been deprecated and are no longer used. +*/ +native pause(const flag[], const param1[]="",const param2[]=""); + +/* Unpauses function or plugin. +* Flags: +* "a" - unpause whole plugin. +* "c" - look outside the plugin (by given plugin name). */ +native unpause(const flag[], const param1[]="",const param2[]=""); + +/* Call a function in this / an another plugin by name. +* Parameters: +* plugin - plugin filename; if "", the caller plugin is used. +* If specified, it has to be the exact filename (for example stats.amxx) +* func - function name +* Return value: +* 1 - Success +* 0 - Runtime error +* -1 - Plugin not found +* -2 - Function not found */ +native callfunc_begin(const func[], const plugin[]=""); + +/* Call a function in this / an another plugin by id. +* Parameters: +* plugin - plugin id; the id you would pass to get_plugin +* If < 0, the current plugin is taken +* func - function id +* Return value: +* 1 - Success +* -1 - Plugin not found +* -2 - Function not executable */ +native callfunc_begin_i(func, plugin = -1); + +/* Get a function id (for callfunc_begin_i) + To get the plugin id, use the find_plugin stock +*/ +native get_func_id(const funcName[], pluginId = -1); + +/* Push a parameter (integer, string, float) + * Note that none of these values are const. + * Anything pushed by intrf, floatrf, array, or str + * can be modified by the called function. + */ +native callfunc_push_int(value); +native callfunc_push_float(Float: value); +native callfunc_push_intrf(&value); +native callfunc_push_floatrf(& Float: value); + +/* If copyback is 1 (default), any changes are copied back. + * Note that this will defy the 'const' specifier for push_str(), + * which is only kept for special backwards compatibility. + */ +native callfunc_push_str(const VALUE[], bool:copyback=true); +native callfunc_push_array(const VALUE[], array_size, bool:copyback=true); + +/* Make the actual call. +* Return value of the function called. */ +native callfunc_end(); + +/* Called on inconsistent file. You can put any text +* into reason to change an original message. */ +forward inconsistent_file(id,const filename[], reason[64] ); + +/* Forces the client and server to be running with the same +* version of the specified file ( e.g., a player model ). */ +native force_unmodified(force_type, const mins[3] , const maxs[3], const filename[]); + +/* Calculates the md5 keysum of a string */ +native md5(const szString[], md5buffer[34]); + +/* Calculates the md5 keysum of a file */ +native md5_file(const file[], md5buffer[34]); + +/* Returns the internal flags set on the plugin's state + * If hdr is 1, it will return the pcode flags rather than state flags. + * + * Use a plid of -1 to get the flags for the calling plugin. + */ +native plugin_flags(hdr=0, plid=-1); + +/** + * @deprecated + * Do not use! + */ +forward plugin_modules(); + +native require_module(const module[]); + +native is_amd64_server(); + +/* Returns plugin id searched by file/name. Returns INVALID_PLUGIN_ID on failure. */ +native find_plugin_byfile(const filename[], ignoreCase=1); + +/* This is called before plugin_init and allows you to register natives. */ +forward plugin_natives(); + +/* Registers a NATIVE. When a plugin uses your native (you should distribute a .inc), + * the handler will be called with two parameters: the calling plugin id, and the + * number of parameters. + * If you set style=1, the method of parameter passing is a tad more efficient. + * Instead of "id, numParams", you label the native exactly as how the parameters + * should, in theory, be sent. Then for each byreference parameter, you call + * param_convert(num). This is theoretically more efficient but quite hacky. + * The method was discovered by dJeyL, props to him! + */ +native register_native(const name[], const handler[], style=0); + +/* Registers a library. To mark a library as required, place the following + * in your include file: + * #pragma reqlib <name> + * #if !defined AMXMODX_NOAUTOLOAD + * #pragma loadlib <name> + * #endif + */ +native register_library(const library[]); + +/* Logs an error in your native, and breaks into the debugger. + * Acts as if the calling plugin had the error. + */ +native log_error(error, const fmt[], any:...); + +// More Dynamic Native System Stuff +// Each of these natives affects one of the parameters sent to your native. +// Parameters go from 1 to n, just like in modules, and it is important to +// remember two things: The parameters are actually coming from another plugin +// (and just like modules, you must use these special natives). +// two: you CANNOT call your native from inside your native. This is very bad. + +//This function should only be called if you registered with style=1 +//You only need to use it on by-reference parameters. +native param_convert(num); + +// Gets a string from the calling plugin +native get_string(param, dest[], maxlen); + +// Sets a string in the calling plugin +native set_string(param, dest[], maxlen); + +// Gets a normal int or float parameter +native get_param(param); +native Float:get_param_f(param); + +// Gets/Sets a float or int parameter by reference +native get_param_byref(param); +native Float:get_float_byref(param); +native set_param_byref(param, value); +native set_float_byref(param, Float:value); + +// Copies an array either from the calling plugin to you +// Or copies an array from you to the calling plugin +native get_array(param, dest[], size); +native get_array_f(param, Float:dest[], size); +native set_array(param, const source[], size); +native set_array_f(param, const Float:source[], size); + +// Dispatches a client cvar query +// id: Player id +// cvar: cvar name +// resultFunc: public handler function +// paramLen + params: optional array parameter +// resultFunc looks like: +// public callbackCvarValue(id, const cvar[], const value[]) +// or if you use the optional parameter: +// public callbackCvarValue(id, const cvar[], const value[], const param[]) +native query_client_cvar(id, const cvar[], const resultFunc[], paramlen=0, const params[] = ""); + + +/** + * Allows you to trap error messages that occur in your plugin. + * You can use this to override the debug messages that occur when your plugin + * causes some sort of runtime error. Your handler will be called in this style: + * + * public error_filter(error_code, bool:debugging, message[]) + * error_code is the AMX_ERR code. debugging is whether or not the plugin is in debug mode. + * message[] is any message that was sent along with the error. + * Return PLUGIN_CONTINUE to let the error pass through the filter. + * Return PLUGIN_HANDLED to block the error from displaying. + */ +native set_error_filter(const handler[]); + +/** + * Gets a trace handle for the item at the top of the traced call stack. + * Returns 0 if no debugging information is available. + */ +native dbg_trace_begin(); + +/** + * Gets the next item in a traced call stack. Returns 0 if no more traces exist. + */ +native dbg_trace_next(trace); + +/** + * Gets the call stack info for a trace. + */ +native dbg_trace_info(trace, &line, function[], maxLength1, file[], maxLength2); + +/** + * Gets the formatted error string, which looks like "Run time error X: (description)" + */ +native dbg_fmt_error(buffer[], maxLength); + +/** + * The following two natives are useful for creating cross-mod plugins + * where instead of #define flags to compile separate versions, you can + * filter out the natives and modules depending on the current mod. + * Examples of this usage are in plmenu.sma, which filters out the cstrike module. + */ + +/** + * Sets a native filter. This must be first set in plugin_natives(), but future calls will + * simply set a new filter. + * This filter will allow your plugin to load even if its modules aren't loaded. For example, + * if Fun isn't loaded and you use set_user_frags, your plugin will still load. However, if you + * attempt to call this native, your filter will intercept it with these parameters: + * + * public function native_filter(const name[], index) + * native - name of native + * index - index of native + * trap - 0 if native couldn't be found, 1 if native use was attempted + * + * If you return PLUGIN_HANDLED, no error is thrown. If you return PLUGIN_CONTINUE, + * your plugin will have a run-time-error. To print your own error, or change the default, + * you can return PLUGIN_HANDLED or return PLUGIN_CONTINUE and use set_error_filter. + * If you return PLUGIN_CONTINUE when trap is 0, the plugin will ABORT AND FAIL TO LOAD! + * When trap is 0, it is unsafe to use natives that modify the server or use other plugins. + */ +native set_native_filter(const handler[]); + +/** + * This function sets a module/library filter. It will let you intercept the automatic requirement + * of a module and return PLUGIN_CONTINUE to fail load or PLUGIN_HANDLED to imply that load + * can continue even without the module. + * + * This is the most unforgiving of the filter functions. You can ONLY call it during plugin_natives, + * and any error that occurs is not filtered -- instead your plugin will fail to load as if you + * returned PLUGIN_CONTINUE. + * + * Your handler will be called with this prototype: + * + * public module_filter(const library[], LibType:type); + * library - library or class name of the module that is required + * libtype - The type of requirement being checked (library/module or class). + * + * + * set_module_filter() returns 0 on success (unlike most natives). + */ +native set_module_filter(const handler[]); + +/** + * Aborts execution of the current callback. Your script will throw a run time error. + * You can also specify an optional message. + * You should NOT call this function inside: + * - Error or module filters (native filters are safe if trap is 1) + * - plugin_natives() + * Note that the plugin's filename is prepending to your message: + * [myplugin.amxx] MESSAGE + */ +native abort(error, const fmt[]="", any:...); + +/** + * Checks if a specific module is loaded. This is the exact same method AMX Mod X + * uses to see if a module is required by a plugin. For example: + * module_exists("cstrike") + * module_exists("dbi") + */ +native module_exists(const logtag[]); + +/** + * Checks if a library/class is loaded. This is the newer version of module_exists. + */ +native LibraryExists(const library[], LibType:type); + +/** + * Returns the next valid hudchannel for a user, from 1-4. + */ +native next_hudchannel(player); + +/** + * Creates a HUD Synchronization Object. Create one of these + * for each section of the screen that contains overlapping HUD messages. + * For example, if you use both sides of the screen to display three messages + * that can potentially overlap, each side counts as a synchronizable area. + * You can then use ShowSyncHudMsg() to correctly synchronize displaying the + * HUD message with any other messages potentially in its class. Note that this + * does not yet do anything like reserve screen area, its sole purpose is to be + * able to wipe an old message on an auto-channel and ensure that it will not + * clear a message from another plugin. + * The parameters are kept blank for future use. + */ +native CreateHudSyncObj(num=0, ...); + +/** + * Displays a synchronized HUD message. This will check that your + * HUD object has its previous display on the screen cleared before + * it proceeds to write another. It will only do this in the case + * of that channel not having been cleared already. + * Target can be 0 for all players or 1-get_maxplayers(). + * You must use set_hudmessage, although the channel parameter is + * entirely ignored. + */ +native ShowSyncHudMsg(target, syncObj, const fmt[], any:...); + +/** + * Clears the display on a HudSync Object. This is essentially the same + * thing as: ShowSyncHudMsg(x, y, ""), except doing that would send + * out two messages and use up another channel. This re-uses the last + * channel and clears it at the same time. + * Note: for this you do not have to use set_hudmessage(). + * Note: target can be 0 for all players. + */ +native ClearSyncHud(target, syncObj); + +//no +native int3(); + +//Sets your plugin to a failed/error state. +//If you use this, your plugin will cease operating. +//This is a good idea to fatally, but gracefully, handle errors. +//You can set a failed error message. +native set_fail_state(const err_msg[]); + +//Returns the reference address of the variable passed in. +//This address is local to the plugin, and not a full CPU address +//pass the variable as the first parameter +native get_var_addr(any:...); + +//Returns the value of an address. This dereferences something returned by +// get_var_addr(). Attempting to pass in a value beyond stack or heap limits +// will result in AMX_ERR_MEMACCESS. +native get_addr_val(addr); + +//Sets the value of an address. same as above, essentially +native set_addr_val(addr, val); + + +/** + * Creates a multi-plugin forward. + * Stop type must be one of the ET_ values in amxconst.inc + * results will be > 0 for success + */ +native CreateMultiForward(const name[], stop_type, ...); + +/** + * Creates a multi-forward plugin that can filter between old/new plugins. + * Old plugins are used by the AMX Mod backwards compatibility layer. + * Stop type must be one of the ET_ values in amxconst.inc + * Forward type must be one of the FORWARD_ values in amxconst.inc. + */ +native CreateMultiForwardEx(const name[], stop_type, forward_type, ...); + +/** + * Creates a forward for one plugin. + * Results will be > 0 for success. + * id should be an id such as returned by find_plugin_byfile. + * Unlike get_plugin(), negative numbers will not work. + */ +native CreateOneForward(plugin_id, const name[], ...); + +/** + * prepares an array. use this and pass the result into + * ExecuteForward() instead of the array itself. + */ +native PrepareArray(const array[], size, copyback=0); + +/** + * executes a forward. returns result in ret. + * returns 1 for success, 0 for failure. + */ +native ExecuteForward(forward_handle, &ret, any:...); + +/** + * Destroys/deallocates any type of forward + */ +native DestroyForward(forward_handle); + + +/* CVAR Pointer natives. Use these for + * more optimized CVAR usage. + * register_cvar() returns a pointer you can use. + */ + +/** + * Get a cvar pointer. Returns 0 if not found. + */ +native get_cvar_pointer(const cvar[]); + +native get_pcvar_flags(pcvar); +native set_pcvar_flags(pcvar, flags); +native get_pcvar_num(pcvar); +native set_pcvar_num(pcvar, num); +native Float:get_pcvar_float(pcvar); +native set_pcvar_float(pcvar, Float:num); +native get_pcvar_string(pcvar, string[], maxlen); +native set_pcvar_string(pcvar, const string[]); + +/** + * Sets a whole array to a certain value. + */ +native arrayset(array[], value, size); + +/** + * Returns the weapon id, otherwise 0 when no id found. + * The weapon name is case sensitive, and has the weapon_* form. + */ +native get_weaponid(const name[]); + +/** + * Adds an admin to the dynamic admin storage + * for lookup at a later time + */ +native admins_push(const AuthData[], const Password[], Access, Flags); + +/** + * Gets the number of admins in the dynamic admin + * storage list + */ +native admins_num(); + +/** + * Gets information about a dynamically stored admin + * Use the enum AdminProp + * Returns an integer value: AdminProp_Access, AdminProp_Flags + * Sets the buffer string: AdminProp_Auth, AdminProp_Password + */ +native admins_lookup(num, AdminProp:Property, Buffer[]="", BufferSize=0); + +/** + * Clears the list of dynamically stored admins + */ +native admins_flush(); +// Keep this always at the bottom of this file +#include <message_stocks> diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/cellarray.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/cellarray.inc new file mode 100644 index 0000000..46fc0f1 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/cellarray.inc @@ -0,0 +1,254 @@ +#if defined _cellarray_included + #endinput +#endif + +#define _cellarray_included + +enum Array +{ + Invalid_Array = 0 +}; +/** + * These arrays are intended to be used for a form of global storage without + * requiring a #define that needs to be increased each time a person needs more + * storage. + * These are not designed to be used as a replacement for normal arrays, as + * normal arrays are faster and should be used whenever possible. + */ + +/** + * Creates a handle to a dynamically sized array. + * It is very important that the cellsize you provide matches up with the buffer sizes + * that you pass with subsequent Array{Get,Set,Push} calls. + * + * @param cellsize How many cells each entry in the array is. + * @param reserved How many blank entries are created immediately when the array is created. These entries are not valid to read from until called with ArraySet. + * @return Handle to the array. + */ +native Array:ArrayCreate(cellsize=1, reserved=32); + +/** + * Clears all entries from the array. + * + * @param which The array to clear. + * @return 1 on success, 0 on failure. + */ +native ArrayClear(Array:which); + +/** + * Returns the number of elements in the array. + * + * @param which The array to check. + * @return How many elements are in the array. + */ +native ArraySize(Array:which); + +/** + * Returns data within an array. + * Make sure the output buffer matches the size the array was created with! + * + * @param which The array to retrieve the item from. + * @param item The item to retrieve (zero-based). + * @param output The output buffer to write. + */ +native ArrayGetArray(Array:which, item, any:output[]); + +/** + * Returns a single cell of data from an array. + * Use this only with arrays that were created with a cellsize of 1! + * + * @param which The array to retrieve the item from. + * @param item The item to retrieve (zero-based). + * @return The value of the cell. + */ +native any:ArrayGetCell(Array:which, item); + +/** + * Returns a string value from an array. + * + * @param which The array to retrieve the item from. + * @param item The item to retrieve (zero-based). + * @param output The variable to store the value in. + * @param size Character size of the output buffer. + */ +native ArrayGetString(Array:which, item, output[], size); + +/** + * Sets an item's data with that of a local buffer. + * The buffer size must match what the cellsize that the array was created with! + * The item must already exist, use ArrayPushArray to create a new item within the array. + * + * @param which The array to set the item from within. + * @param item The item to set (zero-based). + * @param input The input buffer to store. + */ +native ArraySetArray(Array:which, item, const any:input[]); + +/** + * Sets an array's single cell value. Use this only on array that were created with a cellsize of 1! + * The item must already exist, use ArrayPushCell to create a new item within the array. + * + * @param which The array to set the item from within. + * @param item The item to set (zero-based). + * @param input The value to set. + */ +native ArraySetCell(Array:which, item, any:input); + +/** + * Sets a string value from an array. + * The stored string will be truncated if it is longer than the cellsize the array was created with! + * The item must already exist, use ArrayPushString to create a new item within the array. + * + * @param which The array to set the item from within. + * @param item The item to set (zero-based). + * @param input The string to set the item as. + */ +native ArraySetString(Array:which, item, const input[]); + +/** + * Creates a new item at the end of the array and sets its data with that of a local buffer. + * The buffer size must match what the cellsize that the array was created with! + * + * @param which The array to add the item to. + * @param input The input buffer to store. + */ +native ArrayPushArray(Array:which, const any:input[]); + +/** + * Creates a new item and sets the array's single cell value. + * Use this only on array that were created with a cellsize of 1! + * + * @param which The array to add the item to. + * @param input The value to set. + */ +native ArrayPushCell(Array:which, any:input); + +/** + * Creates a new element in the array and sets its value to the input buffer. + * The stored string will be truncated if it is longer than the cellsize the array was created with! + * + * @param which The array to add the item to. + * @param input The string to set the item as. + */ +native ArrayPushString(Array:which, const input[]); + +/** + * Inserts an item after the selected item. All items beyond it get shifted up 1 space. + * The buffer size must match what the cellsize that the array was created with! + * + * @param which The array to add the item to. + * @param item The item to insert after. + * @param input The input buffer to store. + */ +native ArrayInsertArrayAfter(Array:which, item, const any:input[]); + +/** + * Inserts an item after the selected item. All items beyond it get shifted up 1 space. + * Use this only on an array that was created with a cellsize of 1! + * + * @param which The array to add the item to. + * @param item The item to insert after. + * @param input The value to set. + */ +native ArrayInsertCellAfter(Array:which, item, any:input); + +/** + * Inserts an item after the selected item. All items beyond it get shifted up 1 space. + * The stored string will be truncated if it is longer than the cellsize the array was created with! + * + * @param which The array to add the item to. + * @param item The item to insert after. + * @param input The value to set. + */ +native ArrayInsertStringAfter(Array:which, item, const input[]); + +/** + * Inserts an item before the selected item. All items beyond it, and the selected item get shifted up 1 space. + * The buffer size must match what the cellsize that the array was created with! + * + * @param which The array to add the item to. + * @param item The item to insert before. + * @param input The input buffer to store. + */ +native ArrayInsertArrayBefore(Array:which, item, const any:input[]); + +/** + * Inserts an item before the selected item. All items beyond it, and the selected item get shifted up 1 space. + * Use this only on an array that was created with a cellsize of 1! + * + * @param which The array to add the item to. + * @param item The item to insert after. + * @param input The value to set. + */ +native ArrayInsertCellBefore(Array:which, item, const any:input); + +/** + * Inserts an item before the selected item. All items beyond it, and the selected item get shifted up 1 space. + * The stored string will be truncated if it is longer than the cellsize the array was created with! + * + * @param which The array to add the item to. + * @param item The item to insert before. + * @param input The value to set. + */ +native ArrayInsertStringBefore(Array:which, item, const input[]); + +/** + * Swaps the position of two items. + * + * @param which The array that contains the items. + * @param item1 The first item to swap. + * @param item2 The second item to swap. + */ +native ArraySwap(Array:which, item1, item2); + +/** + * Deletes an item from the array. All items beyond it get shifted down 1 space. + * + * @param which The array that contains the item to delete. + * @param item The item to delete. + */ +native ArrayDeleteItem(Array:which, item); + +/** + * Creates a handle that is passable to a format compliant routine for printing as a string (with the %a format option). + * It is suggested to pass the function directly as a parameter to the format routine. + * The array contents must be a null-terminated string! + * + * An example usage: client_print(id, print_chat, "%a", ArrayGetStringHandle(MessageArray, i)); + * + * @param which The array the string is stored in. + * @param item Which item to print the string value of. + * @return Handle to the item directly. Do not use or save stale handles. + */ +native DoNotUse:ArrayGetStringHandle(Array:which, item); + +/** + * Destroys the array, and resets the handle to 0 to prevent accidental usage after it is destroyed. + * + * @param which The array to destroy. + */ +native ArrayDestroy(&Array:which); + + + +/** + * Similar to sorting.inc's CustomSort. + * The sorting algorithm then uses your comparison function to sort the data. + * The function is called in the following manner: + * + * public MySortFunc(Array:array, item1, item2, const data[], data_size) + * + * array - Array handle in its current un-sorted state. + * item1, item2 - Current item pair being compared + * data[] - Extra data array you passed to the sort func. + * data_size - Size of extra data you passed to the sort func. + * + * Your function should return: + * -1 if item1 should go before item2 + * 0 if item1 and item2 are equal + * 1 if item1 should go after item2 + * Note that the parameters after item2 are all optional and you do not need to specify them. + * + * Note that unlike the sorting.inc versions, the array passed to the callback is not in mid-sorted state. + */ +native ArraySort(Array:array, const comparefunc[], data[]="", data_size=0); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/celltrie.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/celltrie.inc new file mode 100644 index 0000000..2300c6e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/celltrie.inc @@ -0,0 +1,26 @@ +#if defined _celltrie_included +#endinput +#endif +#define _celltrie_included + +enum Trie +{ + Invalid_Trie = 0 +}; + + +native Trie:TrieCreate(); +native TrieClear(Trie:handle); + +native TrieSetCell(Trie:handle, const key[], any:value); +native TrieSetString(Trie:handle, const key[], const value[]); +native TrieSetArray(Trie:handle, const key[], const any:buffer[], size); + +native bool:TrieGetCell(Trie:handle, const key[], &any:value); +native bool:TrieGetString(Trie:handle, const key[], output[], outputsize); +native bool:TrieGetArray(Trie:handle, const key[], any:output[], outputsize); + +native bool:TrieDeleteKey(Trie:handle, const key[]); +native bool:TrieKeyExists(Trie:handle, const key[]); +native TrieDestroy(&Trie:handle); + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/core.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/core.inc new file mode 100644 index 0000000..496c66e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/core.inc @@ -0,0 +1,44 @@ +/* Core functions +* +* (c) Copyright 1998-2003, ITB CompuPhase +* +* This file is provided as is (no warranties). +*/ + +#if defined _core_included + #endinput +#endif +#define _core_included + +native heapspace(); + +native funcidx(const name[]); + +native numargs(); +native getarg(arg, index=0); +native setarg(arg, index=0, value); + +native strlen(const string[]); + +native tolower(c); +native toupper(c); +native swapchars(c); + +native random(max); + +native min(value1, value2); +native max(value1, value2); +native clamp(value, min=cellmin, max=cellmax); + +native power(value, exponent); +native sqroot(value); + +native time(&hour=0,&minute=0,&second=0); +native date(&year=0,&month=0,&day=0); + +native tickcount(&granularity=0); + +stock abs(x) +{ + return x > 0 ? x : -x; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/csstats.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/csstats.inc new file mode 100644 index 0000000..7755dcf --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/csstats.inc @@ -0,0 +1,61 @@ + +#if defined _csstats_included + #endinput +#endif +#define _csstats_included + +/* Gets stats from given weapon index. If wpnindex is 0 +* then the stats are from all weapons. If weapon has not been used function +* returns 0 in other case 1. Fields in stats are: +* 0 - kills +* 1 - deaths +* 2 - headshots +* 3 - teamkilling +* 4 - shots +* 5 - hits +* 6 - damage + +* For body hits fields see amxconst.inc. */ +native get_user_wstats(index,wpnindex,stats[8],bodyhits[8]); + +/* Gets round stats from given weapon index.*/ +native get_user_wrstats(index,wpnindex,stats[8],bodyhits[8]); + +/* Gets overall stats which are stored in file on server +* and updated on every respawn or user disconnect. +* Function returns the position in stats by diff. kills to deaths. */ +native get_user_stats(index,stats[8],bodyhits[8]); + +/* Gets round stats of player. */ +native get_user_rstats(index,stats[8],bodyhits[8]); + +/* Gets stats with which user have killed/hurt his victim. If victim is 0 +* then stats are from all victims. If victim has not been hurt, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_vstats(index,victim,stats[8],bodyhits[8],wpnname[]="",len=0); + +/* Gets stats with which user have been killed/hurt. If killer is 0 +* then stats are from all attacks. If killer has not hurt user, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_astats(index,wpnindex,stats[8],bodyhits[8],wpnname[]="",len=0); + +/* Resets life, weapon, victims and attackers user stats. */ +native reset_user_wstats(index); + +/* Gets overall stats which stored in stats.dat file in amx folder +* and updated on every mapchange or user disconnect. +* Function returns next index of stats entry or 0 if no more exists. */ +native get_stats(index,stats[8],bodyhits[8],name[],len,authid[] = "",authidlen = 0); + +/* Returns number of all entries in stats. */ +native get_statsnum(); + +/* +* new stats: +* 0 - total defusions +* 1 - bomb defused +* 2 - bomb plants +* 3 - bomb explosions +*/ +native get_user_stats2(index,stats[4]); +native get_stats2(index,stats[4],authid[] = "",authidlen = 0); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/cstrike.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/cstrike.inc new file mode 100644 index 0000000..2c0e85a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/cstrike.inc @@ -0,0 +1,355 @@ +/* Counter-Strike functions +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _cstrike_included + #endinput +#endif +#define _cstrike_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib cstrike + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib cstrike + #endif +#else + #pragma library cstrike +#endif + +/* Returns player deaths. + */ +native cs_get_user_deaths(index); + +/* Sets player deaths. + */ +native cs_set_user_deaths(index, newdeaths); + +/* Returns index of entity (does not have to be a player) which hostage is following. 0 is hostage doesn't follow anything. + * Note: this native does not work on Condition Zero, which has a different hostage AI than CS. + */ +native cs_get_hostage_foll(index); + +/* Set hostage to follow entity specified in followedindex. Does not have to be a player. If followedindex is 0 the hostage will stop following. + * Note: this native does not work on Condition Zero, which has a different hostage AI than CS. + */ +native cs_set_hostage_foll(index, followedindex = 0); + +/* Get unique hostage id. + */ +native cs_get_hostage_id(index); + +/* Get amount of ammo in backpack on a user for a specific weapon. + * Look in amxconst.inc for weapon types: CSW_*. + * Weapons on the same line uses the same ammo type: + * awm + * scout, ak, g3 + * para + * famas, m4a1, aug, sg550, galil, sg552 + * m3, xm + * usp, ump, mac + * fiveseven, p90 + * deagle + * p228 + * glock, mp5, tmp, elites + * flash + * he + * smoke + */ +native cs_get_user_bpammo(index, weapon); + +/* Restock/remove ammo in a user's backpack. + */ +native cs_set_user_bpammo(index, weapon, amount); + +/* Returns 1 if user has a defuse kit. + */ +native cs_get_user_defuse(index); + +/* If defusekit is 1, the user will have a defuse kit. + * You can specify a different colour for the defuse kit icon showing on hud. Default is the normal green. + * You can specify an icon. Default is "defuser". Set flash to 1 if you want the icon to flash red. + */ +native cs_set_user_defuse(index, defusekit = 1, r = 0, g = 160, b = 0, icon[] = "defuser", flash = 0); + +/* Is user in buyzone? Returns 1 when true, 0 when false. + */ +native cs_get_user_buyzone(index); + +/* Returns 1 when user has a primary weapon OR a shield in inventory, else 0. + */ +native cs_get_user_hasprim(index); + +/* Get user model. + */ +native cs_get_user_model(index, model[], len); + +/* Set user model. + */ +native cs_set_user_model(index, const model[]); + +/* Use to reset model to standard selected model. + */ +native cs_reset_user_model(index); + +/* Returns users money. + */ +native cs_get_user_money(index); + +/* Gives money to user. If flash is 1, the difference between new and old amount will flash red or green. + */ +native cs_set_user_money(index, money, flash = 1); + +/* Does user have night vision goggles? + */ +native cs_get_user_nvg(index); + +/* Set nvgoggles to 1 to give night vision goggles to index. Set it to 0 to remove them. + */ +native cs_set_user_nvg(index, nvgoggles = 1); + +/* Returns 1 if user has the "skill" to plant bomb, else 0. Normally this would only be true for a terrorist carrying a bomb. + */ +native cs_get_user_plant(index); + +/* If plant is 1, a user will be set to be able to plant bomb within the usual bomb target areas if having one. + * You should use this if you give a player a weapon_c4, or he won't be able to plant it + * without dropping it and picking it up again (only possible for terrorists). + * If showbombicon is 1, the green C4 icon will be shown on user hud (if plant "skill" was enabled). + */ +native cs_set_user_plant(index, plant = 1, showbombicon = 1); + +/* Set user team without killing player. + * If model is anything other than CS_DONTCHANGE, that will be set as player's model. + */ +enum CsInternalModel { + CS_DONTCHANGE = 0, + CS_CT_URBAN = 1, + CS_T_TERROR = 2, + CS_T_LEET = 3, + CS_T_ARCTIC = 4, + CS_CT_GSG9 = 5, + CS_CT_GIGN = 6, + CS_CT_SAS = 7, + CS_T_GUERILLA = 8, + CS_CT_VIP = 9, + CZ_T_MILITIA = 10, + CZ_CT_SPETSNAZ = 11 +}; +native cs_set_user_team(index, {CsTeams,_}:team, {CsInternalModel,_}:model = CS_DONTCHANGE); + +/* Get team directly from player's entity. + * 1 = terrorist + * 2 = counter-terrorist + * 3 = spectator + */ +enum CsTeams { + CS_TEAM_UNASSIGNED = 0, + CS_TEAM_T = 1, + CS_TEAM_CT = 2, + CS_TEAM_SPECTATOR = 3 +}; +native CsTeams:cs_get_user_team(index, &{CsInternalModel,_}:model = CS_DONTCHANGE); + +/* Is user vip? Returns 1 if true, 0 if false. + */ +native cs_get_user_vip(index); + +/* If vip = 1, user is set to vip. + * If model = 1, then user's model will be changed to VIP model or random CT model if vip = 0. + * If scoreboard = 1, then scoreboard will be updated to show that user is VIP. + * This shouldn't be used for players on teams other than CT. + * NOTE: this is mostly useful for unsetting vips, so they can change teams and/or buy items properly. + * It does not alter game play; the one being VIP at start of round will retain internal status as VIP; terrorists + * can terminate him and accomplish their objective, etc. + */ + native cs_set_user_vip(index, vip = 1, model = 1, scoreboard = 1); + +/* Returns 1 of specified user has tk:ed (team killed). + */ +native cs_get_user_tked(index); + +/* Returns 1 of specified user has TKed (team killed). + * tk = 1: player has TKed + * tk = 0: player hasn't TKed + * Set subtract to how many frags to subtract. Set subtract to negative value to add frags. + */ +native cs_set_user_tked(index, tk = 1, subtract = 1); + +/* Returns different values depending on if user is driving a vehicle - and if so at what speed. + * 0: no driving + * 1: driving, but standing still + * 2-4: driving, different positive speeds + * 5: driving, negative speed (backing) + * Note: these values were tested quickly, they may differ. + */ +native cs_get_user_driving(index); + +/* Returns 1 if user has a shield, else 0. + */ +native cs_get_user_shield(index); + +/* Returns 1 if user is using a stationary gun, else 0. + */ +native cs_get_user_stationary(index); + +/* Returns armor value and sets by reference the armor type in second parameter. + */ +enum CsArmorType { + CS_ARMOR_NONE = 0, // no armor + CS_ARMOR_KEVLAR = 1, // armor + CS_ARMOR_VESTHELM = 2 // armor and helmet +}; +native cs_get_user_armor(index, &CsArmorType:armortype); + +/* Use this instead of fun's set_user_armor. + * Appropriate message to update client's HUD will be sent if armortype is kevlar or vesthelm. + */ +native cs_set_user_armor(index, armorvalue, CsArmorType:armortype); + +/* Returns 1 if specified weapon is in burst mode. + */ +native cs_get_weapon_burst(index); + +/* If burstmode = 1, weapon will be changed to burst mode, 0 and non-burst mode (semiautomatic/automatic) will be activated. + * Only GLOCK and FAMAS can enter/leave burst mode. + */ +native cs_set_weapon_burst(index, burstmode = 1); + +/* Returns 1 if weapon is silenced, else 0. + */ +native cs_get_weapon_silen(index); + +/* If silence = 1, weapon will be silenced, 0 and silencer will be removed. Only USP and M4A1 can be silenced. + */ +native cs_set_weapon_silen(index, silence = 1, draw_animation = 1); + +/* Returns amount of ammo in weapon's clip. + */ +native cs_get_weapon_ammo(index); + +/* Set amount of ammo in weapon's clip. + */ +native cs_set_weapon_ammo(index, newammo); + +/* Get weapon type. Corresponds to CSW_* in amxconst.inc: 1 is CSW_P228, 2 is CSW_SCOUT and so on... + */ +native cs_get_weapon_id(index); + +/* Returns 1 if no knives mode is enabled, else 0. + */ +native cs_get_no_knives(); + +/* Enabled no knives mode by calling this with value 1. Disabled with 0. + * No knives mode means that player will not be given a knife when spawning. + * You can still give knives (ie through fun's give_item). + */ +native cs_set_no_knives(noknives = 0); + +/* Spawns a Counter-Strike player + */ +native cs_user_spawn(player); + +/* Get what weapon type (CSW_*) an armoury_entity is. + */ +native cs_get_armoury_type(index); + +/* Set an armoury_entity to be of specified type. You will have to set the appropriate model. + * The second argument, type, should be a CSW_* constant. Not all weapons are supported by Counter-strike. + * Supported weapons/items: CSW_MP5NAVY, CSW_TMP, CSW_P90, CSW_MAC10, CSW_AK47, CSW_SG552, CSW_M4A1, CSW_AUG, CSW_SCOUT + * CSW_G3SG1, CSW_AWP, CSW_M3, CSW_XM1014, CSW_M249, CSW_FLASHBANG, CSW_HEGRENADE, CSW_VEST, CSW_VESTHELM, CSW_SMOKEGRENADE + */ +native cs_set_armoury_type(index, type); + +#define CS_MAPZONE_BUY (1<<0) +#define CS_MAPZONE_BOMBTARGET (1<<1) +#define CS_MAPZONE_HOSTAGE_RESCUE (1<<2) +#define CS_MAPZONE_ESCAPE (1<<3) +#define CS_MAPZONE_VIP_SAFETY (1<<4) + +/* Returns in bitwise form if the user is in a specific map zone. + * NOTE: If user can't plant (cs_get_user_plant(index) is 0) then cs_get_user_mapzones(index) & CS_MAPZONE_BOMBTARGET will return 0 too. + */ +native cs_get_user_mapzones(index); + +/* Zoom type enum. Used for get/set_user_zoom() natives. + */ +enum +{ + CS_RESET_ZOOM = 0, // Reset any zoom blocking (when using this type, mode has no effect) + CS_SET_NO_ZOOM, // Disable any sort of zoom (ie: to disable zoom in all weapons use this with mode=0) + CS_SET_FIRST_ZOOM, // Set first zoom (awp style) + CS_SET_SECOND_ZOOM, // Set second zoom (awp style) + CS_SET_AUGSG552_ZOOM, // Set aug/sg552 zoom style +}; +/* Sets a weapon zoom type on a player, any zoom type will work for all weapons, so you can even set an awp zoom to pistols :D + * The 2nd param has to be one of the above zoom types in the enum. Mode can only be 0 or 1. + * If mode=0 (blocking mode), the user will be forced to use the zoom type set by the native, and wont be able to change it (even by changing weapon) + * until the native resets the zoom with CS_RESET_ZOOM. + * If mode=1 the user will be able to restore back to a normal view by changing weapon. + */ +native cs_set_user_zoom(index, type, mode); + +/* Returns how a user is zooming during the native call. Values correspond to the above enum, but will return 0 if an error occurred. + */ +native cs_get_user_zoom(index); + +/* Returns the submodel setting of the player. + * If this is 1, then the user has a backpack or defuser on their model (depending on team) + */ +native cs_get_user_submodel(index); + +/* Sets the submodel setting of the player. + * If this is 1, then the user has a backpack or defuser on their model (depending on team) + * 0 removes it. + */ +native cs_set_user_submodel(index, value); + +/* Gets or sets the user's last activity time. This is the time that CS's internal afk kicker + * checks to see who has been afk too long. + */ +native Float:cs_get_user_lastactivity(index); + +native cs_set_user_lastactivity(index, Float:value); + +/* Gets or sets the number of hostages that a user has killed. + */ +native cs_get_user_hostagekills(index); + +native cs_set_user_hostagekills(index, value); + +/* Gets or sets the time that the hostage was last used. + */ +native Float:cs_get_hostage_lastuse(index); + +native cs_set_hostage_lastuse(index, Float:value); + +/* Gets or sets the time which the hostage can next be used. + */ +native Float:cs_get_hostage_nextuse(index); + +native cs_set_hostage_nextuse(index, Float:value); + +/* Gets or sets the time in which the C4 will explode. + */ +native Float:cs_get_c4_explode_time(index); + +native cs_set_c4_explode_time(index, Float:value); + +/* Gets or sets whether the C4 is being defused. + */ +native bool:cs_get_c4_defusing(c4index); + +native cs_set_c4_defusing(c4index, bool:defusing); +/** + * Called when CS internally fires a command to a player. It does this for a few + * functions, most notably rebuy/autobuy functionality. This is also used to pass + * commands to CZ bots internally. + * + * @param id Client index. + * @param cmd Command string. + * @return PLUGIN_HANDLED to block, PLUGIN_CONTINUE for normal operation. + */ +forward CS_InternalCommand(id, const cmd[]); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/csx.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/csx.inc new file mode 100644 index 0000000..604ec26 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/csx.inc @@ -0,0 +1,68 @@ +/* CSX functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _csx_included + #endinput +#endif +#define _csx_included + +#include <csstats> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqclass xstats + #if !defined AMXMODX_NOAUTOLOAD + #pragma defclasslib xstats csx + #endif +#else + #pragma library csx +#endif + +/* + * Forwards + */ + +/* Function is called after player to player attacks , +* if players were damaged by teammate TA is set to 1 */ +forward client_damage(attacker,victim,damage,wpnindex,hitplace,TA); + +/* Function is called after player death , +* if player was killed by teammate TK is set to 1 */ +forward client_death(killer,victim,wpnindex,hitplace,TK); + +forward grenade_throw( index,greindex,wId ); + +forward bomb_planting(planter); +forward bomb_planted(planter); +forward bomb_explode(planter,defuser); +forward bomb_defusing(defuser); +forward bomb_defused(defuser); + +/************* Shared Natives Start ********************************/ + +/* Custom Weapon Support */ +/* function will return index of new weapon */ +native custom_weapon_add( const wpnname[],melee = 0,const logname[]="" ); +/* Function will pass damage done by this custom weapon to stats module and other plugins */ +native custom_weapon_dmg( weapon, att, vic, damage, hitplace=0 ); +/* Function will pass info about custom weapon shot to stats module */ +native custom_weapon_shot( weapon,index ); // weapon id , player id + +/* function will return 1 if true */ +native xmod_is_melee_wpn(wpnindex); + +/* Returns weapon name. */ +native xmod_get_wpnname(wpnindex,name[],len); + +/* Returns weapon logname. */ +native xmod_get_wpnlogname(wpnindex,name[],len); + +/* Returns weapons array size */ +native xmod_get_maxweapons(); + +/* Returns stats array size */ +native xmod_get_stats_size(); + +/************* Shared Natives End ********************************/ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dbi.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dbi.inc new file mode 100644 index 0000000..82c24d8 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dbi.inc @@ -0,0 +1,145 @@ +/* SQL Database API + * By the AMX Mod X Development Team + * Notes - Read the comments! Make sure your plugins use + * nice ANSI SQL and don't use database column names like "key" + * otherwise this API will be a nightmare + * Never do error checking with the not operator! This is bad: + * if (!dbi_query()) + * You should do: + * ret = dbi_query() + * if (ret < 0) + * This is because DBI functions can and will return negative numbers + * Negative numbers evaluate to "true" in AMX. + */ + +#if defined _dbi_included + #endinput +#endif +#define _dbi_included + +// You can't include SQLX first! +// there's really no reason to anyway. +#assert !defined _sqlx_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqclass dbi +#else + #pragma library dbi +#endif + +enum Sql +{ + SQL_FAILED=0, + SQL_OK +}; + +enum Result +{ + RESULT_FAILED=-1, + RESULT_NONE, + RESULT_OK +}; + +/* This will return a number equal to or below 0 on failure. + * If it does fail, the error will be mirrored in dbi_error() + * The return value will otherwise be a resource handle, not an + * OK code or cell pointer. + */ +native Sql:dbi_connect(_host[], _user[], _pass[], _dbname[], _error[]="", _maxlength=0); + +/* This will do a simple query execution on the SQL server. + * If it fails, it will return a number BELOW ZERO (0) + * If zero, it succeeded with NO RETURN RESULT. + * If greater than zero, make sure to call dbi_free_result() on it! + * The return is a handle to the result set + */ +native Result:dbi_query(Sql:_sql, _query[], any:...); + +/* Has the same usage as dbi_query, but this native returns by + * reference the number of rows affected in the query. If the + * query fails rows will be equal to -1. + */ +native Result:dbi_query2(Sql:_sql, &rows, _query[], any:...); + +/* Returns 0 on failure or End of Results. + * Advances result pointer by one row. + */ +native dbi_nextrow(Result:_result); + +/* Gets a field by number. Returns 0 on failure. + * Although internally fields always start from 0, + * This function takes fieldnum starting from 1. + * No extra params: returns int + * One extra param: returns Float: byref + * Two extra param: Stores string with length + */ +native dbi_field(Result:_result, _fieldnum, {Float,_}:... ); + +/* Gets a field by name. Returns 0 on failure. + * One extra param: returns Float: byref + * Two extra param: Stores string with length + */ +native dbi_result(Result:_result, _field[], {Float,_}:... ); + +/* Returns the number of rows returned from a query + */ +native dbi_num_rows(Result:_result); + +/* Frees memory used by a result handle. Do this or get memory leaks. + */ +native dbi_free_result(&Result:result); + +/* Closes a database handle. Internally, it will also + * mark the handle as free, so this particular handle may + * be re-used in the future to save time. + */ +native dbi_close(&Sql:_sql); + +/* Returns an error message set. For PGSQL and MySQL, + * this is a direct error return from the database handle/API. + * For MSSQL, it returns the last error message found from a + * thrown exception. + */ +native dbi_error(Sql:_sql, _error[], _len); + +/* Returns the type of database being used. So far: + * "mysql", "pgsql", "mssql", "sqlite" + */ +native dbi_type(_type[], _len); + +/* Returns the number of fields/colums in a result set. + * Unlike dbi_nextrow, you must pass a valid result handle. + */ +native dbi_num_fields(Result:result); + +/* Retrieves the name of a field/column in a result set. + * Requires a valid result handle, and columns are numbered 1 to n. + */ +native dbi_field_name(Result:result, field, name[], maxLength); + +/* This function can be used to find out if a table in a Sqlite database exists. + */ +stock bool:sqlite_table_exists(Sql:sql, table[]) +{ + new bool:exists; + new query[128]; + format(query, 127, "SELECT name FROM sqlite_master WHERE type='table' AND name='%s' LIMIT 1;", table); + + new Result:result = dbi_query(sql, query); + + if (dbi_nextrow(result)) + { + exists = true; + } + else + { + exists = false; + } + + if (result > RESULT_NONE) + { + dbi_free_result(result); + } + + return exists; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodconst.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodconst.inc new file mode 100644 index 0000000..4071109 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodconst.inc @@ -0,0 +1,135 @@ +/* DoDX functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _dodconst_included + #endinput +#endif +#define _dodconst_included + +/* DoD teams */ +#define ALLIES 1 +#define AXIS 2 + +#define FT_NEW 1<<0 +#define FT_OLD 1<<1 + +#define STAMINA_SET 0 +#define STAMINA_RESET 1 + +#define FUSE_SET 0 +#define FUSE_RESET 1 + +#define DODMAX_WEAPONS 46 // 5 slots for custom weapons + +// DoD Weapon Types +enum +{ + DODWT_PRIMARY = 0, + DODWT_SECONDARY, + DODWT_MELEE, + DODWT_GRENADE, + DODWT_OTHER +}; + +// Ammo Channels +#define AMMO_SMG 1 // thompson, greasegun, sten, mp40 +#define AMMO_ALTRIFLE 2 // carbine, k43, mg34 +#define AMMO_RIFLE 3 // garand, enfield, scoped enfield, k98, scoped k98 +#define AMMO_PISTOL 4 // colt, webley, luger +#define AMMO_SPRING 5 // springfield +#define AMMO_HEAVY 6 // bar, bren, stg44, fg42, scoped fg42 +#define AMMO_MG42 7 // mg42 +#define AMMO_30CAL 8 // 30cal +#define AMMO_GREN 9 // grenades (should be all 3 types) +#define AMMO_ROCKET 13 // bazooka, piat, panzerschreck +enum { + PS_NOPRONE =0, + PS_PRONE, + PS_PRONEDEPLOY, + PS_DEPLOY, +}; + +/* info types for dod_get_map_info native */ +enum { + MI_ALLIES_TEAM = 0, + MI_ALLIES_PARAS, + MI_AXIS_PARAS, +}; + +/* DoD weapons */ +enum { + DODW_AMERKNIFE = 1, + DODW_GERKNIFE, + DODW_COLT, + DODW_LUGER, + DODW_GARAND, + DODW_SCOPED_KAR, + DODW_THOMPSON, + DODW_STG44, + DODW_SPRINGFIELD, + DODW_KAR, + DODW_BAR, + DODW_MP40, + DODW_HANDGRENADE, + DODW_STICKGRENADE, + DODW_STICKGRENADE_EX, + DODW_HANDGRENADE_EX, + DODW_MG42, + DODW_30_CAL, + DODW_SPADE, + DODW_M1_CARBINE, + DODW_MG34, + DODW_GREASEGUN, + DODW_FG42, + DODW_K43, + DODW_ENFIELD, + DODW_STEN, + DODW_BREN, + DODW_WEBLEY, + DODW_BAZOOKA, + DODW_PANZERSCHRECK, + DODW_PIAT, + DODW_SCOPED_FG42, + DODW_FOLDING_CARBINE, + DODW_KAR_BAYONET, + DODW_SCOPED_ENFIELD, + DODW_MILLS_BOMB, + DODW_BRITKNIFE, + DODW_GARAND_BUTT, + DODW_ENFIELD_BAYONET, + DODW_MORTAR, + DODW_K43_BUTT, +}; + +/* DoD Classes */ +enum { + DODC_GARAND = 1, + DODC_CARBINE, + DODC_THOMPSON, + DODC_GREASE, + DODC_SNIPER, + DODC_BAR, + DODC_30CAL, + DODC_BAZOOKA, + //DODC_ALLIES_MORTAR, + DODC_KAR = 10, + DODC_K43, + DODC_MP40, + DODC_MP44, + DODC_SCHARFSCHUTZE, + DODC_FG42, + DODC_SCOPED_FG42, + DODC_MG34, + DODC_MG42, + DODC_PANZERJAGER, + //DODC_AXIS_MORTAR, + DODC_ENFIELD = 21, + DODC_STEN, + DODC_MARKSMAN, + DODC_BREN, + DODC_PIAT, + //DODC_BRIT_MORTAR, +}; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodfun.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodfun.inc new file mode 100644 index 0000000..ea8f63d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodfun.inc @@ -0,0 +1,149 @@ +/* DoDFun functions + * + * (c) 2004-2005, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _dodfun_included + #endinput +#endif +#define _dodfun_included + +#include <dodconst> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib dodfun + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib dodfun + #endif +#else + #pragma library dodfun +#endif + +/* Function is called after grenade throw */ +forward grenade_throw(index,greindex,wId); + +/* Function is called after a rocket is shot */ +forward rocket_shoot(index,rocketindex,wId); + +/* Example: for full stamina use dod_player_stamina(1,STAMINA_SET,100,100) */ +/* value is from 0 - 100 */ +native dod_set_stamina(index,set=STAMINA_SET,minvalue=0,maxvalue=100); + +/* Sets fuse for grenades. Valid number is from 0.1-20.0 */ +/* types : new or preprimed */ +native dod_set_fuse(index,set=FUSE_SET,Float:newFuse=5.0, Type=FT_NEW); + +/* Sets player class */ +native dod_set_user_class(index,classId); + +/* Sets player team and random class. Don't work for spectators. */ +native dod_set_user_team(index,teamId,refresh=1); + +/* Returns next player class. Usefull is player is using random class */ +native dod_get_next_class(index); + +/* Returns 1 if player choose random class */ +native dod_is_randomclass(index); + +/* Returns player deaths */ +native dod_get_pl_deaths(index); + +/* Sets player deaths. + * Note if you opt to refresh the scoreboard, it + * will make the player appear as "DEAD" in the scoreboard. + */ +native dod_set_pl_deaths(index,value,refresh=1); + +/* Returns player deaths. */ +native dod_get_user_kills(index); + +/* Sets player kills. */ +native dod_set_user_kills(index,value,refresh=1); + +/* Sets player score. */ +native dod_set_user_score(index,value,refresh=1); + +/* Sets new team name for this player */ +native dod_set_pl_teamname(index,const szName[]); + +/* Gets player team name */ +native dod_get_pl_teamname(index,szName[],len); + +/* Returns 1 is player weapon is deployed (bar,mg..) */ +native dod_is_deployed(index); + +/*Sets the ammo of the specified weapon entity id */ +native dod_set_user_ammo(index,wid,value); + +/*Gets the ammo of the specified weapon entity id */ +native dod_get_user_ammo(index,wid); + +/* called after first InitObj */ +forward controlpoints_init(); + +enum CP_VALUE { + CP_edict = 1, // read only + CP_area, // read only + CP_index, // read only + CP_owner, + CP_default_owner, + CP_visible, // reinit after change + CP_icon_neutral, // reinit after change + CP_icon_allies, // reinit after change + CP_icon_axis, // reinit after change + CP_origin_x, // reinit after change + CP_origin_y, // reinit after change + + CP_can_touch, + CP_pointvalue, + + CP_points_for_cap, + CP_team_points, + + CP_model_body_neutral, + CP_model_body_allies, + CP_model_body_axis, + + // strings + CP_name, + CP_reset_capsound, + CP_allies_capsound, + CP_axis_capsound, + CP_targetname, + + CP_model_neutral, + CP_model_allies, + CP_model_axis, +}; + +/* returns number of objectives */ +native objectives_get_num(); + +/* use this function to update client(s) hud. You need to do this sometimes. Check CP_VALUE comments. + if player is 0 , all clients will get this message */ +native objectives_reinit( player=0 ); + +/* use this function to get info about specified control point */ +native objective_get_data( index, CP_VALUE:key, szValue[]="", len=0 ); + +/* use this function to change control point's data */ +native objective_set_data( index, CP_VALUE:key , iValue=-1, const szValue[]="" ); + +enum CA_VALUE { + CA_edict = 1, + CA_allies_numcap, + CA_axis_numcap, + CA_timetocap, + CA_can_cap, + + // strings + CA_target, + CA_sprite, +}; + +/* use this function to get info about specified control point's area */ +native area_get_data( index, CA_VALUE:key, szValue[]="", len=0 ); + +/* use this function to change control point's area data */ +native area_set_data( index, CA_VALUE:key , iValue=-1, const szValue[]="" ); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodstats.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodstats.inc new file mode 100644 index 0000000..cf3d072 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodstats.inc @@ -0,0 +1,62 @@ +/* DoDX Stats functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _dodstats_included + #endinput +#endif +#define _dodstats_included + +/* Gets stats from given weapon index. If wpnindex is 0 +* then the stats are from all weapons. If weapon has not been used function +* returns 0 in other case 1. Fields in stats are: +* 0 - kills +* 1 - deaths +* 2 - headshots +* 3 - teamkilling +* 4 - shots +* 5 - hits +* 6 - damage +* 7 - score +* For body hits fields see amxconst.inc. */ +native get_user_wstats(index,wpnindex,stats[9],bodyhits[8]); + +/* Gets round stats from given weapon index.*/ +native get_user_wrstats(index,wpnindex,stats[9],bodyhits[8]); + +/* Gets life (from spawn to spawn) stats from given weapon index.*/ +native get_user_wlstats(index,wpnindex,stats[9],bodyhits[8]); + +/* Gets overall stats which are stored in file on server +* and updated on every respawn or user disconnect. +* Function returns the position in stats by diff. kills to deaths. */ +native get_user_stats(index,stats[9],bodyhits[8]); + +/* Gets round stats of player. */ +native get_user_rstats(index,stats[9],bodyhits[8]); + +/* Gets life (from spawn to spawn) stats of player. */ +native get_user_lstats(index,stats[9],bodyhits[8]); + +/* Gets stats with which user have killed/hurt his victim. If victim is 0 +* then stats are from all victims. If victim has not been hurt, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_vstats(index,victim,stats[9],bodyhits[8],wpnname[]="",len=0); + +/* Gets stats with which user have been killed/hurt. If killer is 0 +* then stats are from all attacks. If killer has not hurt user, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_astats(index,wpnindex,stats[9],bodyhits[8],wpnname[]="",len=0); + +/* Resets life, weapon, victims and attackers user stats. */ +native reset_user_wstats(index); + +/* Gets overall stats which stored in stats.dat file in amx folder +* and updated on every mapchange or user disconnect. +* Function returns next index of stats entry or 0 if no more exists. */ +native get_stats(index,stats[9],bodyhits[8],name[],len); + +/* Returns number of all entries in stats. */ +native get_statsnum(); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodx.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodx.inc new file mode 100644 index 0000000..5903eaa --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/dodx.inc @@ -0,0 +1,158 @@ +/* DoDX functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _dodx_included + #endinput +#endif +#define _dodx_included + +#include <dodconst> +#include <dodstats> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqclass xstats + #if !defined AMXMODX_NOAUTOLOAD + #pragma defclasslib xstats dodx + #endif +#else + #pragma library dodx +#endif + +/************* Shared Natives Start ********************************/ + +/* Forward types */ +enum { + XMF_DAMAGE = 0, + XMF_DEATH, + XMF_SCORE, +}; + +/* Use this function to register forwards */ +native register_statsfwd(ftype); + +/* Function is called after player to player attacks , +* if players were damaged by teammate TA is set to 1 */ +forward client_damage(attacker, victim, damage, wpnindex, hitplace, TA); + +/* Function is called after player death , +* if player was killed by teammate TK is set to 1 */ +forward client_death(killer, victim, wpnindex, hitplace, TK); + +/* Function is called if player scored */ +forward client_score(id, score, total); + +/* This Forward is called when a player changes team */ +forward dod_client_changeteam(id, team, oldteam); + +/* This Forward is called if a player changes class, but just after spawn */ +forward dod_client_changeclass(id, class, oldclass); + +/* This Forward is called when a player spawns */ +forward dod_client_spawn(id); + +/* This will be called whenever a player scopes or unscopes +value = 1 scope up +value = 0 scope down */ +forward dod_client_scope(id, value); + +/* This will be called whenever a player drops a weapon +weapon is weapon dropped or picked up +value = 1 picked up +value = 0 dropped */ +forward dod_client_weaponpickup(id, weapon, value); + +/* Called whenever the the player goes to or comes from prone position +value = 1 going down +value = 0 getting up */ +forward dod_client_prone(id, value); + +/* This will be called whenever a player switches a weapon */ +forward dod_client_weaponswitch(id, wpnew, wpnold); + +/* Forward for when a grenade explodes and its location */ +forward dod_grenade_explosion(id, pos[3], wpnid); + +/* Forward for when a rocket explodes and its location */ +forward dod_rocket_explosion(id, pos[3], wpnid); + +/* Forward for when a player picks up a object */ +forward dod_client_objectpickup(id, objid, pos[3], value); + +/* Forward for when a users stamina decreases */ +forward dod_client_stamina(id, stamina); + +/* We want to get just the weapon of whichever type that the player is on him +Use DODWT_* in dodconst.inc for type */ +native dod_weapon_type(id, type); + +/* This native will change the position of a weapon within the users slots and its ammo ammount */ +native dod_set_weaponlist(id, wpnID, slot, dropslot, totalrds); + +/* Sets the model for a player */ +native dod_set_model(id, const model[]); + +/* Sets the model for a player */ +native dod_set_body_number(id, bodynumber); + +/* Un-Sets the model for a player */ +native dod_clear_model(id); + +/* Custom Weapon Support */ +/* function will return index of new weapon */ +native custom_weapon_add( const wpnname[], melee = 0, const logname[]="" ); + +/* Function will pass damage done by this custom weapon to stats module and other plugins */ +native custom_weapon_dmg( weapon, att, vic, damage, hitplace=0 ); + +/* Function will pass info about custom weapon shot to stats module */ +native custom_weapon_shot( weapon, index ); // weapon id , player id + +/* function will return 1 if true */ +native xmod_is_melee_wpn(wpnindex); + +/* Returns weapon name. */ +native xmod_get_wpnname(wpnindex, name[], len); + +/* Returns weapon logname. */ +native xmod_get_wpnlogname(wpnindex, name[], len); + +/* Returns weapons array size */ +native xmod_get_maxweapons(); + +/* Returns stats array size ex. 8 in TS , 9 in DoD */ +native xmod_get_stats_size(); + +/* Returns 1 if true */ +native xmod_is_custom_wpn(wpnindex); + +/************* Shared Natives End ********************************/ + +/* weapon logname to weapon name convertion */ +native dod_wpnlog_to_name(const logname[],name[],len); + +/* weapon logname to weapon index convertion */ +native dod_wpnlog_to_id(const logname[]); + +native dod_get_map_info( info ); + +/* Returns id of currently carried weapon. Gets also +* ammount of ammo in clip and backpack. */ +native dod_get_user_weapon(index,&clip=0,&ammo=0); + +/* Returns team score */ +native dod_get_team_score(teamId); + +/* Returns player class id */ +native dod_get_user_class(index); + +/* Returns player score */ +native dod_get_user_score(index); + +/* values are: 0-no prone, 1-prone, 2-prone + w_deploy */ +native dod_get_pronestate(index); + +/* It is not as safe as original but player deaths will not be increased */ +native dod_user_kill(index); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine.inc new file mode 100644 index 0000000..e9a50e2 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine.inc @@ -0,0 +1,241 @@ +/* Engine functions +* +* by the AMX Mod X Development Team +* thanks to Vexd and mahnsawce +* +* This file is provided as is (no warranties). +*/ + +#if defined _engine_included + #endinput +#endif +#define _engine_included + +#include <engine_const> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib engine + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib engine + #endif +#else + #pragma library engine +#endif + +native traceresult(type,any:...); + +/* Registers a client impulse to a function. Function is passed the ID of the user. */ +native register_impulse(impulse, const function[]); + +/* Registers a touch action to a function by classnames. Use * to specify any classname. */ +native register_touch(const Touched[], const Toucher[], const function[]); + +/* Registers a think action to a function by classname. */ +native register_think(const Classname[], const function[]); + +/* NOTE: In old engine versions, this was not the case. Values are now WINDOWS values. + * You must pass with the windows offset (e.g. if 230 on windows, pass 230 no matter what) + * The module will automatically add +5 for Linux. + */ + +/* Precaches an event. */ +native precache_event(type, const Name[], any:...); + +/* set/get a user's speak flags */ +native set_speak(iIndex, iSpeakFlags); +native get_speak(iIndex); + +/* Drops an entity to the floor (work?) */ +native drop_to_floor(entity); + +/* Get whole buffer containing keys and their data. */ +native get_info_keybuffer(id, buffer[], length); + +/* Use an entity with another entity. "entUsed" could be a hostage, "entUser" a player. */ +native force_use(entUsed, entUser); + +/* Get globals from server. */ +native Float:get_global_float(variable); +native get_global_int(variable); +native get_global_string(variable, string[], maxlen); +native get_global_vector(variable, Float:vector[3]); +native get_global_edict(variable); + +/* Set entity bounds. */ +native entity_set_size(index, const Float:mins[3], const Float:maxs[3]); + +/* Get decal index */ +native get_decal_index(const szDecalName[]); + +/* Returns the distance between two entities. */ +native Float:entity_range(ida,idb); + +/* Sets/gets things in an entities Entvars Struct. */ +native entity_get_int(iIndex, iKey); +native entity_set_int(iIndex, iKey, iVal); +native Float:entity_get_float(iIndex, iKey); +native entity_set_float(iIndex, iKey, Float:iVal); +native entity_get_vector(iIndex, iKey, Float:vRetVector[3]); +native entity_set_vector(iIndex, iKey, const Float:vNewVector[3]); +native entity_get_edict(iIndex, iKey); +native entity_set_edict(iIndex, iKey, iNewIndex); +native entity_get_string(iIndex, iKey, szReturn[], iRetLen); +native entity_set_string(iIndex, iKey, const szNewVal[]); +native entity_get_byte(iIndex, iKey); +native entity_set_byte(iIndex, iKey, iVal); + +/* Creates an entity, will return the index of the created entity. ClassName must be valid. */ +native create_entity(const szClassname[]); + +/* Finds an entity in the world, will return 0 if nothing is found */ +native find_ent_by_class(iIndex, const szClass[]); +//optionally you can set a jghg2 type +// 1: target, 2:targetname, 0:classname (default) +native find_ent_by_owner(iIndex, const szClass[], iOwner, iJghgType=0); +native find_ent_by_target(iIndex, const szClass[]); +native find_ent_by_tname(iIndex, const szClass[]); +native find_ent_by_model(iIndex, const szClass[], const szModel[]); +native find_ent_in_sphere(start_from_ent, const Float:origin[3], Float:radius); + +//this will CBaseEntity::Think() or something from the entity +native call_think(entity); + +/* Is entity valid? */ +native is_valid_ent(iIndex); + +/* Proper origin setting, keeps updated with Half-Life engine. */ +native entity_set_origin(iIndex, const Float:fNewOrigin[3]); + +/* Sets the model of an Entity. */ +native entity_set_model(iIndex, const szModel[]); + +/* Remove an entity from the world. */ +native remove_entity(iIndex); + +/* Return current number of entities in the map */ +native entity_count(); + +/* Simulate two entities colliding/touching. */ +native fake_touch(entTouched, entToucher); + +/* 2 formats. + Format: DispatchKeyValue("KeyName","Value") - sets keyvalues for the entity specified in the keyvalue() forward. + Format: DispatchKeyValue(index,"KeyName","Value") - Sets keyvalue for entity not specified in keyvalue() forward. */ +#if !defined AMXMOD_BCOMPAT +native DispatchKeyValue(...); +#endif + +native get_keyvalue(entity, const szKey[], value[], maxLength); + +native copy_keyvalue(szClassName[],sizea,szKeyName[],sizeb,szValue[],sizec); + +/* Runs the GameDLL's DispatchSpawn for an entity, I think it's used with DispatchKeyValue. */ +native DispatchSpawn(iIndex); + +/* Hurts/Kills players in a sphere, like an explosion, Multiplier determines damage. */ +#if !defined AMXMOD_BCOMPAT +native radius_damage(const Float:fExplodeAt[3], iDamageMultiplier, iRadiusMultiplier); +#endif + +/* Will return the contents of a point (inside map? in sky? outside map? etc.). */ +native point_contents(const Float:fCheckAt[3]); + +/* Trace a line from Start(X, Y, Z) to End(X, Y, Z), will return the point hit in vReturn[3] + * and an entity index if an entity is hit. */ +#if !defined AMXMOD_BCOMPAT +native trace_line(iIgnoreEnt, const Float:fStart[3], const Float:fEnd[3], Float:vReturn[3]); +#endif + +/* Traces a hull. */ +native trace_hull(const Float:origin[3],hull,ignoredent=0,ignoremonsters=0); + +/* Traces a line, and returns the normal to the plane hit in vReturn. + * Returns 0 if theres no normal. */ +native trace_normal(iIgnoreEnt, const Float:fStart[3], const Float:fEnd[3], Float:vReturn[3]); + +/* Gets the ID of a grenade. */ +native get_grenade_id(id, model[], len, grenadeid = 0); + +/* Gets gpGlobals->time from Half-Life */ +native Float:halflife_time(); + +/* Sets map lighting, #OFF to disable. */ +native set_lights(const Lighting[]); + +/* Sets Player's View to entity iTargetIndex. */ +native attach_view(iIndex, iTargetIndex); + +/* Sets Player's View Mode. + * rpgrocket.mdl must be precached in order for this function to work */ +native set_view(iIndex, ViewType); + +/* Direct copy of PLAYBACK_EVENT_FULL from Metamod/HLSDK. If you don't know how that works, you probably shouldn't be using it. */ +native playback_event(flags,invoker,eventindex,Float:delay,const Float:origin[3],const Float:angles[3],Float:fparam1,Float:fparam2,iparam1,iparam2,bparam1,bparam2); + +/* Gets parameters sent from CmdStart. + Note that you will receive modified values if any other plugin have + changed them. */ +native get_usercmd(type,any:...); + +/* Sets the parameters sent from CmdStart. + Note that your changes will be seen by any other plugin doing get_usercmd() */ +native set_usercmd(type,any:...); + +/* Converts a string offset into a real string. Some of the forwards in fakemeta + uses string offsets. (FM_CreateNamedEntity) */ +native eng_get_string(_string, _returnString[], _len); + +/* FORWARDS + **********/ + +/* Called when 2 entities touch. + * ptr - touched entity + * ptd - toucher entity + */ +forward pfn_touch(ptr, ptd); + +/* Called once every server frame. May cause lag. */ +forward server_frame(); + +/* Called when a client types kill in console. */ +forward client_kill(id); + +/* Forward for PreThink()/PostThink() on a player. */ +forward client_PreThink(id); +forward client_PostThink(id); + +/* Forward for impulses. */ +forward client_impulse(id, impulse); + +/* Called when an entity "thinks" (DispatchThink) */ +forward pfn_think(entid); + +/* Called when an event is played */ +forward pfn_playbackevent(flags, entid, eventid, Float:delay, Float:Origin[3], Float:Angles[3], Float:fparam1, Float:fparam2, iparam1, iparam2, bparam1, bparam2); + +/* Called when an entity gets a keyvalue set on it from the engine (ie: map load) Use copy_keyvalue to get the keyvalue information */ +forward pfn_keyvalue(entid); + +/* Called when an entity is spawned */ +forward pfn_spawn(entid); + +//from jghg2 +/* As above, but returns number of ents stored in entlist. Use to find a specific type of entity classname (specify in _lookforclassname) around a + * certain entity specified in aroundent. All matching ents are stored in entlist. Specify max amount of entities to find in maxents. + * If aroundent is 0 its origin is not used, but origin in 6th parameter. Ie, do not specify 6th parameter (origin) if you specified an entity + * in aroundent. + */ +native find_sphere_class(aroundent, const _lookforclassname[], Float:radius, entlist[], maxents, const Float:origin[3] = {0.0, 0.0, 0.0}); + +/* SDK function - checks if an origin is in an entity's view cone + * Set use3d to 1 to do the calculation in 3D. Otherwise it will be in 2D. + */ +native is_in_viewcone(entity, const Float:origin[3], use3d = 0); + +//SDK function - checks if an entity is visible to an entity +native is_visible(entity, target); + +//Added at twistedeuphoria's request, see funcwiki for details +native trace_forward(const Float:start[3], const Float:angle[3], Float:give, ignoreEnt, &Float:hitX, &Float:hitY, &Float:shortestDistance, &Float:shortestDistLow, &Float:shortestDistHigh); + +#include <engine_stocks> diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine_const.inc new file mode 100644 index 0000000..c4414a6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine_const.inc @@ -0,0 +1,261 @@ +/* Engine constants +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _engine_const_included + #endinput +#endif +#define _engine_const_included + +#include <hlsdk_const> + +#define SPEAK_NORMAL 0 +#define SPEAK_MUTED 1 +#define SPEAK_ALL 2 +#define SPEAK_LISTENALL 4 + +#define CAMERA_NONE 0 +#define CAMERA_3RDPERSON 1 +#define CAMERA_UPLEFT 2 +#define CAMERA_TOPDOWN 3 + +/* Int */ +enum { + EV_INT_gamestate = 0, + EV_INT_oldbuttons, + EV_INT_groupinfo, + EV_INT_iuser1, + EV_INT_iuser2, + EV_INT_iuser3, + EV_INT_iuser4, + EV_INT_weaponanim, + EV_INT_pushmsec, + EV_INT_bInDuck, + EV_INT_flTimeStepSound, + EV_INT_flSwimTime, + EV_INT_flDuckTime, + EV_INT_iStepLeft, + EV_INT_movetype, + EV_INT_solid, + EV_INT_skin, + EV_INT_body, + EV_INT_effects, + EV_INT_light_level, + EV_INT_sequence, + EV_INT_gaitsequence, + EV_INT_modelindex, + EV_INT_playerclass, + EV_INT_waterlevel, + EV_INT_watertype, + EV_INT_spawnflags, + EV_INT_flags, + EV_INT_colormap, + EV_INT_team, + EV_INT_fixangle, + EV_INT_weapons, + EV_INT_rendermode, + EV_INT_renderfx, + EV_INT_button, + EV_INT_impulse, + EV_INT_deadflag, +}; + +/* Float */ +enum { + EV_FL_impacttime = 0, + EV_FL_starttime, + EV_FL_idealpitch, + EV_FL_pitch_speed, + EV_FL_ideal_yaw, + EV_FL_yaw_speed, + EV_FL_ltime, + EV_FL_nextthink, + EV_FL_gravity, + EV_FL_friction, + EV_FL_frame, + EV_FL_animtime, + EV_FL_framerate, + EV_FL_health, + EV_FL_frags, + EV_FL_takedamage, + EV_FL_max_health, + EV_FL_teleport_time, + EV_FL_armortype, + EV_FL_armorvalue, + EV_FL_dmg_take, + EV_FL_dmg_save, + EV_FL_dmg, + EV_FL_dmgtime, + EV_FL_speed, + EV_FL_air_finished, + EV_FL_pain_finished, + EV_FL_radsuit_finished, + EV_FL_scale, + EV_FL_renderamt, + EV_FL_maxspeed, + EV_FL_fov, + EV_FL_flFallVelocity, + EV_FL_fuser1, + EV_FL_fuser2, + EV_FL_fuser3, + EV_FL_fuser4, +}; + +/* Vector */ +enum { + EV_VEC_origin = 0, + EV_VEC_oldorigin, + EV_VEC_velocity, + EV_VEC_basevelocity, + EV_VEC_clbasevelocity, + EV_VEC_movedir, + EV_VEC_angles, + EV_VEC_avelocity, + EV_VEC_punchangle, + EV_VEC_v_angle, + EV_VEC_endpos, + EV_VEC_startpos, + EV_VEC_absmin, + EV_VEC_absmax, + EV_VEC_mins, + EV_VEC_maxs, + EV_VEC_size, + EV_VEC_rendercolor, + EV_VEC_view_ofs, + EV_VEC_vuser1, + EV_VEC_vuser2, + EV_VEC_vuser3, + EV_VEC_vuser4, +}; + +/* Edict */ +enum { + EV_ENT_chain = 0, + EV_ENT_dmg_inflictor, + EV_ENT_enemy, + EV_ENT_aiment, + EV_ENT_owner, + EV_ENT_groundentity, + EV_ENT_pContainingEntity, + EV_ENT_euser1, + EV_ENT_euser2, + EV_ENT_euser3, + EV_ENT_euser4, +}; + +/* String */ +enum { + EV_SZ_classname = 0, + EV_SZ_globalname, + EV_SZ_model, + EV_SZ_target, + EV_SZ_targetname, + EV_SZ_netname, + EV_SZ_message, + EV_SZ_noise, + EV_SZ_noise1, + EV_SZ_noise2, + EV_SZ_noise3, + EV_SZ_viewmodel, + EV_SZ_weaponmodel, +}; + +/* Byte */ +enum { + EV_BYTE_controller1 = 0, + EV_BYTE_controller2, + EV_BYTE_controller3, + EV_BYTE_controller4, + EV_BYTE_blending1, + EV_BYTE_blending2, +}; + +#if defined _jghg_enums + #endinput +#endif +#define _jghg_enums +enum { + // Edict + GL_trace_ent = 0, + + // Float + GL_coop, + GL_deathmatch, + GL_force_retouch, + GL_found_secrets, + GL_frametime, + GL_serverflags, + GL_teamplay, + GL_time, + GL_trace_allsolid, + GL_trace_fraction, + GL_trace_inopen, + GL_trace_inwater, + GL_trace_plane_dist, + GL_trace_startsolid, + + // Int + GL_cdAudioTrack, + GL_maxClients, + GL_maxEntities, + GL_msg_entity, + GL_trace_flags, + GL_trace_hitgroup, + + // String + GL_pStringBase, + GL_mapname, + GL_startspot, + + // Vector + GL_trace_endpos, + GL_trace_plane_normal, + GL_v_forward, + GL_v_right, + GL_v_up, + GL_vecLandmarkOffset, + + // Void (not supported) + GL_pSaveData +}; + +enum +{ + usercmd_float_start, + usercmd_forwardmove, // Float + usercmd_sidemove, // Float + usercmd_upmove, // Float + usercmd_float_end, + usercmd_int_start, + usercmd_lerp_msec, // short + usercmd_msec, // byte + usercmd_lightlevel, // byte + usercmd_buttons, // unsigned short + usercmd_impulse, // byte + usercmd_weaponselect, // byte + usercmd_impact_index, // int + usercmd_int_end, + usercmd_vec_start, + usercmd_viewangles, // Vector + usercmd_impact_position, // vec + usercmd_vec_end +}; + +// Used by the traceresult() native. +enum +{ + TR_AllSolid, // (int) if true, plane is not valid + TR_StartSolid, // (int) if true, the initial point was in a solid area + TR_InOpen, // (int) + TR_InWater, // (int) + TR_Fraction, // (float) time completed, 1.0 = didn't hit anything + TR_EndPos, // (vector) final position + TR_PlaneDist, // (float) + TR_PlaneNormal, // (vector) surface normal at impact + TR_Hit, // (entity) entity the surface is on + TR_Hitgroup // (int) 0 == generic, non zero is specific body part +}; + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine_stocks.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine_stocks.inc new file mode 100644 index 0000000..6d80700 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/engine_stocks.inc @@ -0,0 +1,255 @@ +/* Engine stocks +* +* by the AMX Mod X Development Team +* thanks to AssKicR, Freecode and T(+)rget +* +* This file is provided as is (no warranties). +*/ + +#if defined _engine_stocks_included + #endinput +#endif +#define _engine_stocks_included + +#if !defined _amxmodx_included + #include <amxmodx> +#endif + +#if !defined _engine_included + #include <engine> +#endif + +stock fakedamage(idvictim,const szClassname[],Float:takedmgdamage,damagetype) +{ + new entity = create_entity("trigger_hurt"); + if (entity) + { + DispatchKeyValue(entity,"classname","trigger_hurt"); + new szDamage[16]; + // Takedamages only do half damage per attack (damage is damage per second, and it's triggered in 0.5 second intervals). + // Compensate for that. + format(szDamage,15,"%f",takedmgdamage * 2); + DispatchKeyValue(entity,"dmg",szDamage); + format(szDamage,15,"%i",damagetype); + DispatchKeyValue(entity,"damagetype",szDamage); + DispatchKeyValue(entity,"origin","8192 8192 8192"); + DispatchSpawn(entity); + entity_set_string(entity, EV_SZ_classname, szClassname); + fake_touch(entity,idvictim); + remove_entity(entity); + return 1; + } + return 0; +} + +//wrapper for find_ent_by_class +stock find_ent(iStart, const szClassname[]) +{ + return find_ent_by_class(iStart, szClassname); +} + +/* Get the Button(s) user is pressing */ +stock get_user_button(id) +{ + return entity_get_int(id, EV_INT_button); +} + +stock get_user_oldbutton(id) +{ + return entity_get_int(id, EV_INT_oldbuttons); +} + +/* Get flags an entity is flagged with */ +stock get_entity_flags(ent) +{ + return entity_get_int(ent, EV_INT_flags); +} + +/* Get the distance between two entities */ +stock get_entity_distance(ent1, ent2) +{ + return floatround(entity_range(ent1, ent2)); +} + +/* Get grenade thrown by this user */ +stock get_grenade(id) +{ + new iGrenade = find_ent_by_class(-1, "grenade"); + while(iGrenade > 0) + { + if(entity_get_edict(iGrenade, EV_ENT_owner) == id) + return iGrenade; + + iGrenade = find_ent_by_class(iGrenade, "grenade"); + } + + return 0; +} + +/* Get origin of a brush entity */ +stock get_brush_entity_origin(ent, Float:orig[3]) +{ + new Float:Min[3], Float:Max[3]; + + entity_get_vector(ent, EV_VEC_origin, orig); + entity_get_vector(ent, EV_VEC_mins, Min); + entity_get_vector(ent, EV_VEC_maxs, Max); + + orig[0] += (Min[0] + Max[0]) * 0.5; + orig[1] += (Min[1] + Max[1]) * 0.5; + orig[2] += (Min[2] + Max[2]) * 0.5; + + return 1; +} + +/* Remove entity by name */ +stock remove_entity_name(const eName[]) +{ + new iEntity = find_ent_by_class(-1, eName); + while (iEntity > 0) + { + remove_entity(iEntity); + iEntity = find_ent_by_class(-1, eName); + } + + return 1; +} + +/* Get the contents of the point a user is aiming at */ +stock ViewContents(id) +{ + new origin[3], Float:Orig[3]; + get_user_origin(id, origin, 3); + Orig[0] = float(origin[0]); + Orig[1] = float(origin[1]); + Orig[2] = float(origin[2]); + + return point_contents(Orig); +} + +stock get_speed(ent) +{ + new Float:Vel[3]; + entity_get_vector(ent, EV_VEC_velocity, Vel); + + return floatround(vector_length(Vel)); +} + +/* Set rendering of an entity */ +stock set_rendering(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16) +{ + entity_set_int(index,EV_INT_renderfx,fx); + new Float:RenderColor[3]; + RenderColor[0] = float(r); + RenderColor[1] = float(g); + RenderColor[2] = float(b); + entity_set_vector(index,EV_VEC_rendercolor,RenderColor); + entity_set_int(index,EV_INT_rendermode,render); + entity_set_float(index,EV_FL_renderamt,float(amount)); + + return 1; +} + +/* Set flags on an entity */ +stock set_entity_flags(ent,flag,onoff) +{ + if ((entity_get_int(ent,EV_INT_flags)&flag) > 0) + { + if (onoff == 1) + { + return 2; + } + else + { + entity_set_int(ent,EV_INT_flags,entity_get_int(ent,EV_INT_flags)-flag); + return 1; + } + } + else + { + if (onoff == 0) + { + return 2; + } + else + { + entity_set_int(ent,EV_INT_flags,entity_get_int(ent,EV_INT_flags)+flag); + return 1; + } + } + + return 0; +} + +/* If visible = 1, entity will be set to be visible, else invisible. */ +stock set_entity_visibility(entity, visible = 1) +{ + entity_set_int(entity, EV_INT_effects, visible == 1 ? entity_get_int(entity, EV_INT_effects) & ~EF_NODRAW : entity_get_int(entity, EV_INT_effects) | EF_NODRAW); + + return 1; +} + +/* Returns 1 if entity is visible. */ +stock get_entity_visibility(entity) +{ + return !(entity_get_int(entity, EV_INT_effects) & EF_NODRAW); +} + +stock set_user_velocity(entity, const Float:vec[3]) +{ + return entity_set_vector(entity, EV_VEC_velocity, vec); +} + +stock get_user_velocity(entity, Float:vec[3]) +{ + return entity_get_vector(entity, EV_VEC_velocity, vec); +} + +/* Backwards compatible */ +/* Hurts/Kills players in a sphere, like an explosion, Multiplier determines damage. */ +stock RadiusDamage(const Float:fExplodeAt[3], iDamageMultiplier, iRadiusMultiplier) +{ + return radius_damage(fExplodeAt, iDamageMultiplier, iRadiusMultiplier); +} +/* Gives you a velocity in the direction a player is looking, iVelocity is the multiplier. */ +stock VelocityByAim(iIndex,iVelocity, Float:vRetValue[3]) +{ + return velocity_by_aim(iIndex,iVelocity,vRetValue); +} +/* Will return the contents of a point (inside map? in sky? outside map? etc.). */ +stock PointContents(const Float:fCheckAt[3]) +{ + return point_contents(fCheckAt); +} + +stock set_size(index, const Float:mins[3], const Float:maxs[3]) +{ + return entity_set_size(index,mins,maxs); +} + +//by Twilight Suzuka, request addition at29428 +//"Lifted from HLSDK" +stock IsInWorld( ent ) +{ + new Float:origin[3]; + entity_get_vector(ent,EV_VEC_origin,origin); + + if (origin[0] >= 4096.0) return 0; + if (origin[1] >= 4096.0) return 0; + if (origin[2] >= 4096.0) return 0; + if (origin[0] <= -4096.0) return 0; + if (origin[1] <= -4096.0) return 0; + if (origin[2] <= -4096.0) return 0; + + new Float:velocity[3]; + entity_get_vector(ent,EV_VEC_velocity,velocity); + + if (velocity[0] >= 2000) return 0; + if (velocity[1] >= 2000) return 0; + if (velocity[2] >= 2000) return 0; + if (velocity[0] <= -2000) return 0; + if (velocity[1] <= -2000) return 0; + if (velocity[2] <= -2000) return 0; + + return 1; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/esf.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/esf.inc new file mode 100644 index 0000000..cd67903 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/esf.inc @@ -0,0 +1,70 @@ +/*********************************************** + +[ Corona-Bytes.NET ] EvolutionX Core Plugin + + (c) Corona - Bytes .NET coders :: coders@corona-bytes.net + + > 2005 Corona Bytes :: http://www.corona-bytes.net + +***********************************************/ + +#if defined __EVOLUTION_CORE__ + #endinput +#endif +#define __EVOLUTION_CORE__ + +#pragma library EvolutionXCore + +native setClientPL ( Client, PowerLevel ); +native getClientPL ( Client ); +native setClientACPL ( Client, ActualPowerLevel ); +native getClientACPL ( Client ); +native setClientADPL ( Client, AfterDeathPowerLevel ); +native getClientADPL ( Client ); +native setClientSPL ( Client, PowerLevel ); +native setClientPLtoADPL ( Client ); + +native setClientKI ( Client, Ki ); +native getClientKI ( Client ); + +native setClientHP ( Client, Health ); +native getClientHP ( Client ); +native setClientMHP ( Client, MaximumHealth ); +native getClientMHP ( Client ); + +native setClientSPEED ( Client, Speed ); +native getClientSPEED ( Client ); +native setClientSWOOPSPEED ( Client, SwoopSpeed ); +native getClientSWOOPSPEED ( Client ); + +native setClientPROTECT ( Client, bool:Enable = true ); +native getClientPROTECT ( Client ); + +native setClientFROZEN ( Client, bool:Enable = true ); +native getClientFROZEN ( Client ); + +native setClientGOD ( Client, bool:Enable = true ); +native getClientGOD ( Client ); + +native getClientFLY ( Client ); + +native setClientHiddenTURBO ( Client, bool:Enable = true ); +native getClientTURBO ( Client ); + +native getClientBLOCK ( Client ); + +native setClientHiddenPOWERUP ( Client, bool:Enable = true ); +native getClientPOWERUP ( Client ); + +native getClientSWOOPING ( Client ); +native getClientATKSHOOT ( Client ); +native getClientATKCHARGE ( Client ); +native getClientMELEE ( Client ); +native getClientTHROWAWAY ( Client ); +native getClientTHROW ( Client ); +native getClientWALLGND ( Client ); +native getClientINFREEFALL ( Client ); +native getClientBEAMJUMP ( Client ); + +// kills a player without score/death msg +native silentClientKILL ( Client ); \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/esf_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/esf_const.inc new file mode 100644 index 0000000..91b8191 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/esf_const.inc @@ -0,0 +1,71 @@ +/** + * (C)2004-2005 AMX Mod X Development Team + * based on the stocks and information provided by LynX + * organized and released by BAILOPAN + * This file is provided as is (no warranties). + */ + +#if defined _esfconst_included + #endinput +#endif +#define _esfconst_included + +enum +{ + Character_Buu = 1, + Character_Goku = 2, + Character_Gohan = 3, //my favorite :) + Character_Krillin = 4, + Character_Frieza = 5, + Character_Piccolo = 6, + Character_Trunks = 7, + Character_Vegeta = 8, + Character_Cell = 9, +}; + +enum +{ + Explosion_Blue = 0, + Explosion_Green, + Explosion_Orange, + Explosion_Purple, + Explosion_Yellow, + Explosion_Red, + Explosion_White, + Explosions_Total, +}; + +enum +{ + Attack_Kamehameha=1, + Attack_SpiritBomb, + Attack_GalletGun, + Attack_FinalFlash, + Attack_Renzoku, + Attack_Kametorpedo, + Attack_GenericBeam, + Attack_Throw, +}; + +enum +{ + Direction_Left=1, + Direction_Right, + Direction_Up, + Direction_Down, + Direction_Forward, + Direction_Backward, +}; + +enum +{ + Recovery_Kicked=1, + Recovery_Tumbled, + Recovery_Lying, + Recovery_Thrown, +}; + +#define ESF_CHARGING 1 +#define ESF_CONTROLLING 2 +#define ESF_SHOOTING 3 +#define ESF_SHOT 4 diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta.inc new file mode 100644 index 0000000..3e76dd5 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta.inc @@ -0,0 +1,260 @@ +/* FakeMeta functions +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _fakemeta_included + #endinput +#endif +#define _fakemeta_included + +#include <fakemeta_const> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib fakemeta + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib fakemeta + #endif +#else + #pragma library fakemeta +#endif + +/** + * Returns entvar data from an entity. Use the pev_* enum (in fakemeta_const.inc) to specify which data you want retrieved. + * + * @note This function uses "read_data" style data syntax. It returns integer values, + * by-references float data, and sets a buffer for string data. + * + * @note If retrieving strings, you may optionally get a pointer into the global string table. Depending on + * your situation, there are two ways to do this. + * 1: This simply gets the pointer. + * new ptr = pev(entid, pev_classname) + * 2: The pointer will be stored in ptr AND the actual string is retrieved. + * new ptr, classname[32] + * pev(entid, pev_classname, ptr, classname, 31) + * + * @param _index The entity index to lookup. + * @param _value The pev field to lookup (look in fakemeta_const.inc) + */ +native pev(_index,_value,any:...); + +/** + * Sets entvar data for an entity. Use the pev_* enum from fakemeta_const.inc for reference. + * + * @note Setting string data will automatically allocate a new string (via AllocString) + * If you have a string already allocated with your own call to AllocString, use + * set_pev_string_ptr instead. + * + * @param _index The entity index to set the value on. + * @param _value The pev field to set, (look in fakemeta_const.inc) + */ +native set_pev(_index,_value,any:...); + +/** + * Use this native to set a pev field to a string that is already allocated (via a function such + * as EngFunc_AllocString). + * + * @note If you specify _value as anything other than string fields, an error will be thrown. + * @note Pass 0 as the _string field to set it to an empty string. + * + * @param _index The entity index to set the value on. + * @param _value The pev field to set - MUST be a string field. + * @param _string The string handle, retrieved from places like AllocString. + */ +native set_pev_string(_index, _value, _string); + + +/** + * Checks the validity of an entity. + * + * @param entindex The entity id to check. + * + * @return 0 on invalid entity + * 1 on entity is valid + * 2 on entity is valid and it has private data (safe to use pdata natives on). + */ +native pev_valid(entindex); + +/** + * Returns the serial number for each entity. The serial number is a unique identity + * generated when an entity is created. + * + * @param entindex The entity id. + * + * @return The serial number for the entity. + */ +native pev_serial(entindex); + +/* Returns any global variable inside globalvars_t structure. Use the glb_* enum. + * + * When returning data from glb_pStringBase (the global string table), you may give a pointer into that table + * in order to get different strings. + * Example: + * new model[128] + * new ptr = pev(id, pev_viewmodel) + * global_get(glb_pStringBase, ptr, model, 127) + */ +native global_get(_value, any:...); + +/* Returns an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ +native get_pdata_int(_index,_Offset,_linuxdiff=5,_macdiff=5); + +/* Sets an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ +native set_pdata_int(_index,_Offset,_Value,_linuxdiff=5,_macdiff=5); + +/* Returns a float from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ +native Float:get_pdata_float(_index,_Offset,_linuxdiff=5,_macdiff=5); + +/* Sets a float from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ +native set_pdata_float(_index,_Offset,Float:_Value,_linuxdiff=5,_macdiff=5); + +/** + * Tries to retrieve an edict (entity encapsulation) pointer from an entity's private data. + * + * This function is byte-addressable. Unlike get_pdata_int() which searches in byte increments of 4, + * get_pdata_end searches in increments of 1. + * + * @param _index Entity index. + * @param _offset Offset to search. + * @param _linuxdiff Linux difference. + * @param _macdiff Mac OS X difference. + * @return -2 if an invalid entity was found. + * -1 if an empty entity was found. + * Otherwise, an entity index is returned. + */ +native get_pdata_ent(_index, _offset, _linuxdiff=20, _macdiff=20); + +/* Registers a forward. + * Returns an id you can pass to unregister_forward + */ +native register_forward(_forwardType,const _function[],_post=0); + +/* Unregisters a forward. + * The registerId must be from register_forward, and + * post/forwardtype must match what you registered the forward as. + */ +native unregister_forward(_forwardType, registerId, post=0); + +/* Returns data for metamod */ +native forward_return(type,any:...); + +/* Returns the original return value of an engine function. + * This is only valid in forwards that were registered as post. + * + * get_orig_retval() - no params, retrieves integer return value + * get_orig_retval(&Float:value) - retrieves float return value by reference + * get_orig_retval(value[], len) - retrives string return value + */ +native get_orig_retval({Float,_}:...); + +native engfunc(type,any:...); +native dllfunc(type,any:...); + +//only use this with functions that pass a Trace +// get: zero extra params - return int, one extra param = byref float or vector +// set: use anything +native get_tr(TraceResult:tr_member, {Float,_}:...); +native set_tr(TraceResult:tr_member, {Float,_}:...); + +//Upgraded version takes in a TraceResult handle, optionally passed in as the last parameter to the +//TraceResult forward. Use 0 to specify the global traceresult handle set from calling +// some of the Engfucs. +native get_tr2(tr_handle, {TraceResult,_}:tr_member, {Float,_}:...); +native set_tr2(tr_handle, {TraceResult,_}:tr_member, {Float,_}:...); + +/** + * Creates a traceresult handle. This value should never be altered. + * The handle can be used in get/set_tr2 and various traceresult engine functions. + * + * NOTE: You must call free_tr2() on every handle made with create_tr2(). + * + * @return A new TraceResult handle. + */ +native create_tr2(); + +/** + * Frees a traceresult handle created with free_tr2(). Do not call + * this more than once per handle, or on handles not created through + * create_tr2(). + * + * @param tr_handle TraceResult handle created via create_tr2(). + * @noreturn + */ +native free_tr2(tr_handle); + +//Same as above, use either a kvd_handle or 0 for global reserved kvd data +//kvd_handle is passed by the kvd hook, last param +native get_kvd(kvd_handle, KeyValueData:member, {Float,_}:...); + +//Using set_kvd with the handle from the hook for anything under KV_fHandled +// is considered an undefined operation (it could crash). You should fire a new +// keyvalues structure rather than changing the internal engine strings. +native set_kvd(kvd_handle, KeyValueData:member, {Float,_}:...); + +// These functions are used with the clientdata data structure (FM_UpdateClientData) +// Get: 0 extra params - Return integer; 1 extra param - by ref float or vector; 2 extra params - string and length +// Set: Use anything +// Use 0 for cd_handle to specify the global clientdata handle +native get_cd(cd_handle, ClientData:member, {Float,_}:...); +native set_cd(cd_handle, ClientData:member, {Float,_}:...); + +// These functions are used with the entity_state data structure (FM_AddToFullPack) +// Get: 0 extra params - Return integer; 1 extra param - by ref float or vector or array +// Set: Use anything +// Use 0 for es_handle to specify the global entity_state handle +native get_es(es_handle, EntityState:member, {Float,_}:...); +native set_es(es_handle, EntityState:member, {Float,_}:...); + +// These functions are used with the usercmd data structure (FM_CmdStart) +// Get: 0 extra params - Return integer; 1 extra param - by ref float or vector +// Set: Use anything +// Use 0 for uc_handle to specify the global usercmd handle +native get_uc(uc_handle, UserCmd:member, {Float,_}:...); +native set_uc(uc_handle, UserCmd:member, {Float,_}:...); + +//NOTE that for the string offsets below, on AMD64, a byref (char **) offset is NOT the same as an int offset +//In fact it's QWORD aligned rather than DWORD aligned, so the offset will be exactly half. +//Gets a string from a private offset. If byref is false, the string is treated as static rather than dynamic. +//linux value is what to add to the offset for linux servers. +//mac value is what to add to the offset for os x servers. Default (cellmin) means that linux value will be used. +//this cannot use a default value due to older version using an awkward default value. +native get_pdata_string(entity, offset, dest[], maxlength, byref=1, linux, mac=cellmin); + +//Sets a string in a private offset. +//realloc = -1 - nonbyref copy (static +//realloc = 0 - copy byref, no realloc *(char **) +//realloc = 1 - reallocate new string with free+malloc +//realloc = 2 - reallocate new string with delete[]+new[] +//linux value is what to add to the offset for linux servers. +//mac value iswhat to add to the offset for os x servers. +//this cannot use a default value due to older version using an awkward default value. +native set_pdata_string(entity, offset, const source[], realloc=2, linux, mac=cellmin); + +// Copies the given infoBuffer pointer into out[] +// An infoBuffer pointer is returned by EngFunc_GetInfoKeyBuffer +native copy_infokey_buffer(infoBuffer, out[], maxlen); + + +/** + * Looks up the sequence for the entity. + * + * @param entity The entity id to lookup. + * @param name The sequence name to lookup, case insensitive. ("JUMP" would match "jump") + * @param framerate The framerate of the sequence, if found. + * @param loops Whether or not the sequence loops. + * @param groundspeed The groundspeed setting of the sequence. + * @return -1 on failed lookup, the sequence number on successful lookup. + */ +native lookup_sequence(entity, const name[], &Float:framerate = 0.0, &bool:loops = false, &Float:groundspeed = 0.0); + +/** + * Sets a bone controller with the specified value. + * + * @param entity The entity id to set the value on. + * @param controller Which controller to set (0 through 3). + * @param value The value to set it to. + * @return The percentage that the controller is extended (0.0 through 1.0) + */ +native Float:set_controller(entity, controller, Float:value); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_const.inc new file mode 100644 index 0000000..851bcb8 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_const.inc @@ -0,0 +1,749 @@ +/* FakeMeta constants +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _fakemeta_const_included + #endinput +#endif +#define _fakemeta_const_included + +// For forward_return +#define FMV_STRING 1 +#define FMV_FLOAT 2 +#define FMV_CELL 3 + +#include <hlsdk_const> + +/* The actual return value of the function, use these instead of PLUGIN_HANDLED etc when + * returning from registered forwards. + */ +#define FMRES_IGNORED 1 // Calls target function, returns normal value +#define FMRES_HANDLED 2 // Tells metamod you did something, still calls target function and returns normal value +#define FMRES_OVERRIDE 3 // Supposed to still call the target function but return your value instead + // however this does not work properly with metamod; use supercede instead. +#define FMRES_SUPERCEDE 4 // Block the target call, and use your return value (if applicable) + +// Use this with GetInfoKeyBuffer if you want the server's localinfo buffer +#define FM_NULLENT -1 + + +/* Used with engfunc() + */ +enum { + EngFunc_PrecacheModel, // int ) (char *s); + EngFunc_PrecacheSound, // int ) (char *s); + EngFunc_SetModel, // void ) (edict_t *e, const char *m); + EngFunc_ModelIndex, // int ) (const char *m); + EngFunc_ModelFrames, // int ) (int modelIndex); + EngFunc_SetSize, // void ) (edict_t *e, const float *rgflMin, const float *rgflMax); + EngFunc_ChangeLevel, // void ) (char* s1, char* s2); + EngFunc_VecToYaw, // float) (const float *rgflVector); + EngFunc_VecToAngles, // void ) (const float *rgflVectorIn, float *rgflVectorOut); + EngFunc_MoveToOrigin, // void ) (edict_t *ent, const float *pflGoal, float dist, int iMoveType); + EngFunc_ChangeYaw, // void ) (edict_t* ent); + EngFunc_ChangePitch, // void ) (edict_t* ent); + EngFunc_FindEntityByString, // edict) (edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue); + EngFunc_GetEntityIllum, // int ) (edict_t* pEnt); + EngFunc_FindEntityInSphere, // edict) (edict_t *pEdictStartSearchAfter, const float *org, float rad); + EngFunc_FindClientInPVS, // edict) (edict_t *pEdict); + EngFunc_EntitiesInPVS, // edict) (edict_t *pplayer); + EngFunc_MakeVectors, // void ) (const float *rgflVector); + EngFunc_AngleVectors, // void ) (const float *rgflVector, float *forward, float *right, float *up); + EngFunc_CreateEntity, // edict) (void); + EngFunc_RemoveEntity, // void ) (edict_t *e); + EngFunc_CreateNamedEntity, // edict) (int className); + EngFunc_MakeStatic, // void ) (edict_t *ent); + EngFunc_EntIsOnFloor, // int ) (edict_t *e); + EngFunc_DropToFloor, // int ) (edict_t *e); + EngFunc_WalkMove, // int ) (edict_t *ent, float yaw, float dist, int iMode); + EngFunc_SetOrigin, // void ) (edict_t *e, const float *rgflOrigin); + EngFunc_EmitSound, // void ) (edict_t *entity, int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch); + EngFunc_EmitAmbientSound, // void ) (edict_t *entity, float *pos, const char *samp, float vol, float attenuation, int fFlags, int pitch); + + //With 1.71 you can pass an optional TraceLine ptr for trace natives + // it can be 0, for meaning "global tr handle" (for get/set_tr2), or + // it can be any other TR handle (such as one from a TR hook) + EngFunc_TraceLine, // void ) (const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); + EngFunc_TraceToss, // void ) (edict_t *pent, edict_t *pentToIgnore, TraceResult *ptr); + EngFunc_TraceMonsterHull, // int ) (edict_t *pEdict, const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); + EngFunc_TraceHull, // void ) (const float *v1, const float *v2, int fNoMonsters, int hullNumber, edict_t *pentToSkip, TraceResult *ptr); + EngFunc_TraceModel, // void ) (const float *v1, const float *v2, int hullNumber, edict_t *pent, TraceResult *ptr); + EngFunc_TraceTexture, // const char *) (edict_t *pTextureEntity, const float *v1, const float *v2 ); + EngFunc_TraceSphere, // void ) (const float *v1, const float *v2, int fNoMonsters, float radius, edict_t *pentToSkip, TraceResult *ptr); + + EngFunc_GetAimVector, // void ) (edict_t *ent, float speed, float *rgflReturn); + EngFunc_ParticleEffect, // void ) (const float *org, const float *dir, float color, float count); + EngFunc_LightStyle, // void ) (int style, char *val); + EngFunc_DecalIndex, // int ) (const char *name); + EngFunc_PointContents, // int ) (const float *rgflVector); + EngFunc_FreeEntPrivateData, // void ) (edict_t *pEdict); + EngFunc_SzFromIndex, // const char *) (int iString); + EngFunc_AllocString, // int ) (const char *szValue); + EngFunc_RegUserMsg, // int ) (const char *pszName, int iSize); + EngFunc_AnimationAutomove, // void ) (const edict_t *pEdict, float flTime); + EngFunc_GetBonePosition, // void ) (const edict_t *pEdict, int iBone, float *rgflOrigin, float *rgflAngles); + EngFunc_GetAttachment, // void ) (const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles); + EngFunc_SetView, // void ) (const edict_t *pClient, const edict_t *pViewent); + EngFunc_Time, // float) ( void ); + EngFunc_CrosshairAngle, // void ) (const edict_t *pClient, float pitch, float yaw); + EngFunc_FadeClientVolume, // void ) (const edict_t *pEdict, int fadePercent, int fadeOutSeconds, int holdTime, int fadeInSeconds); + EngFunc_SetClientMaxspeed, // void ) (const edict_t *pEdict, float fNewMaxspeed); + EngFunc_CreateFakeClient, // edict) (const char *netname); // returns NULL if fake client can't be created + EngFunc_RunPlayerMove, // void ) (edict_t *fakeclient, const float *viewangles, float forwardmove, float sidemove, float upmove, unsigned short buttons, byte impulse, byte msec); + EngFunc_NumberOfEntities, // int ) ( void ); + EngFunc_StaticDecal, // void ) (const float *origin, int decalIndex, int entityIndex, int modelIndex); + EngFunc_PrecacheGeneric, // int ) (char* s); + EngFunc_BuildSoundMsg, // void ) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed); + EngFunc_GetPhysicsKeyValue, // const char *) (const edict_t *pClient, const char *key); + EngFunc_SetPhysicsKeyValue, // void ) (const edict_t *pClient, const char *key, const char *value); + EngFunc_GetPhysicsInfoString, // const char *) (const edict_t *pClient); + EngFunc_PrecacheEvent, // unsigned short) (int type, const char*psz); + EngFunc_PlaybackEvent, // void ) (int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2); + EngFunc_CheckVisibility, // int ) (const edict_t *entity, unsigned char *pset); + EngFunc_GetCurrentPlayer, // int ) ( void ); + EngFunc_CanSkipPlayer, // int ) (const edict_t *player); + EngFunc_SetGroupMask, // void ) (int mask, int op); + EngFunc_GetClientListening, // bool ) (int iReceiver, int iSender) + EngFunc_SetClientListening, // bool ) (int iReceiver, int iSender, bool Listen) + EngFunc_MessageBegin, // void ) (int msg_dest, int msg_type, const float *pOrigin, edict_t *ed) + EngFunc_WriteCoord, // void ) (float flValue) + EngFunc_WriteAngle, // void ) (float flValue) + EngFunc_InfoKeyValue, // char*) (char *infobuffer, char *key); + EngFunc_SetKeyValue, // void ) (char *infobuffer, char *key, char *value); + EngFunc_SetClientKeyValue, // void ) (int clientIndex, char *infobuffer, char *key, char *value); + EngFunc_CreateInstBaseline, // int ) (int classname, struct entity_state_s *baseline); + + // Returns pointer to info buffer that can be used with the infobuffer param of InfoKeyValue, SetKeyValue, and SetClientKeyValue + EngFunc_GetInfoKeyBuffer, // char*) (edict_t *e); + EngFunc_AlertMessage, // void ) (ALERT_TYPE atype, char *szFmt, ...); + EngFunc_ClientPrintf, // void ) (edict_t* pEdict, PRINT_TYPE ptype, const char *szMsg); + EngFunc_ServerPrint // void ) (const char *szMsg); +}; + +/* Used with dllfunc() + */ +enum +{ + DLLFunc_GameInit, // void ) ( void ); + DLLFunc_Spawn, // int ) (edict_t *pent); + DLLFunc_Think, // void ) (edict_t *pent); + DLLFunc_Use, // void ) (edict_t *pentUsed, edict_t *pentOther); + DLLFunc_Touch, // void ) (edict_t *pentTouched, edict_t *pentOther); + DLLFunc_Blocked, // void ) (edict_t *pentBlocked, edict_t *pentOther); + + //You can pass in 0 for glb kvd handle or a kvd handle here + DLLFunc_KeyValue, // void ) (edict_t *pentKeyvalue, KeyValueData *pkvd); + DLLFunc_SetAbsBox, // void ) (edict_t *pent); + DLLFunc_ClientConnect, // bool ) (edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[128]); + + DLLFunc_ClientDisconnect, // void ) (edict_t *pEntity); + DLLFunc_ClientKill, // void ) (edict_t *pEntity); + DLLFunc_ClientPutInServer, // void ) (edict_t *pEntity); + DLLFunc_ClientCommand, // void ) (edict_t *pEntity); + + DLLFunc_ServerDeactivate, // void ) ( void ); + + DLLFunc_PlayerPreThink, // void ) (edict_t *pEntity); + DLLFunc_PlayerPostThink, // void ) (edict_t *pEntity); + + DLLFunc_StartFrame, // void ) ( void ); + DLLFunc_ParmsNewLevel, // void ) ( void ); + DLLFunc_ParmsChangeLevel, // void ) ( void ); + + // Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life + // This also gets called when the server is queried for information (for example, by a server browser tool) + DLLFunc_GetGameDescription, // const char *) ( void ); + + // Spectator funcs + DLLFunc_SpectatorConnect, // void ) (edict_t *pEntity); + DLLFunc_SpectatorDisconnect, // void ) (edict_t *pEntity); + DLLFunc_SpectatorThink, // void ) (edict_t *pEntity); + + // Notify game .dll that engine is going to shut down. Allows mod authors to set a breakpoint. + DLLFunc_Sys_Error, // void ) (const char *error_string); + + DLLFunc_PM_FindTextureType, // char ) (char *name); + DLLFunc_RegisterEncoders, // void ) ( void ); + + // Enumerates player hulls. Returns 0 if the hull number doesn't exist, 1 otherwise + DLLFunc_GetHullBounds, // int ) (int hullnumber, float *mins, float *maxs); + + // Create baselines for certain "unplaced" items. + DLLFunc_CreateInstBaselines, // void ) ( void ); + DLLFunc_pfnAllowLagCompensation, // int ) ( void ); + // I know this does not fit with DLLFUNC(), but I don't want another native just for it. + MetaFunc_CallGameEntity, // bool ) (plid_t plid, const char *entStr,entvars_t *pev); + DLLFunc_ClientUserInfoChanged, // void ) (edict *pEntity, char *infobuffer); + // You can pass in 0 for global cd handle or another cd handle here + DLLFunc_UpdateClientData, // void ) (const struct edict_s *ent, int sendweapons, struct clientdata_s *cd); + // You can pass in 0 for global entity state handle or another entity state handle here + DLLFunc_AddToFullPack, // int ) (struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet); + // You can pass in 0 for global usercmd handle or another usercmd handle here + DLLFunc_CmdStart, // void ) (const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed); + DLLFunc_CmdEnd, // void ) (const edict_t *player); + DLLFunc_CreateBaseline // void ) (int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs); +}; + +enum { + pev_string_start = 0, + pev_classname, + pev_globalname, + pev_model, + pev_target, + pev_targetname, + pev_netname, + pev_message, + pev_noise, + pev_noise1, + pev_noise2, + pev_noise3, + pev_string_end, + pev_edict_start, + pev_chain, + pev_dmg_inflictor, + pev_enemy, + pev_aiment, + pev_owner, + pev_groundentity, + pev_euser1, + pev_euser2, + pev_euser3, + pev_euser4, + pev_edict_end, + pev_float_start, + pev_impacttime, + pev_starttime, + pev_idealpitch, + pev_ideal_yaw, + pev_pitch_speed, + pev_yaw_speed, + pev_ltime, + pev_nextthink, + pev_gravity, + pev_friction, + pev_frame, + pev_animtime, + pev_framerate, + pev_scale, + pev_renderamt, + pev_health, + pev_frags, + pev_takedamage, + pev_max_health, + pev_teleport_time, + pev_armortype, + pev_armorvalue, + pev_dmg_take, + pev_dmg_save, + pev_dmg, + pev_dmgtime, + pev_speed, + pev_air_finished, + pev_pain_finished, + pev_radsuit_finished, + pev_maxspeed, + pev_fov, + pev_flFallVelocity, + pev_fuser1, + pev_fuser2, + pev_fuser3, + pev_fuser4, + pev_float_end, + pev_int_start, + pev_fixangle, + pev_modelindex, + pev_viewmodel, + pev_weaponmodel, + pev_movetype, + pev_solid, + pev_skin, + pev_body, + pev_effects, + pev_light_level, + pev_sequence, + pev_gaitsequence, + pev_rendermode, + pev_renderfx, + pev_weapons, + pev_deadflag, + pev_button, + pev_impulse, + pev_spawnflags, + pev_flags, + pev_colormap, + pev_team, + pev_waterlevel, + pev_watertype, + pev_playerclass, + pev_weaponanim, + pev_pushmsec, + pev_bInDuck, + pev_flTimeStepSound, + pev_flSwimTime, + pev_flDuckTime, + pev_iStepLeft, + pev_gamestate, + pev_oldbuttons, + pev_groupinfo, + pev_iuser1, + pev_iuser2, + pev_iuser3, + pev_iuser4, + pev_int_end, + pev_byte_start, + pev_controller_0, + pev_controller_1, + pev_controller_2, + pev_controller_3, + pev_blending_0, + pev_blending_1, + pev_byte_end, + pev_bytearray_start, + pev_controller, + pev_blending, + pev_bytearray_end, + pev_vecarray_start, + pev_origin, + pev_oldorigin, + pev_velocity, + pev_basevelocity, + pev_clbasevelocity, + pev_movedir, + pev_angles, + pev_avelocity, + pev_v_angle, + pev_endpos, + pev_startpos, + pev_absmin, + pev_absmax, + pev_mins, + pev_maxs, + pev_size, + pev_rendercolor, + pev_view_ofs, + pev_vuser1, + pev_vuser2, + pev_vuser3, + pev_vuser4, + pev_punchangle, + pev_vecarray_end, + pev_string2_begin, /* anything after here are string corrections */ + pev_weaponmodel2, + pev_viewmodel2, + pev_string2_end, + pev_edict2_start, /* edict corrections */ + pev_pContainingEntity, + pev_absolute_end +}; + +/* Used with global_get() + */ +enum +{ + glb_start_int = 0, + glb_trace_hitgroup, + glb_trace_flags, + glb_msg_entity, + glb_cdAudioTrack, + glb_maxClients, + glb_maxEntities, + glb_end_int, + glb_start_float, + glb_time, + glb_frametime, + glb_force_retouch, + glb_deathmatch, + glb_coop, + glb_teamplay, + glb_serverflags, + glb_found_secrets, + glb_trace_allsolid, + glb_trace_startsolid, + glb_trace_fraction, + glb_trace_plane_dist, + glb_trace_inopen, + glb_trace_inwater, + glb_end_float, + glb_start_edict, + glb_trace_ent, + glb_end_edict, + glb_start_vector, + glb_v_forward, + glb_v_up, + glb_v_right, + glb_trace_endpos, + glb_trace_plane_normal, + glb_vecLandmarkOffset, + glb_end_vector, + glb_start_string, + glb_mapname, + glb_startspot, + glb_end_string, + glb_start_pchar, + glb_pStringBase, + glb_end_pchar +}; + +/* Used with register_forward() + */ +enum { + FM_PrecacheModel = 1, + FM_PrecacheSound, + FM_SetModel, + FM_ModelIndex, + FM_ModelFrames, + FM_SetSize, + FM_ChangeLevel, + FM_VecToYaw, + FM_VecToAngles, + FM_MoveToOrigin, + FM_ChangeYaw, + FM_ChangePitch, + FM_FindEntityByString, + FM_GetEntityIllum, + FM_FindEntityInSphere, + FM_FindClientInPVS, + FM_EntitiesInPVS, + FM_MakeVectors, + FM_AngleVectors, + FM_CreateEntity, + FM_RemoveEntity, + FM_CreateNamedEntity, + FM_MakeStatic, + FM_EntIsOnFloor, + FM_DropToFloor, + FM_WalkMove, + FM_SetOrigin, + FM_EmitSound, + FM_EmitAmbientSound, + FM_TraceLine, + FM_TraceToss, + FM_TraceMonsterHull, + FM_TraceHull, + FM_TraceModel, + FM_TraceTexture, + FM_TraceSphere, + FM_GetAimVector, + FM_ParticleEffect, + FM_LightStyle, + FM_DecalIndex, + FM_PointContents, + FM_MessageBegin, + FM_MessageEnd, + FM_WriteByte, + FM_WriteChar, + FM_WriteShort, + FM_WriteLong, + FM_WriteAngle, + FM_WriteCoord, + FM_WriteString, + FM_WriteEntity, + FM_CVarGetFloat, + FM_CVarGetString, + FM_CVarSetFloat, + FM_CVarSetString, + FM_FreeEntPrivateData, + FM_SzFromIndex, + FM_AllocString, + FM_RegUserMsg, + FM_AnimationAutomove, + FM_GetBonePosition, + FM_GetAttachment, + FM_SetView, + FM_Time, + FM_CrosshairAngle, + FM_FadeClientVolume, + FM_SetClientMaxspeed, + FM_CreateFakeClient, + FM_RunPlayerMove, + FM_NumberOfEntities, + FM_StaticDecal, + FM_PrecacheGeneric, + FM_BuildSoundMsg, + FM_GetPhysicsKeyValue, + FM_SetPhysicsKeyValue, + FM_GetPhysicsInfoString, + FM_PrecacheEvent, + FM_PlaybackEvent, + FM_CheckVisibility, + FM_GetCurrentPlayer, + FM_CanSkipPlayer, + FM_SetGroupMask, + FM_Voice_GetClientListening, + FM_Voice_SetClientListening, + FM_InfoKeyValue, + FM_SetKeyValue, + FM_SetClientKeyValue, + FM_GetPlayerAuthId, + FM_GetPlayerWONId, + FM_IsMapValid, + + FM_Spawn, + FM_Think, + FM_Use, + FM_Touch, + FM_Blocked, + FM_KeyValue, + FM_SetAbsBox, + FM_ClientConnect, + + FM_ClientDisconnect, + FM_ClientKill, + FM_ClientPutInServer, + FM_ClientCommand, + + FM_ServerDeactivate, + + FM_PlayerPreThink, + FM_PlayerPostThink, + + FM_StartFrame, + FM_ParmsNewLevel, + FM_ParmsChangeLevel, + + // Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life + // This also gets called when the server is queried for information (for example, by a server browser tool) + FM_GetGameDescription, + + // Spectator funcs + FM_SpectatorConnect, + FM_SpectatorDisconnect, + FM_SpectatorThink, + + // Notify game .dll that engine is going to shut down. Allows mod authors to set a breakpoint. + FM_Sys_Error, + + FM_PM_FindTextureType, + FM_RegisterEncoders, + + // Create baselines for certain "unplaced" items. + FM_CreateInstBaselines, + + FM_AllowLagCompensation, + FM_AlertMessage, + + // NEW_DLL_FUNCTIONS: + FM_OnFreeEntPrivateData, + FM_GameShutdown, + FM_ShouldCollide, + + // LATE ADDITIONS (v1.71) + FM_ClientUserInfoChanged, + + // LATE ADDITIONS (v1.75) + FM_UpdateClientData, + FM_AddToFullPack, + FM_CmdStart, + FM_CmdEnd, + FM_CreateInstBaseline, + FM_CreateBaseline, + FM_GetInfoKeyBuffer, + FM_ClientPrintf, + + // LATE ADDITIONS (v1.80) + FM_ServerPrint +}; + +enum TraceResult +{ + TR_AllSolid, // int + TR_StartSolid, // int + TR_InOpen, // int + TR_InWater, // int + TR_flFraction, // float + TR_vecEndPos, // float array[3] + TR_flPlaneDist, // float + TR_vecPlaneNormal, // float array[3] + TR_pHit, // int (edict_t*) + TR_iHitgroup, // int +}; + +enum KeyValueData +{ + KV_ClassName, // string + KV_KeyName, // string + KV_Value, // string + KV_fHandled // int +}; + +enum ClientData +{ + CD_Origin, // float array[3] + CD_Velocity, // float array[3] + CD_ViewModel, // int + CD_PunchAngle, // float array[3] + CD_Flags, // int + CD_WaterLevel, // int + CD_WaterType, // int + CD_ViewOfs, // float array[3] + CD_Health, // float + CD_bInDuck, // int + CD_Weapons, // int + CD_flTimeStepSound, // int + CD_flDuckTime, // int + CD_flSwimTime, // int + CD_WaterJumpTime, // int + CD_MaxSpeed, // float + CD_FOV, // float + CD_WeaponAnim, // int + CD_ID, // int + CD_AmmoShells, // int + CD_AmmoNails, // int + CD_AmmoCells, // int + CD_AmmoRockets, // int + CD_flNextAttack, // float + CD_tfState, // int + CD_PushMsec, // int + CD_DeadFlag, // int + CD_PhysInfo, // string[256] + CD_iUser1, // int + CD_iUser2, // int + CD_iUser3, // int + CD_iUser4, // int + CD_fUser1, // float + CD_fUser2, // float + CD_fUser3, // float + CD_fUser4, // float + CD_vUser1, // float array[3] + CD_vUser2, // float array[3] + CD_vUser3, // float array[3] + CD_vUser4 // float array[3] +}; + +enum EntityState +{ + // Fields which are filled in by routines outside of delta compression + ES_EntityType, // int + // Index into cl_entities array for this entity + ES_Number, // int + ES_MsgTime, // float + + // Message number last time the player/entity state was updated + ES_MessageNum, // int + + // Fields which can be transitted and reconstructed over the network stream + ES_Origin, // float array[3] + ES_Angles, // float array[3] + + ES_ModelIndex, // int + ES_Sequence, // int + ES_Frame, // float + ES_ColorMap, // int + ES_Skin, // short + ES_Solid, // short + ES_Effects, // int + ES_Scale, // float + ES_eFlags, // byte + + // Render information + ES_RenderMode, // int + ES_RenderAmt, // int + ES_RenderColor, // byte array[3], RGB value + ES_RenderFx, // int + + ES_MoveType, // int + ES_AnimTime, // float + ES_FrameRate, // float + ES_Body, // int + ES_Controller, // byte array[4] + ES_Blending, // byte array[4] + ES_Velocity, // float array[3] + + // Send bbox down to client for use during prediction + ES_Mins, // float array[3] + ES_Maxs, // float array[3] + + ES_AimEnt, // int + // If owned by a player, the index of that player (for projectiles) + ES_Owner, // int + + // Friction, for prediction + ES_Friction, // float + // Gravity multiplier + ES_Gravity, // float + + // PLAYER SPECIFIC + ES_Team, // int + ES_PlayerClass, // int + ES_Health, // int + ES_Spectator, // bool + ES_WeaponModel, // int + ES_GaitSequence, // int + // If standing on conveyor, e.g. + ES_BaseVelocity, // float array[3] + // Use the crouched hull, or the regular player hull + ES_UseHull, // int + // Latched buttons last time state updated + ES_OldButtons, // int + // -1 = in air, else pmove entity number + ES_OnGround, // int + ES_iStepLeft, // int + // How fast we are falling + ES_flFallVelocity, // float + + ES_FOV, // float + ES_WeaponAnim, // int + + // Parametric movement overrides + ES_StartPos, // float array[3] + ES_EndPos, // float array[3] + ES_ImpactTime, // float + ES_StartTime, // float + + // For mods + ES_iUser1, // int + ES_iUser2, // int + ES_iUser3, // int + ES_iUser4, // int + ES_fUser1, // float + ES_fUser2, // float + ES_fUser3, // float + ES_fUser4, // float + ES_vUser1, // float array[3] + ES_vUser2, // float array[3] + ES_vUser3, // float array[3] + ES_vUser4 // float array[3] +}; + +enum UserCmd +{ + // Interpolation time on client + UC_LerpMsec, // short + // Duration in ms of command + UC_Msec, // byte + // Command view angles + UC_ViewAngles, // float array[3] + + // Intended velocities + // Forward velocity + UC_ForwardMove, // float + // Sideways velocity + UC_SideMove, // float + // Upward velocity + UC_UpMove, // float + // Light level at spot where we are standing + UC_LightLevel, // byte + // Attack buttons + UC_Buttons, // unsigned short + // Impulse command issued + UC_Impulse, // byte + // Current weapon id + UC_WeaponSelect, // byte + + // Experimental player impact stuff + UC_ImpactIndex, // int + UC_ImpactPosition // float array[3] +}; + +enum AlertType +{ + at_notice = 0, + at_console, // same as at_notice, but forces a ConPrintf, not a message box + at_aiconsole, // same as at_console, but only shown if developer level is 2! + at_warning, + at_error, + at_logged // Server print to console (only in multiplayer games) +}; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_stocks.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_stocks.inc new file mode 100644 index 0000000..7a7a6bb --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_stocks.inc @@ -0,0 +1,275 @@ +/* FakeMeta stocks +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if !defined _fakemeta_included + #include <fakemeta> +#endif + +#if defined _fakemeta_stocks_included + #endinput +#endif +#define _fakemeta_stocks_included + +// EngFuncs +stock EF_PrecacheModel(const string[]) + return engfunc(EngFunc_PrecacheModel, string); + +stock EF_PrecacheSound(const string[]) + return engfunc(EngFunc_PrecacheSound, string); +stock EF_SetModel(const ID, const STRING[]) + return engfunc(EngFunc_SetModel, ID, STRING); +stock EF_ModelIndex(const STRING[]) + return engfunc(EngFunc_ModelIndex, STRING); +stock EF_ModelFrames(modelIndex) + return engfunc(EngFunc_ModelFrames, modelIndex); + +stock EF_SetSize(const ENTITY, const Float:MIN[3], const Float:MAX[3]) + return engfunc(EngFunc_SetSize, ENTITY, MIN, MAX); +stock EF_ChangeLevel(const S1[], const S2[]) + return engfunc(EngFunc_ChangeLevel, S1, S2); +stock EF_VecToYaw(const Float:VECTOR[3], &Float:returnValue) + return engfunc(EngFunc_VecToYaw, VECTOR, returnValue); +stock EF_VecToAngles(const Float:VECTORIN[3], const Float:VECTOROUT[3]) + return engfunc(EngFunc_VecToAngles, VECTORIN, VECTOROUT); +stock EF_MoveToOrigin(const ENTITY, const Float:GOAL[3], const Float:DISTANCE, const MOVETYPE) + return engfunc(EngFunc_MoveToOrigin, ENTITY, GOAL, DISTANCE, MOVETYPE); + +stock EF_ChangeYaw(const ENTITY) + return engfunc(EngFunc_ChangeYaw, ENTITY); +stock EF_ChangePitch(const ENTITY) + return engfunc(EngFunc_ChangePitch, ENTITY); +stock EF_FindEntityByString(const STARTSEARCHAFTER, const FIELD[], const VALUE[]) + return engfunc(EngFunc_FindEntityByString, STARTSEARCHAFTER, FIELD, VALUE); +stock EF_GetEntityIllum(const ENTITY) + return engfunc(EngFunc_GetEntityIllum, ENTITY); +stock EF_FindEntityInSphere(const STARTSEARCHAFTER, const Float:ORIGIN[3], Float:radius) + return engfunc(EngFunc_FindEntityInSphere, STARTSEARCHAFTER, ORIGIN, radius); + +stock EF_FindClientInPVS(const CLIENT) + return engfunc(EngFunc_FindClientInPVS, CLIENT); +stock EF_EntitiesInPVS(const CLIENT) + return engfunc(EngFunc_EntitiesInPVS, CLIENT); +stock EF_MakeVectors(const Float:VECTOR[3]) + return engfunc(EngFunc_MakeVectors, VECTOR); +stock EF_AngleVectors(const Float:VECTOR[3], Float:forward_[3], Float:right[3], Float:up[3]) + return engfunc(EngFunc_AngleVectors, VECTOR, forward_, right, up); +stock EF_CreateEntity() + return engfunc(EngFunc_CreateEntity); + +stock EF_RemoveEntity(const ENTITY) + return engfunc(EngFunc_RemoveEntity, ENTITY); +stock EF_CreateNamedEntity(const CLASSNAME) + return engfunc(EngFunc_CreateNamedEntity, CLASSNAME); +stock EF_MakeStatic(const ENTITY) + return engfunc(EngFunc_MakeStatic, ENTITY); +stock EF_EntIsOnFloor(const ENTITY) + return engfunc(EngFunc_EntIsOnFloor, ENTITY); +stock EF_DropToFloor(const ENTITY) + return engfunc(EngFunc_DropToFloor, ENTITY); + +stock EF_WalkMove(const ENTITY, Float:yaw, Float:distance, iMode) + return engfunc(EngFunc_WalkMove, ENTITY, yaw, distance, iMode); +stock EF_SetOrigin(const ENTITY, const Float:ORIGIN[3]) + return engfunc(EngFunc_SetOrigin, ENTITY, ORIGIN); +stock EF_EmitSound(const ENTITY, channel, const SAMPLE[], Float:volume, Float:attenuation, fFlags, pitch) + return engfunc(EngFunc_EmitSound, ENTITY, channel, SAMPLE, volume, attenuation, fFlags, pitch); +stock EF_EmitAmbientSound(const ENTITY, Float:pos[3], const SAMPLE[], Float:volume, Float:attenuation, fFlags, pitch) + return engfunc(EngFunc_EmitAmbientSound, ENTITY, pos, SAMPLE, volume, attenuation, fFlags, pitch); +stock EF_TraceLine(const Float:V1[3], const Float:V2[3], fNoMonsters, const ENT_TO_SKIP) + return engfunc(EngFunc_TraceLine, V1, V2, fNoMonsters, ENT_TO_SKIP); + +stock EF_TraceToss(const ENTITY, const ENTITY_TO_IGNORE) + return engfunc(EngFunc_TraceToss, ENTITY, ENTITY_TO_IGNORE); +stock EF_TraceMonsterHull(const ENTITY, const Float:V1[3], const Float:V2[3], fNoMonsters, const ENTITY_TO_SKIP) + return engfunc(EngFunc_TraceMonsterHull, ENTITY, V1, V2, fNoMonsters, ENTITY_TO_SKIP); +stock EF_TraceHull(const Float:V1[3], const Float:V2[3], fNoMonsters, hullNumber, const ENTITY_TO_SKIP) + return engfunc(EngFunc_TraceHull, V1, V2, fNoMonsters, hullNumber, ENTITY_TO_SKIP); +stock EF_TraceModel(const Float:V1[3], const Float:V2[3], hullNumber, const ENTITY) + return engfunc(EngFunc_TraceModel, V1, V2, hullNumber, ENTITY); +stock EF_TraceTexture(const TEXTURE_ENTITY, const Float:V1[3], const Float:V2[3]) + return engfunc(EngFunc_TraceTexture, TEXTURE_ENTITY, V1, V2); + +stock EF_TraceSphere(const Float:V1[3], const Float:V2[3], fNoMonsters, Float:radius, const ENTITY_TO_SKIP) + return engfunc(EngFunc_TraceSphere, V1, V2, fNoMonsters, radius, ENTITY_TO_SKIP); +stock EF_GetAimVector(const ENTITY, Float:speed, Float:returnVector[3]) + return engfunc(EngFunc_GetAimVector, ENTITY, speed, returnVector); +stock EF_ParticleEffect(const Float:ORIGIN[3], const Float:DIRECTION[3], Float:color, Float:count) + return engfunc(EngFunc_ParticleEffect, ORIGIN, DIRECTION, color, count); +stock EF_LightStyle(style, val[]) + return engfunc(EngFunc_LightStyle, style, val); +stock EF_DecalIndex(const NAME[]) + return engfunc(EngFunc_DecalIndex, NAME); + +stock EF_PointContents(const Float:VECTOR[3]) + return engfunc(EngFunc_PointContents, VECTOR); +stock EF_FreeEntPrivateData(const ENTITY) + return engfunc(EngFunc_FreeEntPrivateData, ENTITY); +stock EF_SzFromIndex(iString) + return engfunc(EngFunc_SzFromIndex, iString); +stock EF_AllocString(const STRING[]) + return engfunc(EngFunc_AllocString, STRING); +stock EF_RegUserMsg(const NAME[], iSize) + return engfunc(EngFunc_RegUserMsg, NAME, iSize); + +stock EF_AnimationAutomove(const ENTITY, Float:flTime) + return engfunc(EngFunc_AnimationAutomove, ENTITY, flTime); +stock EF_GetBonePosition(const ENTITY, iBone, Float:origin[3], Float:angles[3]) + return engfunc(EngFunc_GetBonePosition, ENTITY, iBone, origin, angles); +stock EF_GetAttachment(const ENTITY, iAttachment, Float:origin[3], Float:angles[3]) + return engfunc(EngFunc_GetAttachment, ENTITY, iAttachment, origin, angles); +stock EF_SetView(const CLIENT, const VIEW_ENTITY) + return engfunc(EngFunc_SetView, CLIENT, VIEW_ENTITY); +stock EF_Time(&Float:returnValue) + return engfunc(EngFunc_Time, returnValue); + +stock EF_CrosshairAngle(const CLIENT, Float:pitch, Float:yaw) + return engfunc(EngFunc_CrosshairAngle, CLIENT, pitch, yaw); +stock EF_FadeClientVolume(const ENTITY, fadePercent, fadeOutSeconds, holdTime, fadeInSeconds) + return engfunc(EngFunc_FadeClientVolume, ENTITY, fadePercent, fadeOutSeconds, holdTime, fadeInSeconds); +stock EF_SetClientMaxspeed(const ENTITY, Float:newMaxspeed) + return engfunc(EngFunc_SetClientMaxspeed, ENTITY, newMaxspeed); +stock EF_CreateFakeClient(const NETNAME[]) + return engfunc(EngFunc_CreateFakeClient, NETNAME); +stock EF_RunPlayerMove(const FAKECLIENT, const Float:VIEWANGLES[3], Float:forwardmove, Float:sidemove, Float:upmove, buttons, impulse, msec) + return engfunc(EngFunc_RunPlayerMove, FAKECLIENT, VIEWANGLES, forwardmove, sidemove, upmove, buttons, impulse, msec); + +stock EF_NumberOfEntities() + return engfunc(EngFunc_NumberOfEntities); +stock EF_StaticDecal(const Float:ORIGIN[3], decalIndex, entityIndex, modelIndex) + return engfunc(EngFunc_StaticDecal, ORIGIN, decalIndex, entityIndex, modelIndex); +stock EF_PrecacheGeneric(const STRING[]) + return engfunc(EngFunc_PrecacheGeneric, STRING); +stock EF_BuildSoundMSG(const ENTITY, channel, const SAMPLE[], Float:volume, Float:attenuation, fFlags, pitch, msg_dest, msg_type, const Float:ORIGIN[3], const ED) + return engfunc(EngFunc_BuildSoundMsg, ENTITY, channel, SAMPLE, volume, attenuation, fFlags, pitch, msg_dest, msg_type, ORIGIN, ED); +stock EF_GetPhysicsKeyValue(const CLIENT, const KEY[]) + return engfunc(EngFunc_GetPhysicsKeyValue, CLIENT, KEY); + +stock EF_SetPhysicsKeyValue(const CLIENT, const KEY[], const VALUE[]) + return engfunc(EngFunc_SetPhysicsKeyValue, CLIENT, KEY, VALUE); +stock EF_GetPhysicsInfoString(const CLIENT, returnString[], maxLength) + return engfunc(EngFunc_GetPhysicsInfoString, CLIENT, returnString, maxLength); +stock EF_PrecacheEvent(type, const STRING[]) + return engfunc(EngFunc_PrecacheEvent, type, STRING); +stock EF_PlaybackEvent(flags, const INVOKER, eventindex, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iparam1, iparam2, bparam1, bparam2) + return engfunc(EngFunc_PlaybackEvent, flags, INVOKER, eventindex, delay, origin, angles, fparam1, fparam2, iparam1, iparam2, bparam1, bparam2); +stock EF_CheckVisibility(const ENTITY, set) + return engfunc(EngFunc_CheckVisibility, ENTITY, set); + +stock EF_GetCurrentPlayer() + return engfunc(EngFunc_GetCurrentPlayer); +stock EF_CanSkipPlayer(const PLAYER) + return engfunc(EngFunc_CanSkipPlayer, PLAYER); +stock EF_SetGroupMask(mask, op) + return engfunc(EngFunc_SetGroupMask, mask, op); +stock EF_GetClientListening(receiver, sender) + return engfunc(EngFunc_GetClientListening, receiver, sender); +stock EF_SetClientListening(receiver, sender, bool:listen) + return engfunc(EngFunc_SetClientListening, receiver, sender, listen); + +stock EF_MessageBegin(msg_dest, msg_type, const Float:ORIGIN[3], const ED) + return engfunc(EngFunc_MessageBegin, msg_dest, msg_type, ORIGIN, ED); +stock EF_WriteCoord(Float:value) + return engfunc(EngFunc_WriteCoord, value); +stock EF_WriteAngle(Float:value) + return engfunc(EngFunc_WriteAngle, value); +stock EF_InfoKeyValue(const INFOBUFFER, const KEY[], returnValue[], maxLength) + return engfunc(EngFunc_InfoKeyValue, INFOBUFFER, KEY, returnValue, maxLength); +stock EF_SetKeyValue(const INFOBUFFER, const KEY[], const VALUE[]) + return engfunc(EngFunc_SetKeyValue, INFOBUFFER, KEY, VALUE); + +stock EF_SetClientKeyValue(const ID, const INFOBUFFER, const KEY[], const VALUE[]) + return engfunc(EngFunc_SetClientKeyValue, ID, INFOBUFFER, KEY, VALUE); + +stock EF_CreateInstBaseline(CLASSNAME, baseline) + return engfunc(EngFunc_CreateInstBaseline, CLASSNAME, baseline); + +// Returns pointer to info buffer that can be used with the INFOBUFFER param +// of EF_InfoKeyValue, EF_SetKeyValue, and EF_SetClientKeyValue +stock EF_GetInfoKeyBuffer(const ENTITY) + return engfunc(EngFunc_GetInfoKeyBuffer, ENTITY); +stock EF_ClientPrintf(const ENTITY, const printType, const MESSAGE[]) + return engfunc(EngFunc_ClientPrintf, ENTITY, printType, MESSAGE); +stock EF_ServerPrint(const MESSAGE[]) + return engfunc(EngFunc_ServerPrint, MESSAGE); + +// DLLFuncs +stock DF_GameInit() + return dllfunc(DLLFunc_GameInit); +stock DF_Spawn(const ENTITY) + return dllfunc(DLLFunc_Spawn, ENTITY); +stock DF_Think(const ENTITY) + return dllfunc(DLLFunc_Think, ENTITY); +stock DF_Use(const ENT_Used, const ENT_User) + return dllfunc(DLLFunc_Use, ENT_Used, ENT_User); +stock DF_Touch(const ENT_Touched, const ENT_Toucher) + return dllfunc(DLLFunc_Touch, ENT_Touched, ENT_Toucher); + +stock DF_Blocked(const ENT_Blocked, const ENT_Other) + return dllfunc(DLLFunc_Blocked, ENT_Blocked, ENT_Other); +stock DF_SetAbsBox(const ENTITY) + return dllfunc(DLLFunc_SetAbsBox, ENTITY); +stock DF_ClientConnect(const ENTITY, const NAME[], const ADDRESS[], RejectReason[128]) + return dllfunc(DLLFunc_ClientConnect, ENTITY, NAME, ADDRESS, RejectReason); +stock DF_ClientDisconnect(const ENTITY) + return dllfunc(DLLFunc_ClientDisconnect, ENTITY); +stock DF_ClientKill(const ENTITY) + return dllfunc(DLLFunc_ClientKill, ENTITY); + +stock DF_ClientPutInServer(const ENTITY) + return dllfunc(DLLFunc_ClientPutInServer, ENTITY); +stock DF_ClientCommand(const ENTITY) + return dllfunc(DLLFunc_ClientCommand, ENTITY); +stock DF_ServerDeactivate() + return dllfunc(DLLFunc_ServerDeactivate); +stock DF_PlayerPreThink(const ENTITY) + return dllfunc(DLLFunc_PlayerPreThink, ENTITY); +stock DF_PlayerPostThink(const ENTITY) + return dllfunc(DLLFunc_PlayerPostThink, ENTITY); + +stock DF_StartFrame() + return dllfunc(DLLFunc_StartFrame); +stock DF_ParmsNewLevel() + return dllfunc(DLLFunc_ParmsNewLevel); +stock DF_ParmsChangeLevel() + return dllfunc(DLLFunc_ParmsChangeLevel); +stock DF_GetGameDescription() + return dllfunc(DLLFunc_GetGameDescription); +stock DF_SpectatorConnect(const ENTITY) + return dllfunc(DLLFunc_SpectatorConnect, ENTITY); + +stock DF_SpectatorDisconnect(const ENTITY) + return dllfunc(DLLFunc_SpectatorDisconnect, ENTITY); +stock DF_SpectatorThink(const ENTITY) + return dllfunc(DLLFunc_SpectatorThink, ENTITY); +stock DF_Sys_Error(const ERROR_STRING[]) + return dllfunc(DLLFunc_Sys_Error, ERROR_STRING); +stock DF_PM_FindTextureType(name[]) + return dllfunc(DLLFunc_PM_FindTextureType, name); +stock DF_RegisterEncoders() + return dllfunc(DLLFunc_RegisterEncoders); + +stock DF_GetHullBounds(hullnumber, Float:mins[3], Float:maxs[3]) + return dllfunc(DLLFunc_GetHullBounds, hullnumber, mins, maxs); +stock DF_CreateInstBaselines() + return dllfunc(DLLFunc_CreateInstBaselines); +stock DF_pfnAllowLagCompensation() + return dllfunc(DLLFunc_pfnAllowLagCompensation); +stock DF_MetaFunc_CallGameEntity(const STRING[], const ENTITY) + return dllfunc(MetaFunc_CallGameEntity, STRING, ENTITY); +stock DF_ClientUserInfoChanged(const IDPLAYER) + return dllfunc(DLLFunc_ClientUserInfoChanged, IDPLAYER); + +stock DF_UpdateClientData(const ENTITY, sendweapons, const cd/* = 0*/) + return dllfunc(DLLFunc_UpdateClientData, ENTITY, sendweapons, cd); +stock DF_AddToFullPack(const STATE/* = 0*/, e, ENT, HOST, hostflags, player, set) + return dllfunc(DLLFunc_AddToFullPack, STATE, e, ENT, HOST, hostflags, player, set); +stock DF_CmdStart(const PLAYER, const CMD/* = 0*/, randomSeed) + return dllfunc(DLLFunc_CmdStart, PLAYER, CMD, randomSeed); +stock DF_CmdEnd(const PLAYER) + return dllfunc(DLLFunc_CmdEnd, PLAYER); +stock DF_CreateBaseline(PLAYER, eIndex, baseline, playerModelIndex, Float:playerMins[3], Float:playerMaxs[3]) + return dllfunc(DLLFunc_CreateBaseline, PLAYER, eIndex, baseline, playerModelIndex, playerMins, playerMaxs); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_util.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_util.inc new file mode 100644 index 0000000..b0bab0d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fakemeta_util.inc @@ -0,0 +1,882 @@ +/** + * This file provides various utility functions that use the Fakemeta module. + * This file is created and maintained by VEN. + * For support and issues, see: + * http://forums.alliedmods.net/showthread.php?t=28284 + */ + + +/* Fakemeta Utilities +* +* by VEN +* +* This file is provided as is (no warranties). +*/ + +#if !defined _fakemeta_included + #include <fakemeta> +#endif + +#if defined _fakemeta_util_included + #endinput +#endif +#define _fakemeta_util_included + +#include <xs> + + +/* Engine functions */ + +#define fm_precache_generic(%1) engfunc(EngFunc_PrecacheGeneric, %1) +/* stock fm_precache_generic(const file[]) + return engfunc(EngFunc_PrecacheGeneric, file) */ + +#define fm_precache_event(%1,%2) engfunc(EngFunc_PrecacheEvent, %1, %2) +/* stock fm_precache_event(type, const name[]) + return engfunc(EngFunc_PrecacheEvent, type, name) */ + +// ported by v3x +#define fm_drop_to_floor(%1) engfunc(EngFunc_DropToFloor, %1) +/* stock fm_drop_to_floor(entity) + return engfunc(EngFunc_DropToFloor, entity) */ + +#define fm_force_use(%1,%2) dllfunc(DLLFunc_Use, %2, %1) +/* stock fm_force_use(user, used) + return dllfunc(DLLFunc_Use, used, user) */ + +#define fm_entity_set_size(%1,%2,%3) engfunc(EngFunc_SetSize, %1, %2, %3) +/* stock fm_entity_set_size(index, const Float:mins[3], const Float:maxs[3]) + return engfunc(EngFunc_SetSize, index, mins, maxs) */ + +#define fm_get_decal_index(%1) engfunc(EngFunc_DecalIndex, %1) +/* stock fm_get_decal_index(const decalname[]) + return engfunc(EngFunc_DecalIndex, decalname) */ + +stock Float:fm_entity_range(ent1, ent2) { + new Float:origin1[3], Float:origin2[3]; + pev(ent1, pev_origin, origin1); + pev(ent2, pev_origin, origin2); + + return get_distance_f(origin1, origin2); +} + +// based on KoST's port, upgraded version fits into the macros +#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1)) +/* stock fm_create_entity(const classname[]) + return engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, classname)) */ + +#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2) +/* stock fm_find_ent_by_class(index, const classname[]) + return engfunc(EngFunc_FindEntityByString, index, "classname", classname) */ + +stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0) { + new strtype[11] = "classname", ent = index; + switch (jghgtype) { + case 1: strtype = "target"; + case 2: strtype = "targetname"; + } + + while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {} + + return ent; +} + +#define fm_find_ent_by_target(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "target", %2) +/* stock fm_find_ent_by_target(index, const target[]) + return engfunc(EngFunc_FindEntityByString, index, "target", target) */ + +#define fm_find_ent_by_tname(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "targetname", %2) +/* stock fm_find_ent_by_tname(index, const targetname[]) + return engfunc(EngFunc_FindEntityByString, index, "targetname", targetname) */ + +stock fm_find_ent_by_model(index, const classname[], const model[]) { + new ent = index, mdl[72]; + while ((ent = fm_find_ent_by_class(ent, classname))) { + pev(ent, pev_model, mdl, sizeof mdl - 1); + if (equal(mdl, model)) + return ent; + } + + return 0; +} + +#define fm_find_ent_in_sphere(%1,%2,%3) engfunc(EngFunc_FindEntityInSphere, %1, %2, %3) +/* stock fm_find_ent_in_sphere(index, const Float:origin[3], Float:radius) + return engfunc(EngFunc_FindEntityInSphere, index, origin, radius) */ + +#define fm_call_think(%1) dllfunc(DLLFunc_Think, %1) +/* stock fm_call_think(entity) + return dllfunc(DLLFunc_Think, entity) */ + +#define fm_is_valid_ent(%1) pev_valid(%1) +/* stock fm_is_valid_ent(index) + return pev_valid(index) */ + +stock fm_entity_set_origin(index, const Float:origin[3]) { + new Float:mins[3], Float:maxs[3]; + pev(index, pev_mins, mins); + pev(index, pev_maxs, maxs); + engfunc(EngFunc_SetSize, index, mins, maxs); + + return engfunc(EngFunc_SetOrigin, index, origin); +} + +#define fm_entity_set_model(%1,%2) engfunc(EngFunc_SetModel, %1, %2) +/* stock fm_entity_set_model(index, const model[]) + return engfunc(EngFunc_SetModel, index, model) */ + +// ported by v3x +#define fm_remove_entity(%1) engfunc(EngFunc_RemoveEntity, %1) +/* stock fm_remove_entity(index) + return engfunc(EngFunc_RemoveEntity, index) */ + +#define fm_entity_count() engfunc(EngFunc_NumberOfEntities) +/* stock fm_entity_count() + return engfunc(EngFunc_NumberOfEntities) */ + +#define fm_fake_touch(%1,%2) dllfunc(DLLFunc_Touch, %1, %2) +/* stock fm_fake_touch(toucher, touched) + return dllfunc(DLLFunc_Touch, toucher, touched) */ + +#define fm_DispatchSpawn(%1) dllfunc(DLLFunc_Spawn, %1) +/* stock fm_DispatchSpawn(entity) + return dllfunc(DLLFunc_Spawn, entity) */ + +// ported by v3x +#define fm_point_contents(%1) engfunc(EngFunc_PointContents, %1) +/* stock fm_point_contents(const Float:point[3]) + return engfunc(EngFunc_PointContents, point) */ + +stock fm_trace_line(ignoreent, const Float:start[3], const Float:end[3], Float:ret[3]) { + engfunc(EngFunc_TraceLine, start, end, ignoreent == -1 ? 1 : 0, ignoreent, 0); + + new ent = get_tr2(0, TR_pHit); + get_tr2(0, TR_vecEndPos, ret); + + return pev_valid(ent) ? ent : 0; +} + +stock fm_trace_hull(const Float:origin[3], hull, ignoredent = 0, ignoremonsters = 0) { + new result = 0; + engfunc(EngFunc_TraceHull, origin, origin, ignoremonsters, hull, ignoredent > 0 ? ignoredent : 0, 0); + + if (get_tr2(0, TR_StartSolid)) + result += 1; + if (get_tr2(0, TR_AllSolid)) + result += 2; + if (!get_tr2(0, TR_InOpen)) + result += 4; + + return result; +} + +stock fm_trace_normal(ignoreent, const Float:start[3], const Float:end[3], Float:ret[3]) { + engfunc(EngFunc_TraceLine, start, end, 0, ignoreent, 0); + get_tr2(0, TR_vecPlaneNormal, ret); + + new Float:fraction; + get_tr2(0, TR_flFraction, fraction); + if (fraction >= 1.0) + return 0; + + return 1; +} + +// note that for CS planted C4 has a "grenade" classname as well +stock fm_get_grenade_id(id, model[], len, grenadeid = 0) { + new ent = fm_find_ent_by_owner(grenadeid, "grenade", id); + if (ent && len > 0) + pev(ent, pev_model, model, len); + + return ent; +} + +#define fm_halflife_time() get_gametime() +/* stock Float:fm_halflife_time() + return get_gametime() */ + +#define fm_attach_view(%1,%2) engfunc(EngFunc_SetView, %1, %2) +/* stock fm_attach_view(index, entity) + return engfunc(EngFunc_SetView, index, entity) */ + +stock fm_playback_event(flags, invoker, eventindex, Float:delay, const Float:origin[3], const Float:angles[3], Float:fparam1, Float:fparam2, iparam1, iparam2, bparam1, bparam2) { + return engfunc(EngFunc_PlaybackEvent, flags, invoker, eventindex, delay, origin, angles, fparam1, fparam2, iparam1, iparam2, bparam1, bparam2); +} + +#define fm_eng_get_string(%1,%2,%3) engfunc(EngFunc_SzFromIndex, %1, %2, %3) +/* stock fm_eng_get_string(istring, string[], len) + return engfunc(EngFunc_SzFromIndex, istring, string, len) */ + + +/* HLSDK functions */ + +// the dot product is performed in 2d, making the view cone infinitely tall +stock bool:fm_is_in_viewcone(index, const Float:point[3]) { + new Float:angles[3]; + pev(index, pev_angles, angles); + engfunc(EngFunc_MakeVectors, angles); + global_get(glb_v_forward, angles); + angles[2] = 0.0; + + new Float:origin[3], Float:diff[3], Float:norm[3]; + pev(index, pev_origin, origin); + xs_vec_sub(point, origin, diff); + diff[2] = 0.0; + xs_vec_normalize(diff, norm); + + new Float:dot, Float:fov; + dot = xs_vec_dot(norm, angles); + pev(index, pev_fov, fov); + if (dot >= floatcos(fov * M_PI / 360)) + return true; + + return false; +} + +stock bool:fm_is_visible(index, const Float:point[3], ignoremonsters = 0) { + new Float:start[3], Float:view_ofs[3]; + pev(index, pev_origin, start); + pev(index, pev_view_ofs, view_ofs); + xs_vec_add(start, view_ofs, start); + + engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0); + + new Float:fraction; + get_tr2(0, TR_flFraction, fraction); + if (fraction == 1.0) + return true; + + return false; +} + + +/* Engine_stocks functions */ + +stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype) { + new class[] = "trigger_hurt"; + new entity = fm_create_entity(class); + if (!entity) + return 0; + + new value[16]; + float_to_str(takedmgdamage * 2, value, sizeof value - 1); + fm_set_kvd(entity, "dmg", value, class); + + num_to_str(damagetype, value, sizeof value - 1); + fm_set_kvd(entity, "damagetype", value, class); + + fm_set_kvd(entity, "origin", "8192 8192 8192", class); + fm_DispatchSpawn(entity); + + set_pev(entity, pev_classname, classname); + fm_fake_touch(entity, victim); + fm_remove_entity(entity); + + return 1; +} + +#define fm_find_ent(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2) +/* stock fm_find_ent(index, const classname[]) + return engfunc(EngFunc_FindEntityByString, index, "classname", classname) */ + +#define fm_get_user_button(%1) pev(%1, pev_button) +/* stock fm_get_user_button(index) + return pev(index, pev_button) */ + +#define fm_get_user_oldbutton(%1) pev(%1, pev_oldbuttons) +/* stock fm_get_user_oldbutton(index) + return pev(index, pev_oldbuttons) */ + +#define fm_get_entity_flags(%1) pev(%1, pev_flags) +/* stock fm_get_entity_flags(index) + return pev(index, pev_flags) */ + +#define fm_get_entity_distance(%1,%2) floatround(fm_entity_range(%1, %2)) +/* stock fm_get_entity_distance(ent1, ent2) + return floatround(fm_entity_range(ent1, ent2)) */ + +#define fm_get_grenade(%1) fm_get_grenade_id(%1, "", 0) +/* stock fm_get_grenade(id) + return fm_get_grenade_id(id, "", 0) */ + +// optimization idea by Orangutanz +stock fm_get_brush_entity_origin(index, Float:origin[3]) { + new Float:mins[3], Float:maxs[3]; + + pev(index, pev_origin, origin); + pev(index, pev_mins, mins); + pev(index, pev_maxs, maxs); + + origin[0] += (mins[0] + maxs[0]) * 0.5; + origin[1] += (mins[1] + maxs[1]) * 0.5; + origin[2] += (mins[2] + maxs[2]) * 0.5; + + return 1; +} + +// based on v3x's port, upgraded version returns number of removed entities +stock fm_remove_entity_name(const classname[]) { + new ent = -1, num = 0; + while ((ent = fm_find_ent_by_class(ent, classname))) + num += fm_remove_entity(ent); + + return num; +} + +stock fm_ViewContents(id) { + new origin[3], Float:Orig[3]; + get_user_origin(id, origin, 3); + IVecFVec(origin, Orig); + + return fm_point_contents(Orig); +} + +stock fm_get_speed(entity) { + new Float:Vel[3]; + pev(entity, pev_velocity, Vel); + + return floatround(vector_length(Vel)); +} + +stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) { + new Float:RenderColor[3]; + RenderColor[0] = float(r); + RenderColor[1] = float(g); + RenderColor[2] = float(b); + + set_pev(entity, pev_renderfx, fx); + set_pev(entity, pev_rendercolor, RenderColor); + set_pev(entity, pev_rendermode, render); + set_pev(entity, pev_renderamt, float(amount)); + + return 1; +} + +stock fm_set_entity_flags(index, flag, onoff) { + new flags = pev(index, pev_flags); + if ((flags & flag) > 0) + return onoff == 1 ? 2 : 1 + 0 * set_pev(index, pev_flags, flags - flag); + else + return onoff == 0 ? 2 : 1 + 0 * set_pev(index, pev_flags, flags + flag); + + return 0; +} + +stock fm_set_entity_visibility(index, visible = 1) { + set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW); + + return 1; +} + +#define fm_get_entity_visibility(%1) (!(pev(%1, pev_effects) & EF_NODRAW)) +/* stock fm_get_entity_visibility(index) + return !(pev(index, pev_effects) & EF_NODRAW) */ + +stock fm_set_user_velocity(entity, const Float:vector[3]) { + set_pev(entity, pev_velocity, vector); + + return 1; +} + +#define fm_get_user_velocity(%1,%2) pev(%1, pev_velocity, %2) +/* stock fm_get_user_velocity(entity, Float:vector[3]) + return pev(entity, pev_velocity, vector) */ + + +/* Fun functions */ + +#define fm_get_client_listen(%1,%2) engfunc(EngFunc_GetClientListening, %1, %2) +/* stock fm_get_client_listen(receiver, sender) + return engfunc(EngFunc_GetClientListening, receiver, sender) */ + +#define fm_set_client_listen(%1,%2,%3) engfunc(EngFunc_SetClientListening, %1, %2, %3) +/* stock fm_set_client_listen(receiver, sender, listen) + return engfunc(EngFunc_SetClientListening, receiver, sender, listen) */ + +stock fm_get_user_godmode(index) { + new Float:val; + pev(index, pev_takedamage, val); + + return (val == DAMAGE_NO); +} + +stock fm_set_user_godmode(index, godmode = 0) { + set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM); + + return 1; +} + +stock fm_set_user_armor(index, armor) { + set_pev(index, pev_armorvalue, float(armor)); + + return 1; +} + +stock fm_set_user_health(index, health) { + health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index); + + return 1; +} + +stock fm_set_user_origin(index, /* const */ origin[3]) { + new Float:orig[3]; + IVecFVec(origin, orig); + + return fm_entity_set_origin(index, orig); +} + +stock fm_set_user_rendering(index, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) { + return fm_set_rendering(index, fx, r, g, b, render, amount); +} + +stock fm_give_item(index, const item[]) { + if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10)) + return 0; + + new ent = fm_create_entity(item); + if (!pev_valid(ent)) + return 0; + + new Float:origin[3]; + pev(index, pev_origin, origin); + set_pev(ent, pev_origin, origin); + set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN); + dllfunc(DLLFunc_Spawn, ent); + + new save = pev(ent, pev_solid); + dllfunc(DLLFunc_Touch, ent, index); + if (pev(ent, pev_solid) != save) + return ent; + + engfunc(EngFunc_RemoveEntity, ent); + + return -1; +} + +stock fm_set_user_maxspeed(index, Float:speed = -1.0) { + engfunc(EngFunc_SetClientMaxspeed, index, speed); + set_pev(index, pev_maxspeed, speed); + + return 1; +} + +stock Float:fm_get_user_maxspeed(index) { + new Float:speed; + pev(index, pev_maxspeed, speed); + + return speed; +} + +stock fm_set_user_gravity(index, Float:gravity = 1.0) { + set_pev(index, pev_gravity, gravity); + + return 1; +} + +stock Float:fm_get_user_gravity(index) { + new Float:gravity; + pev(index, pev_gravity, gravity); + + return gravity; +} + +/* interferes with FM_Spawn enum, just use fm_DispatchSpawn +stock fm_spawn(entity) { + return dllfunc(DLLFunc_Spawn, entity) +} +*/ + +stock fm_set_user_noclip(index, noclip = 0) { + set_pev(index, pev_movetype, noclip == 1 ? MOVETYPE_NOCLIP : MOVETYPE_WALK); + + return 1; +} + +#define fm_get_user_noclip(%1) (pev(%1, pev_movetype) == MOVETYPE_NOCLIP) +/* stock fm_get_user_noclip(index) + return (pev(index, pev_movetype) == MOVETYPE_NOCLIP) */ + +// note: get_user_weapon will still return former weapon index +stock fm_strip_user_weapons(index) { + new ent = fm_create_entity("player_weaponstrip"); + if (!pev_valid(ent)) + return 0; + + dllfunc(DLLFunc_Spawn, ent); + dllfunc(DLLFunc_Use, ent, index); + engfunc(EngFunc_RemoveEntity, ent); + + return 1; +} + +stock fm_set_user_frags(index, frags) { + set_pev(index, pev_frags, float(frags)); + + return 1; +} + + +/* Cstrike functions */ + +stock fm_cs_user_spawn(index) { + set_pev(index, pev_deadflag, DEAD_RESPAWNABLE); + dllfunc(DLLFunc_Spawn, index); + set_pev(index, pev_iuser1, 0); + + return 1; +} + + +/* Custom functions */ + +// based on Basic-Master's set_keyvalue, upgraded version accepts an optional classname (a bit more efficient if it is passed) +stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") { + if (classname[0]) + set_kvd(0, KV_ClassName, classname); + else { + new class[32]; + pev(entity, pev_classname, class, sizeof class - 1); + set_kvd(0, KV_ClassName, class); + } + + set_kvd(0, KV_KeyName, key); + set_kvd(0, KV_Value, value); + set_kvd(0, KV_fHandled, 0); + + return dllfunc(DLLFunc_KeyValue, entity, 0); +} + +stock fm_find_ent_by_integer(index, pev_field, value) { + static maxents; + if (!maxents) + maxents = global_get(glb_maxEntities); + + for (new i = index + 1; i < maxents; ++i) { + if (pev_valid(i) && pev(i, pev_field) == value) + return i; + } + + return 0; +} + +stock fm_find_ent_by_flags(index, pev_field, flags) { + static maxents; + if (!maxents) + maxents = global_get(glb_maxEntities); + + for (new i = index + 1; i < maxents; ++i) { + if (pev_valid(i) && (pev(i, pev_field) & flags) == flags) + return i; + } + + return 0; +} + +stock Float:fm_distance_to_box(const Float:point[3], const Float:mins[3], const Float:maxs[3]) { + new Float:dist[3]; + for (new i = 0; i < 3; ++i) { + if (point[i] > maxs[i]) + dist[i] = point[i] - maxs[i]; + else if (mins[i] > point[i]) + dist[i] = mins[i] - point[i]; + } + + return vector_length(dist); +} + +stock Float:fm_boxes_distance(const Float:mins1[3], const Float:maxs1[3], const Float:mins2[3], const Float:maxs2[3]) { + new Float:dist[3]; + for (new i = 0; i < 3; ++i) { + if (mins1[i] > maxs2[i]) + dist[i] = mins1[i] - maxs2[i]; + else if (mins2[i] > maxs1[i]) + dist[i] = mins2[i] - maxs1[i]; + } + + return vector_length(dist); +} + +stock Float:fm_distance_to_boxent(entity, boxent) { + new Float:point[3]; + pev(entity, pev_origin, point); + + new Float:mins[3], Float:maxs[3]; + pev(boxent, pev_absmin, mins); + pev(boxent, pev_absmax, maxs); + + return fm_distance_to_box(point, mins, maxs); +} + +stock Float:fm_boxents_distance(boxent1, boxent2) { + new Float:mins1[3], Float:maxs1[3]; + pev(boxent1, pev_absmin, mins1); + pev(boxent1, pev_absmax, maxs1); + + new Float:mins2[3], Float:maxs2[3]; + pev(boxent2, pev_absmin, mins2); + pev(boxent2, pev_absmax, maxs2); + + return fm_boxes_distance(mins1, maxs1, mins2, maxs2); +} + +// projects a center of a player's feet base (originally by P34nut, improved) +stock Float:fm_distance_to_floor(index, ignoremonsters = 1) { + new Float:start[3], Float:dest[3], Float:end[3]; + pev(index, pev_origin, start); + dest[0] = start[0]; + dest[1] = start[1]; + dest[2] = -8191.0; + + engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0); + get_tr2(0, TR_vecEndPos, end); + + pev(index, pev_absmin, start); + new Float:ret = start[2] - end[2]; + + return ret > 0 ? ret : 0.0; +} + +// potential to crash (?) if used on weaponbox+weapon_* entity pair (use fm_remove_weaponbox instead) +stock fm_kill_entity(index) { + set_pev(index, pev_flags, pev(index, pev_flags) | FL_KILLME); + + return 1; +} + +// if weapon index isn't passed then assuming that it's the current weapon +stock fm_get_user_weapon_entity(id, wid = 0) { + new weap = wid, clip, ammo; + if (!weap && !(weap = get_user_weapon(id, clip, ammo))) + return 0; + + new class[32]; + get_weaponname(weap, class, sizeof class - 1); + + return fm_find_ent_by_owner(-1, class, id); +} + +// only weapon index or its name can be passed, if neither is passed then the current gun will be stripped +stock bool:fm_strip_user_gun(index, wid = 0, const wname[] = "") { + new ent_class[32]; + if (!wid && wname[0]) + copy(ent_class, sizeof ent_class - 1, wname); + else { + new weapon = wid, clip, ammo; + if (!weapon && !(weapon = get_user_weapon(index, clip, ammo))) + return false; + + get_weaponname(weapon, ent_class, sizeof ent_class - 1); + } + + new ent_weap = fm_find_ent_by_owner(-1, ent_class, index); + if (!ent_weap) + return false; + + engclient_cmd(index, "drop", ent_class); + + new ent_box = pev(ent_weap, pev_owner); + if (!ent_box || ent_box == index) + return false; + + dllfunc(DLLFunc_Think, ent_box); + + return true; +} + +// only weapon index or its name can be passed, if neither is passed then the current gun will be transferred +stock bool:fm_transfer_user_gun(index1, index2, wid = 0, const wname[] = "") { + new ent_class[32]; + if (!wid && wname[0]) + copy(ent_class, sizeof ent_class - 1, wname); + else { + new weapon = wid, clip, ammo; + if (!weapon && !(weapon = get_user_weapon(index1, clip, ammo))) + return false; + + get_weaponname(weapon, ent_class, sizeof ent_class - 1); + } + + new ent_weap = fm_find_ent_by_owner(-1, ent_class, index1); + if (!ent_weap) + return false; + + engclient_cmd(index1, "drop", ent_class); + + new ent_box = pev(ent_weap, pev_owner); + if (!ent_box || ent_box == index1) + return false; + + set_pev(ent_box, pev_flags, pev(ent_box, pev_flags) | FL_ONGROUND); + dllfunc(DLLFunc_Touch, ent_box, index2); + if (pev(ent_weap, pev_owner) != index2) + return false; + + return true; +} + +stock bool:fm_is_ent_visible(index, entity, ignoremonsters = 0) { + new Float:start[3], Float:dest[3]; + pev(index, pev_origin, start); + pev(index, pev_view_ofs, dest); + xs_vec_add(start, dest, start); + + pev(entity, pev_origin, dest); + engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0); + + new Float:fraction; + get_tr2(0, TR_flFraction, fraction); + if (fraction == 1.0 || get_tr2(0, TR_pHit) == entity) + return true; + + return false; +} + +// ported from AMXX's core get_user_origin(..., 3) (suggested by Greenberet) +stock fm_get_aim_origin(index, Float:origin[3]) { + new Float:start[3], Float:view_ofs[3]; + pev(index, pev_origin, start); + pev(index, pev_view_ofs, view_ofs); + xs_vec_add(start, view_ofs, start); + + new Float:dest[3]; + pev(index, pev_v_angle, dest); + engfunc(EngFunc_MakeVectors, dest); + global_get(glb_v_forward, dest); + xs_vec_mul_scalar(dest, 9999.0, dest); + xs_vec_add(start, dest, dest); + + engfunc(EngFunc_TraceLine, start, dest, 0, index, 0); + get_tr2(0, TR_vecEndPos, origin); + + return 1; +} + +stock bool:fm_get_user_longjump(index) { + new value[2]; + engfunc(EngFunc_GetPhysicsKeyValue, index, "slj", value, 1); + switch (value[0]) { + case '1': return true; + } + + return false; +} + +stock fm_set_user_longjump(index, bool:longjump = true, bool:tempicon = true) { + if (longjump == fm_get_user_longjump(index)) + return; + + if (longjump) { + engfunc(EngFunc_SetPhysicsKeyValue, index, "slj", "1"); + if (tempicon) { + static msgid_itempickup; + if (!msgid_itempickup) + msgid_itempickup = get_user_msgid("ItemPickup"); + + message_begin(MSG_ONE, msgid_itempickup, _, index); + write_string("item_longjump"); + message_end(); + } + } + else + engfunc(EngFunc_SetPhysicsKeyValue, index, "slj", "0"); +} + +#define WEAPON_SUIT 31 + +stock bool:fm_get_user_suit(index) { + return bool:(!(!(pev(index, pev_weapons) & (1<<WEAPON_SUIT)))); // i'm not insane, this is a trick! +} + +stock fm_set_user_suit(index, bool:suit = true, bool:sound = true) { + new weapons = pev(index, pev_weapons); + if (!suit) + set_pev(index, pev_weapons, weapons & ~(1<<WEAPON_SUIT)); + else if (!(weapons & (1<<WEAPON_SUIT))) { + set_pev(index, pev_weapons, weapons | (1<<WEAPON_SUIT)); + if (sound) + emit_sound(index, CHAN_VOICE, "items/tr_kevlar.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM); + } +} + +#define FEV_RELIABLE (1<<1) +#define FEV_GLOBAL (1<<2) + +// removes all created decals and players' corpses from the world +// set a specific index to remove decals only for the given client +stock fm_cs_remove_decals(index = 0) { + static eventindex_decal_reset; + if (!eventindex_decal_reset) + eventindex_decal_reset = engfunc(EngFunc_PrecacheEvent, 1, "events/decal_reset.sc"); + + new flags = FEV_RELIABLE; + if (!index) + flags |= FEV_GLOBAL; + + engfunc(EngFunc_PlaybackEvent, flags, index, eventindex_decal_reset, 0.0, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0}, 0.0, 0.0, 0, 0, 0, 0); +} + +// checks whether the entity's classname is equal to the passed classname +stock bool:fm_is_ent_classname(index, const classname[]) { + if (!pev_valid(index)) + return false; + + new class[32]; + pev(index, pev_classname, class, sizeof class - 1); + if (equal(class, classname)) + return true; + + return false; +} + +// the same as AMXX's core user_kill but fixes the issue when the scoreboard doesn't update immediately if flag is set to 1 +stock fm_user_kill(index, flag = 0) { + if (flag) { + new Float:frags; + pev(index, pev_frags, frags); + set_pev(index, pev_frags, ++frags); + } + + dllfunc(DLLFunc_ClientKill, index); + + return 1; +} + +// returns a degree angle between player-to-point and player's view vectors +stock Float:fm_get_view_angle_diff(index, const Float:point[3]) { + new Float:vec[3], Float:ofs[3], Float:aim[3]; + pev(index, pev_origin, vec); + pev(index, pev_view_ofs, ofs); + xs_vec_add(vec, ofs, vec); + xs_vec_sub(point, vec, vec); + xs_vec_normalize(vec, vec); + + pev(index, pev_v_angle, aim); + engfunc(EngFunc_MakeVectors, aim); + global_get(glb_v_forward, aim); + + return xs_vec_angle(vec, aim); +} + +// gets a weapon type of the linked to weaponbox weapon_* entity +stock fm_get_weaponbox_type(entity) { + static max_clients, max_entities; + if (!max_clients) + max_clients = global_get(glb_maxClients); + if (!max_entities) + max_entities = global_get(glb_maxEntities); + + for (new i = max_clients + 1; i < max_entities; ++i) { + if (pev_valid(i) && entity == pev(i, pev_owner)) { + new wname[32]; + pev(i, pev_classname, wname, sizeof wname - 1); + return get_weaponid(wname); + } + } + + return 0; +} + +// safe removal of weaponbox+weapon_* entity pair (delay =~= 0.03 second) +#define fm_remove_weaponbox(%1) dllfunc(DLLFunc_Think, %1) +/* stock fm_remove_weaponbox(entity) + return dllfunc(DLLFunc_Think, entity) */ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/file.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/file.inc new file mode 100644 index 0000000..14d9379 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/file.inc @@ -0,0 +1,143 @@ +/* Files functions +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _file_included + #endinput +#endif +#define _file_included + +/* Reads content from directory. +* Returns index of next element or 0 when end of dir. is reached. */ +native read_dir(const dirname[],pos,output[],len,&outlen); + +/* Reads line from file. Returns index of next line or 0 when end of file is reached. */ +native read_file(const file[],line,text[],len,&txtlen); + +/* Writes text to file. Function returns 0 on failure. +* When line is set to -1, the text is added at the end of file. */ +native write_file(const file[],const text[],line = -1); + +/* Deletes file. Function returns 1 on success, 0 on failure. */ +native delete_file(const file[]); + +/* Checks for file. If file exists function returns 1, in other case 0. */ +native file_exists(const file[]); + +/* renames a file. returns 0 on failure, 1 on success. + * if relative true, rename_file will act like other natives which + * use the moddir as a base directory. otherwise, the current directory is + * undefined (but assumed to be hlds). + */ +native rename_file(const oldname[], const newname[], relative=0); + +/* Checks if a directory exists */ +native dir_exists(const dir[]); + +/* Returns a file size in bytes if flag is set to 0. +* When flag is set to 1 returns number of lines in the file, +* and when flags is 2, function returns 1 if the file ends +* with line feed. If file doesn't exist returns -1. */ +native file_size(const file[], flag=0); + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +//Open a file, returns a handle or 0 on failure +native fopen(const filename[],const mode[]); + +//Closes a file handle +native fclose(file); + +#define BLOCK_INT 4 +#define BLOCK_SHORT 2 +#define BLOCK_CHAR 1 +#define BLOCK_BYTE 1 + +//The following functions work as such: +// RAW - means the array you pass is a raw bytestream, for experts only +// BLOCK - means you are passing in an array where each element will be written +// NORMAL - means you are writing only one element +// RAW and BLOCK return the number of blocks acted upon successfully +// NORMAL returns 1 on success + +native fread(file, &data, mode); +native fread_blocks(file, data[], blocks, mode); +native fread_raw(file, stream[], blocksize, blocks); +native fwrite(file, data, mode); +native fwrite_blocks(file, const data[], blocks, mode); +native fwrite_raw(file, const stream[], blocksize, mode); + +//Returns 1 if the file is ended, 0 otherwise +native feof(file); + +//Reads a line from a text file -- includes newline! +native fgets(file, buffer[], maxlength); + +//Writes a line to a text file. Returns # of characters written. +native fputs(file, const text[]); + +//Writes a line to the file +native fprintf(file, const fmt[], any:...); + +//Sets the current position in a file (see SEEK_ values above) +native fseek(file, position, start); + +//Returns the current position in a file +native ftell(file); + +//These are straight from the C standard. +native fgetc(file); +native fputc(file, data); +native fungetc(file, data); + +//Return the size of a file +native filesize(const filename[], any:...); + +//Attempts to remove a directory. +//Note that you cannot remove a directory that has files on most +// operating systems. +native rmdir(const path[]); + +/* Returns 0 on success, like the POSIX specification */ +native mkdir(const dirname[]); + + +//Delete a file (delete_file macro) +native unlink(const filename[]); + +//Returns a handle to a directory +native open_dir(dir[], firstfile[], length); +native next_file(dirh, buffer[], length); +native close_dir(dirh); + +/** + * Loads a file using the LoadFileForMe engine function. + * + * The data is truncated if there is not enough space. No null-terminator + * is applied; the data is the raw contents of the file. + * + * @param file File to load (may be a file from the GCF). + * @param buffer Buffer to store file contents. + * @param maxlength Maximum size of the file buffer. + * @param length Variable to store the file length. This may return + * a number larger than the buffer size. + * @return -1 if the file could not be loaded. Otherwise, + * the number of cells actually written to the buffer + * are returned. + */ +native LoadFileForMe(const file[], buffer[], maxlength, &length=0); + +/** + * Flushes a buffered output stream. + * + * @param file File handle, or 0 for all open streams. + * @return 0 on success, -1 on failure. + */ +native fflush(file); + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/float.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/float.inc new file mode 100644 index 0000000..35b65ae --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/float.inc @@ -0,0 +1,213 @@ +/* Float arithmetic +* +* (c) Copyright 1999, Artran, Inc. +* Written by Greg Garner (gmg@artran.com) +* Modified in March 2001 to include user defined +* operators for the floating point functions. +* +* This file is provided as is (no warranties). +*/ + +#if defined _float_included + #endinput +#endif +#define _float_included + +/* Different methods of rounding */ +enum floatround_method { + floatround_round = 0, + floatround_floor, + floatround_ceil, + floatround_tozero +}; + +enum anglemode { + radian = 0, + degrees, + grades +}; + +/* Convert an integer into a floating point value */ +native Float:float(value); + +/* Convert a string into a floating point value */ +native Float:floatstr(const string[]); + +/* Multiple two floats together */ +native Float:floatmul(Float:oper1, Float:oper2); + +/* Divide the dividend float by the divisor float */ +native Float:floatdiv(Float:dividend, Float:divisor); + +/* Add two floats together */ +native Float:floatadd(Float:dividend, Float:divisor); + +/* Subtract oper2 float from oper1 float */ +native Float:floatsub(Float:oper1, Float:oper2); + +/* Return the fractional part of a float */ +native Float:floatfract(Float:value); + +/* Round a float into a integer value */ +native floatround(Float:value, floatround_method:method=floatround_round); + +/* Compare two integers. If the two elements are equal, return 0. +* If the first argument is greater than the second argument, return 1, +* If the first argument is less than the second argument, return -1. */ +native floatcmp(Float:fOne, Float:fTwo); + +/* Return the square root of the input value, same as floatpower(value, 0.5) */ +native Float:floatsqroot(Float:value); + +/* Return the value raised to the power of the exponent */ +native Float:floatpower(Float:value, Float:exponent); + +/* Return the logarithm */ +native Float:floatlog(Float:value, Float:base=10.0); + +/* Return the sine, cosine or tangent. + * The input angle may be in radians, degrees or grades. */ +native Float:floatsin(Float:value, anglemode:mode=radian); +native Float:floatcos(Float:value, anglemode:mode=radian); +native Float:floattan(Float:value, anglemode:mode=radian); + +/* Return the hyperbolic sine, cosine or tangent. + * The input angle may be in radians, degrees or grades. */ +native Float:floatsinh(Float:angle, anglemode:mode=radian); +native Float:floatcosh(Float:angle, anglemode:mode=radian); +native Float:floattanh(Float:angle, anglemode:mode=radian); + +/* Return the absolute value */ +native Float:floatabs(Float:value); + +/* Return the angle of a sine, cosine or tangent. + * The output angle may be in radians, degrees, or grades. */ +native Float:floatatan(Float:angle, {anglemode,_}:radix); +native Float:floatacos(Float:angle, {anglemode,_}:radix); +native Float:floatasin(Float:angle, {anglemode,_}:radix); +native Float:floatatan2(Float:x, Float:y, {anglemode,_}:radix); + +#pragma rational Float + +/* user defined operators */ +native Float:operator*(Float:oper1, Float:oper2) = floatmul; +native Float:operator/(Float:oper1, Float:oper2) = floatdiv; +native Float:operator+(Float:oper1, Float:oper2) = floatadd; +native Float:operator-(Float:oper1, Float:oper2) = floatsub; + +stock Float:operator++(Float:oper) + return oper+1.0; + +stock Float:operator--(Float:oper) + return oper-1.0; + +stock Float:operator-(Float:oper) + return oper^Float:cellmin; /* IEEE values are sign/magnitude */ + +stock Float:operator*(Float:oper1, oper2) + return floatmul(oper1, float(oper2)); /* "*" is commutative */ + +stock Float:operator/(Float:oper1, oper2) + return floatdiv(oper1, float(oper2)); + +stock Float:operator/(oper1, Float:oper2) + return floatdiv(float(oper1), oper2); + +stock Float:operator+(Float:oper1, oper2) + return floatadd(oper1, float(oper2)); /* "+" is commutative */ + +stock Float:operator-(Float:oper1, oper2) + return floatsub(oper1, float(oper2)); + +stock Float:operator-(oper1, Float:oper2) + return floatsub(float(oper1), oper2); + +stock bool:operator==(Float:oper1, Float:oper2) + return floatcmp(oper1, oper2) == 0; + +stock bool:operator==(Float:oper1, oper2) + return floatcmp(oper1, float(oper2)) == 0; /* "==" is commutative */ + +stock bool:operator!=(Float:oper1, Float:oper2) + return floatcmp(oper1, oper2) != 0; + +stock bool:operator!=(Float:oper1, oper2) + return floatcmp(oper1, float(oper2)) != 0; /* "==" is commutative */ + +stock bool:operator>(Float:oper1, Float:oper2) + return floatcmp(oper1, oper2) > 0; + +stock bool:operator>(Float:oper1, oper2) + return floatcmp(oper1, float(oper2)) > 0; + +stock bool:operator>(oper1, Float:oper2) + return floatcmp(float(oper1), oper2) > 0; + +stock bool:operator>=(Float:oper1, Float:oper2) + return floatcmp(oper1, oper2) >= 0; + +stock bool:operator>=(Float:oper1, oper2) + return floatcmp(oper1, float(oper2)) >= 0; + +stock bool:operator>=(oper1, Float:oper2) + return floatcmp(float(oper1), oper2) >= 0; + +stock bool:operator<(Float:oper1, Float:oper2) + return floatcmp(oper1, oper2) < 0; + +stock bool:operator<(Float:oper1, oper2) + return floatcmp(oper1, float(oper2)) < 0; + +stock bool:operator<(oper1, Float:oper2) + return floatcmp(float(oper1), oper2) < 0; + +stock bool:operator<=(Float:oper1, Float:oper2) + return floatcmp(oper1, oper2) <= 0; + +stock bool:operator<=(Float:oper1, oper2) + return floatcmp(oper1, float(oper2)) <= 0; + +stock bool:operator<=(oper1, Float:oper2) + return floatcmp(float(oper1), oper2) <= 0; + +stock bool:operator!(Float:oper) + return (_:oper & ((-1)/2)) == 0; /* -1 = all bits to 1; /2 = remove most significant bit (sign) + works on both 32bit and 64bit systems; no constant required */ +/* forbidden operations */ +forward operator%(Float:oper1, Float:oper2); +forward operator%(Float:oper1, oper2); +forward operator%(oper1, Float:oper2); + + +stock Float:floatmin(Float:ValueA, Float:ValueB) +{ + if (ValueA<=ValueB) + { + return ValueA; + } + + return ValueB; +} + +stock Float:floatmax(Float:ValueA, Float:ValueB) +{ + if (ValueA>=ValueB) + { + return ValueA; + } + + return ValueB; +} +stock Float:floatclamp(Float:Value, Float:MinValue, Float:MaxValue) +{ + if (Value<=MinValue) + { + return MinValue; + } + if (Value>=MaxValue) + { + return MaxValue; + } + + return Value; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fun.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fun.inc new file mode 100644 index 0000000..d176666 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/fun.inc @@ -0,0 +1,99 @@ +/* Fun functions +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _fun_included + #endinput +#endif +#define _fun_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib fun + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib fun + #endif +#else + #pragma library fun +#endif + +/* Returns 1 if receiver hears sender via voice communication. */ +native get_client_listen(receiver, sender); + +/* Sets who can listen who. Function returns 0 +* if for some reasons this setting can't be done. */ +native set_client_listen(receiver, sender, listen); + +/* Sets player godmode. If you want to disable godmode set only first parameter. */ +native set_user_godmode(index, godmode = 0); + +/* Returns 1 if godmode is set. */ +native get_user_godmode(index); + +/* Sets player armor. */ +native set_user_armor(index, armor); + +/* Sets player health. */ +native set_user_health(index, health); + +/* Move player to origin. */ +native set_user_origin(index, const origin[3]); + +/* Sets player rendering mode. */ +native set_user_rendering(index, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16); + +/* Gives item to player, name of item can start + * with weapon_, ammo_ and item_. This event + * is announced with proper message to all players. */ +native give_item(index, const item[]); + +/* Sets hit zones for player. + * Parts of body are as bits: + * 1 - generic + * 2 - head + * 4 - chest + * 8 - stomach + * 16 - left arm + * 32 - right arm + * 64 - left leg + * 128 - right leg */ +native set_user_hitzones(index = 0, target = 0, body = 255); + +/* Get user hitzones. */ +native get_user_hitzones(index, target); + +/* Sets users max. speed. */ +native set_user_maxspeed(index, Float:speed = -1.0); + +/* Returns users max. speed. */ +native Float:get_user_maxspeed(index); + +/* Sets users gravity. */ +native set_user_gravity(index, Float:gravity = 1.0); + +/* Returns users gravity. */ +native Float:get_user_gravity(index); + +/* Spawns entity. */ +native spawn(index); + +/* Sets player noclip. If you want to disable noclip set only first parameter. */ +native set_user_noclip(index, noclip = 0); + +/* Returns 1 if noclip is set. */ +native get_user_noclip(index); + +/* Returns 1 if player has silent footsteps, 0 if footsteps are set to normal */ +native get_user_footsteps(index); + +/* Gives player silent footsteps. +* if set = 0 it will return footsteps to normal */ +native set_user_footsteps(id, set = 1); + +/* Strips all weapons from user. */ +native strip_user_weapons(index); + +/* Sets player frags. */ +native set_user_frags(index, frags); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/geoip.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/geoip.inc new file mode 100644 index 0000000..8a25394 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/geoip.inc @@ -0,0 +1,74 @@ +/* GeoIP module functions for AMX Mod X + by David "BAILOPAN" Anderson + (C)Copyrighted under the GNU General Public License, Version 2 + */ + +#if defined geoip_included + #endinput +#endif +#define _geoip_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib geoip + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib geoip + #endif +#else + #pragma library geoip +#endif + +/// IP addresses passed to these natives can contain ports, the ports will be ignored. + +/** + * Lookup the two character country code for a given IP address. + * e.g: "US", "CA", etc. + * + * @param ip The IP address to lookup. + * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. + * @return true on a successful lookup, false on a failed lookup. + */ +native bool:geoip_code2_ex(const ip[], result[3]); + +/** + * Lookup the three character country code for a given IP address. + * e.g: "USA", "cAN", etc. + * + * @param ip The IP address to lookup. + * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. + * @return true on a successful lookup, false on a failed lookup. + */ +native bool:geoip_code3_ex(const ip[], result[4]); + +/** + * @deprecated + * Lookup the two character country code for a given IP address. + * + * @note This native will overflow the buffer by one cell on an unknown ip lookup! + * @note Use geoip_code2_ex instead! + * + * @param ip The IP address to lookup. + * @param result The result buffer. + */ +native geoip_code2(const ip[], ccode[3]); + +/** + * @deprecated + * Lookup the three character country code for a given IP address. + * + * @note This native will overflow the buffer by one cell on an unknown ip lookup! + * @note Use geoip_code3_ex instead! + * + * @param ip The IP address to lookup. + * @param result The result buffer. + */ +native geoip_code3(const ip[], result[4]); + +/** + * Lookup the full country name for the given IP address. Sets the buffer to "error" on + * an unsuccessful lookup. + * + * @param ip The IP address to lookup. + * @param result The result of the geoip lookup. + * @param len The maximum length of the result buffer. + */ +native geoip_country(const ip[], result[], len=45); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ham_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ham_const.inc new file mode 100644 index 0000000..4810531 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ham_const.inc @@ -0,0 +1,1129 @@ +#if defined _ham_const_included + #endinput +#endif +#define _ham_const_included + +/** + * Ham return types. + * - + * Return these from hooks to disable calling the target function. + * Numbers match up with fakemeta's FMRES_* for clarity. They are interchangable. + * 0 (or no return) is also interpretted as HAM_IGNORED. + */ +#define HAM_IGNORED 1 /**< Calls target function, returns normal value */ +#define HAM_HANDLED 2 /**< Tells the module you did something, still calls target function and returns normal value */ +#define HAM_OVERRIDE 3 /**< Still calls the target function, but returns whatever is set with SetHamReturn*() */ +#define HAM_SUPERCEDE 4 /**< Block the target call, and use your return value (if applicable) (Set with SetHamReturn*()) */ + +/** + * A few notes about all of the following functions: + * - Not all functions will do as you expect on all mods. + * If a function does not do what you would believe it should + * DO NOT file a bug report, you will be ignored. + * + * - Passing invalid parameters has potential to crash the server + * So be careful, and adequately test! + * + * - All functions take (and pass) a "this" index as the first param. + * This is the entity from which the function is being executed on. + * + * - All functions and forwards (eg: {Register,Execute}Ham[B]) require + * the mod to have the pev and base keys in addition to the function + * keys for the corresponding mod/operating system in hamdata.ini + * + * - Some functions that return booleans may need to be logically ANDed + * to get the results desired. e.g: if (ExecuteHam(Ham_TS_IsObjective, this) & 0x0000FFFF != 0) { // true.. } + * because the module will return the full integer value. + */ + +enum Ham +{ + /** + * Description: This is typically called whenever an entity is created. + * It is the virtual equivilent of spawn from the engine. + * Some mods call this on player spawns too. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Spawn, this); + */ + Ham_Spawn = 0, + + /** + * Description: This is typically called on map change. + * This will typically precache all assets required by the entity. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Precache, this); + */ + Ham_Precache, + + /** + * Description: Typically this is similar to an engine keyvalue call. + * Use the kvd natives from fakemeta to handle the kvd_handle passed. + * NOTE: Do not pass handle 0 to this! Use get_kvd_handle(0) from fakemeta instead! + * Forward params: function(this, kvd_handle); + * Return type: None. + * Execute params: ExecuteHam(Ham_Keyvalue, this, kvd_handle); + */ + Ham_Keyvalue, + + /** + * Description: Returns flags for how an entity can be used (FCAP_* constants in hlsdk_const.inc) + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_ObjectCaps, this); + */ + Ham_ObjectCaps, + + /** + * Description: Usually called to activate some objects. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Activate, this); + */ + Ham_Activate, + + /** + * Description: Usually called after the engine call with the same name. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_SetObjectCollisionBox, this); + */ + Ham_SetObjectCollisionBox, + + /** + * Description: Returns an integer number that corresponds with what type of entity this is. + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_Classify, this); + */ + Ham_Classify, + + /** + * Description: Typically called when an entity dies to notify any children entities about the death. + * Forward params: function(this, idchild) + * Return type: None. + * Execute params: ExecuteHam(Ham_DeathNotice, this, idchild) + */ + Ham_DeathNotice, + + /** + * Description: Usually called whenever an entity gets attacked by a hitscan (such as a gun) weapon. + * Use the get/set tr2 natives in fakemeta to handle the traceresult data. + * Do not use a handle of 0 as a traceresult in execution, use create_tr2() from Fakemeta + * to pass a custom handle instead. (Don't forget to free the handle when you're done.) + * Forward params: function(this, idattacker, Float:damage, Float:direction[3], traceresult, damagebits) + * Return type: None. + * Execute params: ExecuteHam(Ham_TraceAttack, this, idattacker, Float:damage, Float:direction[3], tracehandle, damagebits); + */ + Ham_TraceAttack, + + /** + * Description: Usually called whenever an entity takes any kind of damage. + * Inflictor is the entity that caused the damage (such as a gun). + * Attacker is the entity that tirggered the damage (such as the gun's owner). + * Forward params: function(this, idinflictor, idattacker, Float:damage, damagebits); + * Return type: Integer. + * Execute params: ExecuteHam(Ham_TakeDamage, this, idinflictor, idattacker, Float:damage, damagebits); + */ + Ham_TakeDamage, + + /** + * Description: Usually called whenever an entity gets a form of a heal. + * Forward params: function(this, Float:health, damagebits); + * Return type: Integer. + * Execute params: ExecuteHam(Ham_TakeHealth, this, Float:health, damagebits); + */ + Ham_TakeHealth, + + /** + * Description: Normally called whenever an entity dies. + * Forward params: function(this, idattacker, shouldgib) + * Return type: None. + * Execute params: ExecuteHam(Ham_Killed, this, idattacker, shouldgib); + */ + Ham_Killed, + + /** + * Description: Normally returns the blood color of the entity. + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_BloodColor, this) + */ + Ham_BloodColor, + + /** + * Description: Traces where blood should appear. + * Forward params: function(this, Float:Damage, Float:Direction[3], trace_handle, damagebits); + * Return type: None. + * Execute params: ExecuteHam(Ham_TraceBleed, this, Float:damage, Float:direction[3], trace_handle, damagebits); + */ + Ham_TraceBleed, + + /** + * Description: Returns whether an entity is activated. + * Forward params: function(this, idActivator); + * Return type: Integer. + * Execute params: ExecuteHam(Ham_IsTriggered, this, idActivator); + */ + Ham_IsTriggered, + + /** + * Description: Returns the id of the entity if its class is derived off of CBaseMonster, -1 otherwise. + * Forward params: function(this) + * Return type: Entity. + * Execute params: ExecuteHam(Ham_MyMonsterPointer, this); + */ + Ham_MyMonsterPointer, + + /** + * Description: Returns the id of the entity if its class is derived off of CBaseSquadMonster, -1 otherwise. + * Forward params: function(this) + * Return type: Entity. + * Execute params: ExecuteHam(Ham_MySquadMonsterPointer, this); + */ + Ham_MySquadMonsterPointer, + + /** + * Description: Returns the toggle state of the entity. + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_GetToggleState, this); + */ + Ham_GetToggleState, + + /** + * Description: Typically adds points to the entity. + * Forward params: function(this, points, bool:cangonegative); + * Return type: None. + * Execute params: ExecuteHam(Ham_AddPoints, this, points, bool:cangonegative); + */ + Ham_AddPoints, + + /** + * Description: Typically adds points to everybody on the entity's team. + * Forward params: function(this, points, bool:cangonegative); + * Return type: None. + * Execute params: ExecuteHam(Ham_AddPointsToTeam, this, points, bool:cangonegative); + */ + Ham_AddPointsToTeam, + + /** + * Description: Adds an item to the player's inventory. + * Forward params: function(this, idother); + * Return type: Integer. + * Execute params: ExecuteHam(Ham_AddPlayerItem, this, idother); + */ + Ham_AddPlayerItem, + + /** + * Description: Removes an item to the player's inventory. + * Forward params: function(this, idother); + * Return type: Integer. + * Execute params: ExecuteHam(Ham_RemovePlayerItem, this, idother); + */ + Ham_RemovePlayerItem, + + /** + * Description: Gives ammo to the entity. + * Forward params: function(this, Amount, const Name[], Max) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_GiveAmmo, this, amount, "type", max); + */ + Ham_GiveAmmo, + + /** + * Description: Unsure, I believe this is the delay between activation for an entity. + * Forward params: function(this) + * Return type: Float. + * Execute params: ExecuteHam(Ham_GetDelay, this, Float:output) + */ + Ham_GetDelay, + + /** + * Description: Whether or not the entity is moving. + * Forward params: function(this); + * Return type: Integer. + * Execute params: ExecuteHam(Ham_IsMoving, this); + */ + Ham_IsMoving, + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_OverrideReset, this) + */ + Ham_OverrideReset, + + /** + * Description: Returns the damage decal of the entity for the damage type. + * Forward params: function(this, damagebits) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_DamageDecal, this); + */ + Ham_DamageDecal, + + /** + * Description: Sets the toggle state of the entity. + * Forward params: function(this, state) + * Return type: None. + * Execute params: ExecuteHam(Ham_SetToggleState, this, state); + */ + Ham_SetToggleState, + + /** + * Description: Not entirely sure what this does. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_StartSneaking, this); + */ + Ham_StartSneaking, + + /** + * Description: Not entirely sure what this does. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_StopSneaking, this); + */ + Ham_StopSneaking, + + /** + * Description: Not entirely sure. + * Forward params: function(this, idOn) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_OnControls, this, idOn); + */ + Ham_OnControls, + + /** + * Description: Whether or not the entity is sneaking. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_IsSneaking, this); + */ + Ham_IsSneaking, + + /** + * Description: Whether or not the entity is alive. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_IsAlive, this); + */ + Ham_IsAlive, + + /** + * Description: Whether or not the entity uses a BSP model. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_IsBSPModel, this); + */ + Ham_IsBSPModel, + + /** + * Description: Whether or not the entity can reflect gauss shots.. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_ReflectGauss, this); + */ + Ham_ReflectGauss, + + /** + * Description: Whether or not the target is the same as the one passed. + * Note the strindex parameter is a string passed that has been allocated by the engine. + * Use fakemeta's EngFunc_SzFromIndex to convert to a normal string, or fakemeta's + * EngFunc_AllocString to create a new string. + * Forward params: function(this, strindex). + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_HasTarget, this, strindex); + */ + Ham_HasTarget, + + /** + * Description: Whether or not the entity is in the world. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_IsInWorld, this); + */ + Ham_IsInWorld, + + /** + * Description: Whether or not the entity is a player. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_IsPlayer, this); + */ + Ham_IsPlayer, + + /** + * Description: Whether or not the entity is a net client. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_IsNetClient, this); + */ + Ham_IsNetClient, + + /** + * Description: Get the entity's team id. + * Forward params: function(this); + * Return type: String (string length returned and string byref'd in ExecuteHam). + * Execute params: ExecuteHam(Ham_TeamId, this, buffer[], size); + */ + Ham_TeamId, + + /** + * Description: Returns the next target of this. + * Forward params: function(this); + * Return type: Entity. + * Execute params: ExecuteHam(Ham_GetNextTarget, this); + */ + Ham_GetNextTarget, + + /** + * Description: Called whenever an entity thinks. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Think, this); + */ + Ham_Think, + + /** + * Description: Called whenever two entities touch. + * Forward params: function(this, idother); + * Return type: None. + * Execute params: ExecuteHam(Ham_Touch, this, idother); + */ + Ham_Touch, + + /** + * Description: Called whenver one entity uses another. + * Forward params: function(this, idcaller, idactivator, use_type, Float:value) + * Return type: None. + * Execute params: ExecuteHam(Ham_Use, this, idcaller, idactivator, use_type, Float:value); + */ + Ham_Use, + + /** + * Description: Normally called whenever one entity blocks another from moving. + * Forward params: function(this, idother); + * Return type: None. + * Execute params: ExecuteHam(Ham_Blocked, this, idother); + */ + Ham_Blocked, + + /** + * Description: Normally called when a map-based item respawns, such as a health kit or something. + * Forward params: function(this); + * Return type: Entity. + * Execute params: ExecuteHam(Ham_Respawn, this); + */ + Ham_Respawn, + + /** + * Description: Used in Half-Life to update a monster's owner. + * Forward params: function(this); + * Return type: None. + * Execute params: ExecuteHam(Ham_UpdateOwner, this); + */ + Ham_UpdateOwner, + + /** + * Description: Normally called whenever a barnacle grabs the entity. + * Forward params: function(this); + * Return type: Integer. + * Execute params: ExecuteHam(Ham_FBecomeProne, this); + */ + Ham_FBecomeProne, + + /** + * Description: Returns the center of the entity. + * Forward params: function(this); + * Return type: Vector (byref'd in Execute). + * Execute params: ExecuteHam(Ham_Center, this, Float:output[3]); + */ + Ham_Center, + + /** + * Description: Returns the eye position of the entity. + * Forward params: function(this); + * Return type: Vector (byref'd in Execute). + * Execute params: ExecuteHam(Ham_EyePosition, this, Float:output[3]); + */ + Ham_EyePosition, + + /** + * Description: Returns the ear position of the entity. + * Forward params: function(this); + * Return type: Vector (byref'd in Execute). + * Execute params: ExecuteHam(Ham_EarPosition, this, Float:output[3]); + */ + Ham_EarPosition, + + /** + * Description: Position to shoot at. + * Forward params: function(this, Float:srcvector[3]); + * Return type: Vector (byref'd in Execute). + * Execute params: ExecuteHam(Ham_BodyTarget, Float:srcvector[3], Float:returnvector[3]) + */ + Ham_BodyTarget, + + /** + * Description: Returns the illumination of the entity. + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_Illumination, this); + */ + Ham_Illumination, + + /** + * Description: Unsure, I assume it is whether or not the other entity is visible to this entity. + * Forward params: function(this, idOther); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_FVisible, this, idOther); + */ + Ham_FVisible, + + /** + * Description: Unsure, I assume it is whether or not the target vector is visible to this entity. + * Forward params: function(this, const Float:origin[3]); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_FVecVisible, this, const Float:origin[3]); + */ + Ham_FVecVisible, + + + /** + * Players have all the attributes of normal entities, in addition to these. + */ + + /** + * Description: Typically called every frame when a player has jump held. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Player_Jump, this); + */ + Ham_Player_Jump, + + /** + * Description: Typically called every frame when a player has duck held. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Player_Duck, this); + */ + Ham_Player_Duck, + + /** + * Description: Typically called every frame during PlayerPreThink engine call. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Player_PreThink, this); + */ + Ham_Player_PreThink, + + /** + * Description: Typically called every frame during PlayerPostThink engine call. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Player_PostThink, this); + */ + Ham_Player_PostThink, + + /** + * Description: Returns a vector that tells the gun position. + * Forward params: function(this) + * Return type: Vector, byreffed in execute. + * Execute params: ExecuteHam(Ham_Player_GetGunPosition, this, Float:output[3]); + */ + Ham_Player_GetGunPosition, + + /** + * Description: Whether or not the player should fade on death. + * Forward param: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Player_ShouldFadeOnDeath, this); + */ + Ham_Player_ShouldFadeOnDeath, + + /** + * Description: Called whenever an impulse command is executed. + * Forward param: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Player_ImpulseComands, this); + */ + Ham_Player_ImpulseCommands, + + /** + * Description: Updates the client's data for hud changes (such as ammo). Usually called every frame. + * Forward param: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Player_UpdateClientData, this); + */ + Ham_Player_UpdateClientData, + + /** + * Items have all the attributes of normal entities in addition to these. + */ + + /** + * Description: Adds the item to the player. + * Forward params: function(this, idPlayer); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Item_AddToPlayer, this, idPlayer); + */ + Ham_Item_AddToPlayer, + + /** + * Description: Unsure. + * Forward params: function(this, idOriginal); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Item_AddDuplicate, this, idOriginal); + */ + Ham_Item_AddDuplicate, + + /** + * Description: Whether or not this entity can be deployed. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Item_CanDeploy, this); + */ + Ham_Item_CanDeploy, + + /** + * Description: Deploys the entity (usually a weapon). + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Item_Deploy, this); + */ + Ham_Item_Deploy, + + /** + * Description: Whether or not the entity can be holstered. + * Forward params: function(this); + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Item_CanHolster, this); + */ + Ham_Item_CanHolster, + + /** + * Description: Whether or not the entity (usually weapon) can be holstered. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Item_Holster, this); + */ + Ham_Item_Holster, + + /** + * Description: Updates the HUD info about this item. + * Forward params: function(this); + * Return type: None. + * Execute params: ExecuteHam(Ham_UpdateItemInfo, this); + */ + Ham_Item_UpdateItemInfo, + + /** + * Description: Called each frame for an item, normally only on active items. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Item_PreFrame, this); + */ + Ham_Item_PreFrame, + + /** + * Description: Called each frame for an item, normally only on active items. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Item_PostFrame, this); + */ + Ham_Item_PostFrame, + + /** + * Description: Called when an item gets dropped, normally on death only. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Item_Drop, this); + */ + Ham_Item_Drop, + + /** + * Description: Normally called when an item gets deleted. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Item_Drop, this); + */ + Ham_Item_Kill, + + /** + * Description: Called when an entity starts being attached to (normally invisible and "following") a player. + * Forward params: function(this, idPlayer) + * Return type: None. + * Execute params: ExecuteHam(Ham_Item_AttachToPlayer, this, idPlayer) + */ + Ham_Item_AttachToPlayer, + + /** + * Description: Returns the ammo index of the item. + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_Item_PrimaryAmmoIndex, this); + */ + Ham_Item_PrimaryAmmoIndex, + + /** + * Description: Returns the secondary ammo index of the item. + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_Item_SecondaryAmmoIndex, this); + */ + Ham_Item_SecondaryAmmoIndex, + + /** + * Description: Updates item data for the client. + * Forward params: function(this, idPlayer) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_Item_UpdateClientData, this, idPlayer); + */ + Ham_Item_UpdateClientData, + + /** + * Description: Returns the entity index if the item is a weapon, -1 otherwise. + * Forward params: function(this) + * Return type: Entity. + * Execute Params: ExecuteHam(Ham_Item_GetWeaponPtr, this) + */ + Ham_Item_GetWeaponPtr, + + /** + * Description: Returns the item slot for the item. + * Forward params: function(this) + * Return type: Integer. + * Execute Params: ExecuteHam(Ham_Item_ItemSlot, this) + */ + Ham_Item_ItemSlot, + + + /** + * Weapons have all the attributes to Ham_Item_*, in addition to these. + */ + + /** + * Description: Gets ammo from the target weapon. + * Forward params: function(this, idTarget) + * Return type: Integer. + * Execute Params: ExecuteHam(Ham_Weapon_ExtractAmmo, this, idTarget) + */ + Ham_Weapon_ExtractAmmo, + + /** + * Description: Gets clip ammo from the target weapon. + * Forward params: function(this, idTarget) + * Return type: Integer. + * Execute Params: ExecuteHam(Ham_Weapon_ExtractAmmo, this, idTarget) + */ + Ham_Weapon_ExtractClipAmmo, + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Weapon_AddWeapon, this); + */ + Ham_Weapon_AddWeapon, + + /** + * Description: Plays the weapon's empty sound. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Weapon_PlayEmptySound, this); + */ + Ham_Weapon_PlayEmptySound, + + /** + * Description: Sets the weapon so that it can play empty sound again. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Weapon_ResetEmptySound, this); + */ + Ham_Weapon_ResetEmptySound, + + /** + * Description: Sends an animation event for the weapon. + * Forward params: function(this, iAnim, skiplocal, body); + * Return type: None. + * Execute params: ExecuteHam(Ham_Weapon_SendWeaponAnim, this, iAnim, skiplocal, body); + */ + Ham_Weapon_SendWeaponAnim, + + /** + * Description: Whether or not the weapon is usable (has ammo, etc.) + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Weapon_IsUsable, this) + */ + Ham_Weapon_IsUsable, + + /** + * Description: Called when the main attack of a weapon is triggered. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Weapon_PrimaryAttack, this); + */ + Ham_Weapon_PrimaryAttack, + + /** + * Description: Called when the secondary attack of a weapon is triggered. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Weapon_SecondaryAttack, this); + */ + Ham_Weapon_SecondaryAttack, + + /** + * Description: Called when the weapon is reloaded. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Weapon_Reload, this); + */ + Ham_Weapon_Reload, + + /** + * Description: Displays the idle animation for the weapon. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_Weapon_WeaponIdle, this); + */ + Ham_Weapon_WeaponIdle, + + /** + * Description: There is no more ammo for this gun, so switch to the next best one. + * Forward params: function(this) + * Return type: None. + * ExecuteParams: ExecuteHam(Ham_Weapon_RetireWeapon, this) + */ + Ham_Weapon_RetireWeapon, + + /** + * Description: Whether or not the weapon should idle. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute Params: ExecuteHam(Ham_Weapon_ShouldWeaponIdle, this) + */ + Ham_Weapon_ShouldWeaponIdle, + + /** + * Description: Not sure. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_Weapon_UseDecrement, this); + */ + Ham_Weapon_UseDecrement, + + /** + * Description: - + * Forward params: function(this, someboolvalue) + * Return type: None. + * Execute params: ExecuteHam(Ham_TS_BreakableRespawn, this, someboolvalue); + */ + Ham_TS_BreakableRespawn, + + /** + * Description: - + * Forward params: function(this) + * Return type: Integer (boolean) + * Execute params: ExecuteHam(Ham_TS_CanUsedThroughWalls, this); + */ + Ham_TS_CanUsedThroughWalls, + + /** + * Description: Unsure - this was removed in TS 3.0 (and thus is deprecated). + * Forward params: function(this) + * Return type: Integer (I think...) + * Execute params: ExecuteHam(Ham_TS_RespawnWait, this); + */ + Ham_TS_RespawnWait, + + /** + * Description: This is called on a map reset for most map based entities. + * Forward params: function(this); + * Return type: None. + * Execute params: ExecuteHam(Ham_CS_Restart, this); + */ + Ham_CS_Restart, + + /** + * Description: Respawn function for players/bots only! Do not use this on non player/bot entities! + * Forward params: function(this); + * Return type: None. + * Execute params: ExecuteHam(Ham_CS_RoundRespawn, this); + */ + Ham_CS_RoundRespawn, + /** + * Description: Whether or not the player can drop the specified item. + * Forward params: function(this) + * Return type: Integer + * Execute params: ExecuteHam(Ham_CS_Item_CanDrop, this); + */ + Ham_CS_Item_CanDrop, + + /** + * Description: Gets the maximum speed for whenever a player has the item deployed. + * Forward params: function(this); + * Return type: Float, byrefed in execute. + * Execute params: ExecuteHam(Ham_CS_Item_GetMaxSpeed, this, Float:output); + */ + Ham_CS_Item_GetMaxSpeed, + + /** + * Description: I assume this spawns players at the start of a new round. + * Forward params: function(this) + * Return type: None. + * Execute Params: ExecuteHam(Ham_DOD_RoundRespawn, this); + */ + Ham_DOD_RoundRespawn, + + /** + * Description: I assume this spawns entities (like func_breakables) at the start of a new round. + * Forward params: function(this) + * Return type: None. + * Execute Params: ExecuteHam(Ham_DOD_RoundRespawnEnt, this); + */ + Ham_DOD_RoundRespawnEnt, + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: None, I think... + * Execute params: ExecuteHam(Ham_DOD_RoundStore, this); + */ + Ham_DOD_RoundStore, + + /** + * Description: Unsure. + * Forward params: function(this, someintegervalue) + * Return type: None. + * Execute params: ExecuteHam(Ham_DOD_AreaSetIndex, this, someintegervalue) + */ + Ham_DOD_AreaSetIndex, + + /** + * Description: Unsure + * Forward params: function(this, idPlayer) + * Return type: None. + * Execute Params: ExecuteHam(Ham_DOD_AreaSendStatus, this, idPlayer); + */ + Ham_DOD_AreaSendStatus, + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: Integer. + * Execute Params: ExecuteHam(Ham_DOD_GetState, this); + */ + Ham_DOD_GetState, + + /** + * Description: Unsure. + * Forward params: function(this, idtarget) + * Return type: Integer. + * Execute Params: ExecuteHam(Ham_DOD_GetStateEnt, this, idtarget); + */ + Ham_DOD_GetStateEnt, + + /** + * Description: Whether or not a player can drop this item. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute Params: ExecuteHam(Ham_DOD_Item_CanDrop, this); + */ + Ham_DOD_Item_CanDrop, + + /** + * Description: Unsure. + * Forward params: function(this, iduser) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_TFC_EngineerUse, this, iduser) + */ + Ham_TFC_EngineerUse, + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_TFC_Finished, this); + */ + Ham_TFC_Finished, + + /** + * Description: Unsure. + * Forward params: function(this, entityid, Float:floata, Float:floatb) + * Return type: None. + * Execute params: ExecuteHam(Ham_TFC_EmpExplode, this, entityid, Float:floata, Float:floatb) + */ + Ham_TFC_EmpExplode, + + /** + * Description: Unsure. + * Forward params: function(this, Float:floata, Float:floatb) + * Return type: None. + * Execute params: ExecuteHam(Ham_TFC_CalcEmpDmgRad, this, Float:floata, Float:floatb) + */ + Ham_TFC_CalcEmpDmgRad, + + /** + * Description: Unsure. + * Forward params: function(this, entityid) + * Return type: None. + * Execute params: ExecuteHam(Ham_TFC_TakeEmpBlast, this, entityid); + */ + Ham_TFC_TakeEmpBlast, + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_TFC_EmpRemove, this); + */ + Ham_TFC_EmpRemove, + + + /** + * Description: Unsure. + * Forward params: function(this, entityid, Float:floata) + * Return type: None. + * Execute params: ExecuteHam(Ham_TFC_TakeConcussionBlast, this, entityid, Float:floata); + */ + Ham_TFC_TakeConcussionBlast, + + /** + * Description: Unsure. + * Forward params: function(this, entityid) + * Return type: None. + * Execute params: ExecuteHam(Ham_TFC_Concuss, this, entityid); + */ + Ham_TFC_Concuss, + + + /** + * Description: Unsure. + * Is only in ESF Open Beta. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_ESF_IsEnvModel, this); + */ + Ham_ESF_IsEnvModel, + + /** + * Description: Unsure. + * Is only in ESF Open Beta. + * Forward params: function(this, entityida, entityidb, Float:floata, Float:floatb, dmgbits) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_ESF_TakeDamage2, this, entityida, entityidb, Float:floata, Float:floatb, dmgbits); + */ + Ham_ESF_TakeDamage2, + + /** + * Description: Returns how many points each entity is worth. + * Forward params: function(this) + * Return type: Integer. + * Execute params: ExecuteHam(Ham_NS_GetPointValue, this); + */ + Ham_NS_GetPointValue, + + /** + * Description: Unsure. Probably awards this with the killing of idvictim. + * Forward params: function(this, idvictim) + * Return type: None. + * Execute params: ExecuteHam(Ham_NS_AwardKill, this, idvictim); + */ + Ham_NS_AwardKill, + + /** + * Description: Unsure, probably whenever an entity resets after a new round. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_NS_ResetEntity, this); + */ + Ham_NS_ResetEntity, + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_NS_UpdateOnRemove, this) + */ + Ham_NS_UpdateOnRemove, + + + /** Virtual functions added to TS in TS 3 */ + + /** + * Description: Unsure. + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_TS_GiveSlowMul, this) + */ + Ham_TS_GiveSlowMul, + + /** + * Description: Unsure. The second paramater is actually a char. + * Forward params: function(this, Float:someval, someotherval) + * Return type: None. + * Execute params: ExecuteHam(Ham_TS_GoSlow, this, Float:someval, someotherval) + */ + Ham_TS_GoSlow, + + /** + * Description: Probably returns true if the user is in slow mo. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_TS_InSlow, this) + */ + Ham_TS_InSlow, + + /** + * Description: Returns true if the entity is an objective. + * Forward params: function(this) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_TS_IsObjective, this) + */ + Ham_TS_IsObjective, + + /** + * Description: Unsure. + * Forward params: function(this, bool:someval) + * Return type: None. + * Execute params: ExecuteHam(Ham_TS_EnableObjective, this, bool:someval) + */ + Ham_TS_EnableObjective, + + /** + * Description: Probably called when the engine call to OnEntFreePrivateData is called (the entity destructor.) + * Forward params: function(this) + * Return type: None. + * Execute params: ExecuteHam(Ham_TS_OnEntFreePrivateData, this) + */ + Ham_TS_OnFreeEntPrivateData, + + /** + * Description: Probably called when the engine call to ShouldCollide is called. + * Forward params: function(this, otherEntity) + * Return type: Integer (boolean). + * Execute params: ExecuteHam(Ham_TS_ShouldCollide, this, otherEntity) + */ + Ham_TS_ShouldCollide, + + + /** + * DONT USE ME LOL + */ + HAM_LAST_ENTRY_DONT_USE_ME_LOL +}; + +enum HamError +{ + HAM_OK = 0, + + HAM_INVALID_FUNC, // The function is not valid + HAM_FUNC_NOT_CONFIGURED, // This function is not configured in hamdata.ini + + HAM_ERR_END +}; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/hamsandwich.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/hamsandwich.inc new file mode 100644 index 0000000..e61fe92 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/hamsandwich.inc @@ -0,0 +1,382 @@ +/** + * Ham Sandwich module include file. + * (c) 2007, The AMX Mod X Development Team + * + * - + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of this program with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ + +/** + * Ham Sandwich is a module that is used to hook and call virtual functions of + * entities. + * Virtual functions are mod-specific functions. This means that in order + * for this to work on a mod, it needs to be configured with the hamdata.ini + * file. + * Be very careful with parameter passing to these functions. + */ + +#if defined _hamsandwich_included + #endinput +#endif +#define _hamsandwich_included + +#include <ham_const> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib hamsandwich + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib hamsandwich + #endif +#else + #pragma library hamsandwich +#endif + +/** + * Hooks the virtual table for the specified entity class. + * An example would be: RegisterHam(Ham_TakeDamage, "player", "player_hurt"); + * Look at the Ham enum for parameter lists. + * + * @param function The function to hook. + * @param EntityClass The entity classname to hook. + * @param callback The forward to call. + * @param post Whether or not to forward this in post. + * @return Returns a handle to the forward. Use EnableHamForward/DisableHamForward to toggle the forward on or off. + */ +native HamHook:RegisterHam(Ham:function, const EntityClass[], const Callback[], Post=0); + +/** + * Hooks the virtual table for the specified entity's class. + * An example would be: RegisterHam(Ham_TakeDamage, id, "player_hurt"); + * Look at the Ham enum for parameter lists. + * Note: This will cause hooks for the entire internal class that the entity is + * not exclusively for the provided entity. + * + * @param function The function to hook. + * @param EntityId The entity classname to hook. + * @param callback The forward to call. + * @param post Whether or not to forward this in post. + * @return Returns a handle to the forward. Use EnableHamForward/DisableHamForward to toggle the forward on or off. + */ +native HamHook:RegisterHamFromEntity(Ham:function, EntityId, const Callback[], Post=0); + + +/** + * Stops a ham forward from triggering. + * Use the return value from RegisterHam as the parameter here! + * + * @param fwd The forward to stop. + */ +native DisableHamForward(HamHook:fwd); + +/** + * Starts a ham forward back up. + * Use the return value from RegisterHam as the parameter here! + * + * @param fwd The forward to re-enable. + */ +native EnableHamForward(HamHook:fwd); + +/** + * Executes the virtual function on the entity. + * Look at the Ham enum for parameter lists. + * + * @param function The function to call. + * @param id The id of the entity to execute it on. + */ +native ExecuteHam(Ham:function, this, any:...); + +/** + * Executes the virtual function on the entity, this will trigger all hooks on that function. + * Be very careful about recursion! + * Look at the Ham enum for parameter lists. + * + * @param function The function to call. + * @param id The id of the entity to execute it on. + */ +native ExecuteHamB(Ham:function, this, any:...); + +/** + * Gets the return status of the current hook. + * This is useful to determine what return natives to use. + * + * @return The current status of the hook (such as HAM_SUPERCEDE). + */ +native GetHamReturnStatus(); + +/** + * Gets the return value of a hook for hooks that return integers or booleans. + * + * @param output The variable to store the value in. + */ +native GetHamReturnInteger(&output); + +/** + * Gets the return value of a hook for hooks that return float. + * + * @param output The variable to store the value in. + */ +native GetHamReturnFloat(&Float:output); + +/** + * Gets the return value of a hook for hooks that return Vectors. + * + * @param output The variable to store the value in. + */ +native GetHamReturnVector(Float:output[3]); + +/** + * Gets the return value of a hook for hooks that return entities. + * + * @param output The variable to store the value in. Will be -1 on null. + */ +native GetHamReturnEntity(&output); + +/** + * Gets the return value of a hook for hooks that return strings. + * + * @param output The buffer to store the string in. + * @param size The string size of the buffer. + */ +native GetHamReturnString(output[], size); + +/** + * Gets the original return value of a hook for hooks that return integers or booleans. + * + * @param output The variable to store the value in. + */ +native GetOrigHamReturnInteger(&output); + +/** + * Gets the original return value of a hook for hooks that return floats. + * + * @param output The variable to store the value in. + */ +native GetOrigHamReturnFloat(&Float:output); + +/** + * Gets the original return value of a hook for hooks that return Vectors. + * + * @param output The variable to store the value in. + */ +native GetOrigHamReturnVector(Float:output[3]); + +/** + * Gets the original return value of a hook for hooks that return entities. + * + * @param output The variable to store the value in. -1 on null. + */ +native GetOrigHamReturnEntity(&output); + +/** + * Gets the original return value of a hook for hooks that return strings. + * + * @param output The buffer to store the string in. + * @param size The size of the buffer. + */ +native GetOrigHamReturnString(output[], size); + + +/** + * Sets the return value of a hook that returns an integer or boolean. + * This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE. + * + * @param value The value to set the return to. + */ +native SetHamReturnInteger(value); + +/** + * Sets the return value of a hook that returns a float. + * This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE. + * + * @param value The value to set the return to. + */ +native SetHamReturnFloat(Float:value); + +/** + * Sets the return value of a hook that returns a Vector. + * This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE. + * + * @param value The value to set the return to. + */ +native SetHamReturnVector(const Float:value[3]); + +/** + * Sets the return value of a hook that returns an entity. Set to -1 for null. + * This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE. + * + * @param value The value to set the return to. + */ +native SetHamReturnEntity(value); + +/** + * Sets the return value of a hook that returns a string. + * This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE. + * + * @param value The value to set the return to. + */ +native SetHamReturnString(const value[]); + + +/** + * Sets a parameter on the fly of the current hook. This has no effect in post hooks. + * Use this on parameters that are integers. + * + * @param which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this". + * @param value The value to change it to. + */ +native SetHamParamInteger(which, value); + +/** + * Sets a parameter on the fly of the current hook. This has no effect in post hooks. + * Use this on parameters that are floats. + * + * @param which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this". + * @param value The value to change it to. + */ +native SetHamParamFloat(which, Float:value); + +/** + * Sets a parameter on the fly of the current hook. This has no effect in post hooks. + * Use this on parameters that are Vectors. + * + * @param which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this". + * @param value The value to change it to. + */ +native SetHamParamVector(which, const Float:value[3]); + +/** + * Sets a parameter on the fly of the current hook. This has no effect in post hooks. + * Use this on parameters that are entities. + * + * @param which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this". + * @param value The value to change it to. + */ +native SetHamParamEntity(which, value); + +/** + * Sets a parameter on the fly of the current hook. This has no effect in post hooks. + * Use this on parameters that are strings. + * + * @param which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this". + * @param value The value to change it to. + */ +native SetHamParamString(which, const output[]); + +/** + * Sets a parameter on the fly of the current hook. This has no effect in post hooks. + * Use this on parameters that are trace result handles. + * + * @param which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this". + * @param value The value to change it to. + */ +native SetHamParamTraceResult(which, tr_handle); + + +/** + * Returns whether or not the function for the specified Ham is valid. + * Things that would make it invalid would be bounds (an older module version + * may not have all of the functions), and the function not being found in + * the mod's hamdata.ini file. + * + * @param function The function to look up. + * @return true if the function is valid, false otherwise. + */ +native bool:IsHamValid(Ham:function); + +/** + * This is used to compliment fakemeta's {get,set}_pdata_{int,float,string}. + * This requires the mod to have the pev and base fields set in hamdata.ini. + * Note this dereferences memory! Improper use of this will crash the server. + * This will return an index of the corresponding cbase field in private data. + * Returns -1 on a null entry. + * + * @param id The entity to examine the private data. + * @param offset The windows offset of the data. + * @param linuxdiff The linux difference of the data. + * @param macdiff The mac os x difference of the data. + * @return The index of the corresponding pdata field. -1 for none set. + */ +native get_pdata_cbase(id, offset, linuxdiff=5, macdiff=5); + +/** + * This is used to compliment fakemeta's {get,set}_pdata_{int,float,string}. + * This requires the mod to have the pev and base fields set in hamdata.ini. + * This will set the corresponding cbase field in private data with the index. + * Pass -1 to null the entry. + * + * @param id The entity to examine the private data. + * @param offset The windows offset of the data. + * @param value The index to store, -1 for invalid + * @param linuxdiff The linux difference of the data. + * @param macdiff The mac os x difference of the data. + */ +native set_pdata_cbase(id, offset, value, linuxdiff=5, macdiff=5); + +/** + * This is similar to the get_pdata_cbase, however it does not dereference memory. + * This is many times slower than get_pdata_cbase, and this should only be used + * for testing and finding of offsets, not actual release quality plugins. + * This will return an index of the corresponding cbase field in private data. + * Returns -1 on a null entry. -2 on an invalid entry. + * + * @param id Entry to examine the private data. + * @param offset The windows offset of the data. + * @param linuxdiff The linux difference of the data. + * @param macdiff The mac os x difference of the data. + * @return The index of the corresponding pdata field, -1 for null, -2 for invalid. + */ +native get_pdata_cbase_safe(id, offset, linuxdiff=5, macdiff=5); + + + + +// This is the callback from the module, this handles any fatal errors. +// This will in turn call the "HamFilter(Ham:id, HamError:err, const reason[])" public, if it exists. +// Return PLUGIN_HANDLED from within the HamFilter to stop the plugin from failing. +// Any other return value will fail the plugin. +// You do not need to have a HamFilter, if there is none, all fatal errors will fail the plugin. +// Do not modify this! +public __fatal_ham_error(Ham:id, HamError:err, const reason[]) +{ + + new func=get_func_id("HamFilter", -1); + new bool:fail=true; + + if (func != -1 && callfunc_begin_i(func, -1)==1) + { + callfunc_push_int(_:id); + callfunc_push_int(_:err); + callfunc_push_str(reason, false); + if (callfunc_end()==PLUGIN_HANDLED) + { + fail=false; + } + } + if (fail) + { + set_fail_state(reason); + } + +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/hlsdk_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/hlsdk_const.inc new file mode 100644 index 0000000..5f0b183 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/hlsdk_const.inc @@ -0,0 +1,492 @@ +/* Half-Life Software Development Kit constants +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +* +*/ + +#if defined _hlsdk_const_included + #endinput +#endif +#define _hlsdk_const_included + +// pev(entity, pev_button) or pev(entity, pev_oldbuttons) values +#define IN_ATTACK (1<<0) +#define IN_JUMP (1<<1) +#define IN_DUCK (1<<2) +#define IN_FORWARD (1<<3) +#define IN_BACK (1<<4) +#define IN_USE (1<<5) +#define IN_CANCEL (1<<6) +#define IN_LEFT (1<<7) +#define IN_RIGHT (1<<8) +#define IN_MOVELEFT (1<<9) +#define IN_MOVERIGHT (1<<10) +#define IN_ATTACK2 (1<<11) +#define IN_RUN (1<<12) +#define IN_RELOAD (1<<13) +#define IN_ALT1 (1<<14) +#define IN_SCORE (1<<15) // Used by client.dll for when scoreboard is held down + +// pev(entity, pev_flags) values +#define FL_FLY (1<<0) // Changes the SV_Movestep() behavior to not need to be on ground +#define FL_SWIM (1<<1) // Changes the SV_Movestep() behavior to not need to be on ground (but stay in water) +#define FL_CONVEYOR (1<<2) +#define FL_CLIENT (1<<3) +#define FL_INWATER (1<<4) +#define FL_MONSTER (1<<5) +#define FL_GODMODE (1<<6) +#define FL_NOTARGET (1<<7) +#define FL_SKIPLOCALHOST (1<<8) // Don't send entity to local host, it's predicting this entity itself +#define FL_ONGROUND (1<<9) // At rest / on the ground +#define FL_PARTIALGROUND (1<<10) // Not all corners are valid +#define FL_WATERJUMP (1<<11) // Player jumping out of water +#define FL_FROZEN (1<<12) // Player is frozen for 3rd person camera +#define FL_FAKECLIENT (1<<13) // JAC: fake client, simulated server side; don't send network messages to them +#define FL_DUCKING (1<<14) // Player flag -- Player is fully crouched +#define FL_FLOAT (1<<15) // Apply floating force to this entity when in water +#define FL_GRAPHED (1<<16) // Worldgraph has this ent listed as something that blocks a connection +#define FL_IMMUNE_WATER (1<<17) +#define FL_IMMUNE_SLIME (1<<18) +#define FL_IMMUNE_LAVA (1<<19) +#define FL_PROXY (1<<20) // This is a spectator proxy +#define FL_ALWAYSTHINK (1<<21) // Brush model flag -- call think every frame regardless of nextthink - ltime (for constantly changing velocity/path) +#define FL_BASEVELOCITY (1<<22) // Base velocity has been applied this frame (used to convert base velocity into momentum) +#define FL_MONSTERCLIP (1<<23) // Only collide in with monsters who have FL_MONSTERCLIP set +#define FL_ONTRAIN (1<<24) // Player is _controlling_ a train, so movement commands should be ignored on client during prediction. +#define FL_WORLDBRUSH (1<<25) // Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something) +#define FL_SPECTATOR (1<<26) // This client is a spectator, don't run touch functions, etc. +#define FL_CUSTOMENTITY (1<<29) // This is a custom entity +#define FL_KILLME (1<<30) // This entity is marked for death -- This allows the engine to kill ents at the appropriate time +#define FL_DORMANT (1<<31) // Entity is dormant, no updates to client + +// engfunc(EngFunc_WalkMove, entity, Float:yaw, Float:dist, iMode) iMode values +#define WALKMOVE_NORMAL 0 // Normal walkmove +#define WALKMOVE_WORLDONLY 1 // Doesn't hit ANY entities, no matter what the solid type +#define WALKMOVE_CHECKONLY 2 // Move, but don't touch triggers + +// pev(entity, pev_movetype) values +#define MOVETYPE_NONE 0 // Never moves +#define MOVETYPE_WALK 3 // Player only - moving on the ground +#define MOVETYPE_STEP 4 // Gravity, special edge handling -- monsters use this +#define MOVETYPE_FLY 5 // No gravity, but still collides with stuff +#define MOVETYPE_TOSS 6 // Gravity/Collisions +#define MOVETYPE_PUSH 7 // No clip to world, push and crush +#define MOVETYPE_NOCLIP 8 // No gravity, no collisions, still do velocity/avelocity +#define MOVETYPE_FLYMISSILE 9 // Extra size to monsters +#define MOVETYPE_BOUNCE 10 // Just like Toss, but reflect velocity when contacting surfaces +#define MOVETYPE_BOUNCEMISSILE 11 // Bounce w/o gravity +#define MOVETYPE_FOLLOW 12 // Track movement of aiment +#define MOVETYPE_PUSHSTEP 13 // BSP model that needs physics/world collisions (uses nearest hull for world collision) + +// pev(entity, pev_solid) values +// NOTE: Some movetypes will cause collisions independent of SOLID_NOT/SOLID_TRIGGER when the entity moves +// SOLID only effects OTHER entities colliding with this one when they move - UGH! +#define SOLID_NOT 0 // No interaction with other objects +#define SOLID_TRIGGER 1 // Touch on edge, but not blocking +#define SOLID_BBOX 2 // Touch on edge, block +#define SOLID_SLIDEBOX 3 // Touch on edge, but not an onground +#define SOLID_BSP 4 // BSP clip, touch on edge, block + +// pev(entity, pev_deadflag) values +#define DEAD_NO 0 // Alive +#define DEAD_DYING 1 // Playing death animation or still falling off of a ledge waiting to hit ground +#define DEAD_DEAD 2 // Dead, lying still +#define DEAD_RESPAWNABLE 3 +#define DEAD_DISCARDBODY 4 + +// new Float:takedamage, pev(entity, pev_takedamage, takedamage) values +#define DAMAGE_NO 0.0 +#define DAMAGE_YES 1.0 +#define DAMAGE_AIM 2.0 + +// pev(entity, pev_effects) values +#define EF_BRIGHTFIELD 1 // Swirling cloud of particles +#define EF_MUZZLEFLASH 2 // Single frame ELIGHT on entity attachment 0 +#define EF_BRIGHTLIGHT 4 // DLIGHT centered at entity origin +#define EF_DIMLIGHT 8 // Player flashlight +#define EF_INVLIGHT 16 // Get lighting from ceiling +#define EF_NOINTERP 32 // Don't interpolate the next frame +#define EF_LIGHT 64 // Rocket flare glow sprite +#define EF_NODRAW 128 // Don't draw entity + +// engfunc(EngFunc_PointContents, Float:origin) return values +#define CONTENTS_EMPTY -1 +#define CONTENTS_SOLID -2 +#define CONTENTS_WATER -3 +#define CONTENTS_SLIME -4 +#define CONTENTS_LAVA -5 +#define CONTENTS_SKY -6 +#define CONTENTS_ORIGIN -7 // Removed at csg time +#define CONTENTS_CLIP -8 // Changed to contents_solid +#define CONTENTS_CURRENT_0 -9 +#define CONTENTS_CURRENT_90 -10 +#define CONTENTS_CURRENT_180 -11 +#define CONTENTS_CURRENT_270 -12 +#define CONTENTS_CURRENT_UP -13 +#define CONTENTS_CURRENT_DOWN -14 +#define CONTENTS_TRANSLUCENT -15 +#define CONTENTS_LADDER -16 +#define CONTENT_FLYFIELD -17 +#define CONTENT_GRAVITY_FLYFIELD -18 +#define CONTENT_FOG -19 + +// Instant damage values for use with gmsgDamage 3rd value write_long(BIT) +#define DMG_GENERIC 0 // Generic damage was done +#define DMG_CRUSH (1<<0) // Crushed by falling or moving object +#define DMG_BULLET (1<<1) // Shot +#define DMG_SLASH (1<<2) // Cut, clawed, stabbed +#define DMG_BURN (1<<3) // Heat burned +#define DMG_FREEZE (1<<4) // Frozen +#define DMG_FALL (1<<5) // Fell too far +#define DMG_BLAST (1<<6) // Explosive blast damage +#define DMG_CLUB (1<<7) // Crowbar, punch, headbutt +#define DMG_SHOCK (1<<8) // Electric shock +#define DMG_SONIC (1<<9) // Sound pulse shockwave +#define DMG_ENERGYBEAM (1<<10) // Laser or other high energy beam +#define DMG_NEVERGIB (1<<12) // With this bit OR'd in, no damage type will be able to gib victims upon death +#define DMG_ALWAYSGIB (1<<13) // With this bit OR'd in, any damage type can be made to gib victims upon death. +#define DMG_DROWN (1<<14) // Drowning +#define DMG_PARALYZE (1<<15) // Slows affected creature down +#define DMG_NERVEGAS (1<<16) // Nerve toxins, very bad +#define DMG_POISON (1<<17) // Blood poisioning +#define DMG_RADIATION (1<<18) // Radiation exposure +#define DMG_DROWNRECOVER (1<<19) // Drowning recovery +#define DMG_ACID (1<<20) // Toxic chemicals or acid burns +#define DMG_SLOWBURN (1<<21) // In an oven +#define DMG_SLOWFREEZE (1<<22) // In a subzero freezer +#define DMG_MORTAR (1<<23) // Hit by air raid (done to distinguish grenade from mortar) +#define DMG_TIMEBASED (~(0x3fff)) // Mask for time-based damage + +// The fNoMonsters parameter of EngFunc_TraceLine, EngFunc_TraceMonsterHull, EngFunc_TraceHull, and EngFunc_TraceSphere +#define DONT_IGNORE_MONSTERS 0 +#define IGNORE_MONSTERS 1 +#define IGNORE_MISSILE 2 +#define IGNORE_GLASS 0x100 + +// The hullnumber paramater of EngFunc_TraceHull, EngFunc_TraceModel and DLLFunc_GetHullBounds +#define HULL_POINT 0 +#define HULL_HUMAN 1 +#define HULL_LARGE 2 +#define HULL_HEAD 3 + +// global_get(glb_trace_flags) +#define FTRACE_SIMPLEBOX (1<<0) // Traceline with a simple box + +// Used with get/set_es(es_handle, ES_eFlags, ...) (entity_state data structure) +#define EFLAG_SLERP 1 // Do studio interpolation of this entity + +// pev(entity, pev_spawnflags) values +// Many of these flags apply to specific entities +// func_train +#define SF_TRAIN_WAIT_RETRIGGER 1 +#define SF_TRAIN_START_ON 4 // Train is initially moving +#define SF_TRAIN_PASSABLE 8 // Train is not solid -- used to make water trains + +// func_wall_toggle +#define SF_WALL_START_OFF 0x0001 + +// func_converyor +#define SF_CONVEYOR_VISUAL 0x0001 +#define SF_CONVEYOR_NOTSOLID 0x0002 + +// func_button +#define SF_BUTTON_DONTMOVE 1 +#define SF_BUTTON_TOGGLE 32 // Button stays pushed until reactivated +#define SF_BUTTON_SPARK_IF_OFF 64 // Button sparks in OFF state +#define SF_BUTTON_TOUCH_ONLY 256 // Button only fires as a result of USE key. + +// func_rot_button +#define SF_ROTBUTTON_NOTSOLID 1 + +// env_global +#define SF_GLOBAL_SET 1 // Set global state to initial state on spawn + +// multisource +#define SF_MULTI_INIT 1 + +// momentary_rot_button +#define SF_MOMENTARY_DOOR 0x0001 + +// button_target +#define SF_BTARGET_USE 0x0001 +#define SF_BTARGET_ON 0x0002 + +// func_door, func_water, func_door_rotating, momementary_door +#define SF_DOOR_ROTATE_Y 0 +#define SF_DOOR_START_OPEN 1 +#define SF_DOOR_ROTATE_BACKWARDS 2 +#define SF_DOOR_PASSABLE 8 +#define SF_DOOR_ONEWAY 16 +#define SF_DOOR_NO_AUTO_RETURN 32 +#define SF_DOOR_ROTATE_Z 64 +#define SF_DOOR_ROTATE_X 128 +#define SF_DOOR_USE_ONLY 256 // Door must be opened by player's use button +#define SF_DOOR_NOMONSTERS 512 // Monster can't open +#define SF_DOOR_SILENT 0x80000000 + +// gibshooter +#define SF_GIBSHOOTER_REPEATABLE 1 // Allows a gibshooter to be refired + +// env_funnel +#define SF_FUNNEL_REVERSE 1 // Funnel effect repels particles instead of attracting them + +// env_bubbles +#define SF_BUBBLES_STARTOFF 0x0001 + +// env_blood +#define SF_BLOOD_RANDOM 0x0001 +#define SF_BLOOD_STREAM 0x0002 +#define SF_BLOOD_PLAYER 0x0004 +#define SF_BLOOD_DECAL 0x0008 + +// env_shake +#define SF_SHAKE_EVERYONE 0x0001 // Don't check radius +#define SF_SHAKE_DISRUPT 0x0002 // Disrupt controls +#define SF_SHAKE_INAIR 0x0004 // Shake players in air + +// env_fade +#define SF_FADE_IN 0x0001 // Fade in, not out +#define SF_FADE_MODULATE 0x0002 // Modulate, don't blend +#define SF_FADE_ONLYONE 0x0004 + +// env_beam, env_lightning +#define SF_BEAM_STARTON 0x0001 +#define SF_BEAM_TOGGLE 0x0002 +#define SF_BEAM_RANDOM 0x0004 +#define SF_BEAM_RING 0x0008 +#define SF_BEAM_SPARKSTART 0x0010 +#define SF_BEAM_SPARKEND 0x0020 +#define SF_BEAM_DECALS 0x0040 +#define SF_BEAM_SHADEIN 0x0080 +#define SF_BEAM_SHADEOUT 0x0100 +#define SF_BEAM_TEMPORARY 0x8000 + +// env_sprite +#define SF_SPRITE_STARTON 0x0001 +#define SF_SPRITE_ONCE 0x0002 +#define SF_SPRITE_TEMPORARY 0x8000 + +// env_message +#define SF_MESSAGE_ONCE 0x0001 // Fade in, not out +#define SF_MESSAGE_ALL 0x0002 // Send to all clients + +// env_explosion +#define SF_ENVEXPLOSION_NODAMAGE (1<<0) // When set, ENV_EXPLOSION will not actually inflict damage +#define SF_ENVEXPLOSION_REPEATABLE (1<<1) // Can this entity be refired? +#define SF_ENVEXPLOSION_NOFIREBALL (1<<2) // Don't draw the fireball +#define SF_ENVEXPLOSION_NOSMOKE (1<<3) // Don't draw the smoke +#define SF_ENVEXPLOSION_NODECAL (1<<4) // Don't make a scorch mark +#define SF_ENVEXPLOSION_NOSPARKS (1<<5) // Don't make a scorch mark + +// func_tank +#define SF_TANK_ACTIVE 0x0001 +#define SF_TANK_PLAYER 0x0002 +#define SF_TANK_HUMANS 0x0004 +#define SF_TANK_ALIENS 0x0008 +#define SF_TANK_LINEOFSIGHT 0x0010 +#define SF_TANK_CANCONTROL 0x0020 +#define SF_TANK_SOUNDON 0x8000 + +// grenade +#define SF_DETONATE 0x0001 + +// item_suit +#define SF_SUIT_SHORTLOGON 0x0001 + +// game_score +#define SF_SCORE_NEGATIVE 0x0001 +#define SF_SCORE_TEAM 0x0002 + +// game_text +#define SF_ENVTEXT_ALLPLAYERS 0x0001 + +// game_team_master +#define SF_TEAMMASTER_FIREONCE 0x0001 +#define SF_TEAMMASTER_ANYTEAM 0x0002 + +// game_team_set +#define SF_TEAMSET_FIREONCE 0x0001 +#define SF_TEAMSET_CLEARTEAM 0x0002 + +// game_player_hurt +#define SF_PKILL_FIREONCE 0x0001 + +// game_counter +#define SF_GAMECOUNT_FIREONCE 0x0001 +#define SF_GAMECOUNT_RESET 0x0002 + +// game_player_equip +#define SF_PLAYEREQUIP_USEONLY 0x0001 + +// game_player_team +#define SF_PTEAM_FIREONCE 0x0001 +#define SF_PTEAM_KILL 0x0002 +#define SF_PTEAM_GIB 0x0004 + +// func_trackchange +#define SF_PLAT_TOGGLE 0x0001 +#define SF_TRACK_ACTIVATETRAIN 0x00000001 +#define SF_TRACK_RELINK 0x00000002 +#define SF_TRACK_ROTMOVE 0x00000004 +#define SF_TRACK_STARTBOTTOM 0x00000008 +#define SF_TRACK_DONT_MOVE 0x00000010 + +// func_tracktrain +#define SF_TRACKTRAIN_NOPITCH 0x0001 +#define SF_TRACKTRAIN_NOCONTROL 0x0002 +#define SF_TRACKTRAIN_FORWARDONLY 0x0004 +#define SF_TRACKTRAIN_PASSABLE 0x0008 +#define SF_PATH_DISABLED 0x00000001 +#define SF_PATH_FIREONCE 0x00000002 +#define SF_PATH_ALTREVERSE 0x00000004 +#define SF_PATH_DISABLE_TRAIN 0x00000008 +#define SF_PATH_ALTERNATE 0x00008000 +#define SF_CORNER_WAITFORTRIG 0x001 +#define SF_CORNER_TELEPORT 0x002 +#define SF_CORNER_FIREONCE 0x004 + +// trigger_push +#define SF_TRIGGER_PUSH_START_OFF 2 // Spawnflag that makes trigger_push spawn turned OFF + +// trigger_hurt +#define SF_TRIGGER_HURT_TARGETONCE 1 // Only fire hurt target once +#define SF_TRIGGER_HURT_START_OFF 2 // Spawnflag that makes trigger_push spawn turned OFF +#define SF_TRIGGER_HURT_NO_CLIENTS 8 // Spawnflag that makes trigger_push spawn turned OFF +#define SF_TRIGGER_HURT_CLIENTONLYFIRE 16 // Trigger hurt will only fire its target if it is hurting a client +#define SF_TRIGGER_HURT_CLIENTONLYTOUCH 32 // Only clients may touch this trigger + +// trigger_auto +#define SF_AUTO_FIREONCE 0x0001 + +// trigger_relay +#define SF_RELAY_FIREONCE 0x0001 + +// multi_manager +#define SF_MULTIMAN_CLONE 0x80000000 +#define SF_MULTIMAN_THREAD 0x00000001 + +// env_render - Flags to indicate masking off various render parameters that are normally copied to the targets +#define SF_RENDER_MASKFX (1<<0) +#define SF_RENDER_MASKAMT (1<<1) +#define SF_RENDER_MASKMODE (1<<2) +#define SF_RENDER_MASKCOLOR (1<<3) + +// trigger_changelevel +#define SF_CHANGELEVEL_USEONLY 0x0002 + +// trigger_endsection +#define SF_ENDSECTION_USEONLY 0x0001 + +// trigger_camera +#define SF_CAMERA_PLAYER_POSITION 1 +#define SF_CAMERA_PLAYER_TARGET 2 +#define SF_CAMERA_PLAYER_TAKECONTROL 4 + +// func_rotating +#define SF_BRUSH_ROTATE_Y_AXIS 0 +#define SF_BRUSH_ROTATE_INSTANT 1 +#define SF_BRUSH_ROTATE_BACKWARDS 2 +#define SF_BRUSH_ROTATE_Z_AXIS 4 +#define SF_BRUSH_ROTATE_X_AXIS 8 +#define SF_PENDULUM_AUTO_RETURN 16 +#define SF_PENDULUM_PASSABLE 32 +#define SF_BRUSH_ROTATE_SMALLRADIUS 128 +#define SF_BRUSH_ROTATE_MEDIUMRADIUS 256 +#define SF_BRUSH_ROTATE_LARGERADIUS 512 + +// triggers +#define SF_TRIGGER_ALLOWMONSTERS 1 // Monsters allowed to fire this trigger +#define SF_TRIGGER_NOCLIENTS 2 // Players not allowed to fire this trigger +#define SF_TRIGGER_PUSHABLES 4 // Only pushables can fire this trigger + +#define SF_TRIG_PUSH_ONCE 1 +// func_breakable +#define SF_BREAK_TRIGGER_ONLY 1 // May only be broken by trigger +#define SF_BREAK_TOUCH 2 // Can be 'crashed through' by running player (plate glass) +#define SF_BREAK_PRESSURE 4 // Can be broken by a player standing on it +#define SF_BREAK_CROWBAR 256 // Instant break if hit with crowbar + +// func_pushable (it's also func_breakable, so don't collide with those flags) +#define SF_PUSH_BREAKABLE 128 + +// light_spawn +#define SF_LIGHT_START_OFF 1 +#define SPAWNFLAG_NOMESSAGE 1 +#define SPAWNFLAG_NOTOUCH 1 +#define SPAWNFLAG_DROIDONLY 4 +#define SPAWNFLAG_USEONLY 1 // Can't be touched, must be used (buttons) + +// Monster Spawnflags +#define SF_MONSTER_WAIT_TILL_SEEN 1 // Spawnflag that makes monsters wait until player can see them before attacking +#define SF_MONSTER_GAG 2 // No idle noises from this monster +#define SF_MONSTER_HITMONSTERCLIP 4 +#define SF_MONSTER_PRISONER 16 // Monster won't attack anyone, no one will attacke him +#define SF_MONSTER_WAIT_FOR_SCRIPT 128 // Spawnflag that makes monsters wait to check for attacking until the script is done or they've been attacked +#define SF_MONSTER_PREDISASTER 256 // This is a predisaster scientist or barney; influences how they speak +#define SF_MONSTER_FADECORPSE 512 // Fade out corpse after death +#define SF_MONSTER_FALL_TO_GROUND 0x80000000 +#define SF_MONSTER_TURRET_AUTOACTIVATE 32 +#define SF_MONSTER_TURRET_STARTINACTIVE 64 +#define SF_MONSTER_WAIT_UNTIL_PROVOKED 64 // Don't attack the player unless provoked + +// info_decal +#define SF_DECAL_NOTINDEATHMATCH 2048 + +// worldspawn +#define SF_WORLD_DARK 0x0001 // Fade from black at startup +#define SF_WORLD_TITLE 0x0002 // Display game title at startup +#define SF_WORLD_FORCETEAM 0x0004 // Force teams + +// Set this bit on guns and stuff that should never respawn +#define SF_NORESPAWN (1<<30) + +// Valve Mod Weapon Constants +#define HLI_HEALTHKIT 1 +#define HLI_ANTIDOTE 2 +#define HLI_SECURITY 3 +#define HLI_BATTERY 4 + +#define HLW_NONE 0 +#define HLW_CROWBAR 1 +#define HLW_GLOCK 2 +#define HLW_PYTHON 3 +#define HLW_MP5 4 +#define HLW_CHAINGUN 5 +#define HLW_CROSSBOW 6 +#define HLW_SHOTGUN 7 +#define HLW_RPG 8 +#define HLW_GAUSS 9 +#define HLW_EGON 10 +#define HLW_HORNETGUN 11 +#define HLW_HANDGRENADE 12 +#define HLW_TRIPMINE 13 +#define HLW_SATCHEL 14 +#define HLW_SNARK 15 +#define HLW_SUIT 31 +#define HLW_ALLWEAPONS (~(1<<HLW_SUIT)) + + +#define FEV_NOTHOST (1<<0) // Skip local host for event send. +#define FEV_RELIABLE (1<<1) // Send the event reliably. You must specify the origin and angles + // for this to work correctly on the server for anything + // that depends on the event origin/angles. I.e., the origin/angles are not + // taken from the invoking edict for reliable events. +#define FEV_GLOBAL (1<<2) // Don't restrict to PAS/PVS, send this event to _everybody_ on the server ( useful for stopping CHAN_STATIC + // sounds started by client event when client is not in PVS anymore ( hwguy in TFC e.g. ). +#define FEV_UPDATE (1<<3) // If this client already has one of these events in its queue, just update the event instead of sending it as a duplicate +#define FEV_HOSTONLY (1<<4) // Only send to entity specified as the invoker +#define FEV_SERVER (1<<5) // Only send if the event was created on the server. +#define FEV_CLIENT (1<<6) // Only issue event client side ( from shared code ) + +// These are caps bits to indicate what an object's capabilities (currently used for save/restore and level transitions) +#define FCAP_CUSTOMSAVE 0x00000001 +#define FCAP_ACROSS_TRANSITION 0x00000002 // should transfer between transitions +#define FCAP_MUST_SPAWN 0x00000004 // Spawn after restore +#define FCAP_DONT_SAVE 0x80000000 // Don't save this +#define FCAP_IMPULSE_USE 0x00000008 // can be used by the player +#define FCAP_CONTINUOUS_USE 0x00000010 // can be used by the player +#define FCAP_ONOFF_USE 0x00000020 // can be used by the player +#define FCAP_DIRECTIONAL_USE 0x00000040 // Player sends +/- 1 when using (currently only tracktrains) +#define FCAP_MASTER 0x00000080 // Can be used to "master" other entities (like multisource) diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/lang.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/lang.inc new file mode 100644 index 0000000..ba08635 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/lang.inc @@ -0,0 +1,56 @@ +/* Language functions +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _lang_included + #endinput +#endif +#define _lang_included + +//return the number of languages loaded +native get_langsnum(); + +//sets name to the two-letter name of a language returned by get_langsnum +//index starts at 0 +native get_lang(id, name[3]); + +//registers a dictionary file, making sure the words are in the dictionary +// the file should be in "addons/amxx/data/lang/", but only the name needs to be +// given. (e.g. register_dictionary("file.txt") will be addons/amxx/data/file.txt). +native register_dictionary(const filename[]); + +//returns 1 if the language is loaded, 0 otherwise. +native lang_exists(const name[]); + +enum TransKey +{ + TransKey_Bad = -1, +}; + +/** + * Adds or finds a translation key. + */ +native TransKey:CreateLangKey(const key[]); + +/** + * Finds a translation key id without adding on failure. + * Returns -1 on not found. + */ +native TransKey:GetLangTransKey(const key[]); + +/** + * Adds a translation. + */ +native AddTranslation(const lang[3], TransKey:key, const phrase[]); + +/** + * Looks up the translation of the key for the given type + * This does NOT format the output text. + * eg: If the key includes %s, the outputted text will also contain %s. + * NOTE: LANG_PLAYER is invalid in this, use a player index + * or LANG_SERVER + */ +native LookupLangKey(Output[], OutputSize, const Key[], const &id); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/message_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/message_const.inc new file mode 100644 index 0000000..3624bd4 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/message_const.inc @@ -0,0 +1,803 @@ +/* Message constants +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +* +*/ + +#if defined _message_const_included + #endinput +#endif +#define _message_const_included + +/* Destination types for message_begin() */ +#define MSG_BROADCAST 0 // Unreliable to all +#define MSG_ONE 1 // Reliable to one (msg_entity) +#define MSG_ALL 2 // Reliable to all +#define MSG_INIT 3 // Write to the init string +#define MSG_PVS 4 // Ents in PVS of org +#define MSG_PAS 5 // Ents in PAS of org +#define MSG_PVS_R 6 // Reliable to PVS +#define MSG_PAS_R 7 // Reliable to PAS +#define MSG_ONE_UNRELIABLE 8 // Send to one client, but don't put in reliable stream, put in unreliable datagram (could be dropped) +#define MSG_SPEC 9 // Sends to all spectator proxies + +/* Hardcoded message types for message_begin() + * Look in the actual HLSDK for details! + */ +#define SVC_NOP 1 +#define SVC_DISCONNECT 2 +#define SVC_EVENT 3 +#define SVC_VERSION 4 +#define SVC_SETVIEW 5 +#define SVC_SOUND 6 +#define SVC_TIME 7 +#define SVC_PRINT 8 +#define SVC_STUFFTEXT 9 +#define SVC_SETANGLE 10 +#define SVC_SERVERINFO 11 +#define SVC_LIGHTSTYLE 12 +#define SVC_UPDATEUSERINFO 13 +#define SVC_DELTADESCRIPTION 14 +#define SVC_CLIENTDATA 15 +#define SVC_STOPSOUND 16 +#define SVC_PINGS 17 +#define SVC_PARTICLE 18 +#define SVC_DAMAGE 19 +#define SVC_SPAWNSTATIC 20 +#define SVC_EVENT_RELIABLE 21 +#define SVC_SPAWNBASELINE 22 +#define SVC_TEMPENTITY 23 +#define SVC_SETPAUSE 24 +#define SVC_SIGNONNUM 25 +#define SVC_CENTERPRINT 26 +#define SVC_KILLEDMONSTER 27 +#define SVC_FOUNDSECRET 28 +#define SVC_SPAWNSTATICSOUND 29 +#define SVC_INTERMISSION 30 +#define SVC_FINALE 31 +#define SVC_CDTRACK 32 +#define SVC_RESTORE 33 +#define SVC_CUTSCENE 34 +#define SVC_WEAPONANIM 35 +#define SVC_DECALNAME 36 +#define SVC_ROOMTYPE 37 +#define SVC_ADDANGLE 38 +#define SVC_NEWUSERMSG 39 +#define SVC_PACKETENTITIES 40 +#define SVC_DELTAPACKETENTITIES 41 +#define SVC_CHOKE 42 +#define SVC_RESOURCELIST 43 +#define SVC_NEWMOVEVARS 44 +#define SVC_RESOURCEREQUEST 45 +#define SVC_CUSTOMIZATION 46 +#define SVC_CROSSHAIRANGLE 47 +#define SVC_SOUNDFADE 48 +#define SVC_FILETXFERFAILED 49 +#define SVC_HLTV 50 +#define SVC_DIRECTOR 51 +#define SVC_VOICEINIT 52 +#define SVC_VOICEDATA 53 +#define SVC_SENDEXTRAINFO 54 +#define SVC_TIMESCALE 55 + +/* Message flags for set_msg_block() */ +#define BLOCK_NOT 0 +#define BLOCK_ONCE 1 +#define BLOCK_SET 2 + +/* Used with get_msg_argtype() and set_msg_arg_ */ +enum +{ + ARG_BYTE = 1, /* int */ + ARG_CHAR, /* int */ + ARG_SHORT, /* int */ + ARG_LONG, /* int */ + ARG_ANGLE, /* float */ + ARG_COORD, /* float */ + ARG_STRING, /* string */ + ARG_ENTITY, /* int */ +}; + +/* Temp entity message types for message_begin() */ +#define TE_BEAMPOINTS 0 // Beam effect between two points +// write_byte(TE_BEAMPOINTS) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) +// write_short(sprite index) +// write_byte(starting frame) +// write_byte(frame rate in 0.1's) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(noise amplitude in 0.01's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(scroll speed in 0.1's) + +#define TE_BEAMENTPOINT 1 // Beam effect between point and entity +// write_byte(TE_BEAMENTPOINT) +// write_short(start entity) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) +// write_short(sprite index) +// write_byte(starting frame) +// write_byte(frame rate in 0.1's) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(noise amplitude in 0.01's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(scroll speed in 0.1's) + +#define TE_GUNSHOT 2 // Particle effect plus ricochet sound +// write_byte(TE_GUNSHOT) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) + +#define TE_EXPLOSION 3 // Additive sprite, 2 dynamic lights, flickering particles, explosion sound, move vertically 8 pps +// write_byte(TE_EXPLOSION) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(sprite index) +// write_byte(scale in 0.1's) +// write_byte(framerate) +// write_byte(flags) +// +// The Explosion effect has some flags to control performance/aesthetic features: +#define TE_EXPLFLAG_NONE 0 // All flags clear makes default Half-Life explosion +#define TE_EXPLFLAG_NOADDITIVE 1 // Sprite will be drawn opaque (ensure that the sprite you send is a non-additive sprite) +#define TE_EXPLFLAG_NODLIGHTS 2 // Do not render dynamic lights +#define TE_EXPLFLAG_NOSOUND 4 // Do not play client explosion sound +#define TE_EXPLFLAG_NOPARTICLES 8 // Do not draw particles + +#define TE_TAREXPLOSION 4 // Quake1 "tarbaby" explosion with sound +// write_byte(TE_TAREXPLOSION) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) + +#define TE_SMOKE 5 // Alphablend sprite, move vertically 30 pps +// write_byte(TE_SMOKE) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(sprite index) +// write_byte(scale in 0.1's) +// write_byte(framerate) + +#define TE_TRACER 6 // Tracer effect from point to point +// write_byte(TE_TRACER) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) + +#define TE_LIGHTNING 7 // TE_BEAMPOINTS with simplified parameters +// write_byte(TE_LIGHTNING) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) +// write_byte(life in 0.1's) +// write_byte(width in 0.1's) +// write_byte(amplitude in 0.01's) +// write_short(sprite model index) + +#define TE_BEAMENTS 8 +// write_byte(TE_BEAMENTS) +// write_short(start entity) +// write_short(end entity) +// write_short(sprite index) +// write_byte(starting frame) +// write_byte(frame rate in 0.1's) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(noise amplitude in 0.01's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(scroll speed in 0.1's) + +#define TE_SPARKS 9 // 8 random tracers with gravity, ricochet sprite +// write_byte(TE_SPARKS) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) + +#define TE_LAVASPLASH 10 // Quake1 lava splash +// write_byte(TE_LAVASPLASH) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) + +#define TE_TELEPORT 11 // Quake1 teleport splash +// write_byte(TE_TELEPORT) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) + +#define TE_EXPLOSION2 12 // Quake1 colormaped (base palette) particle explosion with sound +// write_byte(TE_EXPLOSION2) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(starting color) +// write_byte(num colors) + +#define TE_BSPDECAL 13 // Decal from the .BSP file +// write_byte(TE_BSPDECAL) +// write_coord(position.x) decal position (center of texture in world) +// write_coord(position.y) +// write_coord(position.z) +// write_short(texture index of precached decal texture name) +// write_short(entity index) +// [optional - write_short(index of model of above entity) only included if previous short is non-zero (not the world)] + +#define TE_IMPLOSION 14 // Tracers moving toward a point +// write_byte(TE_IMPLOSION) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(radius) +// write_byte(count) +// write_byte(life in 0.1's) + +#define TE_SPRITETRAIL 15 // Line of moving glow sprites with gravity, fadeout, and collisions +// write_byte(TE_SPRITETRAIL) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) +// write_short(sprite index) +// write_byte(count) +// write_byte(life in 0.1's) +// write_byte(scale in 0.1's) +// write_byte(velocity along vector in 10's) +// write_byte(randomness of velocity in 10's) + +#define TE_SPRITE 17 // Additive sprite, plays 1 cycle +// write_byte(TE_SPRITE) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(sprite index) +// write_byte(scale in 0.1's) +// write_byte(brightness) + +#define TE_BEAMSPRITE 18 // A beam with a sprite at the end +// write_byte(TE_BEAMSPRITE) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) +// write_short(beam sprite index) +// write_short(end sprite index) + +#define TE_BEAMTORUS 19 // Screen aligned beam ring, expands to max radius over lifetime +// write_byte(TE_BEAMTORUS) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(axis.x) +// write_coord(axis.y) +// write_coord(axis.z) +// write_short(sprite index) +// write_byte(starting frame) +// write_byte(frame rate in 0.1's) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(noise amplitude in 0.01's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(scroll speed in 0.1's) + +#define TE_BEAMDISK 20 // Disk that expands to max radius over lifetime +// write_byte(TE_BEAMDISK) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(axis.x) +// write_coord(axis.y) +// write_coord(axis.z) +// write_short(sprite index) +// write_byte(starting frame) +// write_byte(frame rate in 0.1's) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(noise amplitude in 0.01's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(scroll speed in 0.1's) + +#define TE_BEAMCYLINDER 21 // Cylinder that expands to max radius over lifetime +// write_byte(TE_BEAMCYLINDER) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(axis.x) +// write_coord(axis.y) +// write_coord(axis.z) +// write_short(sprite index) +// write_byte(starting frame) +// write_byte(frame rate in 0.1's) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(noise amplitude in 0.01's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(scroll speed in 0.1's) + +#define TE_BEAMFOLLOW 22 // Create a line of decaying beam segments until entity stops moving +// write_byte(TE_BEAMFOLLOW) +// write_short(entity:attachment to follow) +// write_short(sprite index) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) + +#define TE_GLOWSPRITE 23 +// write_byte(TE_GLOWSPRITE) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(model index) +// write_byte(scale / 10) +// write_byte(size) +// write_byte(brightness) + +#define TE_BEAMRING 24 // Connect a beam ring to two entities +// write_byte(TE_BEAMRING) +// write_short(start entity) +// write_short(end entity) +// write_short(sprite index) +// write_byte(starting frame) +// write_byte(frame rate in 0.1's) +// write_byte(life in 0.1's) +// write_byte(line width in 0.1's) +// write_byte(noise amplitude in 0.01's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(scroll speed in 0.1's) + +#define TE_STREAK_SPLASH 25 // Oriented shower of tracers +// write_byte(TE_STREAK_SPLASH) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(vector.x) +// write_coord(vector.y) +// write_coord(vector.z) +// write_byte(color) +// write_short(count) +// write_short(base speed) +// write_short(ramdon velocity) + +#define TE_DLIGHT 27 // Dynamic light, effect world, minor entity effect +// write_byte(TE_DLIGHT) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(radius in 10's) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(brightness) +// write_byte(life in 10's) +// write_byte(decay rate in 10's) + +#define TE_ELIGHT 28 // Point entity light, no world effect +// write_byte(TE_ELIGHT) +// write_short(entity:attachment to follow) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(radius) +// write_byte(red) +// write_byte(green) +// write_byte(blue) +// write_byte(life in 0.1's) +// write_coord(decay rate) + +#define TE_TEXTMESSAGE 29 +// write_byte(TE_TEXTMESSAGE) +// write_byte(channel) +// write_short(x) -1 = center) +// write_short(y) -1 = center) +// write_byte(effect) 0 = fade in/fade out, 1 is flickery credits, 2 is write out (training room) +// write_byte(red) - text color +// write_byte(green) +// write_byte(blue) +// write_byte(alpha) +// write_byte(red) - effect color +// write_byte(green) +// write_byte(blue) +// write_byte(alpha) +// write_short(fadein time) +// write_short(fadeout time) +// write_short(hold time) +// [optional] write_short(fxtime) time the highlight lags behing the leading text in effect 2 +// write_string(text message) 512 chars max string size + +#define TE_LINE 30 +// write_byte(TE_LINE) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) +// write_short(life in 0.1 s) +// write_byte(red) +// write_byte(green) +// write_byte(blue) + +#define TE_BOX 31 +// write_byte(TE_BOX) +// write_coord(boxmins.x) +// write_coord(boxmins.y) +// write_coord(boxmins.z) +// write_coord(boxmaxs.x) +// write_coord(boxmaxs.y) +// write_coord(boxmaxs.z) +// write_short(life in 0.1 s) +// write_byte(red) +// write_byte(green) +// write_byte(blue) + +#define TE_KILLBEAM 99 // Kill all beams attached to entity +// write_byte(TE_KILLBEAM) +// write_short(entity) + +#define TE_LARGEFUNNEL 100 +// write_byte(TE_LARGEFUNNEL) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(sprite index) +// write_short(flags) + +#define TE_BLOODSTREAM 101 // Particle spray +// write_byte(TE_BLOODSTREAM) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(vector.x) +// write_coord(vector.y) +// write_coord(vector.z) +// write_byte(color) +// write_byte(speed) + +#define TE_SHOWLINE 102 // Line of particles every 5 units, dies in 30 seconds +// write_byte(TE_SHOWLINE) +// write_coord(startposition.x) +// write_coord(startposition.y) +// write_coord(startposition.z) +// write_coord(endposition.x) +// write_coord(endposition.y) +// write_coord(endposition.z) + +#define TE_BLOOD 103 // Particle spray +// write_byte(TE_BLOOD) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(vector.x) +// write_coord(vector.y) +// write_coord(vector.z) +// write_byte(color) +// write_byte(speed) + +#define TE_DECAL 104 // Decal applied to a brush entity (not the world) +// write_byte(TE_DECAL) +// write_coord(position.x) decal position (center of texture in world) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(texture index of precached decal texture name) +// write_short(entity index) + +#define TE_FIZZ 105 // Create alpha sprites inside of entity, float upwards +// write_byte(TE_FIZZ) +// write_short(entity) +// write_short(sprite index) +// write_byte density) + +#define TE_MODEL 106 // Create a moving model that bounces and makes a sound when it hits +// write_byte(TE_MODEL) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(velocity.x) +// write_coord(velocity.y) +// write_coord(velocity.z) +// write_angle(initial yaw) +// write_short(model index) +// write_byte(bounce sound type) +// write_byte(life in 0.1's) + +#define TE_EXPLODEMODEL 107 // Spherical shower of models, picks from set +// write_byte(TE_EXPLODEMODEL) +// write_coord(origin.x) +// write_coord(origin.y) +// write_coord(origin.z) +// write_coord(velocity.x) +// write_coord(velocity.y) +// write_coord(velocity.z) +// write_short(model index) +// write_short(count) +// write_byte(life in 0.1's) + +#define TE_BREAKMODEL 108 // Box of models or sprites +// write_byte(TE_BREAKMODEL) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(size.x) +// write_coord(size.y) +// write_coord(size.z) +// write_coord(velocity.x) +// write_coord(velocity.y) +// write_coord(velocity.z) +// write_byte(random velocity in 10's) +// write_short(sprite or model index) +// write_byte(count) +// write_byte(life in 0.1 secs) +// write_byte(flags) + +#define TE_GUNSHOTDECAL 109 // Decal and ricochet sound +// write_byte(TE_GUNSHOTDECAL) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(entity index???) +// write_byte(decal???) + +#define TE_SPRITE_SPRAY 110 // Spray of alpha sprites +// write_byte(TE_SPRITE_SPRAY) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(velocity.x) +// write_coord(velocity.y) +// write_coord(velocity.z) +// write_short(sprite index) +// write_byte(count) +// write_byte(speed) +// write_byte(noise) + +#define TE_ARMOR_RICOCHET 111 // Quick spark sprite, client ricochet sound. +// write_byte(TE_ARMOR_RICOCHET) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(scale in 0.1's) + +#define TE_PLAYERDECAL 112 +// write_byte(TE_PLAYERDECAL) +// write_byte(playerindex) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(entity???) +// write_byte(decal number) +// [optional] write_short(model index) + +#define TE_BUBBLES 113 // Create alpha sprites inside of box, float upwards +// write_byte(TE_BUBBLES) +// write_coord(position.x) (min start position) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(position.x) (max start position) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(float height) +// write_short(model index) +// write_byte(count) +// write_coord(speed) + +#define TE_BUBBLETRAIL 114 // Create alpha sprites along a line, float upwards +// write_byte(TE_BUBBLETRAIL) +// write_coord(position.x) (min start position) +// write_coord(position.y) (min start position) +// write_coord(position.z) (min start position) +// write_coord(position.x) (max start position) +// write_coord(position.y) (max start position) +// write_coord(position.z) (max start position) +// write_coord(float height) +// write_short(model index) +// write_byte(count) +// write_coord(speed) + +#define TE_BLOODSPRITE 115 // Spray of opaque sprite1's that fall, single sprite2 for 1..2 secs (this is a high-priority tent) +// write_byte(TE_BLOODSPRITE) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_short(sprite1 index) +// write_short(sprite2 index) +// write_byte(color) +// write_byte(scale) + +#define TE_WORLDDECAL 116 // Decal applied to the world brush +// write_byte(TE_WORLDDECAL) +// write_coord(position.x) decal position (center of texture in world) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(texture index of precached decal texture name) + +#define TE_WORLDDECALHIGH 117 // Decal (with texture index > 256) applied to world brush +// write_byte(TE_WORLDDECALHIGH) +// write_coord(position.x) decal position (center of texture in world) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(texture index of precached decal texture name - 256) + +#define TE_DECALHIGH 118 // Same as TE_DECAL, but the texture index was greater than 256 +// write_byte(TE_DECALHIGH) +// write_coord(position.x) decal position (center of texture in world) +// write_coord(position.y) +// write_coord(position.z) +// write_byte(texture index of precached decal texture name - 256) +// write_short(entity index) + +#define TE_PROJECTILE 119 // Makes a projectile (like a nail) (this is a high-priority tent) +// write_byte(TE_PROJECTILE) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(velocity.x) +// write_coord(velocity.y) +// write_coord(velocity.z) +// write_short(modelindex) +// write_byte(life) +// write_byte(owner) projectile won't collide with owner (if owner == 0, projectile will hit any client). + +#define TE_SPRAY 120 // Throws a shower of sprites or models +// write_byte(TE_SPRAY) +// write_coord(position.x) +// write_coord(position.y) +// write_coord(position.z) +// write_coord(direction.x) +// write_coord(direction.y) +// write_coord(direction.z) +// write_short(modelindex) +// write_byte(count) +// write_byte(speed) +// write_byte(noise) +// write_byte(rendermode) + +#define TE_PLAYERSPRITES 121 // Sprites emit from a player's bounding box (ONLY use for players!) +// write_byte(TE_PLAYERSPRITES) +// write_short(playernum) +// write_short(sprite modelindex) +// write_byte(count) +// write_byte(variance) (0 = no variance in size) (10 = 10% variance in size) + +#define TE_PARTICLEBURST 122 // Very similar to lavasplash +// write_byte(TE_PARTICLEBURST) +// write_coord(origin) +// write_short(radius) +// write_byte(particle color) +// write_byte(duration * 10) (will be randomized a bit) + +#define TE_FIREFIELD 123 // Makes a field of fire +// write_byte(TE_FIREFIELD) +// write_coord(origin) +// write_short(radius) (fire is made in a square around origin. -radius, -radius to radius, radius) +// write_short(modelindex) +// write_byte(count) +// write_byte(flags) +// write_byte(duration (in seconds) * 10) (will be randomized a bit) +// +// to keep network traffic low, this message has associated flags that fit into a byte: +#define TEFIRE_FLAG_ALLFLOAT 1 // All sprites will drift upwards as they animate +#define TEFIRE_FLAG_SOMEFLOAT 2 // Some of the sprites will drift upwards. (50% chance) +#define TEFIRE_FLAG_LOOP 4 // If set, sprite plays at 15 fps, otherwise plays at whatever rate stretches the animation over the sprite's duration. +#define TEFIRE_FLAG_ALPHA 8 // If set, sprite is rendered alpha blended at 50% else, opaque +#define TEFIRE_FLAG_PLANAR 16 // If set, all fire sprites have same initial Z instead of randomly filling a cube. + +#define TE_PLAYERATTACHMENT 124 // Attaches a TENT to a player (this is a high-priority tent) +// write_byte(TE_PLAYERATTACHMENT) +// write_byte(entity index of player) +// write_coord(vertical offset) (attachment origin.z = player origin.z + vertical offset) +// write_short(model index) +// write_short(life * 10 ) + +#define TE_KILLPLAYERATTACHMENTS 125 // Will expire all TENTS attached to a player. +// write_byte(TE_KILLPLAYERATTACHMENTS) +// write_byte(entity index of player) + +#define TE_MULTIGUNSHOT 126 // Much more compact shotgun message +// This message is used to make a client approximate a 'spray' of gunfire. +// Any weapon that fires more than one bullet per frame and fires in a bit of a spread is +// a good candidate for MULTIGUNSHOT use. (shotguns) +// +// NOTE: This effect makes the client do traces for each bullet, these client traces ignore +// entities that have studio models.Traces are 4096 long. +// +// write_byte(TE_MULTIGUNSHOT) +// write_coord(origin.x) +// write_coord(origin.y) +// write_coord(origin.z) +// write_coord(direction.x) +// write_coord(direction.y) +// write_coord(direction.z) +// write_coord(x noise * 100) +// write_coord(y noise * 100) +// write_byte(count) +// write_byte(bullethole decal texture index) + +#define TE_USERTRACER 127 // Larger message than the standard tracer, but allows some customization. +// write_byte(TE_USERTRACER) +// write_coord(origin.x) +// write_coord(origin.y) +// write_coord(origin.z) +// write_coord(velocity.x) +// write_coord(velocity.y) +// write_coord(velocity.z) +// write_byte(life * 10) +// write_byte(color) this is an index into an array of color vectors in the engine. (0 - ) +// write_byte(length * 10) + +// From hltv.h from the HLSDK, these are used in conjunction with SVC_DIRECTOR +// sub commands of svc_director: +#define DRC_CMD_NONE 0 // NULL director command +#define DRC_CMD_START 1 // start director mode +#define DRC_CMD_EVENT 2 // informs about director command +#define DRC_CMD_MODE 3 // switches camera modes +#define DRC_CMD_CAMERA 4 // sets camera registers +#define DRC_CMD_TIMESCALE 5 // sets time scale +#define DRC_CMD_MESSAGE 6 // send HUD centerprint +#define DRC_CMD_SOUND 7 // plays a particular sound +#define DRC_CMD_STATUS 8 // status info about broadcast +#define DRC_CMD_BANNER 9 // banner file name for HLTV gui +#define DRC_CMD_FADE 10 // send screen fade command +#define DRC_CMD_SHAKE 11 // send screen shake command +#define DRC_CMD_STUFFTEXT 12 // like the normal svc_stufftext but as director command + +#define DRC_CMD_LAST 12 + +// HLTV_EVENT event flags +#define DRC_FLAG_PRIO_MASK 0x0F // priorities between 0 and 15 (15 most important) +#define DRC_FLAG_SIDE (1<<4) // +#define DRC_FLAG_DRAMATIC (1<<5) // is a dramatic scene +#define DRC_FLAG_SLOWMOTION (1<<6) // would look good in SloMo +#define DRC_FLAG_FACEPLAYER (1<<7) // player is doning something (reload/defuse bomb etc) +#define DRC_FLAG_INTRO (1<<8) // is a introduction scene +#define DRC_FLAG_FINAL (1<<9) // is a final scene +#define DRC_FLAG_NO_RANDOM (1<<10) // don't randomize event data + + +#define MAX_DIRECTOR_CMD_PARAMETERS 4 +#define MAX_DIRECTOR_CMD_STRING 128 diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/message_stocks.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/message_stocks.inc new file mode 100644 index 0000000..5395e7c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/message_stocks.inc @@ -0,0 +1,58 @@ +/* Message Stocks +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +* +*/ + +#if defined _message_stocks_included + #endinput +#endif +#define _message_stocks_included + +/* Creates a death message. */ +stock dod_make_deathmsg(killer, victim, weaponNUM) +{ + message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0); + write_byte(killer); + write_byte(victim); + write_byte(weaponNUM); + message_end(); + + return 1; +} + +/* Kills a user without a message. */ +stock user_silentkill(index) +{ + static msgid = 0; + new msgblock; + if (!msgid) + { + msgid = get_user_msgid("DeathMsg"); + } + msgblock = get_msg_block(msgid); + set_msg_block(msgid, BLOCK_ONCE); + user_kill(index, 1); + set_msg_block(msgid, msgblock); + + return 1; +} + +/* Creates a death message. */ +stock make_deathmsg(killer, victim, headshot, const weapon[]) +{ + message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0); + write_byte(killer); + write_byte(victim); + + new mod_name[32]; + get_modname(mod_name, 31); + if (equal(mod_name, "cstrike") || equal(mod_name, "czero") || equal(mod_name, "csv15") || equal(mod_name, "cs13")) + write_byte(headshot); + write_string(weapon); + message_end(); + + return 1; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/messages.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/messages.inc new file mode 100644 index 0000000..9a8652b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/messages.inc @@ -0,0 +1,93 @@ +/* Messaging functions (now part of Core) + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + +#if defined _coremsg_included + #endinput +#endif +#define _coremsg_included + +#include <message_const> + +/* These functinos are used to generate client messages. + * You may generate menu, smoke, shockwaves, thunderlights, + * intermission and many many others messages. + * See HL SDK for more examples. */ +native message_begin(dest, msg_type, const origin[3] = {0,0,0}, player = 0); +native message_end(); +native write_byte(x); +native write_char(x); +native write_short(x); +native write_long(x); +native write_entity(x); +native write_angle(x); +native write_coord(x); +native write_string(const x[]); + +/* These are the same as above, except that the messages sent + * are also sent to all other plugins and Metamod plugins. + * This means that if you send one of these messages, other plugins will + * be notified, which was previously impossible. + * BE CAREFUL! Using these incorrectly, or not for their intended purpose, + * could cause infinite recursion or something just as bad. + * NOTE! These natives are experimental. + */ +native emessage_begin(dest, msg_type, const origin[3] = {0,0,0}, player = 0); +native emessage_end(); +native ewrite_byte(x); +native ewrite_char(x); +native ewrite_short(x); +native ewrite_long(x); +native ewrite_entity(x); +native ewrite_angle(x); +native ewrite_coord(x); +native ewrite_string(const x[]); + +/* Sets/Gets what engine messages are blocked. */ +native set_msg_block(iMessage, iMessageFlags); +native get_msg_block(iMessage); + +/* Lets you directly hook a message in the engine! + * You can overwrite the message before anything happens and either let the message continue + * or fully block it. Here is how it works: + * If you hook a message, the message is stored but not sent. You have the opportunity to + * not only execute code, but to get/set the contents of the message, before you choose to + * either block it or let it go on its way. The hooked function will be passed a msg_id, msg_dest, and entity index. + * The return value can be passed to unregister_message() to stop the message from being hooked */ +native register_message(iMsgId, const szFunction[]); + +/* Unregisters a message hook previously created with register_message + * You must pass the proper message id, and return value from the message to unregister the message successfully. */ +native unregister_message(iMsgId, registeredmsg); + + +/* The get/set _msg commands will fail if used outside a hooked message scope. + * They should never be used unless inside a registered message function. + * There are eight different ways of sending a message, five are ints, two are floats, and one is string. + * These are denoted by iArgType. argn is the number + * of the argument. Exceeding the bounds of 1 to get_msg_args() is a bad idea. + * As of AMX Mod X 1.5, the middle parameter of set_* no longer does anything. + * You cannot change the message argument type (as this would crash the mod anyway) + */ + +/* Gets number of arguments that were passed to this message */ +native get_msg_args(); + +/* Gets the argument type of argument argn */ +native get_msg_argtype(argn); + +/* Gets the value of argn. */ +native get_msg_arg_int(argn); +native Float:get_msg_arg_float(argn); +native get_msg_arg_string(argn, szReturn[], iLength); + +/* sets the value of argn. */ +native set_msg_arg_int(argn, argtype, iValue); +native set_msg_arg_float(argn, argtype, Float:fValue); +native set_msg_arg_string(argn, const szString[]); + +/* Gets the origin of a message */ +native get_msg_origin(const Float:_Origin[3]); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/newmenus.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/newmenus.inc new file mode 100644 index 0000000..e064dc9 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/newmenus.inc @@ -0,0 +1,262 @@ +/* AMX Mod X constants +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _newmenus_included + #endinput +#endif +#define _newmenus_included + +#define MEXIT_ALL 1 /* Menu will have an exit option (default)*/ +#define MEXIT_NEVER -1 /* Menu will not have an exit option */ + +#define MPROP_PERPAGE 1 /* Number of items per page (param1 = number, 0=no paginating, 7=default) */ +#define MPROP_BACKNAME 2 /* Name of the back button (param1 = string) */ +#define MPROP_NEXTNAME 3 /* Name of the next button (param1 = string) */ +#define MPROP_EXITNAME 4 /* Name of the exit button (param1 = string) */ +#define MPROP_TITLE 5 /* Menu title text (param1 = string) */ +#define MPROP_EXIT 6 /* Exit functionality (param1 = number, see MEXIT constants) */ +#define MPROP_NOCOLORS 8 /* Sets whether colors are not auto (param1 = number, 0=default) */ +#define MPROP_NUMBER_COLOR 10 /* Color indicator to use for numbers (param1 = string, "\r"=default) */ + +#define MEXIT_NORMAL 0 /* DEPRECATED, do not use (has no effect) */ +#define MENUPAD_NONE 0 /* DEPRECATED, do not use (has no effect) */ +#define MENUPAD_PAGE 1 /* DEPRECATED, do not use (has no effect) */ +#define MPROP_ORDER 7 /* DEPRECATED, do not use (has no effect) */ +#define MPROP_PADMENU 9 /* DEPRECATED, do not use (has no effect) */ + +/** + * @brief Creates a new menu object. + * + * The handler function should be prototyped as: + * + * public <function>(id, menu, item) + * id - Client the menu is being acted upon. + * menu - Menu resource identifier. + * item - Item the client selected. If less than 0, the menu was + * cancelled and the item is a status code. menu_display + * should never be called immediately if the item is a status + * code, for re-entrancy reasons. + * + * The handler function should always return PLUGIN_HANDLED to block + * any old menu handlers from potentially feeding on the menu, unless + * that is the desired functionality. + * + * @param title Title the menu should use. + * @param handler Name of the handler function. The function will be invoked + * once and only once to every menu_display() call. + * @param ml Unused (should be 0). + * @return Menu resource identifier which must be destroyed via + * menu_destroy(). All menus are destroyed when the plugin + * unloads. + * @error Function name not found. + */ +native menu_create(const title[], const handler[], ml=0); + +/** + * Creates a menu item callback handler. + * + * The handler function should be prototyped as: + * + * public <function>(id, menu, item) + * id - Client index being displayed to. + * menu - Menu resource identifier. + * item - Item being drawn. + * <return> - ITEM_IGNORE to use the default functionality. ITEM_ENABLED to + * explicitly enable or ITEM_DISABLED to explicitly disable. + * + * @param function Function name. + * @return Menu callback ID. + */ +native menu_makecallback(const function[]); + +/** + * Adds an menu to a menu. + * + * @param menu Menu resource identifier. + * @param name Item text to display. + * @param info Item info string for internal information. + * @param paccess Access required by the player viewing the menu. + * @param callback If set to a valid ID from menu_makecallback(), the + * callback will be invoked before drawing the item. + * @noreturn + * @error Invalid menu resource. + */ +native menu_additem(menu, const name[], const info[]="", paccess=0, callback=-1); + +/** + * Returns the number of pages in a menu. + * + * @param menu Menu resource identifier. + * @return Number of pages in the menu. + * @error Invalid menu resource. + */ +native menu_pages(menu); + +/** + * Returns the number of items in a menu. + * + * @param menu Menu resource identifier. + * @return Number of items in the menu. + * @error Invalid menu resource. + */ +native menu_items(menu); + +/** + * Displays a menu to one client. This should never be called from a handler + * when the item is less than 0 (i.e. calling this from a cancelled menu will + * result in an error). + * + * @param id Client index. + * @param menu Menu resource identifier. + * @param page Page to start from (starting from 0). + * @noreturn + * @error Invalid menu resource or client index. + */ +native menu_display(id, menu, page=0); + +/** + * Given a page on a menu and a keypress on that page, returns the item id selected. + * If the item is less than 0, a special option was chosen (such as MENU_EXIT). + * + * @param menu Menu resource identifier. + * @param page Page on the menu. + * @param key Key pressed (from 1 to 10). + * @return Item identifier, or <0 for a special selection code. + * @error Invalid menu resource. + */ +native menu_find_id(menu, page, key); + +/** + * Retrieves info about a menu item. + * + * @param menu Menu resource identifier. + * @param item Item identifier. + * @param access Variable to store access value. + * @param info Buffer to store item info. + * @param infolen Item info buffer length. + * @param name Buffer to store item display text. + * @param namelen Item name buffer length. + * @param callback Callback ID. + * @return 1 on success, 0 on failure. + * @error Invalid menu resource. + */ +native menu_item_getinfo(menu, item, &access, info[], infolen, name[]="", namelen=0, &callback); + +/** + * Sets an item's display text. + * + * @param menu Menu resource identifier. + * @param item Item identifier. + * @param name New item display text. + * @return 1 on success, 0 on failure. + * @error Invalid menu resource. + */ +native menu_item_setname(menu, item, const name[]); + +/** + * Sets an item's info string. + * + * @param menu Menu resource identifier. + * @param item Item identifier. + * @param info New item info string. + * @return 1 on success, 0 on failure. + * @error Invalid menu resource. + */ +native menu_item_setcmd(menu, item, const info[]); + +/** + * Sets an item's callback. + * + * @param menu Menu resource identifier. + * @param item Item identifier. + * @param callback New callback from menu_makecallback(), or -1 to clear. + * @return 1 on success, 0 on failure. + * @error Invalid menu resource. + */ +native menu_item_setcall(menu, item, callback=-1); + +/** + * Destroys a menu. Player menus will be cancelled (although may still linger + * on the HUD), and future attempts to access the menu resource will result in + * an error. + * + * This must be called if you create menus dynamically, otherwise you will + * leak memory. For normal dynamic menus, you will destroy the menu in the + * handler function (remembering to handle the case of a menu being cancelled, + * it must still be destroyed). + * + * @param menu Menu resource identifier. + * @noreturn + * @error Invalid menu resource. + */ +native menu_destroy(menu); + +/** + * Returns information about a menu (if any) the client is currently viewing. + * + * If newmenu is valid, then the menu will refer to the menuid associated with + * the title. If newmenu is not valid, and the menu is valid, then the player + * is viewing a menu displayed with show_menu(). + * + * Both may be invalid if the player is not viewing a menu. + * + * @param id Client index. + * @param menu Variable to store old menu id. If none, then <1 will be + * stored. + * @param newmenu Variable to store new menu id. If none, then -1 will be + * stored. + * @param menupage Variable to store current page of the new menu, if any. + * @return 1 if the player is viewing a menu, 0 otherwise. + * @error Invalid client. + */ +native player_menu_info(id, &menu, &newmenu, &menupage=0); + +/** + * Adds a blank line to a menu. + * + * @param menu Menu resource identifier. + * @param slot 1 (default) if the line should shift the numbering down. + * 0 if the line should be a visual shift only. + * @noreturn + * @error Invalid menu resource. + */ +native menu_addblank(menu, slot=1); + +/** + * Adds a text line to a menu. Only available in amxmodx 1.8.1 and above. + * + * @param menu Menu resource identifier. + * @param text Text to add. + * @param slot 1 (default) if the line should shift the numbering down. + * 0 if the line should be a visual shift only. + * @noreturn + * @error Invalid menu resource. + */ +native menu_addtext(menu, const text[], slot=1); + +/** + * Sets a menu property. + * + * @param menu Menu resource identifier. + * @param prop MPROP_ constant. + * @param ... Property parameters. + * @return 1 on success, 0 on failure. + * @error Invalid menu resource or property. + */ +native menu_setprop(menu, prop, ...); + +/** + * Cancels a player's menu, effectively forcing the player to select MENU_EXIT. + * The menu will still exist on their screen but any results are invalidated, + * and the callback is invoked. + * + * @param player Client index. + * @noreturn + * @error Invalid client index. + */ +native menu_cancel(player); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns.inc new file mode 100644 index 0000000..fbcfa02 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns.inc @@ -0,0 +1,753 @@ +/* NS module functions + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + +#if defined NS_INC + #endinput +#endif +#define NS_INC + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib ns + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib ns + #endif +#else + #pragma library ns +#endif + + + +#include <ns_const> + + +/** + * Called whenever the client's class is changed. + * + * @param id The index of the player who changed. + * @param newclass The class the client changed to. Check the class enum in ns_const.inc. + * @param oldclass The class the client changed from. Check the class enum in ns_const.inc. + * @noreturn + */ +forward client_changeclass(id, newclass, oldclass); + +/** + * Called whenever the client builds a structure. + * + * @param idPlayer The player index who triggered the building. + * @param idStructure The structure index that was created. + * @param type The type of structure that was built (1 for marine, 2 for alien). + * @param impulse The impulse command that was issued to build this structure. + * @noreturn + */ +forward client_built(idPlayer, idStructure, type, impulse); + +/** + * Tell whether or not the map is combat. + * + * @return 1 if combat, 0 otherwise. + */ +native ns_is_combat(); + +/** + * Returns the gameplay type for the currently active map. + * Refer to ns_const.inc's NSGameplay enum for details. + * + * @note The earliest this is guaranteed to be accurate is during plugin_init(). It needs + * the info_gameplay entity to be properly set within the map, or it will return "Unknown", + * or "Cantfind". + * + * @return Return the gameplay mode, as accurate as the module can tell. + */ +native NSGameplay:ns_get_gameplay(); + +/** + * Exact syntax as get_user_team, but should be more accurate. + * + * @param id Player id. + * @param buff Buffer to store team name in. + * @param len Buffer length. + * @return The pev_team setting for the player. + */ +native ns_get_user_team(id, buff[], len); + +/** + * Send an NS-style popup message. + * + * @param target The client to receive the message. Set to 0 to send to everybody. + * @param szMsg The message to send, 180 characters max. + * @param ah Whether to only display the message on clients who have the cvar "cl_autohelp" set to 1. + * @noreturn + */ +native ns_popup(target, const szMsg[180], ah=0); + +/** + * Sets a player model. Omit the second parameter to return to default + * + * @note The model does not revert on death, teamswitch, gestation, etc. + * + * @param id The player id to change. + * @param szModel The model to change to. + * @noreturn + */ +native ns_set_player_model(id, const szModel[]=""); + +/** + * Sets a player skin. Omit the second parameter to return to default + * + * @note The skin does not revert on death, teamswitch, gestation, etc. + * + * @param id The player id to change. + * @param skin The skin number to change to. + * @noreturn + */ +native ns_set_player_skin(id, skin=-1); + +/** + * Sets a player body. Omit the second parameter to return to default + * + * @note The body does not revert on death, teamswitch, gestation, etc. + * + * @param id The player id to change. + * @param body The body number to change to. + * @noreturn + */ +native ns_set_player_body(id, body=-1); + +/** + * Set this to modify the player's speed by a certain amount. + * + * @note The speed does not revert on death, teamswitch, gestation, etc. + * + * @param id The player id to change. + * @param speedchange The speed to modify the player speed by. Set to 0 to revert to default speed. + * @noreturn + */ +native ns_set_speedchange(id, speedchange=0); + +/** + * Returns a client's current speed modifier. + * + * @param id The client id to check. + * @return The module's current speed modifier for the client. + */ +native ns_get_speedchange(id); + +/** + * Returns a client's maxspeed before the speed change modifier is factored in. + * + * @param id The client id to check. + * @return The maxspeed for the client. + */ +native ns_get_maxspeed(id); + +/* Returns whether or not this mask is set from the entity's iuser4 field. Use the "mask" enum for reference. */ +native ns_get_mask(id,mask); + +/* Sets or removes the mask from the entity's iuser4 field. Set "value" to 1 to turn the mask on, 0 to turn it off. */ +native ns_set_mask(id,mask,value); + +/* Returns built/unbuilt structures. + If: + builtOnly is 1 (default): + Only fully built structures are counted. + builtOnly is 0: + Any structure meeting the classname is counted. + + Number is 0 (default): + The total number of matching structures is returned. + Number is any other value: + The index of the #th matching structure is returned. +*/ +native ns_get_build(const classname[],builtOnly=1,Number=0); + +/* Returns if the player has the weapon or not in their pev->weapons field. + set "setweapon" to 0 to turn the bit off, set to 1 to turn it on. Or omit it to just return the value. */ +native ns_has_weapon(id,weapon,setweapon=-1); + +/* Gets spawn point for specified team (type). + If: + Team is equal to 0: + Ready room spawns are returned. + Team is greater than 0: + Spawns for the team are returned. + + Number is equal to 0: + Total number of spawns is returned. + Number is greater than 0: + The location of the specified spawn is returned. +*/ +native ns_get_spawn(team,number=0,Float:ret[3]); + +/* Returns the class of the player. Look in the classes enum in ns_const.inc for the value's meaning. */ +native ns_get_class(id); + +/** + * Gets the player's jetpack fuel reserve. + * + * @param id The player to get fuel from. + * @return The amount of fuel in the player's reserve. (0.0 through 100.0) + */ +native Float:ns_get_jpfuel(id); + +/** + * Sets the player's jetpack fuel reserve. + * + * @param id The player to set fuel. + * @param fuel The amount of fuel to set, as a percentage (0.0 through 100.0) + * @noreturn + */ +native ns_set_jpfuel(id, Float:fuel); + +/** + * Adds to the player's jetpack fuel reserve. + * + * @param id The player to add fuel to. + * @param amount The amount of fuel to add, as a percentage (0.0 through 100.0) + * @return The new amount of fuel in the player's reserve. (0.0 through 100.0) + */ +native Float:ns_add_jpfuel(id, Float:amount); + +/** + * Gets the player's energy percentage. + * + * @param id The player to get the energy from. + * @return The amount of energy the player has (0.0 through 100.0) + */ +native Float:ns_get_energy(id); + +/** + * Sets the player's energy percentage. + * + * @param id The player to set the energy on. + * @param energy The amount of energy to set (0.0 through 100.0) + * @noreturn + */ +native ns_set_energy(id, Float:energy); + +/** + * Adds to the player's energy percentage. + * + * @param id The player to add the energy to. + * @param amount The amount of energy to add to the player. + * @return The new amount of energy the player has (0.0 through 100.0) + */ +native Float:ns_add_energy(id, Float:amount); + + +/** + * Returns a player's resources. + * + * @note This is only for alien players. + * @param id The id of the player to check. + * @return Amount of resources this player has. + */ +native Float:ns_get_res(id); + +/** + * Sets a player's resources. + * + * @note This is only for alien players. + * @param id The id of the player to set. + * @param res Amount of resources to set on this player. + * @noreturn + */ +native ns_set_res(id, Float:res); + +/** + * Adds an amount of resources to the player. + * + * @note This is only for alien players. + * @param id The id of the player to add resources to. + * @param amount The amount to add to the player. + * @return The new amount of resources the player has. + */ +native Float:ns_add_res(id, Float:amount); + +/** + * Returns the team's resources. + * + * @param Team 1 for teama, 2 for teamb. (eg: in MvA maps, 1 is marines, + 2 is aliens. In mvm, 1 is marine1, 2 is marine2) + * @return The amount of resources in this team's resource pool. + */ +native Float:ns_get_teamres(Team); + +/** + * Sets the team's resources in the resource pool. + * + * @note If this is used on an alien team, the resources will be + * distributed between all of the players who need resources. + * @param Team 1 for teama, 2 for teamb. (eg: in MvA maps, 1 is marines, + * 2 is aliens. In mvm, 1 is marine1, 2 is marine2) + * @param value The amount to set the resources to set to. + * @noreturn + */ +native ns_set_teamres(Team, Float:value); + +/** + * Adds to the team's resources in the resource pool. + * + * @note If this is used on an alien team, the resources will be + * distributed between all of the players who need resources. + * @param Team 1 for teama, 2 for teamb. (eg: in MvA maps, 1 is marines, + * 2 is aliens. In mvm, 1 is marine1, 2 is marine2) + * @param value The amount to set the resources to add to the pool + * @return The new amount of resources in the resource pool. + */ +native Float:ns_add_teamres(Team,Float:value); + + +/** + * Returns the player's experience. + * + * @note Combat only. + * @param id The player to get experience value from. + * @return The amount of experience this player has. + */ +native Float:ns_get_exp(id); + +/** + * Sets the player's experience. + * + * @note Combat only. + * @param id The player to set experience value on. + * @param exp The amount of experience this player will have. + * @noreturn + */ +native ns_set_exp(id,Float:exp); + +/** + * Adds to the player's experience. + * + * @note Combat only. + * @param id The player to add experience value to. + * @param value The amount of experience this player will receive. + * @return The new amount of experience this player has. + */ +native Float:ns_add_exp(id, Float:value); + +/** + * Gets the player's points spent count in combat. + * + * @param id The player to check. + * @return The amount of points this player has spent. + */ +native ns_get_points(id); + +/** + * Sets the player's points spent count in combat. + * + * @param id The player to set this on. + * @param points The amount to set this to. + * @noreturn + */ +native ns_set_points(id, points); + +/** + * Adds to the player's points spent count in combat. + * + * @param id The player to add this to. + * @param value The value to add to the points spent. + * @return The new value of the points spent variable. + */ +native ns_add_points(id,points); + +/** + * Gets the damage for this weapon. + * + * @note Use weapon index, not player index! + * @param idWeapon The entity index of the weapon to check. + * @return The damage this weapon does. + */ +native Float:ns_get_weap_dmg(idWeapon); + +/** + * Sets the damage for this weapon. + * + * @note Use weapon index, not player index! + * @param idWeapon The entity index of the weapon to set. + * @param damage The damage to make this weapon cause. + * @noreturn + */ +native ns_set_weap_dmg(idWeapon, Float:damage); + +/** + * Gets the maximum range for this weapon. + * + * @note Use weapon index, not player index! + * @param idWeapon The entity index of the weapon to check. + * @return The maximum range this weapon has. + */ +native Float:ns_get_weap_range(idWeapon); + +/** + * Sets the maximum range for this weapon. + * + * @note Use weapon index, not player index! + * @param idWeapon The entity index of the weapon to set. + * @param range The maximum range this weapon will have. + * @noreturn + */ +native ns_set_weap_range(idWeapon, Float:range); + +/** + * Gets the weapon's clip ammo. + * + * @note Use weapon index, not player index! + * @param idWeapon The weapon to get the clip ammo from. + * @return The amount of ammunition in the weapon's clip. + */ +native ns_get_weap_clip(idWeapon); + +/** + * Sets the weapon's ammo in the clip. + * + * @note Use weapon index, not player index! + * @param idWeapon The weapon to set the clip ammo on. + * @param clipsize The amount of ammunition to set in the weapon's clip. + * @noreturn + */ +native ns_set_weap_clip(idWeapon, clipsize); + +/** + * Gets the player's weapon reserve (backpack ammo) for the specified + * type of weapon. + * + * @note Use player index, not weapon index! + * @param id The player id to check ammo count on. + * @param weapon The weapon type to check ammo count for. + * @return The ammunition count in the player's reserve. + */ +native ns_get_weap_reserve(id,weapon); + +/** + * Sets the player's weapon reserve (backpack ammo) for the specified + * type of weapon. + * + * @note Use player index, not weapon index! + * @param id The player id to set ammo count on. + * @param weapon The weapon type to set ammo count for. + * @param ammo The ammunition count to set. + * @noreturn + */ +native ns_set_weap_reserve(id,weapon,ammo); + +/** + * Gets the player's score. + * + * @note The score from level is automatically factored into the scoreboard in combat. + * @param idPlayer The player to get the score for. + * @return The player's score. + */ +native ns_get_score(idPlayer); + +/** + * Sets the player's score. + * + * @note The score from level is automatically factored into the scoreboard in combat. + * @param idPlayer The player to get the score for. + * @param score What to set the player's score as. + * @noreturn + */ +native ns_set_score(idPlayer, score); + +/* Adds to a player's score + * Returns the new score on success + */ +native ns_add_score(idPlayer,score); + +/* Gets a player's death count. */ +native ns_get_deaths(idPlayer); + +/* Sets a player's death count. */ +native ns_set_deaths(idPlayer,numdeaths); + +/* Adds to a player's death count + * Returns the new death count on success + */ +native ns_add_deaths(idPlayer,numdeaths); + +/* Gets the index of the owner of a structure. -1 for no owner. */ +native ns_get_struct_owner(idStructsure); + +/* Sets the index of the owner of a structure. -1 for no owner. */ +native ns_set_struct_owner(idStructure,indexOwner); + +/* Gets the trait type tied to the hive. Look at the hivetrait enum for the values. */ +native ns_get_hive_trait(idHive); + +/* Sets the trait type tied to the hive. Look at the hivetrait enum for the values. */ +native ns_set_hive_trait(idHive,trait); + +/* Sets the players field of view, set "_fov" to 0.0 (or omit it) to return to normal. FOV change will persist until disconnect unless reset by a plugin */ +native ns_set_fov(idPlayer,Float:_fov=0.0); + +/** + * Give the player an item. + * + * @param id The player to give the item to. + * @param class The map-classname of the entity to give to the player. + * @noreturn + */ +native ns_give_item(id, const class[]); + +/** + * Returns 1 if a player has the hive ability number. + * If ability is 0, it will return the number of active hives. + * + * @param idPlayer The player index to look up. + * @param ability The ability number to check, set to 0 to get number of active hives. + * @return If ability is != 0, returns 1 or 0 depending on if the client has the ability. + * If ability is 0, returns the number of active hives. + */ +native ns_get_hive_ability(idPlayer, ability=0); + +/** + * Triggered whenever a client's pev->team changes. + * + * @param id The id of the client. + * @param newteam The team number of the new team. + * @param oldteam The team number of the old team. + * @noreturn + */ +forward client_changeteam(id, newteam, oldteam); + +/** + * Triggered whenever a client's pev->deadflag changes from >0 to 0. + * + * @param id The id of the client. + * @noreturn + */ +forward client_spawn(id); + +/** + * Calls NS's private damage routine on the victim entity. + * + * @deprecated + * @note This is provided for backwards compatibility with peachy's module. + * It is suggested to use hamsandwich for this action instead. + * + * @param IDVictim The victim that is taking the damage. + * @param IDInflictor The entity that is causing the damage (weapon, etc). + * @param IDAttacker The attacker who is triggering the damage (person shooting). + * @param Damage The amount of damage being done. + * @param DamageType The damage type being done (bitmask). + */ +native ns_takedamage(IDVictim, IDInflictor, IDAttacker, Float:Damage, DamageType); + +/** + * Attempts to unstick a player. + * + * @param id Player to unstick. + * @param StartDistance Distance to start from the player to check for a new location. + * @param MaxAttempts How many attempts to try to find a new spot before giving up. + * @return 1 on success, 0 on cannot find a place to move player to, + * -1 on invalid state (stunned/webbed), -2 on invalid class (comm/egg) + * -3 if the player is dead or a spectator, -4 on invalid player, + * -5 if the player is not connected. + */ +native ns_unstick_player(id, StartDistance=32, MaxAttempts=128); + +/** + * Whether or not there is a game in progress. + * + * @return true if a game is in progress, false otherwise. + */ +native bool:ns_round_in_progress(); + +/** + * Called at the approximate time that a round is started. + * + * @noreturn + */ +forward round_start(); + +/** + * Called immediately when a round ends + * + * @param roundtime The length of the round in seconds. + * @noreturn + */ +forward round_end(Float:roundtime); + +forward map_reset(isload); + +native ns_get_weapon(idPlayer,weaponid,&weapontype=0); + +/* Returns the location name of the provided x/y position + * (z origin is ignored; can't have location over location) + * - + * Note that as of NS 3.2 beta 2, on the following maps + * the returned string should be passed through ns_lookup_title + * to be human readable: + * ns_bast, ns_hera, ns_nothing, ns_tanith, + * ns_nancy, ns_caged, ns_eclipse, ns_veil + * + * Passing the 5th parameter as non zero will auto look up + * the title if it exists. + */ +native ns_get_locationname(Float:x, Float:y, name[], len, titlelookup=0); + +/* Looks up a key from titles.txt + * Returns -1 if the key is not found + * Otherwise it returns the length of the output + */ +native ns_lookup_title(const KeyName[], Output[], length); + +/* Forces the structure to fully build + * Removes the ghost state from marine structures. + * Do not use this on hives! It wont work. + */ +native ns_build_structure(idStructure); + +/* Forces the structure to begin recycling + * Passing an index other than a marine structure will + * have undefined results! + * - + * Note: This calls a private NS function! + * Be careful when using this! + */ +native ns_recycle(idStructure); + +/* Forces the weldable to trigger + * Passing an index other than a weldable + * will have undefined results! + * - + * NS renames func_weldable to avhweldable + * at map load. + * - + * Note: This calls a private NS function! + * Be careful when using this! + */ +native ns_finish_weldable(idWeldable); + +/* Gets the total time needed to weld this + * func_weldable shut. + * Note: NS renames "func_weldable"s to "avhweldable"s + * at run time! + */ +native Float:ns_get_weld_time(idWeldable); + +/* Sets the total time needed to weld this + * func_weldable shut. + */ +native ns_set_weld_time(idWeldable,Float:value); + +/* Adds to the weldable's time required to open. + * Returns the new required time on success. + * Note this native clamps the low value to 0. + */ +native Float:ns_add_weld_time(idWeldable,Float:value); + +/* Gets the total time this func_weldable + * has been welded. + */ +native Float:ns_get_weld_done(idWeldable); + +/* Sets the total time this func_weldable + * has been welded. + */ +native ns_set_weld_done(idWeldable,Float:value); + +/* Adds to the total time this func_weldable + * has been welded. Returns the new value. + * Note this native clamps the low value to 0.0 + */ +native Float:ns_add_weld_done(idWeldable,Float:value); + +/* Gets/sets/adds to the energy pool of this observatory. */ +native Float:ns_get_obs_energy(idObs); +native ns_set_obs_energy(idObs,Float:value); +native Float:ns_add_obs_energy(idObs,Float:value); + +/** + * Removes an upgrade from the player's bought and active upgrade lists. + * This will not refund the points spent on the upgrade, nor will it + * immediately strip the upgrade if the player is alive. Rather, it will + * make it so the player no longer receives the upgrade on spawn. + * + * @note This only works in combat. + * @params idPlayer The player index to change upgrades for. + * @params ugprade The impulse number for the upgrade to strip. + * @return 2 for upgrade removed from player's bought and active list. + * 1 for upgrade removed from player's bought list only. + * 3 for upgrade removed from player's active list only (shouldn't happen, just incase.) + * 0 for the player didn't have the upgrade in either list. + */ +native ns_remove_upgrade(idPlayer, upgrade); + +/** + * Particle system natives + * - + * The particle system emulates a map-based custom particle system. + * Familiarity with the keyvalues from the map-based particle systems + * is recommended! You will be lost otherwise! + * - + * prsearle's NSPEdit is also recommended for designing the systems: + * http://homepage.ntlworld.com/pr.searle/NSPSEdit/NSPSEdit.html + */ + +/* Creates a handle to the a particle system to configure + * - + * Note! this is not a particle system you can pass to + * ns_fire_ps()! + */ +native RawPS:ns_create_ps(); + +/* Sets the name of the particle system. + * - + * This is used for things like ns_get_ps_id() + * and through calling another particle system + * through the "ps_to_gen" field + */ +native ns_set_ps_name(RawPS:system, const name[]); + +/* Sets the sprite to use for the particle system + * - + * You do NOT have to precache the sprite, BUT + * the sprite must obviously be on the client to + * display. + */ +native ns_set_ps_sprite(RawPS:system, const sprite[]); + +/* Finalizes the particle system. Do not configure it after this. + * A usable particle system handle is returned. + */ +native Particle:ns_spawn_ps(RawPS:system); + +/* Draws a particle system at the given origin (and angles) + * Flags are the FEV_* defines from hlsdk_const.inc + * Only use handles returned by ns_spawn_ps or ns_get_ps_id here! + */ +native ns_fire_ps(Particle:system,const Float:origin[3],const Float:angles[3]={0.0,0.0,0.0}, flags=0); + +/* Looks up a particle system by name + * Returns a usable particle system handle. + */ +native Particle:ns_get_ps_id(const Name[]); + +/* The following are the parameters for configuring the + * particle system. Look through the fgd and NSPSEdit + * for details! + */ +native ns_set_ps_genrate(RawPS:system, genrate); +native ns_set_ps_genshape(RawPS:system, NSPS_GenShape:genshape); +native ns_set_ps_genshape_params(RawPS:system, const params[]); +native ns_set_ps_spriteframes(RawPS:system, spriteframes); +native ns_set_ps_numparticles(RawPS:system, numparticles); +native ns_set_ps_size(RawPS:system, Float:size); +native ns_set_ps_vel_params(RawPS:system, const params[]); +native ns_set_ps_vel_shape(RawPS:system, NSPS_VelShape:shape); +native ns_set_ps_sys_life(RawPS:system, Float:lifetime); +native ns_set_ps_particle_life(RawPS:system, Float:lifetime); +native ns_set_ps_rendermode(RawPS:system, NSPS_RenderMode:rendermode); +native ns_set_ps_to_gen(RawPS:system, const name[]); +native ns_set_ps_anim_speed(RawPS:system, speed); +native ns_set_ps_spawn_flags(RawPS:system, NSPS_Flags:flags); +native ns_set_ps_base_color(RawPS:system, const colors[]); +native ns_set_ps_scale(RawPS:system, Float:scale); +native ns_set_ps_max_alpha(RawPS:system, Float:maxalpha); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns2amx.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns2amx.inc new file mode 100644 index 0000000..c85823b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns2amx.inc @@ -0,0 +1,263 @@ +/* NS2AMX Utility backwards compatibility +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _ns2amx_included + #endinput +#endif +#define _ns2amx_included + +#include <engine> // various engine calls +#include <fakemeta> // pev/engfunc/dllfunc/various calls which rely on engfunc/dllfunc +#include <ns> // ns specifics + +stock is_entity(id) + return is_valid_ent(id); + +/* The end of the native is buffered incase the plugin is including an NS_VERSION (no longer supported), ignore it */ +stock get_build(classname[], value, number=0,any:...) + return ns_get_build(classname, value, number); + +stock get_private_i(index, offset, linuxdiff=5) + return get_pdata_int(index, offset, linuxdiff); + +stock set_private_i(index, offset, value, linuxdiff=5) +{ + return set_pdata_int(index, offset, value, linuxdiff); +} + +stock Float:get_private_f(index, offset, linuxdiff=5) +{ + return get_pdata_float(index, offset, linuxdiff); +} + +stock set_private_f(index, offset, Float:value, linuxdiff=5) +{ + return set_pdata_float(index, offset, value, linuxdiff); +} + +stock make_string(value[]) + return engfunc(EngFunc_AllocString,value); + +stock string(value, ret[]) +{ + new szString[128]; + engfunc(EngFunc_SzFromIndex,value,szString,127); + copy(ret,127,szString); +} + +stock gpgobals_time() + return floatround(halflife_time()); + +stock Float:get_range(ida, idb) + return entity_range(ida, idb); + +stock supercede() + return 0; + +stock register_clientkill() + return 0; + +stock register_changelvl() + return 0; + +stock register_msgblock(msgName[]) + return set_msg_block(get_user_msgid(msgName), BLOCK_SET); + +stock register_msgedit(msgName[], cmd[]) + return register_message(get_user_msgid(msgName), cmd); + +stock register_playback(event, cmd[]) + return 0; + +stock get_spawn(type, number=0, Float:ret[3]) + return ns_get_spawn(type, number, ret); + +stock has_weapon(index, weapon, setweapon=-1) + return ns_has_weapon(index, weapon, setweapon); + +stock gpglobals_v(type, Float:ret[3]) +{ + new v_type=0; + switch (type) + { + case 1: + v_type = GL_v_forward; + case 2: + v_type = GL_v_right; + case 3: + v_type = GL_v_up; + } + if (!v_type) + return 0; + return get_global_vector(v_type, ret); +} + +stock pev_i(_index,_field) + return pev(_index,_field); + +stock set_pev_i(_index, _field, _val) + return set_pev(_index,_field,_val); + +stock Float:pev_f(_index,_field) +{ + new Float:f; + pev(_index,_field,f); + return f; +} +stock set_pev_f(_index,_field,Float:_val) + return set_pev(_index,_field,_val); + + +stock msg_args() + return get_msg_args(); + +stock Float:msg_loc(vec) +{ + new Float:Ret[3]; + get_msg_origin(Ret); + if (vec < 0 || vec > 3) + return float(0); + else + return Ret[vec]; + + return 0.0; // make compiler happy! +} + +stock msg_dest() + return 0; + +stock msg_type() + return 0; + +stock msg_name() + return 0; + +stock msg_set_s(number, value[]) + return set_msg_arg_string(number, value); + +stock msg_set_f(number, Float:value) + return set_msg_arg_float(number, get_msg_argtype(number), value); + +stock msg_set_i(number, value) + return set_msg_arg_int(number, get_msg_argtype(number), value); + +stock msg_data_type(value) + return get_msg_argtype(value); + +stock msg_strdata(value) + return 0; + +stock msg_data(value, ...) +{ + return (0*value); +} + +stock get_filename(szFile[], len=-1) +{ + new name[16], version[16], author[16], status[16]; + new res = get_plugin(0, szFile, len, name, 16, version, 16, author, 16, status, 16); + return res; +} + +stock get_speedchange(id) + return ns_get_speedchange(id); + +stock set_speedchange(id, speed) + return ns_set_speedchange(id,speed); + +stock get_maxspeed(id) + return ns_get_maxspeed(id); + +stock set_player_model(id, model[]="") + return ns_set_player_model(id, model); + +stock set_player_skin(id, skin=-1) + return ns_set_player_skin(id, skin); + +stock set_player_body(id, body=-1) + return ns_set_player_body(id, body); + +stock ns2amx_version() + return 0; + +stock set_kvhandled() + return 0; + +stock ns2amx_getammo(id,Weapon) + return ns_get_weap_reserve(id, Weapon); + +stock ns2amx_setammo(id,Weapon,Value) + return ns_set_weap_reserve(id, Weapon, Value); + +stock ns2amx_giveitem(id,svClassname[]) + return ns_give_item(id, svClassname); + +stock ns2amx_moveto(idMoved,idDest) +{ + new Float:origin[3]; + entity_get_vector(idDest, EV_VEC_origin,origin); + entity_set_origin(idMoved, origin); + return 1; +} +/* Returns whether or not the player has the MASK_DIGESTING flag set. */ +stock ns2amx_isdigesting(id) + return ns_get_mask(id,MASK_DIGESTING); + +/* Returns total # of active hives. */ +stock ns2amx_gethives() + return ns_get_build("team_hive",1); + +/* Returns 1 if the two entities are within the given range. */ +stock ns2amx_inrange(ida,idb,range) +{ + if (entity_range(ida,idb) <= range) + return 1; + return 0; +} + +stock ns2amx_nspopup(id,svMessage[190]) { + new szMessage[180]; + copy(szMessage,179,svMessage); + return ns_popup(id, szMessage); +} + +stock ns2amx_setres(id,value) + return ns_set_res(id, float(value)); + +stock ns2amx_getenergy(id) + return floatround(ns_get_energy(id)); + +stock ns2amx_setenergy(id,energy) + return ns_set_energy(id, float(energy)); + +stock ns2amx_getjpfuel(id) + return floatround(ns_get_jpfuel(id)); + +stock ns2amx_setjpfuel(id,fuel) + return ns_set_jpfuel(id, float(fuel)); + +stock get_mask(id,mask) + return ns_get_mask(id, mask); + +stock set_mask(id,mask,value) + return ns_set_mask(id,mask,value); + +stock get_special(id,mask) +{ + if (pev(id,pev_iuser4) & mask) + return 1; + return 0; +} + +stock get_res(id) + return floatround(ns_get_res(id)); + +stock get_class(id) + return ns_get_class(id); + +stock is_combat() + return ns_is_combat(); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns_const.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns_const.inc new file mode 100644 index 0000000..d018250 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/ns_const.inc @@ -0,0 +1,192 @@ +/* NS module constants + * + * by the AMX Mod X Development Team + * Most definitions graciously provided by Flayra + * + * This file is provided as is (no warranties). + */ + + +#if defined NS_CONST_INC + #endinput +#endif +#define NS_CONST_INC + + +enum NSGameplay +{ + NSGame_CantTell, /**< It is too soon to tell (can't find avhgameplay + entity or it doesn't have private data) */ + + NSGame_MarineVAlien, /**< Marine vs Aliens (standard) gameplay */ + NSGame_MarineVMarine, /**< Marine vs Marine */ + NSGame_AlienVAlien, /**< Alien vs Alien */ + + NSGame_Unknown, /**< Can find the gameplay entity, but can't + determine gameplay type. */ +}; + +// entity pev->iuser4 fields +enum { + MASK_NONE = 0, + MASK_SIGHTED = 1, + MASK_DETECTED = 2, + MASK_BUILDABLE = 4, + MASK_BASEBUILD0 = 8, // Base build slot #0 + MASK_WEAPONS1 = 8, // Marine weapons 1 + MASK_CARAPACE = 8, // Alien carapace + MASK_WEAPONS2 = 16, // Marines weapons 2 + MASK_REGENERATION = 16, // Alien regeneration + MASK_BASEBUILD1 = 16, // Base build slot #1 + MASK_WEAPONS3 = 32, // Marine weapons 3 + MASK_REDEMPTION = 32, // Alien redemption + MASK_BASEBUILD2 = 32, // Base build slot #2 + MASK_ARMOR1 = 64, // Marine armor 1 + MASK_CELERITY = 64, // Alien celerity + MASK_BASEBUILD3 = 64, // Base build slot #3 + MASK_ARMOR2 = 128, // Marine armor 2 + MASK_ADRENALINE = 128, // Alien adrenaline + MASK_BASEBUILD4 = 128, // Base build slot #4 + MASK_ARMOR3 = 256, // Marine armor 3 + MASK_SILENCE = 256, // Alien silence + MASK_BASEBUILD5 = 256, // Base build slot #5 + MASK_JETPACK = 512, // Marine jetpacks + MASK_CLOAKING = 512, // Alien cloaking + MASK_BASEBUILD6 = 512, // Base build slot #6 + MASK_FOCUS = 1024, // Alien focus + MASK_MOTION = 1024, // Marine motion tracking + MASK_BASEBUILD7 = 1024, // Base build slot #7 + MASK_SCENTOFFEAR = 2048, // Alien scent of fear + MASK_DEFENSE2 = 4096, // Defense level 2 + MASK_DEFENSE3 = 8192, // Defense level 3 + MASK_ELECTRICITY = 8192, // Electricy + MASK_MOVEMENT2 = 16384, // Movement level 2, + MASK_MOVEMENT3 = 32768, // Movement level 3 + MASK_HEAVYARMOR = 32768, // Marine heavy armor + MASK_SENSORY2 = 65536, // Sensory level 2 + MASK_SENSORY3 = 131072, // Sensory level 3 + MASK_ALIEN_MOVEMENT = 262144, // Onos is charging + MASK_WALLSTICKING = 524288, // Flag for wall-sticking + MASK_PRIMALSCREAM = 1048576, // Alien is in range of active primal scream + MASK_UMBRA = 2097152, // In umbra + MASK_DIGESTING = 4194304, // When set on a visible player, player is digesting. When set on invisible player, player is being digested + MASK_RECYCLING = 8388608, // Building is recycling + MASK_TOPDOWN = 16777216, // Commander view + MASK_PLAYER_STUNNED = 33554432, // Player has been stunned by stomp + MASK_ENSNARED = 67108864, // Webbed + MASK_ALIEN_EMBRYO = 134217728, // Gestating + MASK_SELECTABLE = 268435456, // ??? + MASK_PARASITED = 536870912, // Parasite flag + MASK_SENSORY_NEARBY = 1073741824 // Sensory chamber in range +}; + + +enum { + CLASS_UNKNOWN = 0, + CLASS_SKULK, + CLASS_GORGE, + CLASS_LERK, + CLASS_FADE, + CLASS_ONOS, + CLASS_MARINE, + CLASS_JETPACK, + CLASS_HEAVY, + CLASS_COMMANDER, + CLASS_GESTATE, + CLASS_DEAD, + CLASS_NOTEAM +}; + +enum { + WEAPON_NONE = 0, + WEAPON_CLAWS, + WEAPON_SPIT, + WEAPON_SPORES, + WEAPON_SPIKE, + WEAPON_BITE, + WEAPON_BITE2, + WEAPON_SWIPE, + WEAPON_WEBSPINNER, + WEAPON_METABOLIZE, + WEAPON_PARASITE, + WEAPON_BLINK, + WEAPON_DIVINEWIND, + WEAPON_KNIFE, + WEAPON_PISTOL, + WEAPON_LMG, + WEAPON_SHOTGUN, + WEAPON_HMG, + WEAPON_WELDER, + WEAPON_MINE, + WEAPON_GRENADE_GUN, + WEAPON_LEAP, + WEAPON_CHARGE, + WEAPON_UMBRA, + WEAPON_PRIMALSCREAM, + WEAPON_BILEBOMB, + WEAPON_ACIDROCKET, + WEAPON_HEALINGSPRAY, + WEAPON_GRENADE, + WEAPON_STOMP, + WEAPON_DEVOUR, + WEAPON_MAX +}; + +enum { + HIVETRAIT_NONE = 0, + HIVETRAIT_DC = 92, + HIVETRAIT_SC = 93, + HIVETRAIT_MC = 94 +}; + +enum NSPS_VelShape +{ + NSPS_VS_POINT = 1, + NSPS_VS_BOX, + NSPS_VS_SPHERE, + NSPS_VS_BLOB +}; + +/* Genshape used in ns_set_ps_genshape + * NOTE: The following are in the ns.ps file but + * are not listed in the .fgd file. Use + * at your own risk! + * Line, Triangle, Plane, Cylinder, + * Cone, Disc, Rectangle and None + */ +enum NSPS_GenShape +{ + NSPS_GS_POINT = 0, + NSPS_GS_LINE, + NSPS_GS_TRIANGLE, + NSPS_GS_PLANE, + NSPS_GS_BOX, + NSPS_GS_CYLINDER, + NSPS_GS_CONE, + NSPS_GS_BLOB, + NSPS_GS_DISC, + NSPS_GS_RECTANGLE, + NSPS_GS_NONE +}; +enum NSPS_RenderMode +{ + NSPS_R_NORMAL = 0, + NSPS_R_TRANSCOLOR, + NSPS_R_TRANSTEXTURE, + NSPS_R_GLOW, + NSPS_R_TRANSALPHA, + NSPS_R_ADDITIVE +}; +enum NSPS_Flags +{ + NSPS_FL_START_ON = 1, + NSPS_FL_PARTICLE_DENSITY = 2, + NSPS_FL_FADE_IN = 4, + NSPS_FL_FADE_OUT = 8, + NSPS_FL_USE_GRAVITY = 16, + NSPS_FL_USE_TRI = 32, + NSPS_FL_CONSTRAIN_PITCH = 128, + NSPS_FL_COLLIDE = 256, + NSPS_FL_HI_DETAIL = 512, + NSPS_FL_FACE_UP = 1024 +}; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/nvault.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/nvault.inc new file mode 100644 index 0000000..33736f7 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/nvault.inc @@ -0,0 +1,61 @@ +/* nVault functions +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _nvault_included + #endinput +#endif +#define _nvault_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib nvault + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib nvault + #endif +#else + #pragma library nvault +#endif + +/* All timestamps are in UNIX epoch form. */ + +/* Opens a vault by name (such as "myvault") + * Returns a vault id, INVALID_HANDLE otherwise (-1) + */ +native nvault_open(const name[]); + +/* Gets a vault value by returning an int + * setting a byref float or setting a string + maxlength + */ +native nvault_get(vault, const key[], {Float,_}:...); + +/* Looks up a vault value for full information + * Returns 0 if the entry is not found + */ +native nvault_lookup(vault, const key[], value[], maxlen, ×tamp); + +/* Sets a vault value (with current timestamp) */ +native nvault_set(vault, const key[], const value[]); + +/* Sets a permanent vault value (no timestamp) */ +native nvault_pset(vault, const key[], const value[]); + +/* Prunes the vault for entries that are within the given timestamps. + * This will not erase values set with pset + */ +native nvault_prune(vault, start, end); + +/* Closes a vault */ +native nvault_close(vault); + +/* Removes a key from the vault */ +native nvault_remove(vault, const key[]); + +/* "Touches" a key to update its timestamp value. + * If stamp is -1 (default), it will use the current time. + * Like the unix command "touch," it will create an empty key + * if the value does not exist. + */ +native nvault_touch(vault, const key[], timestamp=-1); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/regex.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/regex.inc new file mode 100644 index 0000000..c56cfe6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/regex.inc @@ -0,0 +1,134 @@ +/* Regular Expression API + * (C)2004 by David "BAILOPAN" Anderson + * Licensed under the GNU General Public License. + * No warranties of any kind. + */ + +#if defined _regex_included + #endinput +#endif +#define _regex_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib regex + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib regex + #endif +#else + #pragma library regex +#endif + +enum Regex +{ + REGEX_MATCH_FAIL = -2, + REGEX_PATTERN_FAIL, + REGEX_NO_MATCH, + REGEX_OK +}; + +/** + * Precompile a regular expression. Use this if you intend on using the + * same expression multiple times. Pass the regex handle returned here to + * regex_match_c to check for matches. + * + * @param pattern The regular expression pattern. + * @param errcode Error code encountered, if applicable. + * @param error Error message encountered, if applicable. + * @param maxLen Maximum string length of the error buffer. + * @param flags General flags for the regular expression. + * i = Ignore case + * m = Multilines (affects ^ and $ so that they match + * the start/end of a line rather than matching the + * start/end of the string). + * s = Single line (affects . so that it matches any character, + * even new line characters). + * x = Pattern extension (ignore whitespace and # comments). + * + * @return -1 on error in the pattern, > valid regex handle (> 0) on success. + * + * @note This handle is automatically freed on map change. However, + * if you are completely done with it before then, you should + * call regex_free on this handle. + */ +native Regex:regex_compile(const pattern[], &ret, error[], maxLen, const flags[]=""); + +/** + * Matches a string against a pre-compiled regular expression pattern. + * + * + * @param pattern The regular expression pattern. + * @param string The string to check. + * @param ret Error code, if applicable, or number of results on success. + * + * @return -2 = Matching error (error code is stored in ret) + * 0 = No match. + * >1 = Number of results. + * + * @note You should free the returned handle (with regex_free()) + * when you are done with this pattern. + * + * @note Use the regex handle passed to this function to extract + * matches with regex_substr(). + */ +native regex_match_c(const string[], Regex:pattern, &ret); + +/** + * Matches a string against a regular expression pattern. + * + * @note If you intend on using the same regular expression pattern + * multiple times, consider using regex_compile and regex_match_c + * instead of making this function reparse the expression each time. + * + * @param string The string to check. + * @param pattern The regular expression pattern. + * @param ret Error code, or result state of the match. + * @param error Error message, if applicable. + * @param maxLen Maximum length of the error buffer. + * @param flags General flags for the regular expression. + * i = Ignore case + * m = Multilines (affects ^ and $ so that they match + * the start/end of a line rather than matching the + * start/end of the string). + * s = Single line (affects . so that it matches any character, + * even new line characters). + * x = Pattern extension (ignore whitespace and # comments). + * + * @return -2 = Matching error (error code is stored in ret) + * -1 = Error in pattern (error message and offset # in error and ret) + * 0 = No match. + * >1 = Handle for getting more information (via regex_substr) + * + * @note Flags only exist in amxmodx 1.8 and later. + * @note You should free the returned handle (with regex_free()) + * when you are done extracting all of the substrings. + */ +native Regex:regex_match(const string[], const pattern[], &ret, error[], maxLen, const flags[] = ""); + +/** + * Returns a matched substring from a regex handle. + * Substring ids start at 0 and end at ret-1, where ret is from the corresponding + * regex_match or regex_match_c function call. + * + * @param id The regex handle to extract data from. + * @param str_id The index of the expression to get - starts at 0, and ends at ret - 1. + * @param buffer The buffer to set to the matching substring. + * @param maxLen The maximum string length of the buffer. + * + */ +native regex_substr(Regex:id, str_id, buffer[], maxLen); + +/** + * Frees the memory associated with a regex result, and sets the handle to 0. + * This must be called on all results from regex_match() when you are done extracting + * the results with regex_substr(). + * The results of regex_compile() (and subsequently, regex_match_c()) only need to be freed + * when you are done using the pattern. + * + * + * @param id The regex handle to free. + * + * @noreturn + * + * @note Do not use the handle again after freeing it! + */ +native regex_free(&Regex:id); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sockets.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sockets.inc new file mode 100644 index 0000000..7eda92b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sockets.inc @@ -0,0 +1,64 @@ +/* + * + * AMX Mod X Module + * Basic Socket Functions + * + * Codebase from Ivan, -g-s-ivan@web.de (AMX 0.9.3) + * Modification by Olaf Reusch, kenterfie@hlsw.de (AMXX 0.16, AMX 0.96) + * + */ + +#if defined _socket_included + #endinput +#endif +#define _socket_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib sockets + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib sockets + #endif +#else + #pragma library socket +#endif + +// Use SOCKET_TCP for TCP Socket connections + +#define SOCKET_TCP 1 + +// Use SOCKET_UDP for UDP Socket connections + +#define SOCKET_UDP 2 + +/* Opens a new connection to hostname:port via protocol (either SOCKET_TCP or SOCKET_UDP), + * returns a socket (positive) or negative or zero on error. + * States of error: + * 0 - no error + * 1 - error while creating socket + * 2 - couldn't resolve hostname + * 3 - couldn't connect to given hostname:port +*/ + +native socket_open(const _hostname[], _port, _protocol = SOCKET_TCP, &_error); + +/* Closes a Socket */ + +native socket_close(_socket); + +/* Recieves Data to string with the given length */ + +native socket_recv(_socket, _data[], _length); + +/* Sends data to the Socket */ + +native socket_send(_socket, const _data[], _length); + +/* Same as socket_send but Data can contain null bytes */ + +native socket_send2(_socket, const _data[], _length); + +/* This function will return true if the state (buffer content) have changed within the last recieve or +* the timeout, where timeout is a value in µSeconds, (1 sec =1000000 µsec). +* Use to check if new data is in your socket. */ + +native socket_change(_socket, _timeout=100000); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sorting.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sorting.inc new file mode 100644 index 0000000..6174d81 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sorting.inc @@ -0,0 +1,76 @@ +/* Sorting functions. + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + * + * All sort functions are based off the qsort() function from the + * C standard library, which uses the Quick Sort algorithm. + * For more info, see: http://linux.wku.edu/~lamonml/algor/sort/sort.html + */ + +#if defined _sorting_included + #endinput +#endif +#define _sorting_included + +enum SortMethod +{ + Sort_Ascending = 0, + Sort_Descending = 1, +}; + +/** + * Basic sorting functions below. + */ + +native SortIntegers(array[], array_size, SortMethod:order = Sort_Ascending); + +native SortFloats(Float:array[], array_size, SortMethod:order = Sort_Ascending); + +native SortStrings(array[][], num_strings, SortMethod:order = Sort_Ascending); + +/** + * Custom sorting functions below. + */ + +/** + * Sorts a custom 1D array. You must pass in a comparison function. + * The sorting algorithm then uses your comparison function to sort the data. + * The function is called in the following manner: + * + * public MySortFunc(elem1, elem2, const array[], const data[], data_size) + * + * elem1, elem2 - Current element pair being compared + * array[] - Array in its current mid-sorted state. + * data[] - Extra data array you passed to the sort func. + * data_size - Size of extra data you passed to the sort func. + * + * Your function should return: + * -1 if elem1 should go before elem2 + * 0 if elem1 and elem2 are equal + * 1 if elem1 should go after elem2 + * Note that the parameters after elem2 are all optional and you do not need to specify them. + */ +native SortCustom1D(array[], array_size, const comparefunc[], data[]="", data_size=0); + + +/** + * Sorts a custom 2D array. + * The sorting algorithm then uses your comparison function to sort the data. + * The function is called in the following manner: + * + * public MySortFunc(const elem1[], const elem2[], const array[], data[], data_size) + * + * elem1[], elem2[] - Current element array pairs being compared + * array[][] - Array in its currently being sorted state. + * data[] - Extra data array you passed to the sort func. + * data_size - Size of extra data you passed to the sort func. + * + * Your function should return: + * -1 if elem1[] should go before elem2[] + * 0 if elem1[] and elem2 are equal[] + * 1 if elem1[] should go after elem2[] + * Note that the parameters after elem2[] are all optional and you do not need to specify them. + */ +native SortCustom2D(array[][], array_size, const comparefunc[], data[]="", data_size=0); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sqlx.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sqlx.inc new file mode 100644 index 0000000..0baf82b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/sqlx.inc @@ -0,0 +1,383 @@ +/** + * SQLX - Newer version of SQL stuff + */ + +#if defined _sqlx_included + #endinput +#endif +#define _sqlx_included + +//eh.. +#define SQL_NumRows SQL_NumResults + +#if AMXX_VERSION_NUM >= 175 + #pragma reqclass sqlx + #if !defined AMXMODX_NOAUTOLOAD + #pragma defclasslib sqlx mysql + #endif //!defined AMXMODX_NOAUTOLOAD +#endif //AMXX_VERSION_NUM + +enum Handle +{ + Empty_Handle +}; + +/** + * Creates a connection information tuple. + * This tuple must be passed into connection routines. + * Freeing the tuple is not necessary, but is a good idea if you + * create many of them. You can cache these handles globally. + * !!NOTE!! I have seen most people think that this connects to the DB. + * Nowhere does it say this, and in fact it does not. It only caches + * the connection information, the host/user/pass/etc. + * + * The optional timeout parameter specifies how long connections should wait before + * giving up. If 0, the default (which is undefined) is used. + * + */ +native Handle:SQL_MakeDbTuple(const host[], const user[], const pass[], const db[], timeout=0); + + +/** + * Frees an SQL handle. + * The handle can be to anything (tuple, connection, query, results, etc). + * If you free a database connection, it closes the connection as well. + */ +native SQL_FreeHandle(Handle:h); + + +/** + * Opens a database connection. + * Returns an SQL handle, which must be freed. + * Returns Empty_Handle on failure. + */ +native Handle:SQL_Connect(Handle:cn_tuple, &errcode, error[], maxlength); + + +/** + * Prepares a query. + * The query must always be freed. + * This does not actually do the query! + */ +native Handle:SQL_PrepareQuery(Handle:db, const fmt[], any:...); + + +/** + * Back-quotes characters in a string for database querying. + * Note: The buffer's maximum size should be 2*strlen(string) to catch + * all scenarios. + * + * @param db Database handle for localization, or Empty_Handle + * for when a handle is not available. + * @param buffer Buffer to copy to. + * @param buflen Maximum size of the buffer. + * @param string String to backquote (should not overlap buffer). + * @return Length of new string, or -1 on failure. + */ +native SQL_QuoteString(Handle:db, buffer[], buflen, const string[]); + +/** + * Back-quotes characters in a string for database querying. + * Note: The buffer's maximum size should be 2*strlen(string) to catch + * all scenarios. + * + * @param db Database handle for localization, or Empty_Handle + * for when a handle is not available. + * @param buffer Buffer to copy to. + * @param buflen Maximum size of the buffer. + * @param fmt Format of string to backquote (should not overlap buffer). + * @param ... Format arguments. + * @return Length of new string, or -1 on failure. + */ +native SQL_QuoteStringFmt(Handle:db, buffer[], buflen, const fmt[], any:...); + + +#define TQUERY_CONNECT_FAILED -2 +#define TQUERY_QUERY_FAILED -1 +#define TQUERY_SUCCESS 0 +/** + * Prepares and executes a threaded query. + * This will not interrupt gameplay in the event of a poor/lossed + * connection, however, the interface is more complicated and + * asynchronous. Furthermore, a new connection/disconnection is + * made for each query to simplify driver support. + * The handler should look like: + * + * @param failstate - One of the three TQUERY_ defines. + * @param query - Handle to the query, do not free it. + * @param error - An error message, if any. + * @param errnum - An error code, if any. + * @param data - Data array you passed in. + * @param size - Size of the data array you passed in. + * @param queuetime - Amount of gametime that passed while the query was resolving. + * + * public QueryHandler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime) + * + * Note! The handle you pass in is a DB Tuple, NOT an active connection! + * Note! The handle does not need to be freed. + * Also note: This function is not guaranteed to be in another thread + * (in fact - it's not). You're seeing data "after the fact", + * and as such to execute another query you should run + * SQL_ThreadQuery again with new data. + */ +native SQL_ThreadQuery(Handle:db_tuple, const handler[], const query[], const data[]="", dataSize=0); + + +/** + * Executes a query. + * Returns 1 if the query succeeded. + * Returns 0 if the query failed. + * NOTE: You can call this multiple times as long as its parent + * connection is kept open. Each time the result set will be freed + * from the previous call. + */ +native SQL_Execute(Handle:query); + +/** + * Gets information about a failed query error. + * Returns the errorcode. + */ +native SQL_QueryError(Handle:query, error[], maxlength); + + +/** + * Returns 1 if there are more results to be read, + * 0 otherwise. + */ +native SQL_MoreResults(Handle:query); + + +/** + * Tells whether a specific column in the current row + * is NULL or not. + */ +native SQL_IsNull(Handle:query, column); + +/** + * Retrieves the current result. + * A successful query starts at the first result, + * so you should not call SQL_NextRow() first. + * Passing no extra params - return int + * Passing one extra param - return float in 1st extra arg + * Passing two extra params - return string in 1st arg, max length in 2nd + * Example: + * new num = SQL_ReadResult(query, 0) + * new Float:num2 + * new str[32] + * SQL_ReadResult(query, 1, num2) + * SQL_ReadResult(query, 2, str, 31) + */ +native SQL_ReadResult(Handle:query, column, {Float,_}:...); + + +/** + * Advances to the next result (return value should be ignored). + */ +native SQL_NextRow(Handle:query); + + +/** + * Returns the number of affected rows. + */ +native SQL_AffectedRows(Handle:query); + + +/** + * Returns the number of rows total. + */ +native SQL_NumResults(Handle:query); + + +/** + * Returns the number of columns total. + */ +native SQL_NumColumns(Handle:query); + + +/** + * Returns the name of a column. + * Errors on a bad field number. + */ +native SQL_FieldNumToName(Handle:query, num, name[], maxlength); + + +/** + * Returns the number of a named column, or -1 if not found. + */ +native SQL_FieldNameToNum(Handle:query, const name[]); + + +/** + * Rewinds a result set to the first row. + */ +native SQL_Rewind(Handle:query); + + +/** + * Returns the insert id of the last INSERT query. + * Returns 0 otherwise. + */ +native SQL_GetInsertId(Handle:query); + + +/** + * Returns which driver this plugin is currently bound to. + */ +native SQL_GetAffinity(driver[], maxlen); + +/** + * Sets driver affinity. You can use this to force a particular + * driver implementation. This will automatically change all SQL + * natives in your plugin to be "bound" to the module in question. + * If no such module is found, it will return 0. This isn't necessarily bad - + * the user might have typed the wrong driver. Unless your plugin is built + * to handle different driver types at once, you should let this error pass. + * Note, that using this while you have open handles to another database + * type will cause problems. I.e., you cannot open a handle, switch + * affinity, then close the handle with a different driver. + * Switching affinity is an O(n*m) operation, where n is the number of + * SQL natives and m is the number of used natives in total. + * Intuitive programmers will note that this causes problems for threaded queries. + * You will have to either force your script to work under one affinity, or to + * pack the affinity type into the query data, check it against the current, then + * set the new affinity if necessary. Then, restore the old for safety. + */ +native SQL_SetAffinity(const driver[]); + +/** + * Returns the original query string that a query handle used. + */ +native SQL_GetQueryString(Handle:query, buffer[], maxlength); + +/** + * For queries which return multiple result sets, this advances to the next + * result set if one is available. Otherwise, the current result set is + * destroyed and will no longer be accessible. + * + * This function will always return false on SQLite, and when using threaded + * queries in MySQL. Nonetheless, it has the same effect of removing the last + * result set. + * + * @param query Query Handle. + * @return True on success, false on failure. + */ +native bool:SQL_NextResultSet(Handle:query); + +/** + * This function can be used to find out if a table in a Sqlite database exists. + * (updated for newer API) + */ +stock bool:sqlite_TableExists(Handle:db, const table[]) +{ + new Handle:query = SQL_PrepareQuery( + db, + "SELECT name FROM sqlite_master WHERE type='table' AND name='%s' LIMIT 1;", + table); + + if (!SQL_Execute(query) || !SQL_NumResults(query)) + { + SQL_FreeHandle(query); + return false; + } + + SQL_FreeHandle(query); + + return true; +} + +/** + * Use this for executing a query where you don't care about the result. + * Returns 0 on failure, 1 on success + */ +stock SQL_SimpleQuery(Handle:db, const query[], error[]="", maxlength=0, &rows=0) +{ + new Handle:hQuery = SQL_PrepareQuery(db, "%s", query); + + if (!SQL_Execute(hQuery)) + { + SQL_QueryError(hQuery, error, maxlength); + SQL_FreeHandle(hQuery); + return 0; + } + + rows = SQL_NumResults(hQuery); + + SQL_FreeHandle(hQuery); + + return 1; +} + +/** + * Use this for executing a query where you don't care about the result. + * Returns 0 on failure, 1 on success + */ +stock SQL_SimpleQueryFmt(Handle:db, error[]="", maxlength=0, &rows=0, const fmt[], any:...) +{ + static query_buf[2048]; + vformat(query_buf, 2047, fmt, 6); + + new Handle:hQuery = SQL_PrepareQuery(db, "%s", query_buf); + + if (!SQL_Execute(hQuery)) + { + SQL_QueryError(hQuery, error, maxlength); + SQL_FreeHandle(hQuery); + return 0; + } + + rows = SQL_NumResults(hQuery); + + SQL_FreeHandle(hQuery); + + return 1; +} + +/** + * Use this for executing a query and not caring about the error. + * Returns -1 on error, >=0 on success (with number of affected rows) + */ +stock SQL_QueryAndIgnore(Handle:db, const queryfmt[], any:...) +{ + static query[4096]; + new Handle:hQuery; + new ret; + + vformat(query, sizeof(query)-1, queryfmt, 3); + + hQuery = SQL_PrepareQuery(db, "%s", query); + + if (SQL_Execute(hQuery)) + { + ret = SQL_AffectedRows(hQuery); + } else { + ret = -1; + } + + SQL_FreeHandle(hQuery); + + return ret; +} + +stock Handle:SQL_MakeStdTuple(timeout = 0) +{ + static host[64], user[32], pass[32], db[128]; + static get_type[12], set_type[12]; + + get_cvar_string("amx_sql_host", host, 63); + get_cvar_string("amx_sql_user", user, 31); + get_cvar_string("amx_sql_pass", pass, 31); + get_cvar_string("amx_sql_type", set_type, 11); + get_cvar_string("amx_sql_db", db, 127); + + SQL_GetAffinity(get_type, 12); + + if (!equali(get_type, set_type)) + { + if (!SQL_SetAffinity(set_type)) + { + log_amx("Failed to set affinity from %s to %s.", get_type, set_type); + } + } + + return SQL_MakeDbTuple(host, user, pass, db, timeout); +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/string.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/string.inc new file mode 100644 index 0000000..7a5674a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/string.inc @@ -0,0 +1,269 @@ +/* Strings manipulation +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _string_included + #endinput +#endif +#define _string_included + +#define charsmax(%1) (sizeof(%1)-1) + +/* Checks if source contains string. On success function +* returns position in source, on failure returns -1. */ +native contain(const source[],const string[]); + +/* Checks if source contains string with case ignoring. On success function +* returns position in source, on failure returns -1. */ +native containi(const source[],const string[]); + +/* Replaces given string to another in given text. */ +native replace(text[], len, const what[], const with[]); + +/* Adds one string to another. Last parameter different from 0, specifies +* how many chars we want to add. Function returns number of all merged chars. */ +native add(dest[],len,const src[],max=0); + +/* Fills string with given format and parameters. + * Function returns number of copied chars. + * Example: format(dest,"Hello %s. You are %d years old","Tom",17). + * If any of your input buffers overlap with the destination buffer, + * format() falls back to a "copy-back" version as of 1.65. This is + * slower, so you should using a source string that is the same as + * the destination. + */ +native format(output[] ,len ,const format[] , any:...); + +/* Same as format(), except does not perform a "copy back" check. + * This means formatex() is faster, but DOES NOT ALLOW this type + * of call: + * formatex(buffer, len, "%s", buffer) + * formatex(buffer, len, buffer, buffer) + * formatex(buffer, len, "%s", buffer[5]) + * This is because the output is directly stored into "buffer", + * rather than copied back at the end. + */ +native formatex(output[] ,len ,const format[] , any:...); + +/* Replacement for format_args. Much faster and %L compatible. + * This works exactly like vsnprintf() from C. + * You must pass in the output buffer and its size, + * the string to format, and the number of the FIRST variable + * argument parameter. For example, for: + * function (a, b, c, ...) + * You would pass 4 (a is 1, b is 2, c is 3, et cetera). + * There is no vformatex(). + */ +native vformat(buffer[], len, const fmt[], vararg); + +/* + * Same as vformat(), except works in normal style dynamic natives. + * Instead of passing the format arg string, you can only pass the + * actual format argument number itself. + * If you pass 0, it will read the format string from an optional + * fifth parameter. + */ +native vdformat(buffer[], len, fmt_arg, vararg, ...); + +/* Gets parameters from function as formated string. */ +native format_args(output[] ,len ,pos = 0); + +/* Converts number to string. */ +native num_to_str(num,string[],len); + +/* Returns converted string to number. */ +native str_to_num(const string[]); + +/* Converts float to string. */ +native float_to_str(Float:fl, string[], len); + +/* Parses a float. */ +native Float:str_to_float(const string[]); + +/* Checks if two strings equal. If len var is set +* then there are only c chars comapred. */ +native equal(const a[],const b[],c=0); + +/* Checks if two strings equal with case ignoring. +* If len var is set then there are only c chars comapred. */ +native equali(const a[],const b[],c=0); + +/* Copies one string to another. By len var +* you may specify max. number of chars to copy. */ +native copy(dest[],len,const src[]); + +/* Copies one string to another until char ch is found. +* By len var you may specify max. number of chars to copy. */ +native copyc(dest[],len,const src[],ch); + +/* Sets string with given character. */ +native setc(src[],len,ch); + +/* Gets parameters from text. +* Example: to split text: "^"This is^" the best year", +* call function like this: parse(text,arg1,len1,arg2,len2,arg3,len3,arg4,len4) +* and you will get: "This is", "the", "best", "year" +* Function returns number of parsed parameters. */ +native parse(const text[], ... ); + +/* Breaks a string into two halves, by token. + See strbreak() for doing this with parameters. + Example: + str1[] = This *is*some text + strtok(str1, left, 24, right, 24, '*') + left will be "This " + Right will be "is*some text" + If you use trimSpaces, all spaces are trimmed from Left. +*/ +native strtok(const text[], Left[], leftLen, Right[], rightLen, token=' ', trimSpaces=0); + + +/* Gets parameters from text one at a time + It breaks a string into the first parameter and the rest of the parameters + (A left side and right side of the string) + Example: to split text: "^"This is^" the best year", + strbreak(text, arg1, len1, arg2, len2) + arg1="This is", arg2=the best year + This is more useful than parse() because you can keep breaking + any number of arguments */ +native strbreak(const text[], Left[], leftLen, Right[], rightLen); + +/* Strips spaces from the beginning and end of a string. */ +native trim(text[]); + +/* Converts all chars in string to lower case. */ +native strtolower(string[]); + +/* Converts all chars in string to upper case. */ +native strtoupper(string[]); + +/* Make a string's first character uppercase */ +native ucfirst(string[]); + +/* Returns true when value is digit. */ +native isdigit(ch); + +/* Returns true when value is letter. */ +native isalpha(ch); + +/* Returns true when value is space. */ +native isspace(ch); + +/* Returns true when value is letter or digit. */ +native isalnum(ch); + +/* Concatenates a string. Maxlength is the total buffer of the destination. */ +native strcat(dest[], const source[], maxlength); + +/* Finds a string in another string. Returns -1 if not found. */ +native strfind(const string[], const sub[], ignorecase=0, pos=0); + +/* Compares two strings with the C function strcmp(). Returns 0 on equal. */ +native strcmp(const string1[], const string2[], ignorecase=0); + +/* Tests if given string contains only digits. Also, returns false for zero-length strings. */ +stock bool:is_str_num(const sString[]) +{ + new i = 0; + + while (sString[i] && isdigit(sString[i])) + ++i; + + return sString[i] == 0 && i != 0; +} + +/* It is basically strbreak but you have a delimiter that is more than one character in length. + You pass the Input string, the Left output, the max length of the left output, + the right output , the max right length, and then the delimiter string. + By Suicid3 +*/ +stock split(const szInput[], szLeft[], pL_Max, szRight[], pR_Max, const szDelim[]) +{ + new iEnd = contain(szInput, szDelim); + new iStart = iEnd + strlen(szDelim); + + //If delimiter isnt in Input just split the string at max lengths + if (iEnd == -1) + { + iStart = copy(szLeft, pL_Max, szInput); + copy(szRight, pR_Max, szInput[iStart]); + return; + } + + //If delimter is in Input then split at input for max lengths + if (pL_Max >= iEnd) + copy(szLeft, iEnd, szInput); + else + copy(szLeft, pL_Max, szInput); + + copy(szRight, pR_Max, szInput[iStart]); + + return; +} + +/* Removes a path from szFilePath leaving the name of the file in szFile for a pMax length. */ +stock remove_filepath(const szFilePath[], szFile[], pMax) +{ + new len = strlen(szFilePath); + + while ((--len >= 0) && (szFilePath[len] != '/') && (szFilePath[len] != '\')) { } + + copy(szFile, pMax, szFilePath[len + 1]); + + return; +} + +/* Replaces a contained string iteratively. + * This ensures that no infinite replacements will take place by + * intelligently moving to the next string position each iteration. + */ +stock replace_all(string[], len, const what[], const with[]) +{ + new pos = 0; + + if ((pos = contain(string, what)) == -1) + { + return 0; + } + + new total = 0; + new with_len = strlen(with); + new diff = strlen(what) - with_len; + new total_len = strlen(string); + new temp_pos = 0; + + while (replace(string[pos], len - pos, what, with) != 0) + { + total++; + + /* jump to position after replacement */ + pos += with_len; + + /* update cached length of string */ + total_len -= diff; + + /* will the next call be operating on the last character? */ + if (pos >= total_len) + { + break; + } + + /* find the next position from our offset */ + temp_pos = contain(string[pos], what); + + /* if it's invalid, we're done */ + if (temp_pos == -1) + { + break; + } + + /* otherwise, reposition and update counters */ + pos += temp_pos; + } + + return total; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/svn_version.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/svn_version.inc new file mode 100644 index 0000000..e2a730c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/svn_version.inc @@ -0,0 +1,16 @@ +/* AMX Mod X constants +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _svnversion_included + #endinput +#endif +#define _svnversion_included + +#define AMXX_VERSION 1.82 +#define AMXX_VERSION_NUM 182 +stock const AMXX_VERSION_STR[] = "1.8.2"; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/svn_version.tpl b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/svn_version.tpl new file mode 100644 index 0000000..00f3be1 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/svn_version.tpl @@ -0,0 +1,16 @@ +/* AMX Mod X constants +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _svnversion_included + #endinput +#endif +#define _svnversion_included + +#define AMXX_VERSION $PMAJOR$.$PMINOR$$PREVISION$ +#define AMXX_VERSION_NUM $PMAJOR$$PMINOR$$PREVISION$ +stock const AMXX_VERSION_STR[] = "$PMAJOR$.$PMINOR$.$PREVISION$"; diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcconst.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcconst.inc new file mode 100644 index 0000000..0affc38 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcconst.inc @@ -0,0 +1,78 @@ +/* TFCX const + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _tfcconst_included + #endinput +#endif +#define _tfcconst_included + + +#define TFCMAX_WEAPONS 37 + +enum { + TFC_AMMO_SHELLS = 0, + TFC_AMMO_BULLETS, + TFC_AMMO_CELLS, + TFC_AMMO_ROCKETS, + TFC_AMMO_NADE1, + TFC_AMMO_NADE2, +}; + +enum { + TFC_WPN_NONE = 0, + TFC_WPN_TIMER,//TFC_WPN_UNK1, + TFC_WPN_SENTRYGUN,//TFC_WPN_UNK2, + TFC_WPN_MEDIKIT, + TFC_WPN_SPANNER, + TFC_WPN_AXE, + TFC_WPN_SNIPERRIFLE, + TFC_WPN_AUTORIFLE, + TFC_WPN_SHOTGUN, + TFC_WPN_SUPERSHOTGUN, + TFC_WPN_NG, + TFC_WPN_SUPERNG, + TFC_WPN_GL, + TFC_WPN_FLAMETHROWER, + TFC_WPN_RPG, + TFC_WPN_IC, + TFC_WPN_FLAMES,//TFC_WPN_UNK16, + TFC_WPN_AC, + TFC_WPN_UNK18, + TFC_WPN_UNK19, + TFC_WPN_TRANQ, + TFC_WPN_RAILGUN, + TFC_WPN_PL, + TFC_WPN_KNIFE, + TFC_WPN_CALTROP, // 24 + TFC_WPN_CONCUSSIONGRENADE, + TFC_WPN_NORMALGRENADE, + TFC_WPN_NAILGRENADE, + TFC_WPN_MIRVGRENADE, + TFC_WPN_NAPALMGRENADE, + TFC_WPN_GASGRENADE, + TFC_WPN_EMPGRENADE, +}; + +enum { + TFC_PC_SCOUT = 1, + TFC_PC_SNIPER, + TFC_PC_SOLDIER, + TFC_PC_DEMOMAN, + TFC_PC_MEDIC, + TFC_PC_HWGUY, + TFC_PC_PYRO, + TFC_PC_SPY, + TFC_PC_ENGENEER, + TFC_PC_CIVILIAN, +}; + +#define TFC_PC_ENGINEER TFC_PC_ENGENEER + +// Goal items +#define TFC_GOALITEM_BLUE (1 << 17) +#define TFC_GOALITEM_RED (1 << 18) +#define TFC_GOALITEM_YELLOW (1 << 24) +#define TFC_GOALITEM_GREEN (1 << 25) diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcstats.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcstats.inc new file mode 100644 index 0000000..eb11868 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcstats.inc @@ -0,0 +1,55 @@ +/* TFCX Stats functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _tfcstats_included + #endinput +#endif +#define _tfcstats_included + +/* Gets stats from given weapon index. If wpnindex is 0 +* then the stats are from all weapons. If weapon has not been used function +* returns 0 in other case 1. Fields in stats are: +* 0 - kills +* 1 - deaths +* 2 - headshots +* 3 - teamkilling +* 4 - shots +* 5 - hits +* 6 - damage +* For body hits fields see amxconst.inc. */ +native get_user_wstats(index,wpnindex,stats[8],bodyhits[8]); + +/* Gets round stats from given weapon index.*/ +native get_user_wrstats(index,wpnindex,stats[8],bodyhits[8]); + +/* Gets overall stats which are stored in file on server +* and updated on every respawn or user disconnect. +* Function returns the position in stats by diff. kills to deaths. */ +native get_user_stats(index,stats[8],bodyhits[8]); + +/* Gets round stats of player. */ +native get_user_rstats(index,stats[8],bodyhits[8]); + +/* Gets stats with which user have killed/hurt his victim. If victim is 0 +* then stats are from all victims. If victim has not been hurt, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_vstats(index,victim,stats[8],bodyhits[8],wpnname[]="",len=0); + +/* Gets stats with which user have been killed/hurt. If killer is 0 +* then stats are from all attacks. If killer has not hurt user, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_astats(index,wpnindex,stats[8],bodyhits[8],wpnname[]="",len=0); + +/* Resets life, weapon, victims and attackers user stats. */ +native reset_user_wstats(index); + +/* Gets overall stats which stored in stats.dat file in amx folder +* and updated on every mapchange or user disconnect. +* Function returns next index of stats entry or 0 if no more exists. */ +native get_stats(index,stats[8],bodyhits[8],name[],len); + +/* Returns number of all entries in stats. */ +native get_statsnum(); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcx.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcx.inc new file mode 100644 index 0000000..73bff77 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tfcx.inc @@ -0,0 +1,145 @@ +/* tfcX functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _tfcx_included + #endinput +#endif +#define _tfcx_included + +#include <tfcconst> +#include <tfcstats> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqclass xstats + #if !defined AMXMODX_NOAUTOLOAD + #pragma defclasslib xstats tfcx + #endif +#else + #pragma library tfcx +#endif + +/************* Shared Natives Start ********************************/ + +/* Forward types */ +enum { + XMF_DAMAGE = 0, + XMF_DEATH, +}; + +/* Use this function to register forwards */ +native register_statsfwd( ftype ); + +/* Function is called after player to player attacks , +* if players were damaged by teammate TA is set to 1 */ +forward client_damage(attacker,victim,damage,wpnindex,hitplace,TA); + +/* Function is called after player death , +* if player was killed by teammate TK is set to 1 */ +forward client_death(killer,victim,wpnindex,hitplace,TK); + +/* Custom Weapon Support */ +/* function will return index of new weapon */ +native custom_weapon_add( const wpnname[],melee = 0,const logname[]="" ); +/* Function will pass damage done by this custom weapon to stats module and other plugins */ +native custom_weapon_dmg( weapon, att, vic, damage, hitplace=0 ); +/* Function will pass info about custom weapon shot to stats module */ +native custom_weapon_shot( weapon,index ); // weapon id , player id + +/* function will return 1 if true */ +native xmod_is_melee_wpn(wpnindex); + +/* Returns weapon name. */ +native xmod_get_wpnname(wpnindex,name[],len); + +/* Returns weapon logname. */ +native xmod_get_wpnlogname(wpnindex,name[],len); + +/* Returns weapons array size */ +native xmod_get_maxweapons(); + +/* Returns stats array size ex. 8 in TS , 9 in DoD */ +native xmod_get_stats_size(); + +/* Returns 1 if true */ +native xmod_is_custom_wpn(wpnindex); + +/************* Shared Natives End ********************************/ + +stock tfc_isgrenade( weapon ){ + switch( weapon ) + { + case TFC_WPN_CALTROP, + TFC_WPN_CONCUSSIONGRENADE, + TFC_WPN_NORMALGRENADE, + TFC_WPN_NAILGRENADE, + TFC_WPN_MIRVGRENADE, + TFC_WPN_NAPALMGRENADE, + TFC_WPN_GASGRENADE, + TFC_WPN_EMPGRENADE: + return 1; + default: return 0; + } + return 0; +} + +native tfc_userkill( index ); + +/* Use this function to set private data offsets if needed +Default offsets: + timer: 932 + sentrygun: 83 +from AssKicR + shells: 53 + bullets: 55 + cells: 57 + rockets: 59 + nade1: 14 + nade2: 15 +*/ +native tfc_setpddata(timer,sentrygun,shells,bullets,cells,rockets,nade1,nade2); + +/*********************************************************************/ + +native tfc_setmodel(index, const Model[], const Skin[]); +native tfc_clearmodel(index); + +/* Get amount of ammo in backpack on a user for a specific weapon */ +/* Ammo Types in tfcconst.inc */ +native tfc_getbammo(index, ammo); + +/* Set amount of ammo in backpack on a user for a specific weapon */ +native tfc_setbammo(index, ammo, value); + +/* Returns amount of ammo in weapon's clip (backpack) */ +/* Weapons list in tfcconst.inc */ +native tfc_getweaponbammo(index, weapon); + +/* Sets amount of ammo in weapon's clip (backpack) */ +native tfc_setweaponbammo(index, weapon, value); + +/* Returns amount of ammo in weapon's clip */ +/* Index must be weapon's entity index */ +native tfc_getweaponammo(index); + +/* Sets amount of ammo in weapon's clip */ +/* Index must be weapon's entity index */ +native tfc_setweaponammo(index, value); + +/* Returns 1 if user is carrying a goal item such as a flag or a keycard, else 0. + * Team is by reference parameter that will be set to owning team(s) of the goal item. + * Use the TFC_GOALITEM_* constants to determine the owning team. + */ +native tfc_get_user_goalitem(index, &team); + +/* Returns 1 if the player is a spy and is currently feigning death */ +native tfc_is_user_feigning(index); + +/* Returns 1 if the two teams are allies, 0 otherwise + * Note: Team must be 1->4 + * Team 0 will always return 0 + * Any other team will result in an error + */ +native tfc_is_team_ally(TeamA,TeamB); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/time.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/time.inc new file mode 100644 index 0000000..b76a275 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/time.inc @@ -0,0 +1,90 @@ +/* Time specific functions +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _time_included + #endinput +#endif +#define _time_included + +/* Time unit types for get_time_length() */ +enum +{ + timeunit_seconds = 0, + timeunit_minutes, + timeunit_hours, + timeunit_days, + timeunit_weeks, +}; + +// seconds are in each time unit +#define SECONDS_IN_MINUTE 60 +#define SECONDS_IN_HOUR 3600 +#define SECONDS_IN_DAY 86400 +#define SECONDS_IN_WEEK 604800 + +/* Stock by Brad */ +stock get_time_length(id, unitCnt, type, output[], outputLen) +{ +// IMPORTANT: You must add register_dictionary("time.txt") in plugin_init() + +// id: The player whose language the length should be translated to (or 0 for server language). +// unitCnt: The number of time units you want translated into verbose text. +// type: The type of unit (i.e. seconds, minutes, hours, days, weeks) that you are passing in. +// output: The variable you want the verbose text to be placed in. +// outputLen: The length of the output variable. + + if (unitCnt > 0) + { + // determine the number of each time unit there are + new weekCnt = 0, dayCnt = 0, hourCnt = 0, minuteCnt = 0, secondCnt = 0; + + switch (type) + { + case timeunit_seconds: secondCnt = unitCnt; + case timeunit_minutes: secondCnt = unitCnt * SECONDS_IN_MINUTE; + case timeunit_hours: secondCnt = unitCnt * SECONDS_IN_HOUR; + case timeunit_days: secondCnt = unitCnt * SECONDS_IN_DAY; + case timeunit_weeks: secondCnt = unitCnt * SECONDS_IN_WEEK; + } + + weekCnt = secondCnt / SECONDS_IN_WEEK; + secondCnt -= (weekCnt * SECONDS_IN_WEEK); + + dayCnt = secondCnt / SECONDS_IN_DAY; + secondCnt -= (dayCnt * SECONDS_IN_DAY); + + hourCnt = secondCnt / SECONDS_IN_HOUR; + secondCnt -= (hourCnt * SECONDS_IN_HOUR); + + minuteCnt = secondCnt / SECONDS_IN_MINUTE; + secondCnt -= (minuteCnt * SECONDS_IN_MINUTE); + + // translate the unit counts into verbose text + new maxElementIdx = -1; + new timeElement[5][33]; + + if (weekCnt > 0) + format(timeElement[++maxElementIdx], 32, "%i %L", weekCnt, id, (weekCnt == 1) ? "TIME_ELEMENT_WEEK" : "TIME_ELEMENT_WEEKS"); + if (dayCnt > 0) + format(timeElement[++maxElementIdx], 32, "%i %L", dayCnt, id, (dayCnt == 1) ? "TIME_ELEMENT_DAY" : "TIME_ELEMENT_DAYS"); + if (hourCnt > 0) + format(timeElement[++maxElementIdx], 32, "%i %L", hourCnt, id, (hourCnt == 1) ? "TIME_ELEMENT_HOUR" : "TIME_ELEMENT_HOURS"); + if (minuteCnt > 0) + format(timeElement[++maxElementIdx], 32, "%i %L", minuteCnt, id, (minuteCnt == 1) ? "TIME_ELEMENT_MINUTE" : "TIME_ELEMENT_MINUTES"); + if (secondCnt > 0) + format(timeElement[++maxElementIdx], 32, "%i %L", secondCnt, id, (secondCnt == 1) ? "TIME_ELEMENT_SECOND" : "TIME_ELEMENT_SECONDS"); + + switch(maxElementIdx) + { + case 0: format(output, outputLen, "%s", timeElement[0]); + case 1: format(output, outputLen, "%s %L %s", timeElement[0], id, "TIME_ELEMENT_AND", timeElement[1]); + case 2: format(output, outputLen, "%s, %s %L %s", timeElement[0], timeElement[1], id, "TIME_ELEMENT_AND", timeElement[2]); + case 3: format(output, outputLen, "%s, %s, %s %L %s", timeElement[0], timeElement[1], timeElement[2], id, "TIME_ELEMENT_AND", timeElement[3]); + 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]); + } + } +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsconst.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsconst.inc new file mode 100644 index 0000000..a49ec5f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsconst.inc @@ -0,0 +1,146 @@ +/* TSFUN constants + * + * (c) 2005, Suzuka + * This file is provided as is (no warranties). + */ + +#if defined _tsconst_included + #endinput +#endif +#define _tsconst_included + +#define TSMAX_WEAPONS 44 // 37 + throwing knife + brekable + 5 custom weapon slots + +#define TSPWUP_NONE 0 +#define TSPWUP_RANDOM 0 +#define TSPWUP_SLOWMO 1 +#define TSPWUP_INFAMMO 2 +#define TSPWUP_KUNGFU 4 +#define TSPWUP_SLOWPAUSE 8 +#define TSPWUP_DFIRERATE 16 +#define TSPWUP_GRENADE 32 +#define TSPWUP_HEALTH 64 +#define TSPWUP_ARMOR 128 +#define TSPWUP_SUPERJUMP 256 + +#define TSITEM_KUNGFU 1<<0 +#define TSITEM_SUPERJUMP 1<<1 + +#define TSKF_STUNTKILL 1<<0 +#define TSKF_SLIDINGKILL 1<<1 +#define TSKF_DOUBLEKILL 1<<2 +#define TSKF_ISSPEC 1<<3 +#define TSKF_KILLEDSPEC 1<<4 + +#define TSA_SILENCER 1 +#define TSA_LASERSIGHT 2 +#define TSA_FLASHLIGHT 4 +#define TSA_SCOPE 8 + +#define TSMSG_NORMAL 6 +#define TSMSG_WAITING 11 +#define TSMSG_DEAD 1 +#define TSMSG_KILLER 2 +#define TSMSG_DEMOLITION 3 +#define TSMSG_SPECIALIST 4 +#define TSMSG_UNSTOPPABLE 5 +#define TSMSG_THEONE 10 + +#define STUNT_NONE 0 +#define STUNT_DUCK 1 +#define STUNT_ROLL 2 +#define STUNT_DIVE 3 +#define STUNT_GETUP 4 +#define STUNT_FLIP 5 + +enum { + TSW_GLOCK18 = 1, + TSW_UNK1, + TSW_UZI, + TSW_M3, + TSW_M4A1, + TSW_MP5SD, + TSW_MP5K, + TSW_ABERETTAS, + TSW_MK23, + TSW_AMK23, + TSW_USAS, + TSW_DEAGLE, + TSW_AK47, + TSW_57, + TSW_AUG, + TSW_AUZI, + TSW_TMP, + TSW_M82A1, + TSW_MP7, + TSW_SPAS, + TSW_GCOLTS, + TSW_GLOCK20, + TSW_UMP, + TSW_M61GRENADE, + TSW_CKNIFE, + TSW_MOSSBERG, + TSW_M16A4, + TSW_MK1, + TSW_C4, + TSW_A57, + TSW_RBULL, + TSW_M60E3, + TSW_SAWED_OFF, + TSW_KATANA, + TSW_SKNIFE, + TSW_KUNG_FU, + TSW_TKNIFE, +}; + +/* +valid tsweaponid in TS_GiveWeapon + +1: "Glock 18" +3: "Mini Uzi" +4: "Benelli M3" +5: "M4A1" +6: "MP5SD" +7: "MP5K" +8: "Akimbo Berettas" +9: "Socom Mk23" +11: "Usas12" +12: "Desert Eagle" +13: "Ak47" +14: "FiveSeven" +15: "Steyr Aug" +17: "Steyr Tmp" +18: "Barrett M82" +19: "HK Pdw" +20: "Spas12" +21: "Akimbo colts" +22: "Glock 20" +23: "Mac10" +25: "Combat Knife" +26: "Mossberg 500" +27: "M16A4" +28: "Ruger Mk1" +24: "M61 Grenade" +29: "C4" +31: "Raging Bull" +32: "M60" +33: "Sawed off" +34: "Katana" +35: "Seal Knife" + +valid pwuptype in TS_GivePwUp + +0: "Random" +1: "Slow Motion" +2: "Infinite Clip" +4: "Kung Fu" +8: "Slow Pause" +16: "Double Firerate" +32: "Grenade" +64: "Health" +128: "Armor" +256: "Superjump" + +*/ + + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsfun.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsfun.inc new file mode 100644 index 0000000..623df22 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsfun.inc @@ -0,0 +1,154 @@ +/* TSFUN + * + * (c) 2005-2006, AMX Mod X Dev Team + * This file is provided as is (no warranties). + */ + +#if defined _tsxfun_included + #endinput +#endif +#define _tsxfun_included + +#include <tsx> +#include <tsconst> + +/************* Shared Natives Start ********************************/ + +/* Forward types */ +enum { + XMF_DAMAGE = 0, + XMF_DEATH, +}; + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib tsfun + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib tsfun + #endif +#else + #pragma library tsfun +#endif + +/************* Shared Natives End ********************************/ + +/* Function is called just before a kung foo attack is done, + * damage and time length may be altered with natives. + * Return PLUGIN_HANDLED to stop attack. + * UNAVAILABLE IN 1.70 + */ +forward Melee_Attack(id,Float:time,Float:damage,UNAVAILABLE); + + +// Returns when someone stunts, after they do it. +//UNAVAILABLE IN 1.70 +forward client_stunt(id,stunttype,UNAVAILABLE); + +/* Function is called when powerups are ran, + * Returns value of powerup. Use TSPWUP_*'s + * to find exactly which one it is. + * UNAVAILABLE IN 1.70 + */ +forward client_powerup(id,powerup,UNAVAILABLE); + +/* weapon logname to weapon name convertion */ +native ts_wpnlogtoname(const logname[],name[],len); + +/* weapon logname to weapon index convertion */ +native ts_wpnlogtoid(const logname[]); + +//UNAVAILABLE IN 1.70 +//native Float:ts_getusertime( index ); //! +//native ts_setusertime( index, Float:time ); //! + +native ts_getusercash( index ); +native ts_setusercash( index, money ); + +native ts_getuserslots( index ); +native ts_setuserslots( index, slots ); + +native ts_getuserstate( index ); +native ts_getuserwpn( index,&clip=0,&ammo=0,&mode=0,&extra=0 ); +native ts_getuserspace( index ); + +native ts_getuserkillflags(killer); +native ts_getkillingstreak( index ); +native ts_getuserlastfrag( index ); + +native ts_giveweapon( index,weapon,clips,extra ); + +native ts_getuserpwup( index ); + +stock ts_has_slowmo(id) return (ts_getuserpwup(id) &TSPWUP_SLOWMO); +stock ts_has_infammo(id) return (ts_getuserpwup(id) &TSPWUP_INFAMMO); +stock ts_has_slowpause(id) return (ts_getuserpwup(id) &TSPWUP_SLOWPAUSE); +stock ts_has_dfirerate(id) return (ts_getuserpwup(id) &TSPWUP_DFIRERATE); +stock ts_has_grenade(id) return (ts_getuserpwup(id) &TSPWUP_GRENADE); +stock ts_has_health(id) return (ts_getuserpwup(id) &TSPWUP_HEALTH); +stock ts_has_armor(id) return (ts_getuserpwup(id) &TSPWUP_ARMOR); + +/* Function will create pwup entity and return its index (pwupent) */ +native ts_createpwup( pwup ); + +native ts_givepwup( index,pwupent ); + +native ts_setpddata( knifeoffset ); + +// Alters a fu attack. Use with fu forward +// UNAVAILABLE IN 1.70 +// native ts_set_fuattack(id,Float:time,Float:damage); //! + +// Changes board message +native ts_set_message(id,message); + +// Gets the message board message +native ts_get_message(id); + +stock ts_is_normal(id) +{ + new msg = ts_get_message(id); + if( (msg > 11) || (msg > 6 && msg < 10) ) return 1; + return 0; +} +stock ts_is_waiting(id) return (ts_get_message(id) == TSMSG_WAITING); +stock ts_is_dead(id) return (ts_get_message(id) == TSMSG_DEAD); +stock ts_is_killer(id) return (ts_get_message(id) == TSMSG_KILLER); +stock ts_is_demolition(id) return (ts_get_message(id) == TSMSG_DEMOLITION); +stock ts_is_specialist(id) return (ts_get_message(id) == TSMSG_SPECIALIST); +stock ts_is_unstoppable(id) return (ts_get_message(id) == TSMSG_UNSTOPPABLE); +stock ts_is_theone(id) return (ts_get_message(id) == TSMSG_THEONE); + +// Return one on true, 0 on false +// UNAVAILABLE IN 1.70 +native ts_has_superjump(id); //! +native ts_has_fupowerup(id); //! +native ts_is_in_slowmo(id); + +// Get and set consecutive frags +//UNAVAILABLE IN 1.70 +//native ts_get_cons_frags(id); +//native ts_set_cons_frags(id,num); + +// Set to see cool bullet trails. Only id will see them. +native ts_set_bullettrail(id,yesorno); + +// Sets fake versions of slow mo and slow pause. Use ts_set_speed for more options. +native ts_set_fakeslowmo(id,Float:time); +native ts_set_fakeslowpause(id,Float:time); + +/* Sets speed artificially. 1.0 is default, Go into fractions and decimals for slower +* and put in higher numbers for higher speeds. Aura is how far things around you are effected +* Time is the time until it wears off. 0.0 for speed will freeze people. Do not use negatives. */ + +native ts_set_speed(id,Float:speed,Float:auradist,Float:time); + +/* Sets physics speed artificially. Things like sparks and sounds will be effected. +* Any negative number will render all physics paused. */ +native ts_set_physics_speed(id,Float:speed); + +// Returns 0 if no powerup is running. Returns the powerup type otherwise. +native ts_is_running_powerup(id); + +// Highly experimental command which overrides powerup types. +// Use if a powerup is already running, or if a powerup is not running. +// Safe to use in powerup forward. +native ts_force_run_powerup(id,PWUP_TYPE); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsstats.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsstats.inc new file mode 100644 index 0000000..7ec543f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsstats.inc @@ -0,0 +1,58 @@ +/* TSXMod Stats functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _tsstats_included + #endinput +#endif +#define _tsstats_included + +/* Gets stats from given weapon index. If wpnindex is 0 +* then the stats are from all weapons. If weapon has not been used function +* returns 0 in other case 1. Fields in stats are: +* 0 - kills +* 1 - deaths +* 2 - headshots +* 3 - teamkilling +* 4 - shots +* 5 - hits +* 6 - damage +* For body hits fields see amxconst.inc. */ +native get_user_wstats(index,wpnindex,stats[8],bodyhits[8]); + +/* Gets round stats from given weapon index.*/ +native get_user_wrstats(index,wpnindex,stats[8],bodyhits[8]); + +/* Gets life (from spawn to spawn) stats from given weapon index.*/ +native get_user_wlstats(index,wpnindex,stats[8],bodyhits[8]); + +/* Gets overall stats which are stored in file on server +* and updated on every respawn or user disconnect. +* Function returns the position in stats by diff. kills to deaths. */ +native get_user_stats(index,stats[8],bodyhits[8]); + +/* Gets round stats of player. */ +native get_user_rstats(index,stats[8],bodyhits[8]); + +/* Gets stats with which user have killed/hurt his victim. If victim is 0 +* then stats are from all victims. If victim has not been hurt, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_vstats(index,victim,stats[8],bodyhits[8],wpnname[]="",len=0); + +/* Gets stats with which user have been killed/hurt. If killer is 0 +* then stats are from all attacks. If killer has not hurt user, function +* returns 0 in other case 1. User stats are reset on his respawn. */ +native get_user_astats(index,wpnindex,stats[8],bodyhits[8],wpnname[]="",len=0); + +/* Resets life, weapon, victims and attackers user stats. */ +native reset_user_wstats(index); + +/* Gets overall stats which stored in stats.dat file in amx folder +* and updated on every mapchange or user disconnect. +* Function returns next index of stats entry or 0 if no more exists. */ +native get_stats(index,stats[8],bodyhits[8],name[],len); + +/* Returns number of all entries in stats. */ +native get_statsnum(); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsx.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsx.inc new file mode 100644 index 0000000..222b227 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/tsx.inc @@ -0,0 +1,85 @@ +/* TSXMod functions + * + * (c) 2004, SidLuke + * This file is provided as is (no warranties). + */ + +#if defined _tsx_included + #endinput +#endif +#define _tsx_included + +#include <tsstats> + +#if AMXX_VERSION_NUM >= 175 + #pragma reqclass xstats + #if !defined AMXMODX_NOAUTOLOAD + #pragma defclasslib xstats tsx + #endif +#else + #pragma library tsx +#endif + +/************* Shared Natives Start ********************************/ + +/* Forward types */ +enum { + XMF_DAMAGE = 0, + XMF_DEATH, +}; + +/* Use this function to register forwards + * DEPRECATED + */ +native register_statsfwd( ftype ); + +/* Function is called after player to player attacks , +* if players were damaged by teammate TA is set to 1 */ +forward client_damage(attacker,victim,damage,wpnindex,hitplace,TA); + +/* Function is called after player death , +* if player was killed by teammate TK is set to 1 */ +forward client_death(killer,victim,wpnindex,hitplace,TK); + +/* Custom Weapon Support */ +/* function will return index of new weapon */ +native custom_weapon_add( const wpnname[],melee = 0,const logname[]="" ); +/* Function will pass damage done by this custom weapon to stats module and other plugins */ +native custom_weapon_dmg( weapon, att, vic, damage, hitplace=0 ); +/* Function will pass info about custom weapon shot to stats module */ +native custom_weapon_shot( weapon,index ); // weapon id , player id + +/* function will return 1 if true */ +native xmod_is_melee_wpn(wpnindex); + +/* Returns weapon name. */ +native xmod_get_wpnname(wpnindex,name[],len); + +/* Returns weapon logname. */ +native xmod_get_wpnlogname(wpnindex,name[],len); + +/* Returns weapons array size */ +native xmod_get_maxweapons(); + +/* Returns stats array size ex. 8 in TS , 9 in DoD */ +native xmod_get_stats_size(); + +/* Returns 1 if true */ +native xmod_is_custom_wpn(wpnindex); + +/************* Shared Natives End ********************************/ + +/* Spawns a Weapon */ +stock ts_weaponspawn(const weaponid[], const duration[], const extraclip[], const spawnflags[], const Float:Origin[3]) +{ + new ent = create_entity("ts_groundweapon"); + + DispatchKeyValue(ent, "tsweaponid", weaponid); + DispatchKeyValue(ent, "wduration", duration); + DispatchKeyValue(ent, "wextraclip", extraclip); + DispatchKeyValue(ent, "spawnflags", spawnflags); + DispatchSpawn(ent); + + entity_set_origin(ent, Origin); + return PLUGIN_HANDLED; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/vault.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/vault.inc new file mode 100644 index 0000000..43a915c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/vault.inc @@ -0,0 +1,26 @@ +/* Vault functions +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is provided as is (no warranties). +*/ + +#if defined _vault_included + #endinput +#endif +#define _vault_included + +/* Reads a data from given key. +* If len is set to zero then get_vaultdata +* returns value as an number. */ +native get_vaultdata(const key[], data[] = "", len = 0); + +/* Sets a data under given key. */ +native set_vaultdata(const key[], const data[] = ""); + +/* Removes a key from vault.*/ +native remove_vaultdata(const key[]); + +/* Checks if a key exists in the vault.*/ +native vaultdata_exists(const key[]); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/vector.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/vector.inc new file mode 100644 index 0000000..39ba89b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/vector.inc @@ -0,0 +1,59 @@ +/* Vector functions (now part of Core) + * + * by the AMX Mod X Development Team + * + * This file is provided as is (no warranties). + */ + +#if defined _corevector_included + #endinput +#endif +#define _corevector_included + +/* Used for angle_vector() */ +#define ANGLEVECTOR_FORWARD 1 +#define ANGLEVECTOR_RIGHT 2 +#define ANGLEVECTOR_UP 3 + +/* Returns distance between two vectors. */ +native get_distance(const origin1[3], const origin2[3]); + +/* Gets distance between two origins (float). */ +native Float:get_distance_f(const Float:Origin1[3], const Float:Origin2[3]); + +/* Gives you a velocity in the direction a player is looking, iVelocity is the multiplier. */ +native velocity_by_aim(iIndex, iVelocity, Float:vRetValue[3]); + +/* Changes a vector into an angle vector. */ +native vector_to_angle(const Float:fVector[3], Float:vReturn[3]); + +/* Changes an angle vector into a vector. */ +native angle_vector(const Float:vector[3], FRU, Float:ret[3]); + +/* Gets the length of a vector (float[3]). */ +native Float:vector_length(const Float:vVector[3]); + +/* Gets the distance between 2 vectors (float[3]). */ +native Float:vector_distance(const Float:vVector[3], const Float:vVector2[3]); + +/* Changes an integer vec to a floating vec + * This is not a for loop because that's slower + */ +stock IVecFVec(const IVec[3], Float:FVec[3]) +{ + FVec[0] = float(IVec[0]); + FVec[1] = float(IVec[1]); + FVec[2] = float(IVec[2]); + + return 1; +} + +/* Changes a float vec to an integer vec */ +stock FVecIVec(const Float:FVec[3], IVec[3]) +{ + IVec[0] = floatround(FVec[0]); + IVec[1] = floatround(FVec[1]); + IVec[2] = floatround(FVec[2]); + + return 1; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/xs.inc b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/xs.inc new file mode 100644 index 0000000..2257486 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/include/xs.inc @@ -0,0 +1,1246 @@ +/* XS Library +* for AMX and AMXX +* +* Copyright (C) 2004 Pavol "PM" Marko +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +* +* Version 0.1 +* +* +* MACROS THAT YOU CAN DEFINE BEFORE INCLUDING XS.INC: +* XS_FLEQ_TOLERANCE: +* Tolerance that is used for XS_FLEQ float nearly-equal comparisions +* DEFAULT: 0.000005 +* XS_DEBUG +* Turn debug logging on +* DEFAULT: 0 +* XS_LOGBUFFER_SIZE +* Buffer size for logging +* DEFAULT: 512 +* XS_TASK_MAXPARAMS +* Maximal parameter count for managed tasks +* DEFAULT: 8 +* XS_TASK_MAXPARAMSIZE +* Maximal size of string parameter for tasks +* Has to be power of 2 and has to be >= 8 +* DEFAULT: 512 +* XS_TASK_MANAGEDIDS +* Number of managed IDs for tasks. +* DEFAULT: 2048 +* XS_REPLACEBUF_SIZE +* DEFAULT: 3072 +* +* +* NOTES: +* On AMX, VexdUM is required for some math functions +* +* xs__ / XS__ (2 underscores) stuff is meant to be intern +* +* untested: never tested +* half-tested: succesfully used in other applications; not extensively tested in xs though +* tested: fully tested +* +* If you have any useful functions / ideas for functions, please tell me. +*/ + +#if defined _xs_included + #endinput +#endif +#define _xs_included + +// **** CONFIG CHECK + +#if !defined XS_FLEQ_TOLERANCE + #define XS_FLEQ_TOLERANCE 0.000005 +#endif + +#if !defined XS_DEBUG + #define XS_DEBUG 0 +#endif + +#if !defined XS_LOGBUFFER_SIZE + #define XS_LOGBUFFER_SIZE 512 +#endif + +#if !defined XS_TASK_MAXPARAMS + #define XS_TASK_MAXPARAMS 8 +#endif + +#if !defined XS_TASK_MAXPARAMSIZE + #define XS_TASK_MAXPARAMSIZE 512 +#endif + +#if !defined XS_TASK_MANAGEDIDS + #define XS_TASK_MANAGEDIDS 2048 +#endif + +#if !defined XS_REPLACEBUF_SIZE + #define XS_REPLACEBUF_SIZE 3072 +#endif + +// **** Detect platform +#define XS_AMX 0 +#define XS_AMXX 1 + +#if defined _amxmodx_included + #define XS_PLATFORM XS_AMXX +#endif + +#if defined _amxmod_included && !defined _amxmodx_included + #define XS_PLATFORM XS_AMX +#endif + +#if !defined XS_PLATFORM + // Could not detect platform. + // Make sure you include amxmodx.inc or amxmod.inc before including xs.inc + #assert 0 + #endinput +#endif + +// Turn on for release +#define XS__LIBRELEASE 1 + +#if XS__LIBRELEASE + #define XS_LIBFUNC_ATTRIB stock +#else + #define XS_LIBFUNC_ATTRIB +#endif +#if XS__LIBRELEASE + #define XS_LIBVAR_ATTRIB stock +#else + #define XS_LIBVAR_ATTRIB new +#endif + + +/****** DEBUGGING / LOGING FUNCTIONS ******/ + enum xs_logtypes + { + xs_debug, + xs_message, + xs_warning, + xs_error, + xs_fatalerror, + xs__assertionfailed, + + // must come last + xs_logtypes_count + } + + XS_LIBVAR_ATTRIB const xs__logtypenames[xs_logtypes_count][] = {"DEBUG", "", "WARNING", "ERROR", "FATAL ERROR", "DEBUG ASSERTION FAILED"}; + + // tested + XS_LIBFUNC_ATTRIB xs_log(xs_logtypes:logtype, {Float,_}:...) + { + // WARNING: Don't try to use assert in here; it uses this func + + // Don't log debug if not in debug mode + #if !XS_DEBUG + if (logtype == xs_debug) + return; + #endif + + new buffer[XS_LOGBUFFER_SIZE+1]; + buffer[XS_LOGBUFFER_SIZE]=0; + format_args(buffer, XS_LOGBUFFER_SIZE, 1 /* go from SECOND argument*/); + new bool:addLogTypeName = strlen(xs__logtypenames[logtype]) ? true : false; + + #if XS_PLATFORM == XS_AMX + new plugname[32]; + new dummy[1]; + get_plugin(-1, plugname, 31, dummy, 0, dummy, 0, dummy, 0, dummy, 0, dummy[0]); + // log into HL Logs + log_message("[AMX][%s]: %s%s%s", plugname, addLogTypeName ? xs__logtypenames[logtype] : "", + addLogTypeName ? ": " : "", buffer); + #else // assume AMXX + + // Use AMXX's logging system + log_amx("%s%s%s", addLogTypeName ? xs__logtypenames[logtype] : "", + addLogTypeName ? ": " : "", buffer); + #endif + } + + // Assertion + // tested + XS_LIBFUNC_ATTRIB xs_assertfunc({Float,_}:exp, const desc[]) + { + // Check exp + if (exp) + return 1; // ok + + // not ok + + // print info + xs_log(xs__assertionfailed, "%s", desc); + + return 0; + } + #define xs_assert(%1,%2) if (!xs_assertfunc(%1,%2)) xs__global_null /= xs__global_null + + + // Assertion; only in debug mode + // untested; logical flow says it should work + #if XS_DEBUG + #define xs_assert_dbg(%1,%2) if (!xs_assertfunc(%1,%2)) xs__global_null /= xs__global_null + #else + #define xs_assert_dbg(%1,%2) + #endif + + new xs__global_null = 0; + +/****** MATH FUNCTIONS ******/ + + /****** BASIC STUFF ******/ + + #if XS_PLATFORM == XS_AMX + enum anglemode + { + radian = 0, + degrees, + grades + } + #endif + + // Returns -1 if num is negative, 0 if num is 0, 1 if num is positive + // tested + XS_LIBFUNC_ATTRIB xs_sign(num) + { + return (num < 0) ? -1 : ((num == 0) ? 0 : 1); + } + + // Returns -1 if num is negative, 0 if num is 0, 1 if num is positive + // tested + XS_LIBFUNC_ATTRIB xs_fsign(Float:num) + { + return (num < 0.0) ? -1 : ((num == 0.0) ? 0 : 1); + } + + // Returns absolute value + // tested + XS_LIBFUNC_ATTRIB xs_abs(num) + { + return (num < 0) ? -num : num; + } + + // is power of 2? (== can be expressed as 1<<i) + // tested + XS_LIBFUNC_ATTRIB xs_is_2power(x) + { + return (x!=0) && ((x&(x-1))==0); + } + + // degrees to radians + // tested + XS_LIBFUNC_ATTRIB Float:xs_deg2rad(Float:x) + { + return x * 0.017453292519943; + } + + // tested + XS_LIBFUNC_ATTRIB Float:xs_rad2deg(Float:x) + { + return x * 57.29577951308232; + } + + // untested, should work though + XS_LIBFUNC_ATTRIB Float:xs_gra2rad(Float:x) + { + return x * 0.015707963267948; + } + + // untested, should work though + XS_LIBFUNC_ATTRIB Float:xs_rad2gra(Float:x) + { + return x * 63.66197723675813; + } + + // Only works when there is no whitespace between %1, the comma and %2... + // tested + #define XS_FLEQ(%1,%2) (((%1) <= ((%2) + XS_FLEQ_TOLERANCE)) && ((%1) >= ((%2) - XS_FLEQ_TOLERANCE))) + + // 1/sqrt + // tested + XS_LIBFUNC_ATTRIB Float:xs_rsqrt(Float:x) + { + #if XS_PLATFORM == XS_AMX + // store half + new Float:xhalf = x * 0.5; + + // compute initial guess + new i = _:x; + i = 0x5f375a84 - (i >> 1); + x = Float:i; + + // refine 3 times + x = x * (1.5 - xhalf * x * x); + x = x * (1.5 - xhalf * x * x); + x = x * (1.5 - xhalf * x * x); + + return x; + #else + return 1.0 / floatsqroot(x); + #endif + } + + // sqrt + // tested + XS_LIBFUNC_ATTRIB Float:xs_sqrt(Float:x) + { + #if XS_PLATFORM == XS_AMX + // 1.0 / rsqrt should still be faster than loop-using-approximation-methods + return 1.0 / xs_rsqrt(x); + #else + return floatsqroot(x); + #endif + } + + // These functions generate errors if you use the macros with wrong parameter count. + stock Float:xs_fabs(Float:pa) + { + #pragma unused pa + new rawr = you_need_one_param_for_fabs; + rawr = warning_below_shows_line_number; + #pragma unused rawr + } + stock Float:xs_asin(Float:pa,Float:pb) + { + #pragma unused pa,pb + new rawr = you_need_two_params_for_asin; + rawr = warning_below_shows_line_number; + #pragma unused rawr + } + stock Float:xs_sin(Float:pa,Float:pb) + { + #pragma unused pa,pb + new rawr = you_need_two_params_for_sin; + #pragma unused rawr + } + stock Float:xs_acos(Float:pa,Float:pb) + { + #pragma unused pa,pb + new rawr = you_need_two_params_for_acos; + rawr = warning_below_shows_line_number; + #pragma unused rawr + } + stock Float:xs_cos(Float:pa,Float:pb) + { + #pragma unused pa,pb + new rawr = you_need_two_params_for_cos; + rawr = warning_below_shows_line_number; + #pragma unused rawr + } + stock Float:xs_atan(Float:pa,Float:pb) + { + #pragma unused pa,pb + new rawr = you_need_two_params_for_atan; + rawr = warning_below_shows_line_number; + #pragma unused rawr + } + stock Float:xs_atan2(Float:pa,Float:pb) + { + #pragma unused pa,pb + new rawr = you_need_two_params_for_atan2; + rawr = warning_below_shows_line_number; + #pragma unused rawr + } + stock Float:xs_tan(Float:pa, Float:pb) + { + #pragma unused pa,pb + new rawr = you_need_two_params_for_tan; + rawr = warning_below_shows_line_number; + #pragma unused rawr + } + + #if XS_PLATFORM == XS_AMX + #pragma semicolon 0 + #include <VexdUM> + #pragma semicolon 1 + // We need stocks to provide radian / degrees / grades functionality + + XS_LIBFUNC_ATTRIB Float:xs__2rad(Float:x, anglemode:mod) + { + switch (mod) + { + case radian: + return x; + case degrees: + return xs_deg2rad(x); + case grades: + return xs_gra2rad(x); + default: + xs_assert(0, "xs_asin, xs_sin, xs_acos, xs_cos, xs_atan, xs_atan2 or xs_tan called with invalid mod param"); + } + + return 0.0; // compiler warning + } + + #define xs_fabs(%1) fabs(%1) + #define xs_asin(%1,%2) asin(xs__2rad(%1, %2)) + #define xs_sin(%1,%2) sin(xs__2rad(%1, %2)) + #define xs_acos(%1,%2) acos(xs__2rad(%1, %2)) + #define xs_cos(%1,%2) cos(xs__2rad(%1, %2)) + #define xs_atan(%1,%2) atan(xs__2rad(%1, %2)) + #define xs_atan2(%1,%2) atan2(xs__2rad(%1, %2)) + #define xs_tan(%1,%2) tan(xs__2rad(%1, %2)) + #else + #define xs_fabs(%1) floatabs(%1) + #define xs_asin(%1,%2) floatasin(%1, %2) + #define xs_sin(%1,%2) floatsin(%1, %2) + #define xs_acos(%1,%2) floatacos(%1, %2) + #define xs_cos(%1,%2) floatcos(%1, %2) + #define xs_atan(%1,%2) floatatan(%1, %2) + #define xs_atan2(%1,%2) floatatan2(%1, %2) + #define xs_tan(%1,%2) floattan(%1, %2) + #endif + + /****** RANDOM NUMBERS ******/ + // This routine comes from the book "Inner Loops" by Rick Booth, Addison-Wesley + // (ISBN 0-201-47960-5). This is a "multiplicative congruential random number + // generator" that has been extended to 31-bits + + XS_LIBVAR_ATTRIB xs__internalseed=0x546875; + + #define XS__IL_RMULT 1103515245 + + // tested + XS_LIBFUNC_ATTRIB xs_seed(seed) + { + xs__internalseed = seed; + } + + // tested + XS_LIBFUNC_ATTRIB xs_irand() + { + new lo, hi, ll, lh, hh, hl; + new result; + + lo = xs__internalseed & 0xffff; + hi = xs__internalseed >> 16; + xs__internalseed = xs__internalseed * XS__IL_RMULT + 12345; + ll = lo * (XS__IL_RMULT & 0xffff); + lh = lo * (XS__IL_RMULT >> 16 ); + hl = hi * (XS__IL_RMULT & 0xffff); + hh = hi * (XS__IL_RMULT >> 16 ); + result = xs_abs(((ll + 12345) >> 16) + lh + hl + (hh << 16)); + return result; + } + + // tested + XS_LIBFUNC_ATTRIB Float:xs_frand() + { + return float(xs_irand()) / float(xs_get_maxnum()); // -1/2 should be the biggest possible positive number + } + + // tested + XS_LIBFUNC_ATTRIB xs_irand_range(pmin, pmax) + { + xs_assert_dbg(pmax - pmin >= 0, "xs_irand_range: pmin > pmax"); + new i = pmin + floatround(xs_frand() * float(pmax - pmin)); + if (i > pmax) + i = pmax; + return i; + } + + /****** VECTORS & PLANES ******/ + + // *** vectors + + // Set vec components to values + // tested + XS_LIBFUNC_ATTRIB xs_vec_set(Float:vec[], Float:x, Float:y, Float:z) + { + vec[0] = x; + vec[1] = y; + vec[2] = z; + } + + // Add vec + // tested + XS_LIBFUNC_ATTRIB xs_vec_add(const Float:in1[], const Float:in2[], Float:out[]) + { + out[0] = in1[0] + in2[0]; + out[1] = in1[1] + in2[1]; + out[2] = in1[2] + in2[2]; + } + + // Subtract vec + // untested, but should work + XS_LIBFUNC_ATTRIB xs_vec_sub(const Float:in1[], const Float:in2[], Float:out[]) + { + out[0] = in1[0] - in2[0]; + out[1] = in1[1] - in2[1]; + out[2] = in1[2] - in2[2]; + } + + // Are vectors equal? + // untested, but should work + XS_LIBFUNC_ATTRIB bool:xs_vec_equal(const Float:vec1[], const Float:vec2[]) + { + return (vec1[0] == vec2[0]) && (vec1[1] == vec2[1]) && (vec1[2] == vec2[2]); + } + + // Are vectors nearly equal? + // tested + XS_LIBFUNC_ATTRIB bool:xs_vec_nearlyequal(const Float:vec1[], const Float:vec2[]) + { + return XS_FLEQ(vec1[0], vec2[0]) && XS_FLEQ(vec1[1], vec2[1]) && XS_FLEQ(vec1[2], vec2[2]); + } + + // multiply vector by scalar + // tested + XS_LIBFUNC_ATTRIB xs_vec_mul_scalar(const Float:vec[], Float:scalar, Float:out[]) + { + out[0] = vec[0] * scalar; + out[1] = vec[1] * scalar; + out[2] = vec[2] * scalar; + } + + // divide vector by scalar + // untested, but should work + XS_LIBFUNC_ATTRIB xs_vec_div_scalar(const Float:vec[], Float:scalar, Float:out[]) + { + new Float:__tmp = 1.0 / scalar; + out[0] = vec[0] * __tmp; + out[1] = vec[1] * __tmp; + out[2] = vec[2] * __tmp; + } + + // Compute vector length + // tested + XS_LIBFUNC_ATTRIB Float:xs_vec_len(const Float:vec[]) + { + return xs_sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); + } + + // Normalize vec + // tested + XS_LIBFUNC_ATTRIB xs_vec_normalize(const Float:vec[], Float:out[]) + { + new Float:invlen = xs_rsqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); + out[0] = vec[0] * invlen; + out[1] = vec[1] * invlen; + out[2] = vec[2] * invlen; + } + + // Store the cross product of vec1 and vec2 in out + // tested + XS_LIBFUNC_ATTRIB xs_vec_cross(const Float:vec1[], const Float:vec2[], Float:out[]) + { + out[0] = vec1[1]*vec2[2] - vec1[2]*vec2[1]; + out[1] = vec1[2]*vec2[0] - vec1[0]*vec2[2]; + out[2] = vec1[0]*vec2[1] - vec1[1]*vec2[0]; + } + + // Compute vec1 dot vec2 + // tested + XS_LIBFUNC_ATTRIB Float:xs_vec_dot(const Float:vec1[], const Float:vec2[]) + { + return vec1[0]*vec2[0] + vec1[1]*vec2[1] + vec1[2]*vec2[2]; + } + + // Negate vec into out + // untested, but should work + XS_LIBFUNC_ATTRIB xs_vec_neg(const Float:vec[], Float:out[]) + { + out[0] = -vec[0]; + out[1] = -vec[1]; + out[2] = -vec[2]; + } + + // Copy vec + // untested, but should work + XS_LIBFUNC_ATTRIB xs_vec_copy(const Float:vecIn[], Float:vecOut[]) + { + vecOut[0] = vecIn[0]; + vecOut[1] = vecIn[1]; + vecOut[2] = vecIn[2]; + } + + // Compute angle between vec1 and vec2 + // tested + XS_LIBFUNC_ATTRIB Float:xs_vec_angle(const Float:vec1[], const Float:vec2[]) + { + return xs_rad2deg(xs_acos(xs_vec_dot(vec1, vec2), radian)); + } + + // Reflect vec about normal + // untested + XS_LIBFUNC_ATTRIB xs_vec_reflect(const Float:vec[], const Float:normal[], Float:out[]) + { + // normalize(vec) - (normal * 2.0 * (tmp . normal)) * length(vec) + + new Float:tmp1[3]; + xs_vec_normalize(vec, tmp1); + + // tmp1 - (normal * 2.0 * (tmp . normal)) * length(vec) + + new Float:tmp2[3]; + xs_vec_mul_scalar(normal, 2.0, tmp2); + xs_vec_mul_scalar(tmp2, xs_vec_dot(tmp1, normal), tmp2); + + // tmp1 - tmp2 * length(vec) + xs_vec_mul_scalar(tmp2, xs_vec_len(vec), tmp2); + + // tmp1 - tmp2 + xs_vec_sub(tmp1, tmp2, out); + } + + // Turn a 3D vector into a 2D vector + XS_LIBFUNC_ATTRIB xs_vec_make2d(const Float:vec[3], Float:out[2]) + { + out[0] = vec[0]; + out[1] = vec[1]; + } + + // *** planes + + // normal + #define XS_PLANE_A 0 + #define XS_PLANE_B 1 + #define XS_PLANE_C 2 + // plane shift distance + #define XS_PLANE_D 3 + + + // Set a plane to specific values + // tested + XS_LIBFUNC_ATTRIB xs_plane_set(Float:plane[], Float:a, Float:b, Float:c, Float:d) + { + plane[XS_PLANE_A] = a; + plane[XS_PLANE_B] = b; + plane[XS_PLANE_C] = c; + plane[XS_PLANE_D] = d; + } + + // Construct a plane out of 3 points + // tested + XS_LIBFUNC_ATTRIB xs_plane_3p(Float:plane[], const Float:p1[], const Float:p2[], const Float:p3[]) + { + new Float:normalA[3], Float:normalB[3]; + + // normalA = Normalize(p3 - p1); + normalA[0] = p3[0] - p1[0]; + normalA[1] = p3[1] - p1[1]; + normalA[2] = p3[2] - p1[2]; + xs_vec_normalize(normalA, normalA); + + // normalB = Normalize(p3 - p2); + normalB[0] = p3[0] - p2[0]; + normalB[1] = p3[1] - p2[1]; + normalB[2] = p3[2] - p2[2]; + xs_vec_normalize(normalB, normalB); + + // plane normal = Normalize(normalA cross normalB) + xs_vec_cross(normalA, normalB, plane); + xs_vec_normalize(plane, plane); + + // plane shift distance = (-p1) dot plane normal + new Float:__tmp[3]; + xs_vec_neg(plane, __tmp); + plane[XS_PLANE_D] = xs_vec_dot(__tmp, p1); + + } + + // untested, but should work + XS_LIBFUNC_ATTRIB bool:xs_plane_equal(const Float:plane1[], const Float:plane2[]) + { + if ( (plane1[0] == plane2[0]) && + (plane1[1] == plane2[1]) && + (plane1[2] == plane2[2]) && + (plane1[3] == plane2[3])) + return true; + return false; + } + + // untested, but should work + XS_LIBFUNC_ATTRIB bool:xs_plane_nearlyequal(const Float:plane1[], const Float:plane2[]) + { + if ( XS_FLEQ(plane1[0], plane2[0]) && + XS_FLEQ(plane1[1], plane2[1]) && + XS_FLEQ(plane1[2], plane2[2]) && + XS_FLEQ(plane1[3], plane2[3])) + return true; + return false; + } + + // Compute distance between plane and point + // tested + XS_LIBFUNC_ATTRIB Float:xs_plane_dst2point(const Float:plane[], const Float:point[]) + { + // return normal dot point + D + return xs_vec_dot(plane, point) + plane[XS_PLANE_D]; + } + + // Checks whether plane intersects with the ray starting and rayStart and going to rayDir direction. + // If yes, returns true and sets out to the intersection point + // Otherwise, returns false + // tested + XS_LIBFUNC_ATTRIB bool:xs_plane_rayintersect(const Float:plane[], const Float:rayStart[], const Float:rayDir[], Float:out[]) + { + new Float:a = xs_vec_dot(plane, rayDir); + + if (a == 0.0) + return false; // ray is parallel to plane + + // if (distance plane<->(rayStart + rayDir) > distance plane<->rayStart) and both have the same sign, the ray + // goes away from the plane + new Float:rsplusrd[3]; + xs_vec_add(rayStart, rayDir, rsplusrd); + new Float:dst1 = xs_plane_dst2point(plane, rsplusrd); + new Float:dst2 = xs_plane_dst2point(plane, rayStart); + if (xs_fabs(dst1) > xs_fabs(dst2) && xs_fsign(dst1) == xs_fsign(dst2)) + return false; + + + // out = rayStart - rayDir * ((distance plane<->rayStart) / a) + new Float:__tmp[3]; + xs_vec_mul_scalar(rayDir, xs_plane_dst2point(plane, rayStart) / a, __tmp); + // out = rayStart - tmp + xs_vec_sub(rayStart, __tmp, out); + + return true; + } + + // Is point on plane? + // tested + XS_LIBFUNC_ATTRIB bool:xs_point_onplane(const Float:plane[], const Float:point[]) + { + return XS_FLEQ(xs_plane_dst2point(plane, point), 0.0); + } + + // Project point on plane + // tested + XS_LIBFUNC_ATTRIB xs_projpoint_onplane(const Float:plane[], const Float:point[], Float:out[]) + { + new Float:__tmp[3]; + // out = point - (plane normal * distance point<->plane) + xs_vec_copy(plane, __tmp); + xs_vec_mul_scalar(__tmp, xs_plane_dst2point(plane, point), __tmp); + xs_vec_sub(point, __tmp, out); + } + + // Copy plane + // untested, but should work + XS_LIBFUNC_ATTRIB xs_plane_copy(const Float:planeIn[], Float:planeOut[]) + { + planeOut[0] = planeIn[0]; + planeOut[1] = planeIn[1]; + planeOut[2] = planeIn[2]; + planeOut[3] = planeIn[3]; + } + + /****** HL ENGINE SPECIFIC STUFF ******/ + // Compute forward, right and up vector from angles + // half-tested + + // angle indexes + #define XS_PITCH 0 // up / down + #define XS_YAW 1 // left / right + #define XS_ROLL 2 // fall over + + XS_LIBFUNC_ATTRIB xs_anglevectors(const Float:angles[3], Float:fwd[3], Float:right[3], Float:up[3]) + { + // sin (s) and cos (c) for yaw (y), pitch (p) and roll (r) + new Float:sr, Float:sp, Float:sy, Float:cr, Float:cp, Float:cy; + + sy = xs_sin(angles[XS_YAW], degrees); + cy = xs_cos(angles[XS_YAW], degrees); + sp = xs_sin(angles[XS_PITCH], degrees); + cp = xs_cos(angles[XS_PITCH], degrees); + sr = xs_sin(angles[XS_ROLL], degrees); + cr = xs_cos(angles[XS_ROLL], degrees); + + fwd[0] = cp*cy; + fwd[1] = cp*sy; + fwd[2] = -sp; + + right[0] = (-1*sr*sp*cy + -1*cr*-sy); + right[1] = (-1*sr*sp*sy + -1*cr*cy); + right[2] = -1*sr*cp; + + up[0] = (cr*sp*cy + -sr*-sy); + up[1] = (cr*sp*sy + -sr*cy); + up[2] = cr*cp; + } +/****** STRING FUNCS *******/ + + // tested + XS_LIBFUNC_ATTRIB xs_strchr(const str[], chr) + { + for (new i = 0; str[i] != 0; ++i) + { + if (str[i] == chr) + return i; + } + return -1; + } + + // by JGHG, adapted + // removes charstotrim number of charactes from stringtotrim's + // - beginning if fromleft is true + // - end if fromleft is false + // tested + XS_LIBFUNC_ATTRIB xs_strtrim(stringtotrim[], charstotrim, bool:fromleft = true) + { + if (charstotrim <= 0) + return; + + if (fromleft) + { + new maxlen = strlen(stringtotrim); + if (charstotrim > maxlen) + charstotrim = maxlen; + + // In format, input and output regions can overlap + format(stringtotrim, maxlen, "%s", stringtotrim[charstotrim]); + } + else + { + new maxlen = strlen(stringtotrim) - charstotrim; + if (maxlen < 0) + maxlen = 0; + + // In format, input and output regions can overlap + format(stringtotrim, maxlen, "%s", stringtotrim); + } + } + + // by xeroblood, adapted + // copies characters from oldmsg to newmsg, starting at start and ending at end (_includes_ end). + // terminates newmsg with 0 + // if outlen is positive, it specifies the maximal number of characters to be copied. + // otherwise, assumes that newmsg is at least end-start+1 characters long. + // tested + XS_LIBFUNC_ATTRIB xs_strmid(const oldmsg[], newmsg[], start, end, outlen=-1) + { + new len = strlen(oldmsg); + + if(start < 0) + start = 0; + + ++end; // Include end + + if(end <= start || end > len) + end = len; + + new j = 0, i = start; + for(; (i < end) && (outlen--);) + newmsg[j++] = oldmsg[i++]; + + newmsg[j] = 0; + } + + // by xeroblood, adapted + // maxelems: maximal number of elements in output, elemsize: maximal size of one element + // tested + XS_LIBFUNC_ATTRIB xs_explode(const input[], output[][], delimiter, maxelems, elemsize) + { + new nIdx = 0; + new nLen = 0; + + new copied = 0; + while(nLen < strlen(input) && nIdx < maxelems) + { + copied = copyc(output[nIdx++], elemsize, input[nLen], delimiter); + if (copied == elemsize) + { + // maybe it got force-stopped because of maxsize + // so check whether we have to skip something + if (input[nLen + copied] != delimiter && input[nLen + copied] != 0) + { + new found = xs_strchr(input[nLen + copied], delimiter); + if (found == -1) + break; + copied += found; + } + } + + nLen += copied + 1; // +1: skip delimiter + } + return nIdx; + } + + // returns number of cells written. + XS_LIBFUNC_ATTRIB xs_implode(output[], outsize, delimiter, const input[][], elemsnum) + { + new pos = 0; + new copied; + for (new i = 0; i < elemsnum; ++i) + { + copied = copy(output[pos], outsize - pos, input[i]); + pos += copied; + if (pos >= outsize) + return outsize; + // append delimiter + output[pos] = delimiter; + ++pos; + // last check + if (pos >= outsize) + return outsize; + } + + output[--pos] = 0; // The last char would be delimiter, so skip it. + return pos; + } + + + XS_LIBVAR_ATTRIB xs__replace_buf[XS_REPLACEBUF_SIZE]; + // Replace all occurencies of what in text with with + // Returns number of (also partially if trimmed by len) replaced items. + XS_LIBFUNC_ATTRIB xs_replace(text[], len, const what[], const with[]) + { + new occur = 0; + new i = 0; + new bufPos = 0; + new replaceLen = strlen(with); + new whatLen = strlen(what); + for (; text[i]; ++i) + { + if (text[i] == what[0]) + { + new posInWhat=0; + new j; + for (j = i; j-i < replaceLen && text[j]; ++j, ++posInWhat) + { + if (text[j] != what[posInWhat]) + break; + } + if (whatLen == posInWhat) + { + for (new i2 = 0; i2 < replaceLen && bufPos < XS_REPLACEBUF_SIZE; ++i2) + xs__replace_buf[bufPos++] = with[i2]; + i = j - 1; + ++occur; + if (bufPos >= XS_REPLACEBUF_SIZE) + return occur; + continue; + } + } + if (bufPos >= XS_REPLACEBUF_SIZE) + return occur; + xs__replace_buf[bufPos++] = text[i]; + } + xs__replace_buf[bufPos] = 0; + copy(text, len, xs__replace_buf); + return occur; + } + + // replaces all occurencies of what in text with with + // Returns number of replaced items. + XS_LIBFUNC_ATTRIB xs_replace_char(text[], len, what, with) + { + // let the xs_replace function do the work + new arr[4]; + arr[0] = what; + arr[1] = 0; + arr[2] = with; + arr[3] = 0; + + return xs_replace(text, len, arr[0], arr[2]); + } + + #if XS_PLATFORM == XS_AMX + // message_begin checking for AMX + xs__hook_message_begin(dest, msg_type, origin[3]={0,0,0}, player = 0) + { + xs_assert(xs_is_msg_valid(msg_type), "message_begin called with bogus message type"); + return message_begin(dest, msg_type, origin, player); + } + + #define message_begin xs__hook_message_begin + #endif +/****** MISC FUNCS *******/ + // sets namestr to name of the command identified by cid + // half-tested + XS_LIBFUNC_ATTRIB xs_concmd_name(cid, namestr[], namelen) + { + new dummy1; + new dummy2[1]; + get_concmd(cid, namestr, namelen, dummy1, dummy2, 0, 0); + } + + // Checks whether there are at least num free visible slots + // half-tested + XS_LIBFUNC_ATTRIB bool:xs_freevisibleslots(num) + { + new maxplayers = get_cvar_num("sv_visiblemaxplayers"); + if (maxplayers <= 0) + maxplayers = get_maxplayers(); + + return (get_playersnum(1) <= maxplayers-num) ? true : false; + } + + // Returns biggest possible positive number + XS_LIBVAR_ATTRIB xs__maxnum = 0; + // tested + XS_LIBFUNC_ATTRIB xs_get_maxnum() + { + if (!xs__maxnum) + { + // build it + xs__maxnum = ((1 << (cellbits - 2)) - 1 ) | (1 << (cellbits - 2)); + /* + new bits = get_cellsize() * 8 - 1; + for (new i = 0; i < bits; ++i) + xs__maxnum |= 1 << i; + */ + } + return xs__maxnum; + } + + // tested + XS_LIBFUNC_ATTRIB xs_get_minnum() + { + return xs_get_maxnum() + 1; + } + + + // *** The following two functions were created by Damaged Soul. + + // Max messages reserved by engine (DO NOT MODIFY) + #define XS__MAX_ENGINE_MESSAGES 63 + // Max possible messages for mod, is 255 really the limit? + #define XS__MAX_POSSIBLE_MESSAGES 255 + + // Returns max number of messages for mod + XS_LIBFUNC_ATTRIB xs_get_maxmessages() + { + new name[2]; + + for (new i = XS__MAX_ENGINE_MESSAGES + 1; i <= XS__MAX_POSSIBLE_MESSAGES; i++) + if (!get_user_msgname(i, name, 1)) + return i - 1; + + return XS__MAX_POSSIBLE_MESSAGES; + } + + // Returns true if msgid is a valid message + XS_LIBFUNC_ATTRIB bool:xs_is_msg_valid(msgid) + { + new name[2]; + new retval = get_user_msgname(msgid, name, 1); + + if (msgid < 1 || (msgid > XS__MAX_ENGINE_MESSAGES && !retval)) + return false; + + return true; + } + +/****** MANAGED TASKS ******/ + + // ***** managed task ids + XS_LIBFUNC_ATTRIB xs_find_freetaskid() + { + for (new i = 1; i <= XS_TASK_MANAGEDIDS; ++i) + { + if (!task_exists(i)) + return i; + } + return -1; + } + + // ***** managed tasks + enum xs_paramtypes + { + xs_invalid = 0, + xs_int, + xs_float, + xs_string + } + + // new task + XS_LIBVAR_ATTRIB xs__TaskParam[ 1 + // number of parameters + XS_TASK_MAXPARAMS + // parameter types + (XS_TASK_MAXPARAMSIZE char) * XS_TASK_MAXPARAMS]; // space for len + value + + XS_LIBVAR_ATTRIB Float:xs__TaskInterval = 0.0; + XS_LIBVAR_ATTRIB xs__TaskFlags[5]; + XS_LIBVAR_ATTRIB xs__TaskFunc[48]; + XS_LIBVAR_ATTRIB xs__TaskId; + XS_LIBVAR_ATTRIB xs__TaskRepeat; + + #define xs__TaskParamCount xs__TaskParam[0] + #define xs__TaskParamType[%1] xs__TaskParam[1 + %1] + + #define xs__TaskParamValue[%1] xs__TaskParam[1 + XS_TASK_MAXPARAMS + (%1 * (XS_TASK_MAXPARAMSIZE char))] + + + // incoming task + XS_LIBVAR_ATTRIB xs__ITaskParam[ 1 + // number of parameters + XS_TASK_MAXPARAMS + // parameter types + (XS_TASK_MAXPARAMSIZE char) * XS_TASK_MAXPARAMS]; // space for len + value + XS_LIBVAR_ATTRIB xs__ITaskId; + + #define xs__ITaskParamCount xs__ITaskParam[0] + #define xs__ITaskParamType[%1] xs__ITaskParam[1 + %1] + + #define xs__ITaskParamValue[%1] xs__ITaskParam[1 + XS_TASK_MAXPARAMS + (%1 * (XS_TASK_MAXPARAMSIZE char))] + + // tested + XS_LIBFUNC_ATTRIB xs_task_begin(Float:interval, const func[], id = 0, const flags[] = "", repeat = 0) + { + xs_assert(xs__TaskInterval == 0.0, "New xs_task_begin called before xs_task_end"); + + xs__TaskInterval = interval; + if (xs__TaskInterval < 0.1) + xs__TaskInterval = 0.1; + + copy(xs__TaskFunc, 47, func); + xs__TaskId = id; + copy(xs__TaskFlags, 4, flags); + xs__TaskRepeat = repeat; + + xs__TaskParamCount = 0; + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_pushint(value, bool:__isfl=false /*internal use only*/) + { + xs_assert(xs__TaskInterval, "xs_task_push* called without xs_task_begin"); + if (xs__TaskParamCount >= XS_TASK_MAXPARAMS) + return 0; + + xs__TaskParamType[xs__TaskParamCount] = __isfl ? xs_float : xs_int; + xs__TaskParamValue[xs__TaskParamCount] = value; + + ++xs__TaskParamCount; + return 1; + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_pushfl(Float:value) + { + return xs_task_pushint(_:value, true); + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_pushstr(const value[]) + { + xs_assert(xs__TaskInterval, "xs_task_push* called without xs_task_begin"); + if (xs__TaskParamCount >= XS_TASK_MAXPARAMS) + return 0; + + xs__TaskParamType[xs__TaskParamCount] = xs_string; + strpack(xs__TaskParamValue[xs__TaskParamCount], value); + ++xs__TaskParamCount; + return 1; + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_end() + { + xs_assert(xs__TaskInterval, "xs_task_end called without xs_task_begin"); + + // find a task id if needed + if (xs__TaskId == -1) + { + xs__TaskId = xs_find_freetaskid(); + if (xs__TaskId == -1) + { + // not found + xs__TaskInterval = 0.0; + return -1; + } + } + + set_task(xs__TaskInterval, xs__TaskFunc, xs__TaskId, xs__TaskParam, + 1 + xs__TaskParamCount * (XS_TASK_MAXPARAMSIZE char), xs__TaskFlags, xs__TaskRepeat); + + xs__TaskInterval = 0.0; + + return xs__TaskId; + } + + + // tested + #define XS_MAKE_TASKFUNC(%1) public %1(const _xs__taskparam[], _xs__taskid) if(xs__task_setup(_xs__taskparam, _xs__taskid)) + + // tested + XS_LIBFUNC_ATTRIB xs__task_setup(const param[], taskid) + { + xs__ITaskId = taskid; + new len = 1 + param[0] * (XS_TASK_MAXPARAMSIZE char); + for (new i = 0; i < len; ++i) + xs__ITaskParam[i] = param[i]; + return 1; + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_readid() + { + return xs__ITaskId; + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_paramcount() + { + return xs__ITaskParamCount; + } + + // tested + XS_LIBFUNC_ATTRIB xs_paramtypes:xs_task_paramtype(paramid) + { + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return xs_invalid; + + return xs_paramtypes:xs__ITaskParamType[paramid]; + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_paramint(paramid) + { + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return 0; + if (xs__ITaskParamType[paramid] != _:xs_int) + return 0; + + return xs__ITaskParamValue[paramid]; + } + + // tested + XS_LIBFUNC_ATTRIB Float:xs_task_paramfl(paramid) + { + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return 0.0; + if (xs__ITaskParamType[paramid] != _:xs_float) + return 0.0; + + return Float:xs__ITaskParamValue[paramid]; + } + + // tested + XS_LIBFUNC_ATTRIB xs_task_paramstr(paramid, out[], maxlen) + { + #pragma unused maxlen + + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return 0; + if (xs__ITaskParamType[paramid] != _:xs_string) + return 0; + + strunpack(out, xs__ITaskParamValue[paramid]); + return 1; + } + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/mapchooser.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/mapchooser.sma new file mode 100644 index 0000000..0e0d0e9 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/mapchooser.sma @@ -0,0 +1,315 @@ +/* AMX Mod X +* Nextmap Chooser Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +#define SELECTMAPS 5 + +#define charsof(%1) (sizeof(%1)-1) + +new Array:g_mapName; +new g_mapNums; + +new g_nextName[SELECTMAPS] +new g_voteCount[SELECTMAPS + 2] +new g_mapVoteNum +new g_teamScore[2] +new g_lastMap[32] + +new g_coloredMenus +new bool:g_selected = false + +public plugin_init() +{ + register_plugin("Nextmap Chooser", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("mapchooser.txt") + register_dictionary("common.txt") + + g_mapName=ArrayCreate(32); + + new MenuName[64] + + format(MenuName, 63, "%L", "en", "CHOOSE_NEXTM") + register_menucmd(register_menuid(MenuName), (-1^(-1<<(SELECTMAPS+2))), "countVote") + register_cvar("amx_extendmap_max", "90") + register_cvar("amx_extendmap_step", "15") + + if (cstrike_running()) + register_event("TeamScore", "team_score", "a") + + get_localinfo("lastMap", g_lastMap, 31) + set_localinfo("lastMap", "") + + new maps_ini_file[64] + get_configsdir(maps_ini_file, 63); + format(maps_ini_file, 63, "%s/maps.ini", maps_ini_file); + + if (!file_exists(maps_ini_file)) + get_cvar_string("mapcyclefile", maps_ini_file, 63) + if (loadSettings(maps_ini_file)) + set_task(15.0, "voteNextmap", 987456, "", 0, "b") + + g_coloredMenus = colored_menus() + +} + +public checkVotes() +{ + new b = 0 + + for (new a = 0; a < g_mapVoteNum; ++a) + if (g_voteCount[b] < g_voteCount[a]) + b = a + + + if (g_voteCount[SELECTMAPS] > g_voteCount[b] + && g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS+1]) + { + new mapname[32] + + get_mapname(mapname, 31) + new Float:steptime = get_cvar_float("amx_extendmap_step") + set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") + steptime) + client_print(0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_EXT", steptime) + log_amx("Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes", mapname, steptime) + + return + } + + new smap[32] + if (g_voteCount[b] && g_voteCount[SELECTMAPS + 1] <= g_voteCount[b]) + { + ArrayGetString(g_mapName, g_nextName[b], smap, charsof(smap)); + set_cvar_string("amx_nextmap", smap); + } + + + get_cvar_string("amx_nextmap", smap, 31) + client_print(0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_NEXT", smap) + log_amx("Vote: Voting for the nextmap finished. The nextmap will be %s", smap) +} + +public countVote(id, key) +{ + if (get_cvar_float("amx_vote_answers")) + { + new name[32] + get_user_name(id, name, 31) + + if (key == SELECTMAPS) + client_print(0, print_chat, "%L", LANG_PLAYER, "CHOSE_EXT", name) + else if (key < SELECTMAPS) + { + new map[32]; + ArrayGetString(g_mapName, g_nextName[key], map, charsof(map)); + client_print(0, print_chat, "%L", LANG_PLAYER, "X_CHOSE_X", name, map); + } + } + ++g_voteCount[key] + + return PLUGIN_HANDLED +} + +bool:isInMenu(id) +{ + for (new a = 0; a < g_mapVoteNum; ++a) + if (id == g_nextName[a]) + return true + return false +} + +public voteNextmap() +{ + new winlimit = get_cvar_num("mp_winlimit") + new maxrounds = get_cvar_num("mp_maxrounds") + + if (winlimit) + { + new c = winlimit - 2 + + if ((c > g_teamScore[0]) && (c > g_teamScore[1])) + { + g_selected = false + return + } + } + else if (maxrounds) + { + if ((maxrounds - 2) > (g_teamScore[0] + g_teamScore[1])) + { + g_selected = false + return + } + } else { + new timeleft = get_timeleft() + + if (timeleft < 1 || timeleft > 129) + { + g_selected = false + return + } + } + + if (g_selected) + return + + g_selected = true + + new menu[512], a, mkeys = (1<<SELECTMAPS + 1) + + new pos = format(menu, 511, g_coloredMenus ? "\y%L:\w^n^n" : "%L:^n^n", LANG_SERVER, "CHOOSE_NEXTM") + new dmax = (g_mapNums > SELECTMAPS) ? SELECTMAPS : g_mapNums + + for (g_mapVoteNum = 0; g_mapVoteNum < dmax; ++g_mapVoteNum) + { + a = random_num(0, g_mapNums - 1) + + while (isInMenu(a)) + if (++a >= g_mapNums) a = 0 + + g_nextName[g_mapVoteNum] = a + pos += format(menu[pos], 511, "%d. %a^n", g_mapVoteNum + 1, ArrayGetStringHandle(g_mapName, a)); + mkeys |= (1<<g_mapVoteNum) + g_voteCount[g_mapVoteNum] = 0 + } + + menu[pos++] = '^n' + g_voteCount[SELECTMAPS] = 0 + g_voteCount[SELECTMAPS + 1] = 0 + + new mapname[32] + get_mapname(mapname, 31) + + if ((winlimit + maxrounds) == 0 && (get_cvar_float("mp_timelimit") < get_cvar_float("amx_extendmap_max"))) + { + pos += format(menu[pos], 511, "%d. %L^n", SELECTMAPS + 1, LANG_SERVER, "EXTED_MAP", mapname) + mkeys |= (1<<SELECTMAPS) + } + + format(menu[pos], 511, "%d. %L", SELECTMAPS+2, LANG_SERVER, "NONE") + new MenuName[64] + + format(MenuName, 63, "%L", "en", "CHOOSE_NEXTM") + show_menu(0, mkeys, menu, 15, MenuName) + set_task(15.0, "checkVotes") + client_print(0, print_chat, "%L", LANG_SERVER, "TIME_CHOOSE") + client_cmd(0, "spk Gman/Gman_Choose2") + log_amx("Vote: Voting for the nextmap started") +} +stock bool:ValidMap(mapname[]) +{ + if ( is_map_valid(mapname) ) + { + return true; + } + // If the is_map_valid check failed, check the end of the string + new len = strlen(mapname) - 4; + + // The mapname was too short to possibly house the .bsp extension + if (len < 0) + { + return false; + } + if ( equali(mapname[len], ".bsp") ) + { + // If the ending was .bsp, then cut it off. + // the string is byref'ed, so this copies back to the loaded text. + mapname[len] = '^0'; + + // recheck + if ( is_map_valid(mapname) ) + { + return true; + } + } + + return false; +} + +loadSettings(filename[]) +{ + if (!file_exists(filename)) + return 0 + + new szText[32] + new currentMap[32] + + new buff[256]; + + get_mapname(currentMap, 31) + + new fp=fopen(filename,"r"); + + while (!feof(fp)) + { + buff[0]='^0'; + szText[0]='^0'; + + fgets(fp, buff, charsof(buff)); + + parse(buff, szText, charsof(szText)); + + + if (szText[0] != ';' && + ValidMap(szText) && + !equali(szText, g_lastMap) && + !equali(szText, currentMap)) + { + ArrayPushString(g_mapName, szText); + ++g_mapNums; + } + + } + + fclose(fp); + + return g_mapNums +} + +public team_score() +{ + new team[2] + + read_data(1, team, 1) + g_teamScore[(team[0]=='C') ? 0 : 1] = read_data(2) +} + +public plugin_end() +{ + new current_map[32] + + get_mapname(current_map, 31) + set_localinfo("lastMap", current_map) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/mapsmenu.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/mapsmenu.sma new file mode 100644 index 0000000..b957f30 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/mapsmenu.sma @@ -0,0 +1,595 @@ +/* AMX Mod X +* Maps Menu Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +new Array:g_mapName; +new g_mapNums +new g_menuPosition[33] + +new g_voteCount[5] + +new g_voteSelected[33][4] +new g_voteSelectedNum[33] + +new g_coloredMenus + +new g_choosed + +public plugin_init() +{ + register_plugin("Maps Menu", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("mapsmenu.txt") + register_dictionary("common.txt") + register_clcmd("amx_mapmenu", "cmdMapsMenu", ADMIN_MAP, "- displays changelevel menu") + register_clcmd("amx_votemapmenu", "cmdVoteMapMenu", ADMIN_VOTE, "- displays votemap menu") + + register_menucmd(register_menuid("Changelevel Menu"), 1023, "actionMapsMenu") + register_menucmd(register_menuid("Which map do you want?"), 527, "voteCount") + register_menucmd(register_menuid("Change map to"), 527, "voteCount") + register_menucmd(register_menuid("Votemap Menu"), 1023, "actionVoteMapMenu") + register_menucmd(register_menuid("The winner: "), 3, "actionResult") + + g_mapName=ArrayCreate(32); + + new maps_ini_file[64]; + get_configsdir(maps_ini_file, 63); + format(maps_ini_file, 63, "%s/maps.ini", maps_ini_file); + + if (!file_exists(maps_ini_file)) + get_cvar_string("mapcyclefile", maps_ini_file, sizeof(maps_ini_file) - 1); + + if (!file_exists(maps_ini_file)) + format(maps_ini_file, 63, "mapcycle.txt") + + load_settings(maps_ini_file) + + g_coloredMenus = colored_menus() +} + +public autoRefuse() +{ + log_amx("Vote: %L", "en", "RESULT_REF") + client_print(0, print_chat, "%L", LANG_PLAYER, "RESULT_REF") +} + +public actionResult(id, key) +{ + remove_task(4545454) + + switch (key) + { + case 0: + { + new _modName[10] + get_modname(_modName, 9) + + if (!equal(_modName, "zp")) + { + message_begin(MSG_ALL, SVC_INTERMISSION) + message_end() + } + + new tempMap[32]; + ArrayGetString(g_mapName, g_choosed, tempMap, charsmax(tempMap)); + + set_task(2.0, "delayedChange", 0, tempMap, strlen(tempMap) + 1) + log_amx("Vote: %L", "en", "RESULT_ACC") + client_print(0, print_chat, "%L", LANG_PLAYER, "RESULT_ACC") + } + case 1: autoRefuse() + } + + return PLUGIN_HANDLED +} + +public checkVotes(id) +{ + id -= 34567 + new num, ppl[32], a = 0 + + get_players(ppl, num, "c") + if (num == 0) num = 1 + g_choosed = -1 + + for (new i = 0; i < g_voteSelectedNum[id]; ++i) + if (g_voteCount[a] < g_voteCount[i]) + a = i + + new votesNum = g_voteCount[0] + g_voteCount[1] + g_voteCount[2] + g_voteCount[3] + g_voteCount[4] + new iRatio = votesNum ? floatround(get_cvar_float("amx_votemap_ratio") * float(votesNum), floatround_ceil) : 1 + new iResult = g_voteCount[a] + + if (iResult >= iRatio) + { + g_choosed = g_voteSelected[id][a] + new tempMap[32]; + ArrayGetString(g_mapName, g_choosed, tempMap, charsmax(tempMap)); + client_print(0, print_chat, "%L %s", LANG_PLAYER, "VOTE_SUCCESS", tempMap); + log_amx("Vote: %L %s", "en", "VOTE_SUCCESS", tempMap); + } + + if (g_choosed != -1) + { + if (is_user_connected(id)) + { + new menuBody[512] + new tempMap[32]; + ArrayGetString(g_mapName, g_choosed, tempMap, charsmax(tempMap)); + new len = format(menuBody, 511, g_coloredMenus ? "\y%L: \w%s^n^n" : "%L: %s^n^n", id, "THE_WINNER", tempMap) + + len += format(menuBody[len], 511 - len, g_coloredMenus ? "\y%L^n\w" : "%L^n", id, "WANT_CONT") + format(menuBody[len], 511-len, "^n1. %L^n2. %L", id, "YES", id, "NO") + + show_menu(id, 0x03, menuBody, 10, "The winner: ") + set_task(10.0, "autoRefuse", 4545454) + } else { + new _modName[10] + get_modname(_modName, 9) + + if (!equal(_modName, "zp")) + { + message_begin(MSG_ALL, SVC_INTERMISSION) + message_end() + } + new tempMap[32]; + ArrayGetString(g_mapName, g_choosed, tempMap, charsmax(tempMap)); + set_task(2.0, "delayedChange", 0, tempMap, strlen(tempMap) + 1) + } + } else { + client_print(0, print_chat, "%L", LANG_PLAYER, "VOTE_FAILED") + log_amx("Vote: %L", "en", "VOTE_FAILED") + } + + remove_task(34567 + id) +} + +public voteCount(id, key) +{ + if (key > 3) + { + client_print(0, print_chat, "%L", LANG_PLAYER, "VOT_CANC") + remove_task(34567 + id) + set_cvar_float("amx_last_voting", get_gametime()) + log_amx("Vote: Cancel vote session") + + return PLUGIN_HANDLED + } + + if (get_cvar_float("amx_vote_answers")) + { + new name[32] + + get_user_name(id, name, 31) + client_print(0, print_chat, "%L", LANG_PLAYER, "X_VOTED_FOR", name, key + 1) + } + + ++g_voteCount[key] + + return PLUGIN_HANDLED +} + +isMapSelected(id, pos) +{ + for (new a = 0; a < g_voteSelectedNum[id]; ++a) + if (g_voteSelected[id][a] == pos) + return 1 + return 0 +} + +displayVoteMapsMenu(id, pos) +{ + if (pos < 0) + return + + new menuBody[512], b = 0, start = pos * 7 + + if (start >= g_mapNums) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "VOTEMAP_MENU", pos + 1, (g_mapNums / 7 + ((g_mapNums % 7) ? 1 : 0))) + new end = start + 7, keys = MENU_KEY_0 + + if (end > g_mapNums) + end = g_mapNums + + new tempMap[32]; + for (new a = start; a < end; ++a) + { + ArrayGetString(g_mapName, a, tempMap, charsmax(tempMap)); + if (g_voteSelectedNum[id] == 4 || isMapSelected(id, pos * 7 + b)) + { + ++b + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, tempMap) + else + len += format(menuBody[len], 511-len, "#. %s^n", tempMap) + } else { + keys |= (1<<b) + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, tempMap) + } + } + + if (g_voteSelectedNum[id]) + { + keys |= MENU_KEY_8 + len += format(menuBody[len], 511-len, "^n8. %L^n", id, "START_VOT") + } + else + len += format(menuBody[len], 511-len, g_coloredMenus ? "^n\d8. %L^n\w" : "^n#. %L^n", id, "START_VOT") + + if (end != g_mapNums) + { + len += format(menuBody[len], 511-len, "^n9. %L...^n0. %L^n", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + len += format(menuBody[len], 511-len, "^n0. %L^n", id, pos ? "BACK" : "EXIT") + + if (g_voteSelectedNum[id]) + len += format(menuBody[len], 511-len, g_coloredMenus ? "^n\y%L:^n\w" : "^n%L:^n", id, "SEL_MAPS") + else + len += format(menuBody[len], 511-len, "^n^n") + + for (new c = 0; c < 4; c++) + { + if (c < g_voteSelectedNum[id]) + { + ArrayGetString(g_mapName, g_voteSelected[id][c], tempMap, charsmax(tempMap)); + len += format(menuBody[len], 511-len, "%s^n", tempMap) + } + else + len += format(menuBody[len], 511-len, "^n") + } + + new menuName[64] + format(menuName, 63, "%L", "en", "VOTEMAP_MENU") + + show_menu(id, keys, menuBody, -1, menuName) +} + +public cmdVoteMapMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + if (get_cvar_float("amx_last_voting") > get_gametime()) + { + client_print(id, print_chat, "%L", id, "ALREADY_VOT") + return PLUGIN_HANDLED + } + + g_voteSelectedNum[id] = 0 + + if (g_mapNums) + { + displayVoteMapsMenu(id, g_menuPosition[id] = 0) + } else { + console_print(id, "%L", id, "NO_MAPS_MENU") + client_print(id, print_chat, "%L", id, "NO_MAPS_MENU") + } + + return PLUGIN_HANDLED +} + +public cmdMapsMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + if (g_mapNums) + { + displayMapsMenu(id, g_menuPosition[id] = 0) + } else { + console_print(id, "%L", id, "NO_MAPS_MENU") + client_print(id, print_chat, "%L", id, "NO_MAPS_MENU") + } + + return PLUGIN_HANDLED +} + +public delayedChange(mapname[]) + server_cmd("changelevel %s", mapname) + +public actionVoteMapMenu(id, key) +{ + new tempMap[32]; + switch (key) + { + case 7: + { + new Float:voting = get_cvar_float("amx_last_voting") + + if (voting > get_gametime()) + { + client_print(id, print_chat, "%L", id, "ALREADY_VOT") + return PLUGIN_HANDLED + } + + if (voting && voting + get_cvar_float("amx_vote_delay") > get_gametime()) + { + client_print(id, print_chat, "%L", id, "VOT_NOW_ALLOW") + return PLUGIN_HANDLED + } + + g_voteCount = {0, 0, 0, 0, 0} + + new Float:vote_time = get_cvar_float("amx_vote_time") + 2.0 + set_cvar_float("amx_last_voting", get_gametime() + vote_time) + new iVoteTime = floatround(vote_time) + + set_task(vote_time, "checkVotes", 34567 + id) + + new menuBody[512] + new players[32] + new pnum, keys, len + + get_players(players, pnum) + + if (g_voteSelectedNum[id] > 1) + { + len = format(menuBody, 511, g_coloredMenus ? "\y%L^n\w^n" : "%L^n^n", id, "WHICH_MAP") + + for (new c = 0; c < g_voteSelectedNum[id]; ++c) + { + ArrayGetString(g_mapName, g_voteSelected[id][c], tempMap, charsmax(tempMap)); + len += format(menuBody[len], 511, "%d. %s^n", c + 1, tempMap) + keys |= (1<<c) + } + + keys |= (1<<8) + len += format(menuBody[len], 511, "^n9. %L^n", id, "NONE") + } else { + ArrayGetString(g_mapName, g_voteSelected[id][0], tempMap, charsmax(tempMap)); + len = format(menuBody, 511, g_coloredMenus ? "\y%L^n%s?^n\w^n1. %L^n2. %L^n" : "%L^n%s?^n^n1. %L^n2. %L^n", id, "CHANGE_MAP_TO", tempMap, id, "YES", id, "NO") + keys = MENU_KEY_1|MENU_KEY_2 + } + + new menuName[64] + format(menuName, 63, "%L", "en", "WHICH_MAP") + + for (new b = 0; b < pnum; ++b) + if (players[b] != id) + show_menu(players[b], keys, menuBody, iVoteTime, menuName) + + format(menuBody[len], 511, "^n0. %L", id, "CANC_VOTE") + keys |= MENU_KEY_0 + show_menu(id, keys, menuBody, iVoteTime, menuName) + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + + show_activity_key("ADMIN_V_MAP_1", "ADMIN_V_MAP_2", name); + + new tempMapA[32]; + new tempMapB[32]; + new tempMapC[32]; + new tempMapD[32]; + if (g_voteSelectedNum[id] > 0) + { + ArrayGetString(g_mapName, g_voteSelected[id][0], tempMapA, charsmax(tempMapA)); + } + else + { + copy(tempMapA, charsmax(tempMapA), ""); + } + if (g_voteSelectedNum[id] > 1) + { + ArrayGetString(g_mapName, g_voteSelected[id][1], tempMapB, charsmax(tempMapB)); + } + else + { + copy(tempMapB, charsmax(tempMapB), ""); + } + if (g_voteSelectedNum[id] > 2) + { + ArrayGetString(g_mapName, g_voteSelected[id][2], tempMapC, charsmax(tempMapC)); + } + else + { + copy(tempMapC, charsmax(tempMapC), ""); + } + if (g_voteSelectedNum[id] > 3) + { + ArrayGetString(g_mapName, g_voteSelected[id][3], tempMapD, charsmax(tempMapD)); + } + else + { + copy(tempMapD, charsmax(tempMapD), ""); + } + + log_amx("Vote: ^"%s<%d><%s><>^" vote maps (map#1 ^"%s^") (map#2 ^"%s^") (map#3 ^"%s^") (map#4 ^"%s^")", + name, get_user_userid(id), authid, + tempMapA, tempMapB, tempMapC, tempMapD) + } + case 8: displayVoteMapsMenu(id, ++g_menuPosition[id]) + case 9: displayVoteMapsMenu(id, --g_menuPosition[id]) + default: + { + g_voteSelected[id][g_voteSelectedNum[id]++] = g_menuPosition[id] * 7 + key + displayVoteMapsMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +public actionMapsMenu(id, key) +{ + switch (key) + { + case 8: displayMapsMenu(id, ++g_menuPosition[id]) + case 9: displayMapsMenu(id, --g_menuPosition[id]) + default: + { + new a = g_menuPosition[id] * 8 + key + new _modName[10] + + get_modname(_modName, 9) + if (!equal(_modName, "zp")) + { + message_begin(MSG_ALL, SVC_INTERMISSION) + message_end() + } + + new authid[32], name[32] + + get_user_authid(id, authid, 31) + get_user_name(id, name, 31) + + new tempMap[32]; + ArrayGetString(g_mapName, a, tempMap, charsmax(tempMap)); + + show_activity_key("ADMIN_CHANGEL_1", "ADMIN_CHANGEL_2", name, tempMap); + + log_amx("Cmd: ^"%s<%d><%s><>^" changelevel ^"%s^"", name, get_user_userid(id), authid, tempMap) + set_task(2.0, "delayedChange", 0, tempMap, strlen(tempMap) + 1) + /* displayMapsMenu(id, g_menuPosition[id]) */ + } + } + + return PLUGIN_HANDLED +} + +displayMapsMenu(id, pos) +{ + if (pos < 0) + return + + new menuBody[512] + new tempMap[32] + new start = pos * 8 + new b = 0 + + if (start >= g_mapNums) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "CHANGLE_MENU", pos + 1, (g_mapNums / 8 + ((g_mapNums % 8) ? 1 : 0))) + new end = start + 8 + new keys = MENU_KEY_0 + + if (end > g_mapNums) + end = g_mapNums + + for (new a = start; a < end; ++a) + { + keys |= (1<<b) + ArrayGetString(g_mapName, a, tempMap, charsmax(tempMap)); + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, tempMap) + } + + if (end != g_mapNums) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + new menuName[64] + format(menuName, 63, "%L", "en", "CHANGLE_MENU") + + show_menu(id, keys, menuBody, -1, menuName) +} +stock bool:ValidMap(mapname[]) +{ + if ( is_map_valid(mapname) ) + { + return true; + } + // If the is_map_valid check failed, check the end of the string + new len = strlen(mapname) - 4; + + // The mapname was too short to possibly house the .bsp extension + if (len < 0) + { + return false; + } + if ( equali(mapname[len], ".bsp") ) + { + // If the ending was .bsp, then cut it off. + // the string is byref'ed, so this copies back to the loaded text. + mapname[len] = '^0'; + + // recheck + if ( is_map_valid(mapname) ) + { + return true; + } + } + + return false; +} + +load_settings(filename[]) +{ + new fp = fopen(filename, "r"); + + if (!fp) + { + return 0; + } + + + new text[256]; + new tempMap[32]; + + while (!feof(fp)) + { + fgets(fp, text, charsmax(text)); + + if (text[0] == ';') + { + continue; + } + if (parse(text, tempMap, charsmax(tempMap)) < 1) + { + continue; + } + if (!ValidMap(tempMap)) + { + continue; + } + + ArrayPushString(g_mapName, tempMap); + g_mapNums++; + } + + fclose(fp); + + return 1; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/menufront.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/menufront.sma new file mode 100644 index 0000000..d5c14c7 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/menufront.sma @@ -0,0 +1,391 @@ +/* AMX Mod X +* Menus Front-End Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +#define MAXMENUS 128 +#define STRINGSIZE 32 +#define STRINGLENGTH STRINGSIZE - 1 +#define MENUITEMSPERPAGE 8 +//#define MENUS_NUMBER 16 + +new g_menuPosition[33] +new g_menusNumber = 0 +new g_menuBody[MAXMENUS][STRINGSIZE] +new bool:g_menuBodyPhrase[MAXMENUS] +new g_menuCmd[MAXMENUS][STRINGSIZE] +new g_menuAccess[MAXMENUS] +new g_menuPlugin[MAXMENUS][STRINGSIZE] + +new g_coloredMenus + +new g_clientMenuPosition[33] +new g_clientMenusNumber = 0 +new g_clientMenuBody[MAXMENUS][STRINGSIZE] +new bool:g_clientMenuBodyPhrase[MAXMENUS] +new g_clientMenuCmd[MAXMENUS][STRINGSIZE] +new g_clientMenuAccess[MAXMENUS] +new g_clientMenuPlugin[MAXMENUS][STRINGSIZE] + +// menuBody: Text that will be shown for this item in menu +// menuCmd: Command that should be executed to start menu +// menuAccess: Access required for menu +// menuPlugin: The exact case-insensitive name of plugin holding the menu command +public AddMenu(const menuBody[], const menuCmd[], const menuAccess, const menuPlugin[]) +{ + if (g_menusNumber + 1 == MAXMENUS) + { + log_amx("Error: Plugin ^"%s^" tried to add a menu item to Menu Front-End plugin with maximum menu items reached!", menuPlugin) + return + } + + copy(g_menuBody[g_menusNumber], STRINGLENGTH, menuBody) + g_menuBodyPhrase[g_menusNumber] = false + + copy(g_menuCmd[g_menusNumber], STRINGLENGTH, menuCmd) + g_menuAccess[g_menusNumber] = menuAccess + + copy(g_menuPlugin[g_menusNumber], STRINGLENGTH, menuPlugin) + + g_menusNumber++ + server_print("Menu item %d added to Menus Front-End: ^"%s^" from plugin ^"%s^"", g_menusNumber, menuBody, menuPlugin) +} + +public AddMenuLang(const menuBody[], const menuCmd[], const menuAccess, const menuPlugin[]) +{ + if (g_menusNumber + 1 == MAXMENUS) + { + log_amx("Error: Plugin ^"%s^" tried to add a menu item to Menu Front-End plugin with maximum menu items reached!", menuPlugin) + return + } + + copy(g_menuBody[g_menusNumber], STRINGLENGTH, menuBody) + g_menuBodyPhrase[g_menusNumber] = true + + copy(g_menuCmd[g_menusNumber], STRINGLENGTH, menuCmd) + g_menuAccess[g_menusNumber] = menuAccess + + copy(g_menuPlugin[g_menusNumber], STRINGLENGTH, menuPlugin) + g_menusNumber++ + + //server_print("Menu item %d added to Menus Front-End: ^"%s^" (LANG) from plugin ^"%s^"", g_menusNumber, menuBody, menuPlugin) +} + +public AddClientMenu(const menuBody[], const menuCmd[], const menuAccess, const menuPlugin[]) +{ + if (g_clientMenusNumber + 1 == MAXMENUS) + { + log_amx("Error: Plugin ^"%s^" tried to add a menu item to Menu Front-End plugin with maximum menu items reached!", menuPlugin) + return + } + + copy(g_clientMenuBody[g_clientMenusNumber], STRINGLENGTH, menuBody) + g_clientMenuBodyPhrase[g_clientMenusNumber] = false + + copy(g_clientMenuCmd[g_clientMenusNumber], STRINGLENGTH, menuCmd) + g_clientMenuAccess[g_clientMenusNumber] = menuAccess + + copy(g_clientMenuPlugin[g_clientMenusNumber], STRINGLENGTH, menuPlugin) + + g_clientMenusNumber++ + server_print("Client menu item %d added to Client Menus Front-End: ^"%s^" from plugin ^"%s^"", g_clientMenusNumber, menuBody, menuPlugin) +} + +AddDefaultMenus() +{ + new flags; + AddMenuLang("KICK_PLAYER", "amx_kickmenu", get_clcmd_flags("amx_kickmenu", flags) ? flags : ADMIN_KICK , "Players Menu") + AddMenuLang("BAN_PLAYER", "amx_banmenu", get_clcmd_flags("amx_banmenu", flags) ? flags : ADMIN_BAN, "Players Menu") + AddMenuLang("SLAP_SLAY", "amx_slapmenu", get_clcmd_flags("amx_slapmenu", flags) ? flags : ADMIN_SLAY, "Players Menu") + AddMenuLang("TEAM_PLAYER", "amx_teammenu", get_clcmd_flags("amx_teammenu", flags) ? flags : ADMIN_LEVEL_A, "Players Menu") + AddMenuLang("CHANGEL", "amx_mapmenu", get_clcmd_flags("amx_mapmenu", flags) ? flags : ADMIN_MAP, "Maps Menu") + AddMenuLang("VOTE_MAPS", "amx_votemapmenu", get_clcmd_flags("amx_votemapmenu", flags) ? flags : ADMIN_VOTE, "Maps Menu") + AddMenuLang("SPECH_STUFF", "amx_speechmenu", get_clcmd_flags("amx_speechmenu", flags) ? flags : ADMIN_MENU, "Commands Menu") + AddMenuLang("CLIENT_COM", "amx_clcmdmenu", get_clcmd_flags("amx_clcmdmenu", flags) ? flags : ADMIN_LEVEL_A, "Players Menu") + AddMenuLang("SERVER_COM", "amx_cmdmenu", get_clcmd_flags("amx_cmdmenu", flags) ? flags : ADMIN_MENU, "Commands Menu") + AddMenuLang("CVARS_SET", "amx_cvarmenu", get_clcmd_flags("amx_cvarmenu", flags) ? flags : ADMIN_CVAR, "Commands Menu") + AddMenuLang("CONFIG", "amx_cfgmenu", get_clcmd_flags("amx_cfgmenu", flags) ? flags : ADMIN_MENU, "Commands Menu") + AddMenuLang("LANG_SET", "amx_langmenu", get_clcmd_flags("amx_langmenu", flags) ? flags : ADMIN_CFG, "Multi-Lingual System") + AddMenuLang("STATS_SET", "amx_statscfgmenu", get_clcmd_flags("amx_statscfgmenu", flags) ? flags : ADMIN_CFG, "Stats Configuration") + AddMenuLang("PAUSE_PLUG", "amx_pausecfgmenu", get_clcmd_flags("amx_pausecfgmenu", flags) ? flags : ADMIN_CFG, "Pause Plugins") + AddMenuLang("RES_WEAP", "amx_restmenu", get_clcmd_flags("amx_restmenu", flags) ? flags : ADMIN_CFG, "Restrict Weapons") + AddMenuLang("TELE_PLAYER", "amx_teleportmenu", get_clcmd_flags("amx_teleportmenu", flags) ? flags : ADMIN_CFG, "Teleport Menu") +} +stock bool:get_clcmd_flags(const search_command[], &flags) +{ + new count = get_clcmdsnum(-1); + static cmd[128]; + static info[1]; + new _flags; + + for (new i = 0; i < count; i++) + { + get_clcmd(i, cmd, charsmax(cmd), _flags, info, charsmax(info), -1); + + if (strcmp(cmd, search_command) == 0) + { + flags = _flags; + return true; + } + } + + return false; +} +public actionMenu(id, key) +{ + switch (key) + { + case 8: displayMenu(id, ++g_menuPosition[id]) + case 9: displayMenu(id, --g_menuPosition[id]) + default: client_cmd(id, "%s", g_menuCmd[g_menuPosition[id] * 8 + key]) + } + + return PLUGIN_HANDLED +} + +public clientActionMenu(id, key) +{ + switch (key) + { + case 8: clientDisplayMenu(id, ++g_clientMenuPosition[id]) + case 9: clientDisplayMenu(id, --g_clientMenuPosition[id]) + default: client_cmd(id, "%s", g_clientMenuCmd[g_clientMenuPosition[id] * 8 + key]) + } + + return PLUGIN_HANDLED +} + +displayMenu(id, pos) +{ + if (pos < 0) + return + + new menuBody[512] + new b = 0 + new start = pos * MENUITEMSPERPAGE + + if (start >= g_menusNumber) // MENUS_NUMBER + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, + + g_coloredMenus ? "\yAMX Mod X Menu\R%d/%d^n\w^n" : "AMX Mod X Menu %d/%d^n^n" , pos + 1, (g_menusNumber / MENUITEMSPERPAGE) + (((g_menusNumber % MENUITEMSPERPAGE) > 0) ? 1 : 0)) + + new end = start + MENUITEMSPERPAGE + new keys = MENU_KEY_0 + + if (end > g_menusNumber) // MENUS_NUMBER + end = g_menusNumber // MENUS_NUMBER + + for (new a = start; a < end; ++a) + { + if ( access(id, g_menuAccess[a]) && + ((is_plugin_loaded(g_menuPlugin[a]) != -1) || // search plugins for registered name + (is_plugin_loaded(g_menuPlugin[a], true) != -1))) // search plugins for filename + { + keys |= (1<<b) + + if (g_menuBodyPhrase[a]) + len += format(menuBody[len], 511-len, "%d. %L^n", ++b, id, g_menuBody[a]) + else + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, g_menuBody[a]) + } else { + ++b + + if (g_coloredMenus) + { + if (g_menuBodyPhrase[a]) + len += format(menuBody[len], 511-len, "\d%d. %L^n\w", b, id, g_menuBody[a]) + else + len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, g_menuBody[a]) + } else { + if (g_menuBodyPhrase[a]) + len += format(menuBody[len], 511-len, "#. %L^n", id, g_menuBody[a]) + else + len += format(menuBody[len], 511-len, "#. %s^n", g_menuBody[a]) + } + } + } + + if (end != g_menusNumber) // MENUS_NUMBER + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } else { + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + } + + show_menu(id, keys, menuBody) +} + +clientDisplayMenu(id, pos) +{ + if (pos < 0) + return + + new menuBody[512] + new b = 0 + new start = pos * MENUITEMSPERPAGE + + if (start >= g_clientMenusNumber) // MENUS_NUMBER + start = pos = g_clientMenuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\yAMX Mod X Client Menu\R%d/%d^n\w^n" : "AMX Mod X Client Menu %d/%d^n^n" , pos + 1, (g_clientMenusNumber / MENUITEMSPERPAGE) + (((g_clientMenusNumber % MENUITEMSPERPAGE) > 0) ? 1 : 0)) + + new end = start + MENUITEMSPERPAGE + new keys = MENU_KEY_0 + + if (end > g_clientMenusNumber) // MENUS_NUMBER + end = g_clientMenusNumber // MENUS_NUMBER + + for (new a = start; a < end; ++a) + { + if ( access(id, g_clientMenuAccess[a]) && + ((is_plugin_loaded(g_clientMenuPlugin[a]) != -1) || // search plugins for registered name + (is_plugin_loaded(g_clientMenuPlugin[a], true) != -1))) // search plugins for file name + { + keys |= (1<<b) + + if (g_clientMenuBodyPhrase[a]) + len += format(menuBody[len], 511-len, "%d. %L^n", ++b, id, g_clientMenuBody[a]) + else + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, g_clientMenuBody[a]) + } else { + ++b + + if (g_coloredMenus) + { + if (g_clientMenuBodyPhrase[a]) + len += format(menuBody[len], 511-len, "\d%d. %L^n\w", b, id, g_clientMenuBody[a]) + else + len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, g_clientMenuBody[a]) + } else { + if (g_clientMenuBodyPhrase[a]) + len += format(menuBody[len], 511-len, "#. %L^n", id, g_clientMenuBody[a]) + else + len += format(menuBody[len], 511-len, "#. %s^n", g_clientMenuBody[a]) + } + } + } + + if (end != g_clientMenusNumber) // MENUS_NUMBER + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else { + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + } + + show_menu(id, keys, menuBody) +} + +public cmdMenu(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + displayMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} +public clientCmdMenu(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + clientDisplayMenu(id, g_clientMenuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +public addmenuitem_cmd(id, level, cid) +{ + if (!cmd_access(id, level, cid, 5)) + return PLUGIN_HANDLED + + // AddMenu(const menuBody[], const menuCmd[], const menuAccess, const menuPlugin[]) + new menuBody[STRINGSIZE], menuCmd[STRINGSIZE], flags[STRINGSIZE], menuAccess = 0, menuPlugin[STRINGSIZE] + read_argv(1, menuBody, STRINGLENGTH) + read_argv(2, menuCmd, STRINGLENGTH) + read_argv(3, flags, STRINGLENGTH) + menuAccess = read_flags(flags) + read_argv(4, menuPlugin, STRINGLENGTH) + + AddMenu(menuBody, menuCmd, menuAccess, menuPlugin) + + return PLUGIN_HANDLED +} + +public addclientmenuitem_cmd(id, level, cid) +{ + if (!cmd_access(id, level, cid, 5)) + return PLUGIN_HANDLED + + // AddMenu(const menuBody[], const menuCmd[], const menuAccess, const menuPlugin[]) + new menuBody[STRINGSIZE], menuCmd[STRINGSIZE], flags[STRINGSIZE], menuAccess = 0, menuPlugin[STRINGSIZE] + read_argv(1, menuBody, STRINGLENGTH) + read_argv(2, menuCmd, STRINGLENGTH) + read_argv(3, flags, STRINGLENGTH) + menuAccess = read_flags(flags) + read_argv(4, menuPlugin, STRINGLENGTH) + + AddClientMenu(menuBody, menuCmd, menuAccess, menuPlugin) + + return PLUGIN_HANDLED +} + +public plugin_init() +{ + register_plugin("Menus Front-End", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("menufront.txt") + register_dictionary("common.txt") + + register_menucmd(register_menuid("AMX Mod X Menu"), 1023, "actionMenu") + register_menucmd(register_menuid("AMX Mod X Client Menu"), 1023, "clientActionMenu") + register_clcmd("amxmodmenu", "cmdMenu", ADMIN_MENU, "- displays menus") + register_clcmd("amx_menu", "clientCmdMenu", 0, "- displays menus available to client") + + register_srvcmd("amx_addmenuitem", "addmenuitem_cmd", 0, "<menu text> <menu command> <access flags> <plugin name | plugin filename> - Add a menu item to Menus Front-End") + register_srvcmd("amx_addclientmenuitem", "addclientmenuitem_cmd", 0, "<menu text> <menu command> <access flags> <plugin name | plugin filename> - Add a menu item to Client Menus Front-End") + + g_coloredMenus = colored_menus() + + +} +public plugin_cfg() +{ + AddDefaultMenus() + + new configs[128] + get_configsdir(configs, 127) + server_cmd("exec %s/custommenuitems.cfg", configs) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/miscstats.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/miscstats.sma new file mode 100644 index 0000000..31f1aed --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/miscstats.sma @@ -0,0 +1,778 @@ +/* AMX Mod X +* Misc. Stats Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <csx> +#include <cstrike> + +public MultiKill +public MultiKillSound +public BombPlanting +public BombDefusing +public BombPlanted +public BombDefused +public BombFailed +public BombPickUp +public BombDrop +public BombCountVoice +public BombCountDef +public BombReached +public ItalyBonusKill +public EnemyRemaining +public LastMan +public KnifeKill +public KnifeKillSound +public GrenadeKill +public GrenadeSuicide +public HeadShotKill +public HeadShotKillSound +public RoundCounterSound +public RoundCounter +public KillingStreak +public KillingStreakSound +public DoubleKill +public DoubleKillSound +public PlayerName +public FirstBloodSound + +new g_streakKills[33][2] +new g_multiKills[33][2] +new g_C4Timer +new g_Defusing +new g_Planter +new Float:g_LastOmg +new g_LastAnnounce +new g_roundCount +new Float:g_doubleKill +new g_doubleKillId +new g_friend[33] +new g_firstBlood +new g_center1_sync +new g_announce_sync +new g_status_sync +new g_left_sync +new g_bottom_sync +new g_he_sync + +new g_MultiKillMsg[7][] = +{ + "Multi-Kill! %s^n%L %d %L (%d %L)", + "Ultra-Kill!!! %s^n%L %d %L (%d %L)", + "%s IS ON A KILLING SPREE!!!^n%L %d %L (%d %L)", + "RAMPAGE!!! %s^n%L %d %L (%d hs)", + "%s IS UNSTOPPABLE!!!^n%L %d %L (%d %L)", + "%s IS A MONSTER!^n%L %d %L (%d %L)", + "%s IS GODLIKE!!!!^n%L %d %L (%d %L)" +} + +new g_Sounds[7][] = +{ + "multikill", + "ultrakill", + "killingspree", + "rampage", + "unstoppable", + "monsterkill", + "godlike" +} +new g_KillingMsg[7][] = +{ + "%s: Multi-Kill!", + "%s: Ultra-Kill!!!", + "%s IS ON A KILLING SPREE!!!", + "%s: RAMPAGE!!!", + "%s IS UNSTOPPABLE!!!", + "%s IS A MONSTER!", + "%s IS GODLIKE!!!" +} + +new g_KinfeMsg[4][] = +{ + "KNIFE_MSG_1", + "KNIFE_MSG_2", + "KNIFE_MSG_3", + "KNIFE_MSG_4" +} + +new g_LastMessages[4][] = +{ + "LAST_MSG_1", + "LAST_MSG_2", + "LAST_MSG_3", + "LAST_MSG_4" +} + +new g_HeMessages[4][] = +{ + "HE_MSG_1", + "HE_MSG_2", + "HE_MSG_3", + "HE_MSG_4" +} + +new g_SHeMessages[4][] = +{ + "SHE_MSG_1", + "SHE_MSG_2", + "SHE_MSG_3", + "SHE_MSG_4" +} + +new g_HeadShots[7][] = +{ + "HS_MSG_1", + "HS_MSG_2", + "HS_MSG_3", + "HS_MSG_4", + "HS_MSG_5", + "HS_MSG_6", + "HS_MSG_7" +} + +new g_teamsNames[4][] = +{ + "TERRORIST", + "CT", + "TERRORISTS", + "CTS" +} + +public plugin_init() +{ + register_plugin("CS Misc. Stats", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("miscstats.txt") + register_event("TextMsg", "eRestart", "a", "2&#Game_C", "2&#Game_w") + register_event("SendAudio", "eEndRound", "a", "2&%!MRAD_terwin", "2&%!MRAD_ctwin", "2&%!MRAD_rounddraw") + register_event("RoundTime", "eNewRound", "bc") + register_event("StatusValue", "setTeam", "be", "1=1") + register_event("StatusValue", "showStatus", "be", "1=2", "2!0") + register_event("StatusValue", "hideStatus", "be", "1=1", "2=0") + + new mapname[32] + get_mapname(mapname, 31) + + if (equali(mapname, "de_", 3) || equali(mapname, "csde_", 5)) + { + register_event("StatusIcon", "eGotBomb", "be", "1=1", "1=2", "2=c4") + register_event("TextMsg", "eBombPickUp", "bc", "2&#Got_bomb") + register_event("TextMsg", "eBombDrop", "bc", "2&#Game_bomb_d") + } + else if (equali(mapname, "cs_italy")) + { + register_event("23", "chickenKill", "a", "1=108", /*"12=106", */ "15=4") + register_event("23", "radioKill", "a", "1=108", /*"12=294", */ "15=2") + } + + g_center1_sync = CreateHudSyncObj() + g_announce_sync = CreateHudSyncObj() + g_status_sync = CreateHudSyncObj() + g_left_sync = CreateHudSyncObj() + g_bottom_sync = CreateHudSyncObj() + g_he_sync = CreateHudSyncObj() +} + +public plugin_cfg() +{ + new g_addStast[] = "amx_statscfg add ^"%s^" %s" + + server_cmd(g_addStast, "ST_MULTI_KILL", "MultiKill") + server_cmd(g_addStast, "ST_MULTI_KILL_SOUND", "MultiKillSound") + server_cmd(g_addStast, "ST_BOMB_PLANTING", "BombPlanting") + server_cmd(g_addStast, "ST_BOMB_DEFUSING", "BombDefusing") + server_cmd(g_addStast, "ST_BOMB_PLANTED", "BombPlanted") + server_cmd(g_addStast, "ST_BOMB_DEF_SUCC", "BombDefused") + server_cmd(g_addStast, "ST_BOMB_DEF_FAIL", "BombFailed") + server_cmd(g_addStast, "ST_BOMB_PICKUP", "BombPickUp") + server_cmd(g_addStast, "ST_BOMB_DROP", "BombDrop") + server_cmd(g_addStast, "ST_BOMB_CD_VOICE", "BombCountVoice") + server_cmd(g_addStast, "ST_BOMB_CD_DEF", "BombCountDef") + server_cmd(g_addStast, "ST_BOMB_SITE", "BombReached") + server_cmd(g_addStast, "ST_ITALY_BONUS", "ItalyBonusKill") + server_cmd(g_addStast, "ST_LAST_MAN", "LastMan") + server_cmd(g_addStast, "ST_KNIFE_KILL", "KnifeKill") + server_cmd(g_addStast, "ST_KNIFE_KILL_SOUND", "KnifeKillSound") + server_cmd(g_addStast, "ST_HE_KILL", "GrenadeKill") + server_cmd(g_addStast, "ST_HE_SUICIDE", "GrenadeSuicide") + server_cmd(g_addStast, "ST_HS_KILL", "HeadShotKill") + server_cmd(g_addStast, "ST_HS_KILL_SOUND", "HeadShotKillSound") + server_cmd(g_addStast, "ST_ROUND_CNT", "RoundCounter") + server_cmd(g_addStast, "ST_ROUND_CNT_SOUND", "RoundCounterSound") + server_cmd(g_addStast, "ST_KILL_STR", "KillingStreak") + server_cmd(g_addStast, "ST_KILL_STR_SOUND", "KillingStreakSound") + server_cmd(g_addStast, "ST_ENEMY_REM", "EnemyRemaining") + server_cmd(g_addStast, "ST_DOUBLE_KILL", "DoubleKill") + server_cmd(g_addStast, "ST_DOUBLE_KILL_SOUND", "DoubleKillSound") + server_cmd(g_addStast, "ST_PLAYER_NAME", "PlayerName") + server_cmd(g_addStast, "ST_FIRST_BLOOD_SOUND", "FirstBloodSound") +} + +public client_putinserver(id) +{ + g_multiKills[id] = {0, 0} + g_streakKills[id] = {0, 0} +} + +public client_death(killer, victim, wpnindex, hitplace, TK) +{ + if (wpnindex == CSW_C4) + return + + new headshot = (hitplace == HIT_HEAD) ? 1 : 0 + new selfkill = (killer == victim) ? 1 : 0 + + if (g_firstBlood) + { + g_firstBlood = 0 + if (FirstBloodSound) + play_sound("misc/firstblood") + } + + if ((KillingStreak || KillingStreakSound) && !TK) + { + g_streakKills[victim][1]++ + g_streakKills[victim][0] = 0 + + if (!selfkill) + { + g_streakKills[killer][0]++ + g_streakKills[killer][1] = 0 + + new a = g_streakKills[killer][0] - 3 + + if ((a > -1) && !(a % 2)) + { + new name[32] + get_user_name(killer, name, 31) + + if ((a >>= 1) > 6) + a = 6 + + if (KillingStreak) + { + set_hudmessage(0, 100, 255, 0.05, 0.50, 2, 0.02, 6.0, 0.01, 0.1, -1) + ShowSyncHudMsg(0, g_left_sync, g_KillingMsg[a], name) + } + + if (KillingStreakSound) + { + new file[32] + + format(file, 31, "misc/%s", g_Sounds[a]) + play_sound(file) + } + } + } + } + + if (MultiKill || MultiKillSound) + { + if (!selfkill && !TK && killer) + { + g_multiKills[killer][0]++ + g_multiKills[killer][1] += headshot + + new param[2] + + param[0] = killer + param[1] = g_multiKills[killer][0] + set_task(4.0 + float(param[1]), "checkKills", 0, param, 2) + } + } + + if (EnemyRemaining && is_user_connected(victim)) + { + new ppl[32], pplnum = 0, maxplayers = get_maxplayers() + new epplnum = 0 + new CsTeams:team = cs_get_user_team(victim) + new CsTeams:other_team + new CsTeams:enemy_team = (team == CS_TEAM_T) ? CS_TEAM_CT : CS_TEAM_T + + if (team == CS_TEAM_T || team == CS_TEAM_CT) + { + for (new i=1; i<=maxplayers; i++) + { + if (!is_user_connected(i)) + { + continue + } + if (i == victim) + { + continue + } + other_team = cs_get_user_team(i) + if (other_team == team && is_user_alive(i)) + { + epplnum++ + } else if (other_team == enemy_team) { + ppl[pplnum++] = i + } + } + + if (pplnum && epplnum) + { + new message[128], team_name[32] + + set_hudmessage(255, 255, 255, 0.02, 0.85, 2, 0.05, 0.1, 0.02, 3.0, -1) + + /* This is a pretty stupid thing to translate, but whatever */ + new _teamname[32] + if (team == CS_TEAM_T) + { + format(_teamname, 31, "TERRORIST%s", (epplnum == 1) ? "" : "S") + } else if (team == CS_TEAM_CT) { + format(_teamname, 31, "CT%s", (epplnum == 1) ? "" : "S") + } + + for (new a = 0; a < pplnum; ++a) + { + format(team_name, 31, "%L", ppl[a], _teamname) + format(message, 127, "%L", ppl[a], "REMAINING", epplnum, team_name) + ShowSyncHudMsg(ppl[a], g_bottom_sync, "%s", message) + } + } + } + } + + if (LastMan) + { + new cts[32], ts[32], ctsnum, tsnum + new maxplayers = get_maxplayers() + new CsTeams:team + + for (new i=1; i<=maxplayers; i++) + { + if (!is_user_connected(i) || !is_user_alive(i)) + { + continue + } + team = cs_get_user_team(i) + if (team == CS_TEAM_T) + { + ts[tsnum++] = i + } else if (team == CS_TEAM_CT) { + cts[ctsnum++] = i + } + } + + if (ctsnum == 1 && tsnum == 1) + { + new ctname[32], tname[32] + + get_user_name(cts[0], ctname, 31) + get_user_name(ts[0], tname, 31) + + set_hudmessage(0, 255, 255, -1.0, 0.35, 0, 6.0, 6.0, 0.5, 0.15, -1) + ShowSyncHudMsg(0, g_center1_sync, "%s vs. %s", ctname, tname) + + play_sound("misc/maytheforce") + } + else if (!g_LastAnnounce) + { + new oposite = 0, _team = 0 + + if (ctsnum == 1 && tsnum > 1) + { + g_LastAnnounce = cts[0] + oposite = tsnum + _team = 0 + } + else if (tsnum == 1 && ctsnum > 1) + { + g_LastAnnounce = ts[0] + oposite = ctsnum + _team = 1 + } + + if (g_LastAnnounce) + { + new name[32] + + get_user_name(g_LastAnnounce, name, 31) + + set_hudmessage(0, 255, 255, -1.0, 0.38, 0, 6.0, 6.0, 0.5, 0.15, -1) + ShowSyncHudMsg(0, g_center1_sync, "%s (%d HP) vs. %d %s%s: %L", name, get_user_health(g_LastAnnounce), oposite, g_teamsNames[_team], (oposite == 1) ? "" : "S", LANG_PLAYER, g_LastMessages[random_num(0, 3)]) + + if (!is_user_connecting(g_LastAnnounce)) + { + client_cmd(g_LastAnnounce, "spk misc/oneandonly") + } + } + } + } + + if (wpnindex == CSW_KNIFE && (KnifeKill || KnifeKillSound)) + { + if (KnifeKill) + { + new killer_name[32], victim_name[32] + + get_user_name(killer, killer_name, 31) + get_user_name(victim, victim_name, 31) + + set_hudmessage(255, 100, 100, -1.0, 0.25, 1, 6.0, 6.0, 0.5, 0.15, -1) + ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_KinfeMsg[random_num(0, 3)], killer_name, victim_name) + } + + if (KnifeKillSound) + play_sound("misc/humiliation") + } + + if (wpnindex == CSW_HEGRENADE && (GrenadeKill || GrenadeSuicide)) + { + new killer_name[32], victim_name[32] + + get_user_name(killer, killer_name, 31) + get_user_name(victim, victim_name, 31) + + set_hudmessage(255, 100, 100, -1.0, 0.25, 1, 6.0, 6.0, 0.5, 0.15, -1) + + if (!selfkill) + { + if (GrenadeKill) + ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_HeMessages[random_num(0, 3)], killer_name, victim_name) + } + else if (GrenadeSuicide) + ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_SHeMessages[random_num(0, 3)], victim_name) + } + + if (headshot && (HeadShotKill || HeadShotKillSound)) + { + if (HeadShotKill && wpnindex) + { + new killer_name[32], victim_name[32], weapon_name[32], message[256], players[32], pnum + + xmod_get_wpnname(wpnindex, weapon_name, 31) + get_user_name(killer, killer_name, 31) + get_user_name(victim, victim_name, 31) + get_players(players, pnum, "c") + + for (new i = 0; i < pnum; i++) + { + format(message, sizeof(message)-1, "%L", players[i], g_HeadShots[random_num(0, 6)]) + + replace(message, sizeof(message)-1, "$vn", victim_name) + replace(message, sizeof(message)-1, "$wn", weapon_name) + replace(message, sizeof(message)-1, "$kn", killer_name) + + set_hudmessage(100, 100, 255, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, -1) + ShowSyncHudMsg(players[i], g_announce_sync, "%s", message) + } + } + + if (HeadShotKillSound) + { + client_cmd(killer, "spk misc/headshot") + client_cmd(victim, "spk misc/headshot") + } + } + + if ((DoubleKill || DoubleKillSound) && !selfkill) + { + new Float:nowtime = get_gametime() + + if (g_doubleKill == nowtime && g_doubleKillId == killer) + { + if (DoubleKill) + { + new name[32] + + get_user_name(killer, name, 31) + + set_hudmessage(255, 0, 255, -1.0, 0.35, 0, 6.0, 6.0, 0.5, 0.15, -1) + ShowSyncHudMsg(0, g_center1_sync, "%L", LANG_PLAYER, "DOUBLE_KILL", name) + } + + if (DoubleKillSound) + play_sound("misc/doublekill") + } + + g_doubleKill = nowtime + g_doubleKillId = killer + } +} + +public hideStatus(id) +{ + if (PlayerName) + { + ClearSyncHud(id, g_status_sync) + } +} + +public setTeam(id) + g_friend[id] = read_data(2) + +public showStatus(id) +{ + if(!is_user_bot(id) && is_user_connected(id) && PlayerName) + { + new name[32], pid = read_data(2) + + get_user_name(pid, name, 31) + new color1 = 0, color2 = 0 + + if (get_user_team(pid) == 1) + color1 = 255 + else + color2 = 255 + + if (g_friend[id] == 1) // friend + { + new clip, ammo, wpnid = get_user_weapon(pid, clip, ammo) + new wpnname[32] + + if (wpnid) + xmod_get_wpnname(wpnid, wpnname, 31) + + set_hudmessage(color1, 50, color2, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1) + ShowSyncHudMsg(id, g_status_sync, "%s -- %d HP / %d AP / %s", name, get_user_health(pid), get_user_armor(pid), wpnname) + } else { + set_hudmessage(color1, 50, color2, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1) + ShowSyncHudMsg(id, g_status_sync, "%s", name) + } + } +} + +public eNewRound() +{ + if (read_data(1) == floatround(get_cvar_float("mp_roundtime") * 60.0,floatround_floor)) + { + g_firstBlood = 1 + g_C4Timer = 0 + ++g_roundCount + + if (RoundCounter) + { + set_hudmessage(200, 0, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, -1) + ShowSyncHudMsg(0, g_announce_sync, "%L", LANG_PLAYER, "PREPARE_FIGHT", g_roundCount) + } + + if (RoundCounterSound) + play_sound("misc/prepare") + + if (KillingStreak) + { + new appl[32], ppl, i + get_players(appl, ppl, "ac") + + for (new a = 0; a < ppl; ++a) + { + i = appl[a] + + if (g_streakKills[i][0] >= 2) + client_print(i, print_chat, "* %L", i, "KILLED_ROW", g_streakKills[i][0]) + else if (g_streakKills[i][1] >= 2) + client_print(i, print_chat, "* %L", i, "DIED_ROUNDS", g_streakKills[i][1]) + } + } + } +} + +public eRestart() +{ + eEndRound() + g_roundCount = 0 + g_firstBlood = 1 +} + +public eEndRound() +{ + g_C4Timer = -2 + g_LastOmg = 0.0 + remove_task(8038) + g_LastAnnounce = 0 +} + +public checkKills(param[]) +{ + new id = param[0] + new a = param[1] + + if (a == g_multiKills[id][0]) + { + a -= 3 + + if (a > -1) + { + if (a > 6) + { + a = 6 + } + + if (MultiKill) + { + new name[32] + + get_user_name(id, name, 31) + set_hudmessage(255, 0, 100, 0.05, 0.50, 2, 0.02, 6.0, 0.01, 0.1, -1) + + ShowSyncHudMsg(0, g_left_sync, g_MultiKillMsg[a], name, LANG_PLAYER, "WITH", g_multiKills[id][0], LANG_PLAYER, "KILLS", g_multiKills[id][1], LANG_PLAYER, "HS") + } + + if (MultiKillSound) + { + new sound[24] + format(sound, 23, "misc/%s", g_Sounds[a]) + play_sound(sound) + } + } + g_multiKills[id] = {0, 0} + } +} + +public chickenKill() +{ + if (ItalyBonusKill) + announceEvent(0, "KILLED_CHICKEN") +} + +public radioKill() +{ + if (ItalyBonusKill) + announceEvent(0, "BLEW_RADIO") +} + +announceEvent(id, message[]) +{ + new name[32] + + get_user_name(id, name, 31) + set_hudmessage(255, 100, 50, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, -1) + ShowSyncHudMsg(0, g_announce_sync, "%L", LANG_PLAYER, message, name) +} + +public eBombPickUp(id) +{ + if (BombPickUp) + announceEvent(id, "PICKED_BOMB") +} + +public eBombDrop() +{ + if (BombDrop) + announceEvent(g_Planter, "DROPPED_BOMB") +} + +public eGotBomb(id) +{ + g_Planter = id + + if (BombReached && read_data(1) == 2 && g_LastOmg < get_gametime()) + { + g_LastOmg = get_gametime() + 15.0 + announceEvent(g_Planter, "REACHED_TARGET") + } +} + +public bombTimer() +{ + if (--g_C4Timer > 0) + { + if (BombCountVoice) + { + if (g_C4Timer == 30 || g_C4Timer == 20) + { + new temp[64] + + num_to_word(g_C4Timer, temp, 63) + format(temp, 63, "^"vox/%s seconds until explosion^"", temp) + play_sound(temp) + } + else if (g_C4Timer < 11) + { + new temp[64] + + num_to_word(g_C4Timer, temp, 63) + format(temp, 63, "^"vox/%s^"", temp) + play_sound(temp) + } + } + if (BombCountDef && g_Defusing) + client_print(g_Defusing, print_center, "%d", g_C4Timer) + } + else + remove_task(8038) +} + +public bomb_planted(planter) +{ + g_Defusing = 0 + + if (BombPlanted) + announceEvent(planter, "SET_UP_BOMB") + + g_C4Timer = get_cvar_num("mp_c4timer") + set_task(1.0, "bombTimer", 8038, "", 0, "b") +} + +public bomb_planting(planter) +{ + if (BombPlanting) + announceEvent(planter, "PLANT_BOMB") +} + +public bomb_defusing(defuser) +{ + if (BombDefusing) + announceEvent(defuser, "DEFUSING_BOMB") + + g_Defusing = defuser +} + +public bomb_defused(defuser) +{ + if (BombDefused) + announceEvent(defuser, "DEFUSED_BOMB") +} + +public bomb_explode(planter, defuser) +{ + if (BombFailed && defuser) + announceEvent(defuser, "FAILED_DEFU") +} + +public play_sound(sound[]) +{ + new players[32], pnum + get_players(players, pnum, "c") + new i + + for (i = 0; i < pnum; i++) + { + if (is_user_connecting(players[i])) + continue + + client_cmd(players[i], "spk %s", sound) + } +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/multilingual.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/multilingual.sma new file mode 100644 index 0000000..7ecf4c2 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/multilingual.sma @@ -0,0 +1,230 @@ +/* AMX Mod X script. +* Multilingual System Plugin +* +* by the AMX Mod X Development Team +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +#define DISPLAY_MSG // Comment to disable message on join + +new g_menuLang[33][2] +new g_serverLang +new g_langNum +new g_coloredMenus + +public plugin_init() +{ + register_plugin("Multi-Lingual System", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("multilingual.txt") + register_dictionary("common.txt") + register_dictionary("languages.txt") + + register_cvar("amx_language", "en", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY) + //Set to zero to disable client effects + register_cvar("amx_client_languages", "1") + register_concmd("amx_setlang", "cmdLang", ADMIN_CFG, "<language>") + register_clcmd("amx_langmenu", "cmdLangMenu", ADMIN_ALL) + register_menu("Language Menu", 1023, "actionMenu") + + new lang[3] + + if (vaultdata_exists("server_language")) + { + get_vaultdata("server_language", lang, 2) + } else { + copy(lang, 2, "en") + set_vaultdata("server_language", lang) + } + + set_cvar_string("amx_language", lang) + + g_langNum = get_langsnum() + g_serverLang = get_lang_id(lang) + g_coloredMenus = colored_menus() +} + +#if defined DISPLAY_MSG +public client_putinserver(id) +{ + if (get_cvar_num("amx_client_languages") && !is_user_bot(id)) + set_task(10.0, "dispInfo", id) +} + +public client_disconnect(id) +{ + remove_task(id) +} + +public dispInfo(id) +{ + if (get_cvar_num("amx_client_languages")) + client_print(id, print_chat, "%L", id, "TYPE_LANGMENU") +} +#endif + +public cmdLang(id, level, cid) +{ + if (!cmd_access(id, level, cid, 2)) + return PLUGIN_HANDLED + + new arg[3] + read_argv(1, arg, 2) + + if (!lang_exists(arg)) + { + console_print(id, "[AMXX] %L", id, "LANG_NOT_EXISTS") + return PLUGIN_HANDLED + } + + set_vaultdata("server_language", arg) + set_cvar_string("amx_language", arg) + g_serverLang = get_lang_id(arg) + + return PLUGIN_HANDLED +} + +public cmdLangMenu(id, level, cid) +{ + new buffer[3] + + if (!get_cvar_num("amx_client_languages")) + { + client_print(id, print_console, "[AMXX] %L", LANG_SERVER, "LANG_MENU_DISABLED") + return PLUGIN_HANDLED + } + + get_user_info(id, "lang", buffer, 2) + g_menuLang[id][0] = get_lang_id(buffer) + g_menuLang[id][1] = g_serverLang + + showMenu(id) + + return PLUGIN_HANDLED +} + +showMenu(id) +{ + if (!get_cvar_num("amx_client_languages")) + return PLUGIN_HANDLED + + new menuBody[512], pLang[3] + + get_lang(g_menuLang[id][0], pLang) + + new len = format(menuBody, 511, (g_coloredMenus ? "\y%L\w^n^n" : "%L^n^n"), id, "LANG_MENU") + + len += format(menuBody[len], 511-len, (g_coloredMenus ? "1. %L\R\r%L\w^n" : "1. %L %L^n"), id, "PERSO_LANG", pLang, "LANG_NAME") + + if (access(id, ADMIN_CFG)) + { + new sLang[3] + + get_lang(g_menuLang[id][1], sLang) + len += format(menuBody[len], 511-len, (g_coloredMenus ? "2. %L\R\r%L\w^n^n" : "2. %L %L^n^n"), id, "SERVER_LANG", sLang, "LANG_NAME") + len += format(menuBody[len], 511-len, "3. %L", id, "SAVE_LANG") + } else { + len += format(menuBody[len], 511-len, "^n2. %L", id, "SAVE_LANG") + } + + format(menuBody[len], 511-len, "^n^n0. %L", id, "EXIT") + + show_menu(id, MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3, menuBody, -1, "Language Menu") + + return 1 +} + +public actionMenu(id, key) +{ + if (!get_cvar_num("amx_client_languages")) + return 0 + + new isAdmin = access(id, ADMIN_CFG) + + if (key == 0) + { + if (g_menuLang[id][0] < (g_langNum-1)) + g_menuLang[id][0]++ + else + g_menuLang[id][0] = 0 + + showMenu(id) + } + + if (isAdmin && (key == 1)) + { + if (g_menuLang[id][1] < (g_langNum - 1)) + g_menuLang[id][1]++ + else + g_menuLang[id][1] = 0 + + showMenu(id) + } + + new pLang[3], pLang_old[3], sLang[3], sLang_old[3], lName[64] + + get_lang(g_menuLang[id][0], pLang) + get_lang(g_menuLang[id][1], sLang) + get_user_info(id, "lang", pLang_old, 2) + get_lang(g_serverLang, sLang_old) + + if (isAdmin && (key == 2) && !equali(sLang, sLang_old)) + { + set_vaultdata("server_language", sLang) + set_cvar_string("amx_language", sLang) + g_serverLang = g_menuLang[id][1] + format(lName, 63, "%L", sLang, "LANG_NAME") + client_print(id, print_chat, "%L", pLang, "SET_LANG_SERVER", lName) + } + + if (!equali(pLang, pLang_old) && ((isAdmin && (key == 2)) || (!isAdmin && (key == 1)))) + { + client_cmd(id, "setinfo ^"lang^" ^"%s^"", pLang) + format(lName, 63, "%L", pLang, "LANG_NAME") + client_print(id, print_chat, "%L", pLang, "SET_LANG_USER", lName) + } + + return 0 +} + +get_lang_id(lang[]) +{ + new tLang[3] + + for (new i = 0; i < g_langNum; i++) + { + get_lang(i, tLang) + if (equali(tLang, lang)) + return i + } + + return 0 +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/nextmap.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/nextmap.sma new file mode 100644 index 0000000..5f9c7f5 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/nextmap.sma @@ -0,0 +1,238 @@ +/* AMX Mod X +* NextMap Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> + +// WARNING: If you comment this line make sure +// that in your mapcycle file maps don't repeat. +// However the same map in a row is still valid. +#define OBEY_MAPCYCLE + +new g_nextMap[32] +new g_mapCycle[32] +new g_pos + +public plugin_init() +{ + register_plugin("NextMap", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("nextmap.txt") + register_event("30", "changeMap", "a") + register_clcmd("say nextmap", "sayNextMap", 0, "- displays nextmap") + register_clcmd("say currentmap", "sayCurrentMap", 0, "- display current map") + register_clcmd("say ff", "sayFFStatus", 0, "- display friendly fire status") + register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY) + + new szString[32], szString2[32], szString3[8] + + get_localinfo("lastmapcycle", szString, 31) + parse(szString, szString2, 31, szString3, 7) + g_pos = str_to_num(szString3) + get_cvar_string("mapcyclefile", g_mapCycle, 31) + + if (!equal(g_mapCycle, szString2)) + g_pos = 0 // mapcyclefile has been changed - go from first + + readMapCycle(g_mapCycle, g_nextMap, 31) + set_cvar_string("amx_nextmap", g_nextMap) + format(szString3, 31, "%s %d", g_mapCycle, g_pos) // save lastmapcycle settings + set_localinfo("lastmapcycle", szString3) +} + +getNextMapName(szArg[], iMax) +{ + new len = get_cvar_string("amx_nextmap", szArg, iMax) + + if (ValidMap(szArg)) return len + len = copy(szArg, iMax, g_nextMap) + set_cvar_string("amx_nextmap", g_nextMap) + + return len +} + +public sayNextMap() +{ + new name[32] + + getNextMapName(name, 31) + client_print(0, print_chat, "%L %s", LANG_PLAYER, "NEXT_MAP", name) +} + +public sayCurrentMap() +{ + new mapname[32] + + get_mapname(mapname, 31) + client_print(0, print_chat, "%L: %s", LANG_PLAYER, "PLAYED_MAP", mapname) +} + +public sayFFStatus() +{ + client_print(0, print_chat, "%L: %L", LANG_PLAYER, "FRIEND_FIRE", LANG_PLAYER, get_cvar_num("mp_friendlyfire") ? "ON" : "OFF") +} + +public delayedChange(param[]) +{ + set_cvar_float("mp_chattime", get_cvar_float("mp_chattime") - 2.0) + server_cmd("changelevel %s", param) +} + +public changeMap() +{ + new string[32] + new Float:chattime = get_cvar_float("mp_chattime") + + set_cvar_float("mp_chattime", chattime + 2.0) // make sure mp_chattime is long + new len = getNextMapName(string, 31) + 1 + set_task(chattime, "delayedChange", 0, string, len) // change with 1.5 sec. delay +} + +new g_warning[] = "WARNING: Couldn't find a valid map or the file doesn't exist (file ^"%s^")" + +stock bool:ValidMap(mapname[]) +{ + if ( is_map_valid(mapname) ) + { + return true; + } + // If the is_map_valid check failed, check the end of the string + new len = strlen(mapname) - 4; + + // The mapname was too short to possibly house the .bsp extension + if (len < 0) + { + return false; + } + if ( equali(mapname[len], ".bsp") ) + { + // If the ending was .bsp, then cut it off. + // the string is byref'ed, so this copies back to the loaded text. + mapname[len] = '^0'; + + // recheck + if ( is_map_valid(mapname) ) + { + return true; + } + } + + return false; +} + +#if defined OBEY_MAPCYCLE +readMapCycle(szFileName[], szNext[], iNext) +{ + new b, i = 0, iMaps = 0 + new szBuffer[32], szFirst[32] + + if (file_exists(szFileName)) + { + while (read_file(szFileName, i++, szBuffer, 31, b)) + { + if (!isalnum(szBuffer[0]) || !ValidMap(szBuffer)) continue + + if (!iMaps) + copy(szFirst, 31, szBuffer) + + if (++iMaps > g_pos) + { + copy(szNext, iNext, szBuffer) + g_pos = iMaps + return + } + } + } + + if (!iMaps) + { + log_amx(g_warning, szFileName) + get_mapname(szFirst, 31) + } + + copy(szNext, iNext, szFirst) + g_pos = 1 +} + +#else + +readMapCycle(szFileName[], szNext[], iNext) +{ + new b, i = 0, iMaps = 0 + new szBuffer[32], szFirst[32], szCurrent[32] + + get_mapname(szCurrent, 31) + + new a = g_pos + + if (file_exists(szFileName)) + { + while (read_file(szFileName, i++, szBuffer, 31, b)) + { + if (!isalnum(szBuffer[0]) || !ValidMap(szBuffer)) continue + + if (!iMaps) + { + iMaps = 1 + copy(szFirst, 31, szBuffer) + } + + if (iMaps == 1) + { + if (equali(szCurrent, szBuffer)) + { + if (a-- == 0) + iMaps = 2 + } + } else { + if (equali(szCurrent, szBuffer)) + ++g_pos + else + g_pos = 0 + + copy(szNext, iNext, szBuffer) + return + } + } + } + + if (!iMaps) + { + log_amx(g_warning, szFileName) + copy(szNext, iNext, szCurrent) + } + else + copy(szNext, iNext, szFirst) + + g_pos = 0 +} +#endif diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/pausecfg.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/pausecfg.sma new file mode 100644 index 0000000..9892d11 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/pausecfg.sma @@ -0,0 +1,551 @@ +/* AMX Mod X +* Pause Plugins Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +// Uncomment if you want to have two new commands +// amx_off - pause plugins not marked as unpauseable +// amx_on - enable plugins not marked as unpauseable +#define DIRECT_ONOFF + +#define MAX_SYSTEM 32 + +new g_menuPos[33] +new g_fileToSave[64] +new g_coloredMenus +new g_Modified +new g_addCmd[] = "amx_pausecfg add ^"%s^"" +new g_system[MAX_SYSTEM] +new g_systemNum + +public plugin_init() +{ + register_plugin("Pause Plugins", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("pausecfg.txt") + register_dictionary("common.txt") + register_dictionary("admincmd.txt") + + register_concmd("amx_pausecfg", "cmdPlugin", ADMIN_CFG, "- list commands for pause/unpause management") + register_clcmd("amx_pausecfgmenu", "cmdMenu", ADMIN_CFG, "- pause/unpause plugins with menu") +#if defined DIRECT_ONOFF + register_concmd("amx_off", "cmdOFF", ADMIN_CFG, "- pauses some plugins") + register_concmd("amx_on", "cmdON", ADMIN_CFG, "- unpauses some plugins") +#endif + register_menucmd(register_menuid("Pause/Unpause Plugins"), 1023, "actionMenu") + + g_coloredMenus = colored_menus() + get_configsdir(g_fileToSave, 63); + format(g_fileToSave, 63, "%s/pausecfg.ini", g_fileToSave); + + return PLUGIN_CONTINUE +} + +#if defined DIRECT_ONOFF +public cmdOFF(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + pausePlugins(id) + + return PLUGIN_HANDLED +} + +public cmdON(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + unpausePlugins(id) + + return PLUGIN_HANDLED +} +#endif + +public plugin_cfg() +{ + loadSettings(g_fileToSave) + + // Put here titles of plugins which you don't want to pause + server_cmd(g_addCmd, "Admin Base") + server_cmd(g_addCmd, "Admin Base (SQL)") + server_cmd(g_addCmd, "Pause Plugins") + server_cmd(g_addCmd, "TimeLeft") + server_cmd(g_addCmd, "NextMap") + server_cmd(g_addCmd, "Slots Reservation") +} + +public actionMenu(id, key) +{ + switch (key) + { + case 6: + { + if (file_exists(g_fileToSave)) + { + delete_file(g_fileToSave) + client_print(id, print_chat, "* %L", id, "PAUSE_CONF_CLEARED") + } + else + client_print(id, print_chat, "* %L", id, "PAUSE_ALR_CLEARED") + + displayMenu(id, g_menuPos[id]) + } + case 7: + { + if (saveSettings(g_fileToSave)) + { + g_Modified = 0 + client_print(id, print_chat, "* %L", id, "PAUSE_CONF_SAVED") + } + else + client_print(id, print_chat, "* %L", id, "PAUSE_SAVE_FAILED") + + displayMenu(id, g_menuPos[id]) + } + case 8: displayMenu(id, ++g_menuPos[id]) + case 9: displayMenu(id, --g_menuPos[id]) + default: + { + new option = g_menuPos[id] * 6 + key + new file[32], status[2] + + get_plugin(option, file, 31, status, 0, status, 0, status, 0, status, 1) + + switch (status[0]) + { + // "running" + case 'r': pause("ac", file) + + // "debug" + case 'd': pause("ac", file) + + // "paused" + case 'p': + { + g_Modified = 1 + unpause("ac", file) + } + + // "stopped" + case 's': + { + client_print(id, print_chat, "%L", id, "CANT_UNPAUSE_PLUGIN", file); + } + } + + displayMenu(id, g_menuPos[id]) + } + } + + return PLUGIN_HANDLED +} + +getStatus(id, code, &statusCode, lStatus[], lLen) +{ + switch (code) + { + // "running" + case 'r': + { + statusCode = 'O' + format(lStatus, lLen, "%L", id, "ON") + } + + // "debug" + case 'd': + { + statusCode = 'O' + format(lStatus, lLen, "%L", id, "ON") + } + + // "stopped" + case 's': + { + statusCode = 'S' + format(lStatus, lLen, "%L", id, "STOPPED") + } + + // "paused" + case 'p': + { + statusCode = 'O' + format(lStatus, lLen, "%L", id, "OFF") + } + + // "bad load" + case 'b': + { + statusCode = 'E' + format(lStatus, lLen, "%L", id, "ERROR") + } + default: + { + statusCode = 'L' + format(lStatus, lLen, "%L", id, "LOCKED") + } + } +} + +isSystem(id) +{ + for (new a = 0; a < g_systemNum; ++a) + if (g_system[a] == id) + return 1 + return 0 +} + +displayMenu(id, pos) +{ + if (pos < 0) return + + new filename[32], title[32], status[8], statusCode + new datanum = get_pluginsnum() + new menu_body[512], start = pos * 6, k = 0 + + if (start >= datanum) + start = pos = g_menuPos[id] = 0 + + new len = format(menu_body, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "PAUSE_UNPAUSE", pos + 1, ((datanum / 6) + ((datanum % 6) ? 1 : 0))) + new end = start + 6, keys = MENU_KEY_0|MENU_KEY_8|MENU_KEY_7 + + if (end > datanum) + end = datanum + + for (new a = start; a < end; ++a) + { + get_plugin(a, filename, 31, title, 31, status, 0, status, 0, status, 1) + getStatus(id, status[0], statusCode, status, 7) + + if (isSystem(a) || (statusCode != 'O' && statusCode != 'S')) + { + if (g_coloredMenus) + { + len += format(menu_body[len], 511-len, "\d%d. %s\R%s^n\w", ++k, title, status) + } else { + ++k + len += format(menu_body[len], 511-len, "#. %s %s^n", title, status) + } + } else { + keys |= (1<<k) + len += format(menu_body[len], 511-len, g_coloredMenus ? "%d. %s\y\R%s^n\w" : "%d. %s %s^n", ++k, title, status) + } + } + + len += format(menu_body[len], 511-len, "^n7. %L^n", id, "CLEAR_PAUSED") + len += format(menu_body[len], 511-len, g_coloredMenus ? "8. %L \y\R%s^n\w" : "8. %L %s^n", id, "SAVE_PAUSED", g_Modified ? "*" : "") + + if (end != datanum) + { + format(menu_body[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menu_body[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menu_body, -1, "Pause/Unpause Plugins") +} + +public cmdMenu(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + displayMenu(id, g_menuPos[id] = 0) + + return PLUGIN_HANDLED +} + +pausePlugins(id) +{ + new filename[32], title[32], status[2] + new count = 0, imax = get_pluginsnum() + + for (new a = 0; a < imax; ++a) + { + get_plugin(a, filename, 31, title, 31, status, 0, status, 0, status, 1) + + if (!isSystem(a) && status[0] == 'r' && pause("ac", filename)) + { + //console_print(id, "Pausing %s (file ^"%s^")", title, filename) + ++count + } + } + + console_print(id, "%L", id, (count == 1) ? "PAUSED_PLUGIN" : "PAUSED_PLUGINS", count) +} + +unpausePlugins(id) +{ + new filename[32], title[32], status[2] + new count = 0, imax = get_pluginsnum() + + for (new a = 0; a < imax; ++a) + { + get_plugin(a, filename, 31, title, 31, status, 0, status, 0, status, 1) + + if (!isSystem(a) && status[0] == 'p' && unpause("ac", filename)) + { + //console_print(id, "Unpausing %s (file ^"%s^")", title, filename) + ++count + } + } + + console_print(id, "%L", id, (count == 1) ? "UNPAUSED_PLUGIN" : "UNPAUSED_PLUGINS", count) +} + +findPluginByFile(arg[32], &len) +{ + new name[32], title[32], status[2] + new inum = get_pluginsnum() + + for (new a = 0; a < inum; ++a) + { + get_plugin(a, name, 31, title, 31, status, 0, status, 0, status, 1) + + if (equali(name, arg, len) && ( + status[0] == 'r' || /*running*/ + status[0] == 'p' || /*paused*/ + status[0] == 's' || /*stopped*/ + status[0] == 'd' )) /*debug*/ + { + len = copy(arg, 31, name) + return a + } + } + + return -1 +} + +findPluginByTitle(name[], file[], len) +{ + new title[32], status[2] + new inum = get_pluginsnum() + + for (new a = 0; a < inum; ++a) + { + get_plugin(a, file, len, title, 31, status, 0, status, 0, status, 1) + + if (equali(title, name)) + return a + } + + return -1 +} + +public cmdPlugin(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + new cmds[32] + read_argv(1, cmds, 31) + + if (equal(cmds, "add") && read_argc() > 2) + { + read_argv(2, cmds, 31) + new file[2] + + if ((g_system[g_systemNum] = findPluginByTitle(cmds, file, 0)) != -1) + { + if (g_systemNum < MAX_SYSTEM) + g_systemNum++ + else + console_print(id, "%L", id, "CANT_MARK_MORE") + } + } + else if (equal(cmds, "off")) + { + pausePlugins(id) + } + else if (equal(cmds, "on")) + { + unpausePlugins(id) + } + else if (equal(cmds, "save")) + { + if (saveSettings(g_fileToSave)) + { + g_Modified = 0 + console_print(id, "%L", id, "PAUSE_CONF_SAVED") + } + else + console_print(id, "%L", id, "PAUSE_SAVE_FAILED") + } + else if (equal(cmds, "clear")) + { + if (file_exists(g_fileToSave)) + { + delete_file(g_fileToSave) + console_print(id, "%L", id, "PAUSE_CONF_CLEARED") + } + else + console_print(id, "%L", id, "PAUSE_ALR_CLEARED") + } + else if (equal(cmds, "pause")) + { + new arg[32], a, len = read_argv(2, arg, 31) + + if (len && ((a = findPluginByFile(arg, len)) != -1) && !isSystem(a) && pause("ac", arg)) + console_print(id, "%L %L", id, "PAUSE_PLUGIN_MATCH", arg, id, "PAUSED") + else + console_print(id, "%L", id, "PAUSE_COULDNT_FIND", arg) + } + else if (equal(cmds, "enable")) + { + new arg[32], a, len = read_argv(2, arg, 31) + + if (len && (a = findPluginByFile(arg, len)) != -1 && !isSystem(a)) + { + if (unpause("ac", arg)) + { + console_print(id, "%L %L", id, "PAUSE_PLUGIN_MATCH", arg, id, "UNPAUSED") + } + else + { + console_print(id, "%L", id, "CANT_UNPAUSE_PLUGIN", arg) + } + } + else + { + console_print(id, "%L", id, "PAUSE_COULDNT_FIND", arg) + } + } + else if (equal(cmds, "stop")) + { + new arg[32], a, len = read_argv(2, arg, 31) + + if (len && (a = findPluginByFile(arg, len)) != -1 && !isSystem(a) && pause("dc", arg)) + { + g_Modified = 1 + console_print(id, "%L %L", id, "PAUSE_PLUGIN_MATCH", arg, id, "STOPPED") + } + else + console_print(id, "%L", id, "PAUSE_COULDNT_FIND", arg) + } + else if (equal(cmds, "list")) + { + new lName[32], lVersion[32], lAuthor[32], lFile[32], lStatus[32] + + format(lName, 31, "%L", id, "NAME") + format(lVersion, 31, "%L", id, "VERSION") + format(lAuthor, 31, "%L", id, "AUTHOR") + format(lFile, 31, "%L", id, "FILE") + format(lStatus, 31, "%L", id, "STATUS") + + new arg1[8], running = 0 + new start = read_argv(2, arg1, 7) ? str_to_num(arg1) : 1 + + if (--start < 0) + start = 0 + + new plgnum = get_pluginsnum() + + if (start >= plgnum) + start = plgnum - 1 + + console_print(id, "^n----- %L -----", id, "PAUSE_LOADED") + console_print(id, " %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", lName, lVersion, lAuthor, lFile, lStatus) + + new plugin[32], title[32], version[16], author[32], status[16] + new end = start + 10 + + if (end > plgnum) end = plgnum + + for (new a = start; a < end; ++a) + { + get_plugin(a, plugin, 31, title, 31, version, 15, author, 31, status, 15) + if (status[0] == 'r') ++running + console_print(id, " [%3d] %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", a + 1, title, version, author, plugin, status) + } + + console_print(id, "----- %L -----", id, "PAUSE_ENTRIES", start + 1, end, plgnum, running) + + if (end < plgnum) + console_print(id, "----- %L -----", id, "PAUSE_USE_MORE", end + 1) + else + console_print(id, "----- %L -----", id, "PAUSE_USE_BEGIN") + } else { + console_print(id, "%L", id, "PAUSE_USAGE") + console_print(id, "%L:", id, "PAUSE_COMMANDS") + console_print(id, "%L", id, "COM_PAUSE_OFF") + console_print(id, "%L", id, "COM_PAUSE_ON") + console_print(id, "%L", id, "COM_PAUSE_STOP") + console_print(id, "%L", id, "COM_PAUSE_PAUSE") + console_print(id, "%L", id, "COM_PAUSE_ENABLE") + console_print(id, "%L", id, "COM_PAUSE_SAVE_PAUSED") + console_print(id, "%L", id, "COM_PAUSE_CLEAR_PAUSED") + console_print(id, "%L", id, "COM_PAUSE_LIST") + console_print(id, "%L", id, "COM_PAUSE_ADD") + } + + return PLUGIN_HANDLED +} + +saveSettings(filename[]) +{ + if (file_exists(filename)) + delete_file(filename) + + new text[256], file[32], title[32], status[2] + new inum = get_pluginsnum() + + if (!write_file(filename, ";Generated by Pause Plugins Plugin. Do not modify!^n;Title Filename")) + return 0 + + for (new a = 0; a < inum; ++a) + { + get_plugin(a, file, 31, title, 31, status, 0, status, 0, status, 1) + + // "paused" + if (status[0] == 'p') + { + format(text, 255, "^"%s^" ;%s", title, file) + write_file(filename, text) + } + } + + return 1 +} + +loadSettings(filename[]) +{ + if (!file_exists(filename)) + return 0 + + new name[256], file[32], i, pos = 0 + + while (read_file(filename, pos++, name, 255, i)) + { + if (name[0] != ';' && parse(name, name, 31) && (i = findPluginByTitle(name, file, 31) != -1)) + pause("ac", file) + } + + return 1 +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/plmenu.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/plmenu.sma new file mode 100644 index 0000000..f706051 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/plmenu.sma @@ -0,0 +1,931 @@ +/* AMX Mod X +* Players Menu Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +/** skip autoloading since it's optional */ +#define AMXMODX_NOAUTOLOAD +#include <cstrike> + +new g_menuPosition[33] +new g_menuPlayers[33][32] +new g_menuPlayersNum[33] +new g_menuOption[33] +new g_menuSettings[33] + +new g_menuSelect[33][64] +new g_menuSelectNum[33] + +#define MAX_CLCMDS 24 + +new g_clcmdName[MAX_CLCMDS][32] +new g_clcmdCmd[MAX_CLCMDS][64] +new g_clcmdMisc[MAX_CLCMDS][2] +new g_clcmdNum + +new g_coloredMenus +new g_cstrike = 0 + +new Array:g_bantimes; +new Array:g_slapsettings; + +new g_CSTeamNames[3][] = { + "TERRORIST", + "CT", + "SPECTATOR" +} +new g_CSTeamNumbers[3][] = { + "1", + "2", + "6" +} +new g_CSTeamiNumbers[3] = { + 1, + 2, + 6 +} + + +public plugin_natives() +{ + set_module_filter("module_filter") + set_native_filter("native_filter") +} + +public plugin_init() +{ + register_plugin("Players Menu", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("common.txt") + register_dictionary("admincmd.txt") + register_dictionary("plmenu.txt") + + register_clcmd("amx_kickmenu", "cmdKickMenu", ADMIN_KICK, "- displays kick menu") + register_clcmd("amx_banmenu", "cmdBanMenu", ADMIN_BAN, "- displays ban menu") + register_clcmd("amx_slapmenu", "cmdSlapMenu", ADMIN_SLAY, "- displays slap/slay menu") + register_clcmd("amx_teammenu", "cmdTeamMenu", ADMIN_LEVEL_A, "- displays team menu") + register_clcmd("amx_clcmdmenu", "cmdClcmdMenu", ADMIN_LEVEL_A, "- displays client cmds menu") + + register_menucmd(register_menuid("Ban Menu"), 1023, "actionBanMenu") + register_menucmd(register_menuid("Kick Menu"), 1023, "actionKickMenu") + register_menucmd(register_menuid("Slap/Slay Menu"), 1023, "actionSlapMenu") + register_menucmd(register_menuid("Team Menu"), 1023, "actionTeamMenu") + register_menucmd(register_menuid("Client Cmds Menu"), 1023, "actionClcmdMenu") + + + g_bantimes = ArrayCreate(); + // Load up the old default values + ArrayPushCell(g_bantimes, 0); + ArrayPushCell(g_bantimes, 5); + ArrayPushCell(g_bantimes, 10); + ArrayPushCell(g_bantimes, 15); + ArrayPushCell(g_bantimes, 30); + ArrayPushCell(g_bantimes, 45); + ArrayPushCell(g_bantimes, 60); + + + g_slapsettings = ArrayCreate(); + // Old default values + ArrayPushCell(g_slapsettings, 0); // First option is ignored - it is slay + ArrayPushCell(g_slapsettings, 0); // slap 0 damage + ArrayPushCell(g_slapsettings, 1); + ArrayPushCell(g_slapsettings, 5); + + + register_srvcmd("amx_plmenu_bantimes", "plmenu_setbantimes"); + register_srvcmd("amx_plmenu_slapdmg", "plmenu_setslapdmg"); + + g_coloredMenus = colored_menus() + + new clcmds_ini_file[64] + get_configsdir(clcmds_ini_file, 63) + format(clcmds_ini_file, 63, "%s/clcmds.ini", clcmds_ini_file) + load_settings(clcmds_ini_file) + + if (module_exists("cstrike")) + g_cstrike = 1 +} +public plmenu_setbantimes() +{ + new buff[32]; + new args = read_argc(); + + if (args <= 1) + { + server_print("usage: amx_plmenu_bantimes <time1> [time2] [time3] ..."); + server_print(" use time of 0 for permanent."); + + return; + } + + ArrayClear(g_bantimes); + + for (new i = 1; i < args; i++) + { + read_argv(i, buff, charsmax(buff)); + + ArrayPushCell(g_bantimes, str_to_num(buff)); + + } + +} +public plmenu_setslapdmg() +{ + new buff[32]; + new args = read_argc(); + + if (args <= 1) + { + server_print("usage: amx_plmenu_slapdmg <dmg1> [dmg2] [dmg3] ..."); + server_print(" slay is automatically set for the first value."); + + return; + } + + ArrayClear(g_slapsettings); + + ArrayPushCell(g_slapsettings, 0); // compensate for slay + + for (new i = 1; i < args; i++) + { + read_argv(i, buff, charsmax(buff)); + + ArrayPushCell(g_slapsettings, str_to_num(buff)); + + } + +} +public module_filter(const module[]) +{ + if (equali(module, "cstrike")) + return PLUGIN_HANDLED + + return PLUGIN_CONTINUE +} + +public native_filter(const name[], index, trap) +{ + if (!trap) + return PLUGIN_HANDLED + + return PLUGIN_CONTINUE +} + +/* Ban menu */ + +public actionBanMenu(id, key) +{ + switch (key) + { + case 7: + { + /* BEGIN OF CHANGES BY MISTAGEE ADDED A FEW MORE OPTIONS */ + + ++g_menuOption[id] + g_menuOption[id] %= ArraySize(g_bantimes); + + g_menuSettings[id] = ArrayGetCell(g_bantimes, g_menuOption[id]); + + displayBanMenu(id, g_menuPosition[id]) + } + case 8: displayBanMenu(id, ++g_menuPosition[id]) + case 9: displayBanMenu(id, --g_menuPosition[id]) + default: + { + new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key] + new name[32], name2[32], authid[32], authid2[32] + + get_user_name(player, name2, 31) + get_user_authid(id, authid, 31) + get_user_authid(player, authid2, 31) + get_user_name(id, name, 31) + + new userid2 = get_user_userid(player) + + log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%d^")", name, get_user_userid(id), authid, name2, userid2, authid2, g_menuSettings[id]) + + if (g_menuSettings[id]==0) // permanent + { + new maxpl = get_maxplayers(); + for (new i = 1; i <= maxpl; i++) + { + show_activity_id(i, id, name, "%L %s %L", i, "BAN", name2, i, "PERM"); + } + } + else + { + new tempTime[32]; + formatex(tempTime,sizeof(tempTime)-1,"%d",g_menuSettings[id]); + new maxpl = get_maxplayers(); + for (new i = 1; i <= maxpl; i++) + { + show_activity_id(i, id, name, "%L %s %L", i, "BAN", name2, i, "FOR_MIN", tempTime); + } + } + /* ---------- check for Steam ID added by MistaGee -------------------- + IF AUTHID == 4294967295 OR VALVE_ID_LAN OR HLTV, BAN PER IP TO NOT BAN EVERYONE */ + + if (equal("4294967295", authid2) + || equal("HLTV", authid2) + || equal("STEAM_ID_LAN", authid2) + || equali("VALVE_ID_LAN", authid2)) + { + /* END OF MODIFICATIONS BY MISTAGEE */ + new ipa[32] + get_user_ip(player, ipa, 31, 1) + + server_cmd("addip %d %s;writeip", g_menuSettings[id], ipa) + } + else + { + server_cmd("banid %d #%d kick;writeid", g_menuSettings[id], userid2) + } + + server_exec() + + displayBanMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displayBanMenu(id, pos) +{ + if (pos < 0) + return + + get_players(g_menuPlayers[id], g_menuPlayersNum[id]) + + new menuBody[512] + new b = 0 + new i + new name[32] + new start = pos * 7 + + if (start >= g_menuPlayersNum[id]) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "BAN_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0))) + new end = start + 7 + new keys = MENU_KEY_0|MENU_KEY_8 + + if (end > g_menuPlayersNum[id]) + end = g_menuPlayersNum[id] + + for (new a = start; a < end; ++a) + { + i = g_menuPlayers[id][a] + get_user_name(i, name, 31) + + if (is_user_bot(i) || (access(i, ADMIN_IMMUNITY) && i != id)) + { + ++b + + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name) + else + len += format(menuBody[len], 511-len, "#. %s^n", name) + } else { + keys |= (1<<b) + + if (is_user_admin(i)) + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name) + else + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name) + } + } + + if (g_menuSettings[id]) + len += format(menuBody[len], 511-len, "^n8. %L^n", id, "BAN_FOR_MIN", g_menuSettings[id]) + else + len += format(menuBody[len], 511-len, "^n8. %L^n", id, "BAN_PERM") + + if (end != g_menuPlayersNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menuBody, -1, "Ban Menu") +} + +public cmdBanMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + g_menuOption[id] = 0 + + if (ArraySize(g_bantimes) > 0) + { + g_menuSettings[id] = ArrayGetCell(g_bantimes, g_menuOption[id]); + } + else + { + // should never happen, but failsafe + g_menuSettings[id] = 0 + } + displayBanMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +/* Slap/Slay */ + +public actionSlapMenu(id, key) +{ + switch (key) + { + case 7: + { + ++g_menuOption[id] + + g_menuOption[id] %= ArraySize(g_slapsettings); + + g_menuSettings[id] = ArrayGetCell(g_slapsettings, g_menuOption[id]); + + displaySlapMenu(id, g_menuPosition[id]); + } + case 8: displaySlapMenu(id, ++g_menuPosition[id]) + case 9: displaySlapMenu(id, --g_menuPosition[id]) + default: + { + new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key] + new name2[32] + + get_user_name(player, name2, 31) + + if (!is_user_alive(player)) + { + client_print(id, print_chat, "%L", id, "CANT_PERF_DEAD", name2) + displaySlapMenu(id, g_menuPosition[id]) + return PLUGIN_HANDLED + } + + new authid[32], authid2[32], name[32] + + get_user_authid(id, authid, 31) + get_user_authid(player, authid2, 31) + get_user_name(id, name, 31) + + if (g_menuOption[id]) + { + log_amx("Cmd: ^"%s<%d><%s><>^" slap with %d damage ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, g_menuSettings[id], name2, get_user_userid(player), authid2) + + show_activity_key("ADMIN_SLAP_1", "ADMIN_SLAP_2", name, name2, g_menuSettings[id]); + } else { + log_amx("Cmd: ^"%s<%d><%s><>^" slay ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, name2, get_user_userid(player), authid2) + + show_activity_key("ADMIN_SLAY_1", "ADMIN_SLAY_2", name, name2); + } + + if (g_menuOption[id]) + user_slap(player, (get_user_health(player) > g_menuSettings[id]) ? g_menuSettings[id] : 0) + else + user_kill(player) + + displaySlapMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displaySlapMenu(id, pos) +{ + if (pos < 0) + return + + get_players(g_menuPlayers[id], g_menuPlayersNum[id]) + + new menuBody[512] + new b = 0 + new i + new name[32], team[4] + new start = pos * 7 + + if (start >= g_menuPlayersNum[id]) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "SLAP_SLAY_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0))) + new end = start + 7 + new keys = MENU_KEY_0|MENU_KEY_8 + + if (end > g_menuPlayersNum[id]) + end = g_menuPlayersNum[id] + + for (new a = start; a < end; ++a) + { + i = g_menuPlayers[id][a] + get_user_name(i, name, 31) + + if (g_cstrike) + { + if (cs_get_user_team(i) == CS_TEAM_T) + { + copy(team, 3, "TE") + } + else if (cs_get_user_team(i) == CS_TEAM_CT) + { + copy(team, 3, "CT") + } else { + get_user_team(i, team, 3) + } + } else { + get_user_team(i, team, 3) + } + + if (!is_user_alive(i) || (access(i, ADMIN_IMMUNITY) && i != id)) + { + ++b + + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%d. %s\R%s^n\w", b, name, team) + else + len += format(menuBody[len], 511-len, "#. %s %s^n", name, team) + } else { + keys |= (1<<b) + + if (is_user_admin(i)) + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*\y\R%s^n\w" : "%d. %s * %s^n", ++b, name, team) + else + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s\y\R%s^n\w" : "%d. %s %s^n", ++b, name, team) + } + } + + if (g_menuOption[id]) + len += format(menuBody[len], 511-len, "^n8. %L^n", id, "SLAP_WITH_DMG", g_menuSettings[id]) + else + len += format(menuBody[len], 511-len, "^n8. %L^n", id, "SLAY") + + if (end != g_menuPlayersNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menuBody, -1, "Slap/Slay Menu") +} + +public cmdSlapMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + g_menuOption[id] = 0 + if (ArraySize(g_slapsettings) > 0) + { + g_menuSettings[id] = ArrayGetCell(g_slapsettings, g_menuOption[id]); + } + else + { + // should never happen, but failsafe + g_menuSettings[id] = 0 + } + + displaySlapMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +/* Kick */ + +public actionKickMenu(id, key) +{ + switch (key) + { + case 8: displayKickMenu(id, ++g_menuPosition[id]) + case 9: displayKickMenu(id, --g_menuPosition[id]) + default: + { + new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key] + new authid[32], authid2[32], name[32], name2[32] + + get_user_authid(id, authid, 31) + get_user_authid(player, authid2, 31) + get_user_name(id, name, 31) + get_user_name(player, name2, 31) + + new userid2 = get_user_userid(player) + + log_amx("Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, name2, userid2, authid2) + + show_activity_key("ADMIN_KICK_1", "ADMIN_KICK_2", name, name2); + + + server_cmd("kick #%d", userid2) + server_exec() + + displayKickMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displayKickMenu(id, pos) +{ + if (pos < 0) + return + + get_players(g_menuPlayers[id], g_menuPlayersNum[id]) + + new menuBody[512] + new b = 0 + new i + new name[32] + new start = pos * 8 + + if (start >= g_menuPlayersNum[id]) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "KICK_MENU", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] % 8) ? 1 : 0))) + new end = start + 8 + new keys = MENU_KEY_0 + + if (end > g_menuPlayersNum[id]) + end = g_menuPlayersNum[id] + + for (new a = start; a < end; ++a) + { + i = g_menuPlayers[id][a] + get_user_name(i, name, 31) + + if (access(i, ADMIN_IMMUNITY) && i != id) + { + ++b + + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name) + else + len += format(menuBody[len], 511-len, "#. %s^n", name) + } else { + keys |= (1<<b) + + if (is_user_admin(i)) + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name) + else + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name) + } + } + + if (end != g_menuPlayersNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menuBody, -1, "Kick Menu") +} + +public cmdKickMenu(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + displayKickMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +/* Team menu */ + +public actionTeamMenu(id, key) +{ + switch (key) + { + case 7: + { + g_menuOption[id] = (g_menuOption[id] + 1) % (g_cstrike ? 3 : 2); + displayTeamMenu(id, g_menuPosition[id]) + } + case 8: displayTeamMenu(id, ++g_menuPosition[id]) + case 9: displayTeamMenu(id, --g_menuPosition[id]) + default: + { + new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key] + new authid[32], authid2[32], name[32], name2[32] + + get_user_name(player, name2, 31) + get_user_authid(id, authid, 31) + get_user_authid(player, authid2, 31) + get_user_name(id, name, 31) + + log_amx("Cmd: ^"%s<%d><%s><>^" transfer ^"%s<%d><%s><>^" (team ^"%s^")", name, get_user_userid(id), authid, name2, get_user_userid(player), authid2, g_menuOption[id] ? "TERRORIST" : "CT") + + show_activity_key("ADMIN_TRANSF_1", "ADMIN_TRANSF_2", name, name2, g_CSTeamNames[g_menuOption[id] % 3]); + + if (g_cstrike) + { + if (is_user_alive(player)) + { + new deaths = cs_get_user_deaths(player) + user_kill(player, 1) + cs_set_user_deaths(player, deaths) + } + // This modulo math just aligns the option to the CsTeams-corresponding number + cs_set_user_team(player, (g_menuOption[id] % 3) + 1) + cs_reset_user_model(player) + } else { + new limit_setting = get_cvar_num("mp_limitteams") + + set_cvar_num("mp_limitteams", 0) + engclient_cmd(player, "jointeam", g_CSTeamNumbers[g_menuOption[id] % 2]) + engclient_cmd(player, "joinclass", "1") + set_cvar_num("mp_limitteams", limit_setting) + } + + displayTeamMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displayTeamMenu(id, pos) +{ + if (pos < 0) + return + + get_players(g_menuPlayers[id], g_menuPlayersNum[id]) + + new menuBody[512] + new b = 0 + new i, iteam + new name[32], team[4] + new start = pos * 7 + + if (start >= g_menuPlayersNum[id]) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "TEAM_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0))) + new end = start + 7 + new keys = MENU_KEY_0|MENU_KEY_8 + + if (end > g_menuPlayersNum[id]) + end = g_menuPlayersNum[id] + + for (new a = start; a < end; ++a) + { + i = g_menuPlayers[id][a] + get_user_name(i, name, 31) + + if (g_cstrike) + { + iteam = _:cs_get_user_team(i) + + if (iteam == 1) + { + copy(team, 3, "TE") + } + else if (iteam == 2) + { + copy(team, 3, "CT") + } + else if (iteam == 3) + { + copy(team, 3, "SPE"); + iteam = 6; + } else { + iteam = get_user_team(i, team, 3) + } + } else { + iteam = get_user_team(i, team, 3) + } + + if ((iteam == g_CSTeamiNumbers[g_menuOption[id] % (g_cstrike ? 3 : 2)]) || (access(i, ADMIN_IMMUNITY) && i != id)) + { + ++b + + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%d. %s\R%s^n\w", b, name, team) + else + len += format(menuBody[len], 511-len, "#. %s %s^n", name, team) + } else { + keys |= (1<<b) + + if (is_user_admin(i)) + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*\y\R%s^n\w" : "%d. %s * %s^n", ++b, name, team) + else + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s\y\R%s^n\w" : "%d. %s %s^n", ++b, name, team) + } + } + + len += format(menuBody[len], 511-len, "^n8. %L^n", id, "TRANSF_TO", g_CSTeamNames[g_menuOption[id] % (g_cstrike ? 3 : 2)]) + + if (end != g_menuPlayersNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menuBody, -1, "Team Menu") +} + +public cmdTeamMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + g_menuOption[id] = 0 + + displayTeamMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +/* Client cmds menu */ + +public actionClcmdMenu(id, key) +{ + switch (key) + { + case 7: + { + ++g_menuOption[id] + g_menuOption[id] %= g_menuSelectNum[id] + displayClcmdMenu(id, g_menuPosition[id]) + } + case 8: displayClcmdMenu(id, ++g_menuPosition[id]) + case 9: displayClcmdMenu(id, --g_menuPosition[id]) + default: + { + new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key] + new flags = g_clcmdMisc[g_menuSelect[id][g_menuOption[id]]][1] + + if (is_user_connected(player)) + { + new command[512], authid[32], name[32], userid[32] + + copy(command, charsmax(command), g_clcmdCmd[g_menuSelect[id][g_menuOption[id]]]) + get_user_authid(player, authid, 31) + get_user_name(player, name, 31) + num_to_str(get_user_userid(player), userid, 31) + + replace(command, charsmax(command), "%userid%", userid) + replace(command, charsmax(command), "%authid%", authid) + replace(command, charsmax(command), "%name%", name) + + if (flags & 1) + { + server_cmd("%s", command) + server_exec() + } else if (flags & 2) + client_cmd(id, "%s", command) + else if (flags & 4) + client_cmd(player, "%s", command) + } + + if (flags & 8) + displayClcmdMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displayClcmdMenu(id, pos) +{ + if (pos < 0) + return + + get_players(g_menuPlayers[id], g_menuPlayersNum[id]) + + new menuBody[512] + new b = 0 + new i + new name[32] + new start = pos * 7 + + if (start >= g_menuPlayersNum[id]) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "CL_CMD_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0))) + new end = start + 7 + new keys = MENU_KEY_0|MENU_KEY_8 + + if (end > g_menuPlayersNum[id]) + end = g_menuPlayersNum[id] + + for (new a = start; a < end; ++a) + { + i = g_menuPlayers[id][a] + get_user_name(i, name, 31) + + if (!g_menuSelectNum[id] || (access(i, ADMIN_IMMUNITY) && i != id)) + { + ++b + + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name) + else + len += format(menuBody[len], 511-len, "#. %s^n", name) + } else { + keys |= (1<<b) + + if (is_user_admin(i)) + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name) + else + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name) + } + } + + if (g_menuSelectNum[id]) + len += format(menuBody[len], 511-len, "^n8. %s^n", g_clcmdName[g_menuSelect[id][g_menuOption[id]]]) + else + len += format(menuBody[len], 511-len, "^n8. %L^n", id, "NO_CMDS") + + if (end != g_menuPlayersNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menuBody, -1, "Client Cmds Menu") +} + +public cmdClcmdMenu(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + g_menuSelectNum[id] = 0 + + for (new a = 0; a < g_clcmdNum; ++a) + if (access(id, g_clcmdMisc[a][0])) + g_menuSelect[id][g_menuSelectNum[id]++] = a + + g_menuOption[id] = 0 + + displayClcmdMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +load_settings(szFilename[]) +{ + if (!file_exists(szFilename)) + return 0 + + new text[256], szFlags[32], szAccess[32] + new a, pos = 0 + + while (g_clcmdNum < MAX_CLCMDS && read_file(szFilename, pos++, text, 255, a)) + { + if (text[0] == ';') continue + + if (parse(text, g_clcmdName[g_clcmdNum], 31, g_clcmdCmd[g_clcmdNum], 63, szFlags, 31, szAccess, 31) > 3) + { + while (replace(g_clcmdCmd[g_clcmdNum], 63, "\'", "^"")) + { + // do nothing + } + + g_clcmdMisc[g_clcmdNum][1] = read_flags(szFlags) + g_clcmdMisc[g_clcmdNum][0] = read_flags(szAccess) + g_clcmdNum++ + } + } + + return 1 +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/pluginmenu.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/pluginmenu.sma new file mode 100644 index 0000000..08acb8c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/pluginmenu.sma @@ -0,0 +1,957 @@ +/* AMX Mod X +* Plugin Cvar and Command Menu +* +* by the AMX Mod X Development Team +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + + + +new DisabledCallback; +new EnabledCallback; + +// pcvar that the client is currently modifying +new CurrentCvar[33]; + +// Name of the cvar being modified +new CurrentCvarName[33][32]; + +// Plugin ID that the client is modifying +new CurrentPlid[33]; + +// Page that the client is currently on +new CurrentPage[33]; + +// Menu function ID that the client is in +new CurrentMenuFunction[33] = { -1,... }; + +new CurrentCommand[33][32]; +new cvarmenu_cmdid; +new cmdmenu_cmdid; + +new ExplicitPlugin[33]; + +public plugin_init() +{ + register_plugin("Plugin Menu",AMXX_VERSION_STR,"AMXX Dev Team"); + + register_dictionary("common.txt"); + register_dictionary("pausecfg.txt"); // Needed for PAUSE_COULDNT_FIND + + cvarmenu_cmdid=register_clcmd("amx_plugincvarmenu", "CvarMenuCommand", ADMIN_CVAR, " - displays the plugin cvar menu"); + cmdmenu_cmdid=register_clcmd("amx_plugincmdmenu", "CommandMenuCommand", ADMIN_MENU, " - displays the plugin command menu"); + + register_clcmd("amx_changecvar","CommandChangeCvar"); + register_clcmd("amx_executecmd","CommandExecuteCommand"); + + // Register global menu callbacks. + DisabledCallback=menu_makecallback("AlwaysDisableCallback"); + EnabledCallback=menu_makecallback("AlwaysEnableCallback"); +} + +// Add these menus to the amxmodmenu +public plugin_cfg() +{ + set_task(0.1, "addToMenuFront"); +} +public addToMenuFront() +{ + new PluginFileName[64]; + + get_plugin(-1, PluginFileName, charsmax(PluginFileName)); + new cvarflags; + new cmdflags; + new garbage[1]; + new cmd[32]; + + get_concmd(cmdmenu_cmdid, cmd, charsmax(cmd), cmdflags, garbage, charsmax(garbage), -1); + + if (strcmp(cmd, "amx_plugincmdmenu") != 0) + { + // this should never happen, but just incase! + cmdflags = ADMIN_MENU; + } + get_concmd(cvarmenu_cmdid, cmd, charsmax(cmd), cvarflags, garbage, charsmax(garbage), -1); + + if (strcmp(cmd, "amx_plugincvarmenu") != 0) + { + // this should never happen, but just incase! + cvarflags = ADMIN_CVAR; + } + + AddMenuItem("Plugin Cvars", "amx_plugincvarmenu", cvarflags, PluginFileName); + AddMenuItem("Plugin Commands", "amx_plugincmdmenu", cmdflags, PluginFileName); +} + +// Reset all fields for each client as they connect. +public client_connect(id) +{ + CurrentCvar[id]=0; + CurrentPlid[id]=0; + CurrentMenuFunction[id]=-1; + CurrentCvarName[id][0]=0; + CurrentCommand[id][0]=0; + ExplicitPlugin[id]=-1; + +} + +/** + * Creates a plugin list menu. + * + * @param MenuText The text to display as the title. + * @param Handler The function to call when an item is selected. + * @param Command The function to pass to the handler. It will be passed as "PLID Command". + * @param Callback Function to call for each plugin to be listed. Displays a number next to it (how many cvars, etc.) + */ +stock DisplayPluginMenu(id,const MenuText[], const Handler[], const Command[], const Callback[]) +{ + new Menu=menu_create(MenuText,Handler); + + + new PluginState[32]; + new PluginName[64]; + new func=get_func_id(Callback); + new tally; + new PluginCmd[64]; + new MenuText[64]; + for (new i=0, max=get_pluginsnum(); + i<max; + i++) + { + if (callfunc_begin_i(func,-1)==1) + { + callfunc_push_int(i); // push the plid + if ((tally=callfunc_end())>0) + { + get_plugin(i,"",0,PluginName,sizeof(PluginName)-1,"",0,"",0,PluginState,sizeof(PluginState)-1); + + // Command syntax is: "# Function", # being plugin ID, function being public function to call. + formatex(PluginCmd,sizeof(PluginCmd)-1,"%d %s",i,Command); + formatex(MenuText,sizeof(MenuText)-1,"%s - %d",PluginName,tally); + // If the plugin is running, add this as an activated menu item. + if (strcmp(PluginState,"running",true)==0 || + strcmp(PluginState,"debug", true)==0) + { + menu_additem(Menu,MenuText,PluginCmd,EnabledCallback); + } + else + { + menu_additem(Menu,MenuText,"",_,DisabledCallback); + } + } + } + } + + menu_setprop(Menu,MPROP_NUMBER_COLOR,"\y"); + menu_setprop(Menu,MPROP_EXIT,MEXIT_ALL); + menu_display(id,Menu,0); + +} + +/** + * Byrefs the plugin id of a target plugin (passed by argv(1)), but only if it's valid. + * + * @param id id of the display messages to upon failure. + * @param plid Variable to byref the plugin id. + * @return True on successful lookup, false on failure. + */ +stock bool:GetPlidForValidPlugins(id, &plid) +{ + // If arguments have been passed, then we were given + // a specific plugin to examine. + if (read_argc()>1) + { + // Yes, we were provided a plugin. + new TargetPlugin[64]; + read_argv(1,TargetPlugin,sizeof(TargetPlugin)-1); + + new BufferName[64]; + new BufferFile[64]; + new BufferState[64]; + // Scan for the plugin ID. + for (new i=0, max=get_pluginsnum(); + i<max; + i++) + { + get_plugin(i,BufferFile,sizeof(BufferFile)-1,BufferName,sizeof(BufferName)-1,"",0,"",0,BufferState,sizeof(BufferState)-1); + + if (strcmp(BufferFile,TargetPlugin,true) != 0|| + strcmp(BufferName,TargetPlugin,true) != 0) + { + // We have a match. + + // Check the status of the plugin. If it's anything other than "running" or "debug" fail. + if (strcmp(BufferState,"running") != 0 && + strcmp(BufferState,"debug") != 0) + { + // TODO: ML This + console_print(id,"Plugin ^"%s^" is not running.",BufferFile); + // Return a failed state. + return false; + } + plid=i; + break; + } + } + + // If the plugin was not found, then tell them there was an error. + if (plid==-1) + { + console_print(id, "%L", id, "PAUSE_COULDNT_FIND", TargetPlugin); + + // return a failure state + return false; + } + } + + return true; +} + +/** + * Returns the number of cvars available for a plugin by plid. (Callback for the plugin menu.) + * + * @return number of cvars in the plugin. + */ +public GetNumberOfCvarsForPlid(plid) +{ + new count=0; + new CvarPlid; + for (new i=0, max=get_plugins_cvarsnum(); + i<max; + i++) + { + get_plugins_cvar(i, "", 0,_, CvarPlid, _); + + if (CvarPlid==plid) + { + count++; + } + } + + return count; +} +/** + * Returns the number of commands available for a plugin by plid. (Callback for the plugin menu.) + * + * @return Number of valid commands in the plugin. + */ +public GetNumberOfCmdsForPlid(plid) +{ + new count=0; + + for (new i=0, max=get_concmdsnum(-1,-1); + i<max; + i++) + { + if (get_concmd_plid(i,-1,-1)==plid) + { + count++; + } + } + + return count; +} + +/** + * Whether or not the client has access to modify this cvar. + * + * @param id The admin id. + * @param Cvar The name of the cvar to be checked. + * @return True if the client has access, false otherwise. + */ +stock bool:CanIModifyCvar(id, const Cvar[]) +{ + new UserFlags=get_user_flags(id); + // If the user has rcon access don't bother checking anything. + if (UserFlags & ADMIN_RCON) + { + return true; + } + + // If the cvar is "sv_password" (somehow), then check access. + if (equali(Cvar,"sv_password") && UserFlags & ADMIN_PASSWORD) + { + return true; + } + + // Check to see if the cvar is flagged as protected. + if (get_cvar_flags(Cvar) & FCVAR_PROTECTED) + { + // non-rcon user trying to modify a protected cvar. + return false; + } + + // All known checks done, they can change this cvar if they + // were able to open the menu. + return true; +} + +/** + * Simple function to ensure that a menu item is always disabled. + * + * All parameters are dummy, nothing is used. + */ +public AlwaysDisableCallback(playerid, menuid, itemid) +{ + return ITEM_DISABLED; +} +/** + * Simple function to ensure that a menu item is always enabled. + * + * All parameters are dummy, nothing is used. + */ +public AlwaysEnableCallback(playerid, menuid, itemid) +{ + return ITEM_ENABLED; +} +/** + * Handler for the plugin menu. + * + * @param id The client selecting an item. + * @param menu The menu handle. + * @param item The item number that was selected. + */ +public PluginMenuSelection(id, menu, item) +{ + if (item==MENU_EXIT) + { + menu_destroy(menu); + } + if (item<0) + { + return PLUGIN_HANDLED; + } + + new Command[64]; + new Dummy[1]; + + // All of the commands set for each item is the public + // function that we want to call after the item is selected. + // The parameters are: function(idPlayer,itemnumber) + // Note the menu is destroyed BEFORE the command + // gets executed. + // The command retrieved is in the format: "PLID Command" + menu_item_getinfo(menu, item, Dummy[0], Command, sizeof(Command)-1,Dummy,0,Dummy[0]); + + + new plid=str_to_num(Command); + new Function[32]; + + for (new i=0;i<sizeof(Command)-1;i++) + { + if (Command[i]==' ') + { + // we're at the break. move up one space. + i++; + copy(Function,sizeof(Function)-1,Command[i]); + break; + } + } + + menu_destroy(menu); + + new funcid=get_func_id(Function); + if (funcid != -1 && callfunc_begin_i(funcid)==1) + { + CurrentPage[id]=0; + CurrentPlid[id]=plid; + CurrentMenuFunction[id]=funcid; + callfunc_push_int(id); + callfunc_push_int(plid); + callfunc_push_int(0); + callfunc_end(); + + } + return PLUGIN_HANDLED; +} + +/** + * The command to change a cvar has been called. + * + * @param id The client who is changing the cvar. + */ +public CommandChangeCvar(id) +{ + // All access checks are done before this command is called. + // So if the client has no pcvar pointer in his array slot + // then just ignore the command. + if (CurrentCvar[id]==0) + { + return PLUGIN_CONTINUE; + } + + new Args[256]; + + read_args(Args,sizeof(Args)-1); + + remove_quotes(Args); + + if (equali(Args,"!cancel",7)) + { + // The client didn't want to change this cvar. + client_print(id,print_chat,"[AMXX] Cvar not changed."); + } + else + { + // Changed to set_cvar_* for 1.76 tests + + new pointer=CurrentCvar[id]; + set_pcvar_string(CurrentCvar[id],Args); + + client_print(id,print_chat,"[AMXX] Cvar ^"%s^" changed to ^"%s^"",CurrentCvarName[id],Args); + + // Copy of admincmd's global output. + + new Name[32]; + new AuthID[40]; + + get_user_name(id,Name,sizeof(Name)-1); + get_user_authid(id,AuthID,sizeof(AuthID)-1); + + log_amx("Cmd: ^"%s<%d><%s><>^" set cvar (name ^"%s^") (value ^"%s^")", Name, get_user_userid(id), AuthID, CurrentCvarName[id], Args); + + + new cvar_val[64]; + new maxpl = get_maxplayers(); + for (new i = 1; i <= maxpl; i++) + { + if (is_user_connected(i) && !is_user_bot(i)) + { + if (get_pcvar_flags(pointer) & FCVAR_PROTECTED || equali(Args, "rcon_password")) + { + formatex(cvar_val, charsmax(cvar_val), "*** %L ***", i, "PROTECTED"); + } + else + { + copy(cvar_val, charsmax(cvar_val), Args); + } + show_activity_id(i, id, Name, "%L", i, "SET_CVAR_TO", "", CurrentCvarName[id], cvar_val); + } + } + console_print(id, "[AMXX] %L", id, "CVAR_CHANGED", CurrentCvarName[id], Args); + + } + + // Now redraw the menu for the client + if (CurrentMenuFunction[id]!=-1 && callfunc_begin_i(CurrentMenuFunction[id])==1) + { + callfunc_push_int(id); + callfunc_push_int(CurrentPlid[id]); + callfunc_push_int(CurrentPage[id]); + callfunc_end(); + } + + return PLUGIN_HANDLED; +} + +/** + * Process a selection from the cvar menu. + * + * @param id The client who chose an item. + * @param menu The menu handle. + * @param item The item that has been selected. + */ +public CvarMenuSelection(id, menu, item) +{ + + if (item==MENU_EXIT) + { + menu_destroy(menu); + + if (ExplicitPlugin[id]==-1) + { + client_cmd(id,"amx_plugincvarmenu"); + } + return PLUGIN_HANDLED; + } + else if (item==MENU_BACK) + { + --CurrentPage[id]; + client_print(id,print_chat,"MENU_BACK"); + return PLUGIN_HANDLED; + } + else if (item==MENU_MORE) + { + ++CurrentPage[id]; + client_print(id,print_chat,"MENU_MORE"); + return PLUGIN_HANDLED; + } + else + { + new CvarName[64]; + new Command[32]; + new Dummy[1]; + // pcvar pointer is stored in command, extract the name of the cvar from the name field. + menu_item_getinfo(menu, item, Dummy[0], Command, sizeof(Command)-1,CvarName,sizeof(CvarName)-1,Dummy[0]); + + CurrentCvar[id]=str_to_num(Command); + + if (CurrentCvar[id]==0) // This should never happen, but just incase.. + { + client_print(id,print_chat,"[AMXX] There was an error extracting the cvar pointer. (Name=^"%s^")",CvarName); + return PLUGIN_HANDLED; + } + // TODO: ML this + + // Scan up "CvarName" and stop at the first space + for (new i=0;i<sizeof(CvarName)-1;i++) + { + if (CvarName[i]==' ') + { + CvarName[i]='^0'; + break; + } + } + copy(CurrentCvarName[id],sizeof(CurrentCvarName[])-1,CvarName); + client_print(id,print_chat,"[AMXX] Type in the new value for %s, or !cancel to cancel.",CvarName); + client_cmd(id,"messagemode amx_changecvar"); + + menu_destroy(menu); + return PLUGIN_HANDLED; + } + + return 0; +} +/** + * Displays the cvar menu to a client. + * + * @param id id of the client. + * @param plid Plugin ID to display cvars from. + * @param page Page of the menu to start at. + */ +public DisplayCvarMenu(id, plid, page) +{ + new PluginName[32]; + new MenuTitle[64]; + get_plugin(plid,"",0,PluginName,sizeof(PluginName)-1,"",0,"",0,"",0); + + formatex(MenuTitle,sizeof(MenuTitle)-1,"%s Cvars:",PluginName); + + new Menu=menu_create(MenuTitle,"CvarMenuSelection"); + + new Cvar[64]; + new CvarPlid; + new CvarText[64]; + new CvarData[32]; + new CvarPtr; + + for (new i=0, max=get_plugins_cvarsnum(); + i<max; + i++) + { + get_plugins_cvar(i, Cvar, sizeof(Cvar),_, CvarPlid, CvarPtr); + + if (CvarPlid==plid) + { + if (CanIModifyCvar(id,Cvar)) + { + get_pcvar_string(CvarPtr,CvarData,sizeof(CvarData)-1); + formatex(CvarText,sizeof(CvarText)-1,"%s - %s",Cvar,CvarData); + + // Now store the pcvar data in Cvar + num_to_str(CvarPtr,Cvar,sizeof(Cvar)-1); + menu_additem(Menu,CvarText,Cvar,_,EnabledCallback); + } + else + { + menu_additem(Menu,Cvar,"",_,DisabledCallback); + } + + } + } + + menu_setprop(Menu,MPROP_EXIT,MEXIT_ALL); + menu_setprop(Menu,MPROP_NUMBER_COLOR,"\y"); + menu_display(id,Menu,page); + +} +/** + * Process the "amx_plugincvarmenu" command. + * + * @param id id of the client that is calling the command. + * @param level Access level required by the command. + * @param cid Command ID. + */ +public CvarMenuCommand(id, level, cid) +{ + if (!cmd_access(id,level,cid,0)) + { + return PLUGIN_HANDLED; + } + + // This is which plugin to display. -1 means display all plugins in a list. + new plid=-1; + + if (GetPlidForValidPlugins(id,plid)!=true) + { + // If GetPlidForValidPlugins returns false then it failed to find the plugin. + return PLUGIN_HANDLED; + } + + // Check if we were passed a specific plugin to display or not. + if (plid==-1) + { + ExplicitPlugin[id]=-1; + // We need to display a list of the plugins, instead of a specific plugin. + DisplayPluginMenu(id,"Plugin Cvar Menu:", "PluginMenuSelection","DisplayCvarMenu","GetNumberOfCvarsForPlid"); + } + else + { + ExplicitPlugin[id]=plid; + CurrentPlid[id]=plid; + CurrentPage[id]=0; + DisplayCvarMenu(id,plid,0); + } + return PLUGIN_HANDLED; +} +/** + * Handler for the menu that displays a single command ("Execute with no params", etc). + * + * @param id Id of the client. + * @param menu Menu handle. + * @param item Item that was selected. + */ +public SpecificCommandHandler(id,menu,item) +{ + // Exit was called, return to the previous menu. + if (item<0) + { + if (CurrentMenuFunction[id]!=-1 && callfunc_begin_i(CurrentMenuFunction[id])==1) + { + callfunc_push_int(id); + callfunc_push_int(CurrentPlid[id]); + callfunc_push_int(CurrentPage[id]); + callfunc_end(); + } + menu_destroy(menu); + + return PLUGIN_HANDLED; + } + + new Dummy[1]; + if (item==0) // "With params" + { + menu_item_getinfo(menu, item, Dummy[0], CurrentCommand[id], sizeof(CurrentCommand[])-1,"",0,Dummy[0]); + if (CurrentCommand[id][0]==0) // This should never happen, but just incase.. + { + client_print(id,print_chat,"[AMXX] There was an error extracting the command name."); + return PLUGIN_HANDLED; + } + // TODO: ML this + + client_print(id,print_chat,"[AMXX] Type in the parameters for %s, or !cancel to cancel.",CurrentCommand[id]); + client_cmd(id,"messagemode amx_executecmd"); + + menu_destroy(menu); + + return PLUGIN_HANDLED; // Don't return to original menu immediately! + } + else if (item==1) // "No params" + { + menu_item_getinfo(menu, item, Dummy[0], CurrentCommand[id], sizeof(CurrentCommand[])-1,"",0,Dummy[0]); + if (CurrentCommand[id][0]==0) // This should never happen, but just incase.. + { + client_print(id,print_chat,"[AMXX] There was an error extracting the command name."); + return PLUGIN_HANDLED; + } + // TODO: ML this + + // Now redraw the menu for the client BEFORE the command is executed, incase + // that menu brings up a menu of its own. + if (CurrentMenuFunction[id]!=-1 && callfunc_begin_i(CurrentMenuFunction[id])==1) + { + callfunc_push_int(id); + callfunc_push_int(CurrentPlid[id]); + callfunc_push_int(CurrentPage[id]); + callfunc_end(); + } + menu_destroy(menu); + + client_cmd(id,"%s",CurrentCommand[id]); + client_print(id,print_chat,"[AMXX] Command ^"%s^" executed with no parameters",CurrentCommand[id]); + + return PLUGIN_HANDLED; + } + + // We should never get here, but just incase.. + menu_destroy(menu); + + return PLUGIN_HANDLED; +} + +/** + * Generates and displays a menu to the client for a specific command. + * + * @param id The client to display the menu to. + * @param cid The command id to display. + */ +stock DisplaySpecificCommand(id,cid) +{ + new CommandName[64]; + new CommandDesc[128]; + new CommandTitle[256]; + new CommandAccess; + new Menu; + + get_concmd(cid,CommandName,sizeof(CommandName)-1,CommandAccess, CommandDesc,sizeof(CommandDesc)-1, -1, -1); + + if (CommandDesc[0]!='^0') + { + formatex(CommandTitle,sizeof(CommandTitle)-1,"%s^n%s",CommandName,CommandDesc); + Menu=menu_create(CommandTitle,"SpecificCommandHandler"); + } + else + { + Menu=menu_create(CommandName,"SpecificCommandHandler"); + } + menu_additem(Menu,"Execute with parameters.",CommandName,_,EnabledCallback); + menu_additem(Menu,"Execute with no parameters.",CommandName,_,EnabledCallback); + + menu_setprop(Menu,MPROP_NUMBER_COLOR,"\y"); + menu_display(id,Menu,0); +} + +/** + * Handles the executed command (via "amx_executecmd"). + * + * @param id The id of the client who executed this. + */ +public CommandExecuteCommand(id) +{ + // If they had no command stored, then just ignore it entirely. + if (CurrentCommand[id][0]=='^0') + { + return PLUGIN_CONTINUE; + } + + new Args[256]; + + read_args(Args,sizeof(Args)-1); + + remove_quotes(Args); + + if (equali(Args,"!cancel",7)) + { + // The client didn't want to execute this command. + client_print(id,print_chat,"[AMXX] Command not executed."); + + // Now redraw the menu for the client + if (CurrentMenuFunction[id]!=-1 && callfunc_begin_i(CurrentMenuFunction[id])==1) + { + callfunc_push_int(id); + callfunc_push_int(CurrentPlid[id]); + callfunc_push_int(CurrentPage[id]); + callfunc_end(); + } + + } + else + { + // TODO: ML + client_print(id,print_chat,"[AMXX] Command ^"%s^" executed with ^"%s^"",CurrentCommand[id],Args); + + // Now redraw the menu for the client + if (CurrentMenuFunction[id]!=-1 && callfunc_begin_i(CurrentMenuFunction[id])==1) + { + callfunc_push_int(id); + callfunc_push_int(CurrentPlid[id]); + callfunc_push_int(CurrentPage[id]); + callfunc_end(); + } + + // Execute the command on the client. + client_cmd(id,"%s %s",CurrentCommand[id],Args); + } + + + return PLUGIN_HANDLED; + +} + +/** + * Handle a specific selection from the command menu. + * + * @param id id of the client who made the selection. + * @param menu The menu handle. + * @param item The item that was selected. + */ +public CommandMenuSelection(id, menu, item) +{ + + if (item==MENU_EXIT) + { + menu_destroy(menu); + + // If the player did not explicitly specify a plugin, return them to the + // plugin selection menu. + + if (ExplicitPlugin[id]==-1) + { + client_cmd(id,"amx_plugincmdmenu"); + } + return PLUGIN_HANDLED; + } + else if (item==MENU_BACK) + { + --CurrentPage[id]; + client_print(id,print_chat,"MENU_BACK"); + return PLUGIN_HANDLED; + } + else if (item==MENU_MORE) + { + ++CurrentPage[id]; + client_print(id,print_chat,"MENU_MORE"); + return PLUGIN_HANDLED; + } + else + { + new Command[32]; + new Dummy[1]; + // pcvar pointer is stored in command, extract the name of the cvar from the name field. + menu_item_getinfo(menu, item, Dummy[0], Command, sizeof(Command)-1,"",0,Dummy[0]); + + menu_destroy(menu); + + DisplaySpecificCommand(id,str_to_num(Command)); + return PLUGIN_HANDLED; + } + + return 0; +} +/** + * This blocks "say" and "say_team" commands. + * Other commands that shouldn't be displayed (eg: amxauth<stuff>) should be filtered out already. + * + * @param Command The command that is being checked. + */ +stock bool:IsDisplayableCmd(const Command[]) +{ + // Block "say" and "say_team" + if (equal(Command,"say",3)) + { + return false; + } + + return true; +} +/** + * Displays a command list for the specified plugin. + * + * @param id Id of the client that's being displayed to. + * @param plid Plugin ID of the plugin that is to be displayed. + * @param page The page to start at. + */ +public DisplayCmdMenu(id, plid, page) +{ + new PluginName[32]; + new MenuTitle[64]; + get_plugin(plid,"",0,PluginName,sizeof(PluginName)-1,"",0,"",0,"",0); + + formatex(MenuTitle,sizeof(MenuTitle)-1,"%s Commands:",PluginName); + + new Menu=menu_create(MenuTitle,"CommandMenuSelection"); + + new Command[64]; + new CidString[32]; + new CommandAccess; + new userflags=get_user_flags(id); + new bool:isadmin=bool:is_user_admin(id); + + + for (new i=0, max=get_concmdsnum(-1,-1); + i<max; + i++) + { + if (get_concmd_plid(i,-1,-1)==plid) + { + get_concmd(i,Command,sizeof(Command)-1,CommandAccess, "",0, -1, -1); + + if (IsDisplayableCmd(Command)) + { + if ( userflags & CommandAccess || + (CommandAccess==ADMIN_ADMIN && isadmin) || + CommandAccess==ADMIN_USER || + CommandAccess==ADMIN_ALL) + { + num_to_str(i,CidString,sizeof(CidString)-1); + menu_additem(Menu,Command,CidString,0,EnabledCallback); + } + else + { + menu_additem(Menu,Command,"",0,DisabledCallback); + } + } + } + } + menu_setprop(Menu,MPROP_NUMBER_COLOR,"\y"); + menu_display(id,Menu,page); + +} +/** + * Handles the "amx_plugincmdmenu" command. + * + * @param id Id of the client that's being checked. + * @param level Access level of the command. + * @param cid Command ID of the command that was executed. + */ +public CommandMenuCommand(id, level, cid) +{ + if (!cmd_access(id,level,cid,0)) + { + return PLUGIN_HANDLED; + } + + // This is which plugin to display. -1 means display all plugins in a list. + new plid=-1; + + if (GetPlidForValidPlugins(id,plid)!=true) + { + // If GetPlidForValidPlugins returns false then it failed to find the plugin. + return PLUGIN_HANDLED; + } + + // Check if we were passed a specific plugin to display or not. + if (plid==-1) + { + // We need to display a list of the plugins, instead of a specific plugin. + ExplicitPlugin[id]=-1; + DisplayPluginMenu(id,"Plugin Command Menu:", "PluginMenuSelection","DisplayCmdMenu","GetNumberOfCmdsForPlid"); + } + else + { + ExplicitPlugin[id]=plid; + CurrentPlid[id]=plid; + CurrentPage[id]=0; + DisplayCmdMenu(id,plid,0); + } + return PLUGIN_HANDLED; +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/restmenu.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/restmenu.sma new file mode 100644 index 0000000..143bd68 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/restmenu.sma @@ -0,0 +1,983 @@ +/* AMX Mod X +* Restrict Weapons Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +// Uncomment if you want to have seperate settings for each map +//#define MAPSETTINGS + +#include <amxmodx> +#include <amxmisc> + +#define MAXMENUPOS 34 + +new g_Position[33] +new g_Modified +new g_blockPos[112] +new g_saveFile[64] +new g_Restricted[] = "* This item is restricted *" +new g_szWeapRestr[27] = "00000000000000000000000000" +new g_szEquipAmmoRestr[10] = "000000000" +new g_InBuyMenu[33] +new g_RegisteredMenus[10] + +new g_menuStrings[6][] = +{ + "BuyPistol", + "BuyShotgun", + "BuySubMachineGun", + "BuyRifle", + "BuyMachineGun", + "BuyItem" +} + +new g_menusNames[7][] = +{ + "pistol", + "shotgun", + "sub", + "rifle", + "machine", + "equip", + "ammo" +} + +new g_MenuTitle[7][] = +{ + "Handguns", + "Shotguns", + "Sub-Machine Guns", + "Assault & Sniper Rifles", + "Machine Guns", + "Equipment", + "Ammunition" +} + +new g_menusSets[7][2] = +{ + {0, 6}, {6, 8}, {8, 13}, {13, 23}, {23, 24}, {24, 32}, {32, 34} +} + +new g_AliasBlockNum +new g_AliasBlock[MAXMENUPOS] + +// First position is a position of menu (0 for ammo, 1 for pistols, 6 for equipment etc.) +// Second is a key for TERRORIST (all is key are minus one, 1 is 0, 2 is 1 etc.) +// Third is a key for CT +// Position with -1 doesn't exist + +new g_Keys[MAXMENUPOS][3] = +{ + {1, 1, 1}, // H&K USP .45 Tactical + {1, 0, 0}, // Glock18 Select Fire + {1, 3, 3}, // Desert Eagle .50AE + {1, 2, 2}, // SIG P228 + {1, 4, -1}, // Dual Beretta 96G Elite + {1, -1, 4}, // FN Five-Seven + {2, 0, 0}, // Benelli M3 Super90 + {2, 1, 1}, // Benelli XM1014 + {3, 1, 1}, // H&K MP5-Navy + {3, -1, 0}, // Steyr Tactical Machine Pistol + {3, 3, 3}, // FN P90 + {3, 0, -1}, // Ingram MAC-10 + {3, 2, 2}, // H&K UMP45 + {4, 1, -1}, // AK-47 + {4, 0, -1}, // Gali + {4, -1, 0}, // Famas + {4, 3, -1}, // Sig SG-552 Commando + {4, -1, 2}, // Colt M4A1 Carbine + {4, -1, 3}, // Steyr Aug + {4, 2, 1}, // Steyr Scout + {4, 4, 5}, // AI Arctic Warfare/Magnum + {4, 5, -1}, // H&K G3/SG-1 Sniper Rifle + {4, -1, 4}, // Sig SG-550 Sniper + {5, 0, 0}, // FN M249 Para + {6, 0, 0}, // Kevlar Vest + {6, 1, 1}, // Kevlar Vest & Helmet + {6, 2, 2}, // Flashbang + {6, 3, 3}, // HE Grenade + {6, 4, 4}, // Smoke Grenade + {6, -1, 6}, // Defuse Kit + {6, 5, 5}, // NightVision Goggles + {6, -1, 7}, // Tactical Shield + {0, 5, 5}, // Primary weapon ammo + {0, 6, 6} // Secondary weapon ammo +} + +new g_WeaponNames[MAXMENUPOS][] = +{ + "H&K USP .45 Tactical", + "Glock18 Select Fire", + "Desert Eagle .50AE", + "SIG P228", + "Dual Beretta 96G Elite", + "FN Five-Seven", + "Benelli M3 Super90", + "Benelli XM1014", + "H&K MP5-Navy", + "Steyr Tactical Machine Pistol", + "FN P90", + "Ingram MAC-10", + "H&K UMP45", + "AK-47", + "Gali", + "Famas", + "Sig SG-552 Commando", + "Colt M4A1 Carbine", + "Steyr Aug", + "Steyr Scout", + "AI Arctic Warfare/Magnum", + "H&K G3/SG-1 Sniper Rifle", + "Sig SG-550 Sniper", + "FN M249 Para", + "Kevlar Vest", + "Kevlar Vest & Helmet", + "Flashbang", + "HE Grenade", + "Smoke Grenade", + "Defuse Kit", + "NightVision Goggles", + "Tactical Shield", + "Primary weapon ammo", + "Secondary weapon ammo" +} + +new g_MenuItem[MAXMENUPOS][] = +{ + "\yHandguns^n\w^n%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w^n", + + "\yShotguns^n\w^n%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w^n", + + "\ySub-Machine Guns^n\w^n%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w^n", + + "\yAssault Rifles^n\w^n%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w^n", + + "\ySniper Rifles^n\w^n%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w^n", + + "\yMachine Guns^n\w^n%d. %s\y\R%L^n\w^n", + + "\yEquipment^n\w^n%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w^n", + + "\yAmmunition^n\w^n%d. %s\y\R%L^n\w", + "%d. %s\y\R%L^n\w" +} + +new g_Aliases[MAXMENUPOS][] = +{ + "usp", //Pistols + "glock", + "deagle", + "p228", + "elites", + "fn57", + + "m3", //Shotguns + "xm1014", + + "mp5", //SMG + "tmp", + "p90", + "mac10", + "ump45", + + "ak47", //Rifles + "galil", + "famas", + "sg552", + "m4a1", + "aug", + "scout", + "awp", + "g3sg1", + "sg550", + + "m249", //Machine Gun + + "vest", //Equipment + "vesthelm", + "flash", + "hegren", + "sgren", + "defuser", + "nvgs", + "shield", + + "primammo", //Ammo + "secammo" +} + +new g_Aliases2[MAXMENUPOS][] = +{ + "km45", //Pistols + "9x19mm", + "nighthawk", + "228compact", + "elites", + "fiveseven", + + "12gauge", //Shotguns + "autoshotgun", + + "smg", //SMG + "mp", + "c90", + "mac10", + "ump45", + + "cv47", //Rifles + "defender", + "clarion", + "krieg552", + "m4a1", + "bullpup", + "scout", + "magnum", + "d3au1", + "krieg550", + + "m249", //Machine Gun + + "vest", //Equipment + "vesthelm", + "flash", + "hegren", + "sgren", + "defuser", + "nvgs", + "shield", + "primammo", //Ammo + "secammo" +} + +#define AUTOBUYLENGTH 511 +new g_Autobuy[33][AUTOBUYLENGTH + 1] +//new g_Rebuy[33][AUTOBUYLENGTH + 1] + +bool:IsOurMenuID(id) +{ + for (new i=1; i<=g_RegisteredMenus[0]; i++) + { + if (g_RegisteredMenus[i] == id) + { + return true + } + } + + return false +} + +setWeapon(a, action) +{ + new b, m = g_Keys[a][0] * 8 + + if (g_Keys[a][1] != -1) + { + b = m + g_Keys[a][1] + + if (action == 2) + g_blockPos[b] = 1 - g_blockPos[b] + else + g_blockPos[b] = action + } + + if (g_Keys[a][2] != -1) + { + b = m + g_Keys[a][2] + 56 + + if (action == 2) + g_blockPos[b] = 1 - g_blockPos[b] + else + g_blockPos[b] = action + } + + for (new i = 0; i < g_AliasBlockNum; ++i) + if (g_AliasBlock[i] == a) + { + if (!action || action == 2) + { + --g_AliasBlockNum + + for (new j = i; j < g_AliasBlockNum; ++j) + g_AliasBlock[j] = g_AliasBlock[j + 1] + } + + return + } + + if (action && g_AliasBlockNum < MAXMENUPOS) + g_AliasBlock[g_AliasBlockNum++] = a +} + +findMenuId(name[]) +{ + for (new i = 0; i < 7 ; ++i) + if (equali(name, g_menusNames[i])) + return i + + return -1 +} + +findAliasId(name[]) +{ + for (new i = 0; i < MAXMENUPOS ; ++i) + if (equali(name, g_Aliases[i])) + return i + + return -1 +} + +switchCommand(id, action) +{ + new c = read_argc() + + if (c < 3) + { + for (new x = 0; x < MAXMENUPOS; x++) + setWeapon(x, action) + + console_print(id, "%L", id, action ? "EQ_WE_RES" : "EQ_WE_UNRES") + g_Modified = true + } else { + new arg[32], a + new bool:found = false + + for (new b = 2; b < c; ++b) + { + read_argv(b, arg, 31) + + if ((a = findMenuId(arg)) != -1) + { + c = g_menusSets[a][1] + + for (new i = g_menusSets[a][0]; i < c; ++i) + setWeapon(i, action) + + console_print(id, "%s %L %L", g_MenuTitle[a], id, (a < 5) ? "HAVE_BEEN" : "HAS_BEEN", id, action ? "RESTRICTED" : "UNRESTRICTED") + g_Modified = found = true + } + else if ((a = findAliasId(arg)) != -1) + { + g_Modified = found = true + setWeapon(a, action) + console_print(id, "%s %L %L", g_WeaponNames[a], id, "HAS_BEEN", id, action ? "RESTRICTED" : "UNRESTRICTED") + } + } + + if (!found) + console_print(id, "%L", id, "NO_EQ_WE") + } +} + +positionBlocked(a) +{ + new m = g_Keys[a][0] * 8 + new d = (g_Keys[a][1] == -1) ? 0 : g_blockPos[m + g_Keys[a][1]] + + d += (g_Keys[a][2] == -1) ? 0 : g_blockPos[m + g_Keys[a][2] + 56] + + return d +} + +public cmdRest(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + new cmd[8] + + read_argv(1, cmd, 7) + + if (equali("on", cmd)) + switchCommand(id, 1) + else if (equali("off", cmd)) + switchCommand(id, 0) + else if (equali("list", cmd)) + { + new arg1[8] + new start = read_argv(2, arg1, 7) ? str_to_num(arg1) : 1 + + if (--start < 0) + start = 0 + + if (start >= MAXMENUPOS) + start = MAXMENUPOS - 1 + + new end = start + 10 + + if (end > MAXMENUPOS) + end = MAXMENUPOS + + new lName[16], lValue[16], lStatus[16], lOnOff[16] + + format(lName, 15, "%L", id, "NAME") + format(lValue, 15, "%L", id, "VALUE") + format(lStatus, 15, "%L", id, "STATUS") + + console_print(id, "^n----- %L: -----", id, "WEAP_RES") + console_print(id, " %-32.31s %-10.9s %-9.8s", lName, lValue, lStatus) + + if (start != -1) + { + for (new a = start; a < end; ++a) + { + format(lOnOff, 15, "%L", id, positionBlocked(a) ? "ON" : "OFF") + console_print(id, "%3d: %-32.31s %-10.9s %-9.8s", a + 1, g_WeaponNames[a], g_Aliases[a], lOnOff) + } + } + + console_print(id, "----- %L -----", id, "REST_ENTRIES_OF", start + 1, end, MAXMENUPOS) + + if (end < MAXMENUPOS) + console_print(id, "----- %L -----", id, "REST_USE_MORE", end + 1) + else + console_print(id, "----- %L -----", id, "REST_USE_BEGIN") + } + else if (equali("save", cmd)) + { + if (saveSettings(g_saveFile)) + { + console_print(id, "%L", id, "REST_CONF_SAVED", g_saveFile) + g_Modified = false + } + else + console_print(id, "%L", id, "REST_COULDNT_SAVE", g_saveFile) + } + else if (equali("load", cmd)) + { + setc(g_blockPos, 112, 0) // Clear current settings + new arg1[64] + + if (read_argv(2, arg1, 63)) + { + new configsdir[32] + get_configsdir(configsdir, 31) + + format(arg1, 63, "%s/%s", configsdir, arg1) + } + + if (loadSettings(arg1)) + { + console_print(id, "%L", id, "REST_CONF_LOADED", arg1) + g_Modified = true + } + else + console_print(id, "%L", id, "REST_COULDNT_LOAD", arg1) + } else { + console_print(id, "%L", id, "COM_REST_USAGE") + console_print(id, "%L", id, "COM_REST_COMMANDS") + console_print(id, "%L", id, "COM_REST_ON") + console_print(id, "%L", id, "COM_REST_OFF") + console_print(id, "%L", id, "COM_REST_ONV") + console_print(id, "%L", id, "COM_REST_OFFV") + console_print(id, "%L", id, "COM_REST_LIST") + console_print(id, "%L", id, "COM_REST_SAVE") + console_print(id, "%L", id, "COM_REST_LOAD") + console_print(id, "%L", id, "COM_REST_VALUES") + console_print(id, "%L", id, "COM_REST_TYPE") + } + + return PLUGIN_HANDLED +} + +displayMenu(id, pos) +{ + if (pos < 0) + return + + new menubody[512], start = pos * 7 + + if (start >= MAXMENUPOS) + start = pos = g_Position[id] = 0 + + new len = format(menubody, 511, "\y%L\R%d/5^n^n\w", id, "REST_WEAP", pos + 1) + new end = start + 7, keys = MENU_KEY_0|MENU_KEY_8, k = 0 + + if (end > MAXMENUPOS) + end = MAXMENUPOS + + for (new a = start; a < end; ++a) + { + keys |= (1<<k) + len += format(menubody[len], 511 - len, g_MenuItem[a], ++k, g_WeaponNames[a], id, positionBlocked(a) ? "ON" : "OFF") + } + + len += format(menubody[len], 511 - len, "^n8. %L \y\R%s^n\w", id, "SAVE_SET", g_Modified ? "*" : "") + + if (end != MAXMENUPOS) + { + format(menubody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menubody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menubody, -1, "Restrict Weapons") +} + +public actionMenu(id, key) +{ + switch (key) + { + case 7: + { + if (saveSettings(g_saveFile)) + { + g_Modified = false + client_print(id, print_chat, "* %L", id, "CONF_SAV_SUC") + } + else + client_print(id, print_chat, "* %L", id, "CONF_SAV_FAIL") + + displayMenu(id, g_Position[id]) + } + case 8: displayMenu(id, ++g_Position[id]) + case 9: displayMenu(id, --g_Position[id]) + default: + { + setWeapon(g_Position[id] * 7 + key, 2) + g_Modified = true + displayMenu(id, g_Position[id]) + + new a = g_Position[id] * 7 + key + new sz[1] + + if (a < 24) + { + sz[0] = g_szWeapRestr[a + 1] + g_szWeapRestr[a + 1] = (sz[0] == '0') ? '1' : '0' // primary and secondary weapons + } + else if ((a >= 24) && (a < 31)) + { + sz[0] = g_szEquipAmmoRestr[a - 24] + g_szEquipAmmoRestr[a - 24] = (sz[0] == '0') ? '1' : '0' // equipments + } + else if (a == 31) + { + sz[0] = g_szWeapRestr[25] + g_szWeapRestr[25] = (sz[0] == '0') ? '1' : '0' // shield + } + else if ((a > 31) && (a < 34)) + { + sz[0] = g_szEquipAmmoRestr[a - 25] + g_szEquipAmmoRestr[a - 25] = (sz[0] == '0') ? '1' : '0' // primary and secondary ammo + } + set_cvar_string("amx_restrweapons", g_szWeapRestr) + set_cvar_string("amx_restrequipammo", g_szEquipAmmoRestr) + } + } + + return PLUGIN_HANDLED +} + +public CS_InternalCommand(id, const cmd[]) +{ + new a = 0 + + do + { + if (equali(g_Aliases[g_AliasBlock[a]], cmd) || equali(g_Aliases2[g_AliasBlock[a]], cmd)) + { + client_print(id, print_center, "%s", g_Restricted) + return PLUGIN_HANDLED + } + } while (++a < g_AliasBlockNum) + + return PLUGIN_CONTINUE +} + +public client_command(id) +{ + if (g_AliasBlockNum) + { + new arg[13] + + if (read_argv(0, arg, 12) > 11) /* Longest buy command has 11 chars so if command is longer then don't care */ + { + return PLUGIN_CONTINUE + } + + if (equali(arg, "menuselect") && is_user_connected(id)) + { + new menu, newmenu + new inMenu = player_menu_info(id, menu, newmenu) + + if (!inMenu && g_InBuyMenu[id]) + { + new key[12], num + + read_argv(1, key, 11) + num = str_to_num(key) - 1 + + return checkRest(id, g_InBuyMenu[id], num) + } else if ((!menu || newmenu != -1) + || !IsOurMenuID(menu)) { + g_InBuyMenu[id] = 0 + } + + return PLUGIN_CONTINUE + } + + new a = 0 + + do + { + if (equali(g_Aliases[g_AliasBlock[a]], arg) || equali(g_Aliases2[g_AliasBlock[a]], arg)) + { + client_print(id, print_center, "%s", g_Restricted) + return PLUGIN_HANDLED + } + } while (++a < g_AliasBlockNum) + } + + return PLUGIN_CONTINUE +} + +public blockcommand(id) +{ + client_print(id, print_center, "%s", g_Restricted) + return PLUGIN_HANDLED +} + +public cmdMenu(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + { + displayMenu(id, g_Position[id] = 0) + } + + return PLUGIN_HANDLED +} + +checkRest(id, menu, key) +{ + new team = get_user_team(id) + + if (team != 1 && team != 2) + { + return PLUGIN_HANDLED + } + + new pos = (menu * 8 + key) + (get_user_team(id) - 1) * 56 + + if (pos < 0 || pos >= 112) + { + return PLUGIN_CONTINUE + } + + if (g_blockPos[pos]) + { + engclient_cmd(id, "menuselect", "10") + client_print(id, print_center, "%s", g_Restricted) + + return PLUGIN_HANDLED + } + + return PLUGIN_CONTINUE +} + +public ammoRest1(id) return checkRest(id, 0, 5) +public ammoRest2(id) return checkRest(id, 0, 6) +public menuBuy(id, key) return checkRest(id, 0, key) +public menuPistol(id, key) return checkRest(id, 1, key) +public menuShotgun(id, key) return checkRest(id, 2, key) +public menuSub(id, key) return checkRest(id, 3, key) +public menuRifle(id, key) return checkRest(id, 4, key) +public menuMachine(id, key) return checkRest(id, 5, key) +public menuItem(id, key) return checkRest(id, 6, key) + +saveSettings(filename[]) +{ + if (file_exists(filename)) + delete_file(filename) + + if (!write_file(filename, "; Generated by Restrict Weapons Plugin. Do not modify!^n; value name")) + return 0 + + new text[64] + + for (new a = 0; a < MAXMENUPOS; ++a) + { + if (positionBlocked(a)) + { + format(text, 63, "%-16.15s ; %s", g_Aliases[a], g_WeaponNames[a]) + write_file(filename, text) + } + } + + return 1 +} + +loadSettings(filename[]) +{ + if (!file_exists(filename)) + return 0 + + new text[16] + new a, pos = 0 + + format(g_szEquipAmmoRestr, 9, "000000000") + format(g_szWeapRestr, 26, "00000000000000000000000000") + + while (read_file(filename, pos++, text, 15, a)) + { + if (text[0] == ';' || !a) + continue // line is a comment + + parse(text, text, 15) + + if ((a = findAliasId(text)) != -1) + { + setWeapon(a, 1) + if (a < 24) g_szWeapRestr[a + 1] = '1' // primary and secondary weapons + else if ((a >= 24) && (a < 31)) g_szEquipAmmoRestr[a - 24] = '1' // equipments + else if (a == 31) g_szWeapRestr[25] = '1' // shield + else if ((a > 31) && (a < 34)) g_szEquipAmmoRestr[a - 25] = '1' // primary and secondary ammo + } + } + set_cvar_string("amx_restrweapons", g_szWeapRestr) + set_cvar_string("amx_restrequipammo", g_szEquipAmmoRestr) + + return 1 +} + +// JGHG +public fn_setautobuy(id) +{ + // Empty user's autobuy prefs. (unnecessary?) + g_Autobuy[id][0] = '^0' + + new argCount = read_argc() + new arg[128] + new autobuyLen = 0 + + for (new i = 1; i < argCount; i++) // Start at parameter 1; parameter 0 is just "cl_setautobuy" + { + read_argv(i, arg, 127) + // Add this parameter to user's autobuy prefs + autobuyLen += format(g_Autobuy[id][autobuyLen], AUTOBUYLENGTH - autobuyLen, "%s", arg) + + // If we detect more parameters, add a space + if (i + 1 < argCount) + autobuyLen += format(g_Autobuy[id][autobuyLen], AUTOBUYLENGTH - autobuyLen, " ") + } + + if (g_AliasBlockNum) + { + // Strip any blocked items + new strippedItems[AUTOBUYLENGTH + 1] + + if (!StripBlockedItems(g_Autobuy[id], strippedItems)) + return PLUGIN_CONTINUE // don't touch anything if we didn't strip anything... + + //server_print("Stripped items: ^"%s^"", strippedItems) + engclient_cmd(id, "cl_setautobuy", strippedItems) + + return PLUGIN_HANDLED + } + + return PLUGIN_CONTINUE +} + +// Returns true if this strips any items, else false. +StripBlockedItems(inString[AUTOBUYLENGTH + 1], outString[AUTOBUYLENGTH + 1]) +{ + // First copy string + format(outString, AUTOBUYLENGTH, inString) + + // After that convert all chars in string to lower case (fix by VEN) + strtolower(outString) + + // Then strip those that are blocked. + for (new i = 0; i < g_AliasBlockNum; i++) + { + while (containi(outString, g_Aliases[g_AliasBlock[i]]) != -1) + replace(outString, AUTOBUYLENGTH, g_Aliases[g_AliasBlock[i]], "") + while (containi(outString, g_Aliases2[g_AliasBlock[i]]) != -1) + replace(outString, AUTOBUYLENGTH, g_Aliases2[g_AliasBlock[i]], "") + } + + // We COULD trim white space from outString here, but I don't think it really is necessary currently... + if (strlen(outString) < strlen(inString)) + return true // outstring is shorter: we stripped items, return true + + return false // else end here, return false, no items were stripped +} + +public fn_autobuy(id) +{ + // Don't do anything if no items are blocked. + if (!g_AliasBlockNum) + return PLUGIN_CONTINUE + + // Strip any blocked items + new strippedItems[AUTOBUYLENGTH + 1] + + if (!StripBlockedItems(g_Autobuy[id], strippedItems)) + return PLUGIN_CONTINUE // don't touch anything if we didn't strip anything... + + engclient_cmd(id, "cl_setautobuy", strippedItems) + + return PLUGIN_HANDLED +} + +public HookEvent_ShowMenu(id) +{ + new menustring[24] + + read_data(4, menustring, 23) + + /* Early breakouts */ + new curidx + if (menustring[curidx++] != '#') + { + g_InBuyMenu[id] = 0 + return + } + + /* Strip D */ + if (menustring[curidx] == 'D') + { + curidx++ + } + + /* Strip AS_ */ + if (menustring[curidx] == 'A' + && menustring[curidx+1] == 'S' + && menustring[curidx+2] == '_') + { + curidx += 3 + } + + /* Strip any team tags */ + if (menustring[curidx] == 'C' + && menustring[curidx+1] == 'T' + && menustring[curidx+2] == '_') + { + curidx += 3 + } else if (menustring[curidx] == 'T' + && menustring[curidx+1] == '_') { + curidx += 2 + } + + if (menustring[curidx] != 'B') + { + g_InBuyMenu[id] = 0 + return + } + + for (new i=0; i<6; i++) + { + if (equali(menustring[curidx], g_menuStrings[i])) + { + g_InBuyMenu[id] = i+1 + return + } + } + + g_InBuyMenu[id] = 0 +} + +RegisterMenuID(const menuname[]) +{ + new id = register_menuid(menuname, 1) + g_RegisteredMenus[++g_RegisteredMenus[0]] = id + return id +} + +public plugin_init() +{ + register_plugin("Restrict Weapons", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("restmenu.txt") + register_dictionary("common.txt") + register_clcmd("buyammo1", "ammoRest1") + register_clcmd("buyammo2", "ammoRest2") + register_clcmd("cl_setautobuy", "fn_setautobuy") + register_clcmd("cl_autobuy", "fn_autobuy") + register_clcmd("amx_restmenu", "cmdMenu", ADMIN_CFG, "- displays weapons restriction menu") + register_menucmd(register_menuid("#Buy", 1), 511, "menuBuy") + register_menucmd(register_menuid("Restrict Weapons"), 1023, "actionMenu") + register_menucmd(RegisterMenuID("BuyPistol"), 511, "menuPistol") + register_menucmd(RegisterMenuID("BuyShotgun"), 511, "menuShotgun") + register_menucmd(RegisterMenuID("BuySub"), 511, "menuSub") + register_menucmd(RegisterMenuID("BuyRifle"), 511, "menuRifle") + register_menucmd(RegisterMenuID("BuyMachine"), 511, "menuMachine") + register_menucmd(RegisterMenuID("BuyItem"), 511, "menuItem") + register_menucmd(-28, 511, "menuBuy") + register_menucmd(-29, 511, "menuPistol") + register_menucmd(-30, 511, "menuShotgun") + register_menucmd(-32, 511, "menuSub") + register_menucmd(-31, 511, "menuRifle") + register_menucmd(-33, 511, "menuMachine") + register_menucmd(-34, 511, "menuItem") + register_concmd("amx_restrict", "cmdRest", ADMIN_CFG, "- displays help for weapons restriction") + + register_cvar("amx_restrweapons", "00000000000000000000000000") + register_cvar("amx_restrequipammo", "000000000") + + register_event("ShowMenu", "HookEvent_ShowMenu", "b") + + new configsDir[64]; + get_configsdir(configsDir, 63); +#if defined MAPSETTINGS + new mapname[32] + get_mapname(mapname, 31) + format(g_saveFile, 63, "%s/weaprest_%s.ini", configsDir, mapname) +#else + format(g_saveFile, 63, "%s/weaprest.ini", configsDir) +#endif + loadSettings(g_saveFile) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/scrollmsg.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/scrollmsg.sma new file mode 100644 index 0000000..abf9c04 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/scrollmsg.sma @@ -0,0 +1,128 @@ +/* AMX Mod X +* Scrolling Message Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +#define SPEED 0.3 +#define SCROLLMSG_SIZE 512 + +new g_startPos +new g_endPos +new g_scrollMsg[SCROLLMSG_SIZE] +new g_displayMsg[SCROLLMSG_SIZE] +new Float:g_xPos +new g_Length +new g_Frequency + +public plugin_init() +{ + register_plugin("Scrolling Message", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("scrollmsg.txt") + register_dictionary("common.txt") + register_srvcmd("amx_scrollmsg", "setMessage") +} + +public showMsg() +{ + new a = g_startPos, i = 0 + + while (a < g_endPos) + g_displayMsg[i++] = g_scrollMsg[a++] + + g_displayMsg[i] = 0 + + if (g_endPos < g_Length) + g_endPos++ + + if (g_xPos > 0.35) + g_xPos -= 0.0063 + else + { + g_startPos++ + g_xPos = 0.35 + } + + set_hudmessage(200, 100, 0, g_xPos, 0.90, 0, SPEED, SPEED, 0.05, 0.05, 2) + show_hudmessage(0, "%s", g_displayMsg) +} + +public msgInit() +{ + g_endPos = 1 + g_startPos = 0 + g_xPos = 0.65 + + new hostname[64] + + get_cvar_string("hostname", hostname, 63) + replace(g_scrollMsg, SCROLLMSG_SIZE-1, "%hostname%", hostname) + + g_Length = strlen(g_scrollMsg) + + set_task(SPEED, "showMsg", 123, "", 0, "a", g_Length + 48) + client_print(0, print_console, "%s", g_scrollMsg) +} + +public setMessage() +{ + remove_task(123) /* remove current messaging */ + read_argv(1, g_scrollMsg, SCROLLMSG_SIZE-1) + + g_Length = strlen(g_scrollMsg) + + new mytime[32] + + read_argv(2, mytime, 31) + + g_Frequency = str_to_num(mytime) + + if (g_Frequency > 0) + { + new minimal = floatround((g_Length + 48) * (SPEED + 0.1)) + + if (g_Frequency < minimal) + { + server_print("%L", LANG_SERVER, "MIN_FREQ", minimal) + g_Frequency = minimal + } + + server_print("%L", LANG_SERVER, "MSG_FREQ", g_Frequency / 60, g_Frequency % 60) + set_task(float(g_Frequency), "msgInit", 123, "", 0, "b") + } + else + server_print("%L", LANG_SERVER, "MSG_DISABLED") + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/stats_logging.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/stats_logging.sma new file mode 100644 index 0000000..992396d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/stats_logging.sma @@ -0,0 +1,112 @@ +/* AMX Mod X +* Stats Logging Plugin +* +* by the AMX Mod X Development Team +* originally developed by JustinHoMi +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <csx> + +new g_pingSum[33] +new g_pingCount[33] +new g_inGame[33] + +public plugin_init() +{ + register_plugin("CS Stats Logging", AMXX_VERSION_STR, "AMXX Dev Team") +} + +public client_disconnect(id) +{ + if (!g_inGame[id]) + return + + g_inGame[id] = 0 + + if (is_user_bot(id)) + { + return + } + + remove_task(id) + + new szTeam[16], szName[32], szAuthid[32], iStats[8], iHits[8], szWeapon[24] + new iUserid = get_user_userid(id) + new _max = xmod_get_maxweapons() + + get_user_team(id, szTeam, 15) + get_user_name(id, szName, 31) + get_user_authid(id, szAuthid, 31) + + for (new i = 1 ; i < _max ; ++i) + { + if (get_user_wstats(id, i, iStats, iHits)) + { + xmod_get_wpnname(i, szWeapon, 23) + + log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats^" (weapon ^"%s^") (shots ^"%d^") (hits ^"%d^") (kills ^"%d^") (headshots ^"%d^") (tks ^"%d^") (damage ^"%d^") (deaths ^"%d^")", + szName, iUserid, szAuthid, szTeam, szWeapon, iStats[4], iStats[5], iStats[0], iStats[2], iStats[3], iStats[6], iStats[1]) + log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats2^" (weapon ^"%s^") (head ^"%d^") (chest ^"%d^") (stomach ^"%d^") (leftarm ^"%d^") (rightarm ^"%d^") (leftleg ^"%d^") (rightleg ^"%d^")", + szName, iUserid, szAuthid, szTeam, szWeapon, iHits[1], iHits[2], iHits[3], iHits[4], iHits[5], iHits[6], iHits[7]) + } + } + + new iTime = get_user_time(id, 1) + + log_message("^"%s<%d><%s><%s>^" triggered ^"time^" (time ^"%d:%02d^")", szName, iUserid, szAuthid, szTeam, (iTime / 60), (iTime % 60)) + log_message("^"%s<%d><%s><%s>^" triggered ^"latency^" (ping ^"%d^")", szName, iUserid, szAuthid, szTeam, (g_pingSum[id] / (g_pingCount[id] ? g_pingCount[id] : 1))) +} + +public client_connect(id) +{ + g_inGame[id] = 0 +} + +public client_putinserver(id) +{ + g_inGame[id] = 1 + if (!is_user_bot(id)) + { + g_pingSum[id] = g_pingCount[id] = 0 + if (task_exists(id)) + remove_task(id) + set_task(19.5, "getPing", id, "", 0, "b") + } +} + +public getPing(id) +{ + new iPing, iLoss + + get_user_ping(id, iPing, iLoss) + g_pingSum[id] += iPing + ++g_pingCount[id] +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/statscfg.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/statscfg.sma new file mode 100644 index 0000000..1c7e5ff --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/statscfg.sma @@ -0,0 +1,325 @@ +/* AMX Mod X +* Stats Configuration Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> + +#define MAX_MENU_DATA 72 + +new g_menuData[MAX_MENU_DATA][32] +new g_menuDataVar[MAX_MENU_DATA][32] +new g_menuDataId[MAX_MENU_DATA] +new g_menuDataNum +new g_menuPosition[33] +new g_fileToSave[64] +new bool:g_modified +new g_coloredMenus + +public plugin_precache() +{ + register_clcmd("amx_statscfgmenu", "cmdCfgMenu", ADMIN_CFG, "- displays stats configuration menu") + register_dictionary("statscfg.txt") + register_dictionary("common.txt") + register_concmd("amx_statscfg", "cmdCfg", ADMIN_CFG, "- displays help for stats configuration") +} + +public plugin_init() +{ + register_plugin("Stats Configuration", AMXX_VERSION_STR, "AMXX Dev Team") + register_menucmd(register_menuid("Stats Configuration"), 1023, "actionCfgMenu") + + get_configsdir(g_fileToSave, 63) + format(g_fileToSave, 63, "%s/stats.ini", g_fileToSave) + loadSettings(g_fileToSave) + g_coloredMenus = colored_menus() +} + +public cmdCfg(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + new cmds[32] + read_argv(1, cmds, 31) + + new option = equali(cmds, "on") ? 1 : 0 + + if (!option) + option = equali(cmds, "off") ? 2 : 0 + + if (read_argc() > 2 && option) + { + new var[32], enabled = 0 + read_argv(2, var, 31) + + for (new a = 0; a < g_menuDataNum; ++a) + { + if (containi(g_menuDataVar[a], var) != -1) + { + g_modified = true + ++enabled + if (option == 1) + { + set_xvar_num(g_menuDataId[a], 1) + console_print(id, "%L: %s", id, "STATS_ENABLED", g_menuData[a]) + } else { + set_xvar_num(g_menuDataId[a], 0) + console_print(id, "%L: %s", id, "STATS_DISABLED", g_menuData[a]) + } + } + } + + if (enabled) + console_print(id, "%L", id, "TOTAL_NUM", enabled) + else + console_print(id, "%L", id, "NO_OPTION", var) + } + else if (equali(cmds, "save")) + { + if (saveSettings(g_fileToSave)) + { + g_modified = false + console_print(id, "%L", id, "STATS_CONF_SAVED") + } + else + console_print(id, "%L", id, "STATS_CONF_FAILED") + } + else if (equali(cmds, "load")) + { + if (loadSettings(g_fileToSave)) + { + g_modified = false + console_print(id, "%L", id, "STATS_CONF_LOADED") + } + else + console_print(id, "%L", id, "STATS_CONF_FAIL_LOAD") + } + else if (equali(cmds, "list")) + { + new arg1[8] + new start = read_argv(2, arg1, 7) ? str_to_num(arg1) : 1 + + if (--start < 0) start = 0 + + if (start >= g_menuDataNum) + start = g_menuDataNum - 1 + + new end = start + 10 + + if (end > g_menuDataNum) + end = g_menuDataNum + + new lName[16], lVariable[16], lStatus[16] + + format(lName, 15, "%L", id, "NAME") + format(lVariable, 15, "%L", id, "VARIABLE") + format(lStatus, 15, "%L", id, "STATUS") + console_print(id, "^n----- %L: -----", id, "STATS_CONF") + console_print(id, " %-29.28s %-24.23s %-9.8s", lName, lVariable, lStatus) + + if (start != -1) + { + new lOnOff[16] + + for (new a = start; a < end; ++a) + { + format(lOnOff, 15, "%L", id, get_xvar_num(g_menuDataId[a]) ? "ON" : "OFF") + console_print(id, "%3d: %-29.28s %-24.23s %-9.8s", a + 1, g_menuData[a], g_menuDataVar[a], lOnOff) + } + } + + console_print(id, "----- %L -----", id, "STATS_ENTRIES_OF", start + 1, end, g_menuDataNum) + + if (end < g_menuDataNum) + console_print(id, "----- %L -----", id, "STATS_USE_MORE", end + 1) + else + console_print(id, "----- %L -----", id, "STATS_USE_BEGIN") + } + else if (equali(cmds, "add") && read_argc() > 3) + { + if (g_menuDataNum < MAX_MENU_DATA) + { + read_argv(2, g_menuData[g_menuDataNum], 31) + read_argv(3, g_menuDataVar[g_menuDataNum], 31) + g_menuDataId[g_menuDataNum] = get_xvar_id(g_menuDataVar[g_menuDataNum]) + ++g_menuDataNum + } + else + console_print(id, "%L", id, "CANT_ADD_STATS") + } else { + console_print(id, "%L", id, "COM_STATS_USAGE") + console_print(id, "%L", id, "COM_STATS_COM") + console_print(id, "%L", id, "COM_STATS_ON") + console_print(id, "%L", id, "COM_STATS_OFF") + console_print(id, "%L", id, "COM_STATS_SAVE") + console_print(id, "%L", id, "COM_STATS_LOAD") + console_print(id, "%L", id, "COM_STATS_LIST") + console_print(id, "%L", id, "COM_STATS_ADD") + } + + return PLUGIN_HANDLED +} + +public cmdCfgMenu(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + displayCfgMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} + +displayCfgMenu(id, pos) +{ + if (pos < 0) + return + + new menu_body[512], start = pos * 7 + + if (start >= g_menuDataNum) + start = pos = g_menuPosition[id] = 0 + + new len = format(menu_body, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "STATS_CONF", pos + 1, ((g_menuDataNum / 7)+((g_menuDataNum % 7) ? 1 : 0))) + new end = start + 7, keys = MENU_KEY_0|MENU_KEY_8, k = 0 + + if (end > g_menuDataNum) + end = g_menuDataNum + + for (new a = start; a < end; ++a) + { + keys |= (1<<k) + /* Backwards compatibility hack - if the name starts with ST_, assume it is translation safe! */ + if (equal(g_menuData[a], "ST_", 3)) + { + len += format(menu_body[len], 511-len, g_coloredMenus ? "%d. %L\y\R%L^n\w" : "%d. %L %L^n", ++k, id, g_menuData[a], id, get_xvar_num(g_menuDataId[a]) ? "ON" : "OFF") + } else { + len += format(menu_body[len], 511-len, g_coloredMenus ? "%d. %s\y\R%L^n\w" : "%d. %s %L^n", ++k, g_menuData[a], id, get_xvar_num(g_menuDataId[a]) ? "ON" : "OFF") + } + } + + if (g_menuDataNum == 0) + len += format(menu_body[len], 511-len, g_coloredMenus ? "\d%L\w" : "%L", id, "NO_STATS") + + len += format(menu_body[len], 511-len, g_coloredMenus ? "^n8. %L\y\R%s^n\w" : "^n8. %L %s^n", id, "SAVE_CONF", g_modified ? "*" : "") + + if (end != g_menuDataNum) + { + format(menu_body[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menu_body[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menu_body, -1, "Stats Configuration") +} + +public actionCfgMenu(id, key) +{ + switch (key) + { + case 7: + { + if (saveSettings(g_fileToSave)) + { + g_modified = false + client_print(id, print_chat, "* %L", id, "STATS_CONF_SAVED") + } + else + client_print(id, print_chat, "* %L", id, "STATS_CONF_FAILED") + + displayCfgMenu(id, g_menuPosition[id]) + } + case 8: displayCfgMenu(id, ++g_menuPosition[id]) + case 9: displayCfgMenu(id, --g_menuPosition[id]) + default: + { + g_modified = true + new a = g_menuPosition[id] * 7 + key + set_xvar_num(g_menuDataId[a], 1 - get_xvar_num(g_menuDataId[a])) + + displayCfgMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +saveSettings(filename[]) +{ + if (file_exists(filename)) + delete_file(filename) + + if (!write_file(filename, ";Generated by Stats Configuration Plugin. Do not modify!^n;Variable Description")) + return 0 + + new text[256] + + for (new a = 0; a < g_menuDataNum; ++a) + { + if (get_xvar_num(g_menuDataId[a])) + { + if (equal(g_menuData[a], "ST_", 3)) + { + format(text, 255, "%-24.23s ;%L", g_menuDataVar[a], LANG_SERVER, g_menuData[a]) + } + else + { + format(text, 255, "%-24.23s ;%s", g_menuDataVar[a], g_menuData[a]) + } + write_file(filename, text) + } + } + + return 1 +} + +loadSettings(filename[]) +{ + if (!file_exists(filename)) + return 0 + + new text[256], name[32] + new len, pos = 0, xid + + while (read_file(filename, pos++, text, 255, len)) + { + if (text[0] == ';') continue // line is a comment + + parse(text, name, 31) + + if ((xid = get_xvar_id(name)) != -1) + set_xvar_num(xid, 1) + } + + return 1 +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/statsx.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/statsx.sma new file mode 100644 index 0000000..ed4d2e0 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/statsx.sma @@ -0,0 +1,1706 @@ +/* AMX Mod X +* StatsX Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +//-------------------------------- +#include <amxmodx> +#include <amxmisc> +#include <csx> +//-------------------------------- + +// Uncomment to activate log debug messages. +//#define STATSX_DEBUG + +// HUD statistics duration in seconds (minimum 1.0 seconds). +#define HUD_DURATION_CVAR "amx_statsx_duration" +#define HUD_DURATION "12.0" + +// HUD statistics stop relative freeze end in seconds. +// To stop before freeze end use a negative value. +#define HUD_FREEZE_LIMIT_CVAR "amx_statsx_freeze" +#define HUD_FREEZE_LIMIT "-2.0" + +// HUD statistics minimum duration, in seconds, to trigger the display logic. +#define HUD_MIN_DURATION 0.2 + +// Config plugin constants. +#define MODE_HUD_DELAY 0 // Make a 0.01 sec delay on HUD reset process. + +// You can also manualy enable or disable these options by setting them to 1 +// For example: +// public ShowAttackers = 1 +// However amx_statscfg command is recommended + +public KillerChat = 0 // displays killer hp&ap to victim console + // and screen + +public ShowAttackers = 0 // shows attackers +public ShowVictims = 0 // shows victims +public ShowKiller = 0 // shows killer +public ShowTeamScore = 0 // shows team score at round end +public ShowTotalStats = 0 // shows round total stats +public ShowBestScore = 0 // shows rounds best scored player +public ShowMostDisruptive = 0 // shows rounds most disruptive player + +public EndPlayer = 0 // displays player stats at the end of map +public EndTop15 = 0 // displays top15 at the end of map + +public SayHP = 0 // displays information about user killer +public SayStatsMe = 0 // displays user's stats and rank +public SayRankStats = 0 // displays user's rank stats +public SayMe = 0 // displays user's stats +public SayRank = 0 // displays user's rank +public SayReport = 0 // report user's weapon status to team +public SayScore = 0 // displays team's map score +public SayTop15 = 0 // displays first 15 players +public SayStatsAll = 0 // displays all players stats and rank + +public ShowStats = 1 // set client HUD-stats switched off by default +public ShowDistHS = 0 // show distance and HS in attackers and + // victims HUD lists +public ShowFullStats = 0 // show full HUD stats (more than 78 chars) + +public SpecRankInfo = 0 // displays rank info when spectating + +// Standard Contstants. +#define MAX_TEAMS 2 +#define MAX_PLAYERS 32 + 1 + +#define MAX_NAME_LENGTH 31 +#define MAX_WEAPON_LENGTH 31 +#define MAX_TEXT_LENGTH 255 +#define MAX_BUFFER_LENGTH 2047 + +// User stats parms id +#define STATS_KILLS 0 +#define STATS_DEATHS 1 +#define STATS_HS 2 +#define STATS_TKS 3 +#define STATS_SHOTS 4 +#define STATS_HITS 5 +#define STATS_DAMAGE 6 + +// Global player flags. +new BODY_PART[8][] = +{ + "WHOLEBODY", + "HEAD", + "CHEST", + "STOMACH", + "LEFTARM", + "RIGHTARM", + "LEFTLEG", + "RIGHTLEG" +} + +// Killer information, save killer info at the time when player is killed. +#define KILLED_KILLER_ID 0 // Killer userindex/user-ID +#define KILLED_KILLER_HEALTH 1 // Killer's health +#define KILLED_KILLER_ARMOUR 2 // Killer's armour +#define KILLED_TEAM 3 // Killer's team +#define KILLED_KILLER_STATSFIX 4 // Fix to register the last hit/kill + +new g_izKilled[MAX_PLAYERS][5] + +// Menu variables and configuration +#define MAX_PPL_MENU_ACTIONS 2 // Number of player menu actions +#define PPL_MENU_OPTIONS 7 // Number of player options per displayed menu + +new g_iPluginMode = 0 + +new g_izUserMenuPosition[MAX_PLAYERS] = {0, ...} +new g_izUserMenuAction[MAX_PLAYERS] = {0, ...} +new g_izUserMenuPlayers[MAX_PLAYERS][32] + +new g_izSpecMode[MAX_PLAYERS] = {0, ...} + +new g_izShowStatsFlags[MAX_PLAYERS] = {0, ...} +new g_izStatsSwitch[MAX_PLAYERS] = {0, ...} +new Float:g_fzShowUserStatsTime[MAX_PLAYERS] = {0.0, ...} +new Float:g_fShowStatsTime = 0.0 +new Float:g_fFreezeTime = 0.0 +new Float:g_fFreezeLimitTime = 0.0 +new Float:g_fHUDDuration = 0.0 + +new g_iRoundEndTriggered = 0 +new g_iRoundEndProcessed = 0 + +new Float:g_fStartGame = 0.0 +new g_izTeamScore[MAX_TEAMS] = {0, ...} +new g_izTeamEventScore[MAX_TEAMS] = {0, ...} +new g_izTeamRndStats[MAX_TEAMS][8] +new g_izTeamGameStats[MAX_TEAMS][8] +new g_izUserUserID[MAX_PLAYERS] = {0, ...} +new g_izUserAttackerDistance[MAX_PLAYERS] = {0, ...} +new g_izUserVictimDistance[MAX_PLAYERS][MAX_PLAYERS] +new g_izUserRndName[MAX_PLAYERS][MAX_NAME_LENGTH + 1] +new g_izUserRndStats[MAX_PLAYERS][8] +new g_izUserGameStats[MAX_PLAYERS][8] + +// Common buffer to improve performance, as Small always zero-initializes all vars +new g_sBuffer[MAX_BUFFER_LENGTH + 1] = "" +new g_sScore[MAX_TEXT_LENGTH + 1] = "" +new g_sAwardAndScore[MAX_BUFFER_LENGTH + 1] = "" + +new t_sText[MAX_TEXT_LENGTH + 1] = "" +new t_sName[MAX_NAME_LENGTH + 1] = "" +new t_sWpn[MAX_WEAPON_LENGTH + 1] = "" + +new g_HudSync_EndRound +new g_HudSync_SpecInfo + +//-------------------------------- +// Initialize +//-------------------------------- +public plugin_init() +{ + // Register plugin. + register_plugin("StatsX", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("statsx.txt") + + // Register events. + register_event("TextMsg", "eventStartGame", "a", "2=#Game_Commencing", "2=#Game_will_restart_in") + register_event("ResetHUD", "eventResetHud", "be") + register_event("RoundTime", "eventStartRound", "bc") + register_event("SendAudio", "eventEndRound", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw") + register_event("TeamScore", "eventTeamScore", "a") + register_event("30", "eventIntermission", "a") + register_event("TextMsg", "eventSpecMode", "bd", "2&ec_Mod") + register_event("StatusValue", "eventShowRank", "bd", "1=2") + + // Register commands. + register_clcmd("say /hp", "cmdHp", 0, "- display info. about your killer (chat)") + register_clcmd("say /statsme", "cmdStatsMe", 0, "- display your stats (MOTD)") + register_clcmd("say /rankstats", "cmdRankStats", 0, "- display your server stats (MOTD)") + register_clcmd("say /me", "cmdMe", 0, "- display current round stats (chat)") + register_clcmd("say /score", "cmdScore", 0, "- display last score (chat)") + register_clcmd("say /rank", "cmdRank", 0, "- display your rank (chat)") + register_clcmd("say /report", "cmdReport", 0, "- display weapon status (say_team)") + register_clcmd("say /top15", "cmdTop15", 0, "- display top 15 players (MOTD)") + register_clcmd("say /stats", "cmdStats", 0, "- display players stats (menu/MOTD)") + register_clcmd("say /switch", "cmdSwitch", 0, "- switch client's stats on or off") + register_clcmd("say_team /hp", "cmdHp", 0, "- display info. about your killer (chat)") + register_clcmd("say_team /statsme", "cmdStatsMe", 0, "- display your stats (MOTD)") + register_clcmd("say_team /rankstats", "cmdRankStats", 0, "- display your server stats (MOTD)") + register_clcmd("say_team /me", "cmdMe", 0, "- display current round stats (chat)") + register_clcmd("say_team /score", "cmdScore", 0, "- display last score (chat)") + register_clcmd("say_team /rank", "cmdRank", 0, "- display your rank (chat)") + register_clcmd("say_team /report", "cmdReport", 0, "- display weapon status (say_team_team)") + register_clcmd("say_team /top15", "cmdTop15", 0, "- display top 15 players (MOTD)") + register_clcmd("say_team /stats", "cmdStats", 0, "- display players stats (menu/MOTD)") + register_clcmd("say_team /switch", "cmdSwitch", 0, "- switch client's stats on or off") + + // Register menus. + register_menucmd(register_menuid("Server Stats"), 1023, "actionStatsMenu") + + // Register special configuration setting and default value. + register_srvcmd("amx_statsx_mode", "cmdPluginMode", ADMIN_CFG, "<flags> - sets plugin options") + +#if defined STATSX_DEBUG + register_clcmd("say /hudtest", "cmdHudTest") +#endif + + register_cvar(HUD_DURATION_CVAR, HUD_DURATION) + register_cvar(HUD_FREEZE_LIMIT_CVAR, HUD_FREEZE_LIMIT) + + // Init buffers and some global vars. + g_sBuffer[0] = 0 + save_team_chatscore() + + g_HudSync_EndRound = CreateHudSyncObj() + g_HudSync_SpecInfo = CreateHudSyncObj() +} + +public plugin_cfg() +{ + new addStast[] = "amx_statscfg add ^"%s^" %s" + + server_cmd(addStast, "ST_SHOW_KILLER_CHAT", "KillerChat") + server_cmd(addStast, "ST_SHOW_ATTACKERS", "ShowAttackers") + server_cmd(addStast, "ST_SHOW_VICTIMS", "ShowVictims") + server_cmd(addStast, "ST_SHOW_KILLER", "ShowKiller") + server_cmd(addStast, "ST_SHOW_TEAM_SCORE", "ShowTeamScore") + server_cmd(addStast, "ST_SHOW_TOTAL_STATS", "ShowTotalStats") + server_cmd(addStast, "ST_SHOW_BEST_SCORE", "ShowBestScore") + server_cmd(addStast, "ST_SHOW_MOST_DISRUPTIVE", "ShowMostDisruptive") + server_cmd(addStast, "ST_SHOW_HUD_STATS_DEF", "ShowStats") + server_cmd(addStast, "ST_SHOW_DIST_HS_HUD", "ShowDistHS") + server_cmd(addStast, "ST_STATS_PLAYER_MAP_END", "EndPlayer") + server_cmd(addStast, "ST_STATS_TOP15_MAP_END", "EndTop15") + server_cmd(addStast, "ST_SAY_HP", "SayHP") + server_cmd(addStast, "ST_SAY_STATSME", "SayStatsMe") + server_cmd(addStast, "ST_SAY_RANKSTATS", "SayRankStats") + server_cmd(addStast, "ST_SAY_ME", "SayMe") + server_cmd(addStast, "ST_SAY_RANK", "SayRank") + server_cmd(addStast, "ST_SAY_REPORT", "SayReport") + server_cmd(addStast, "ST_SAY_SCORE", "SayScore") + server_cmd(addStast, "ST_SAY_TOP15", "SayTop15") + server_cmd(addStast, "ST_SAY_STATS", "SayStatsAll") + server_cmd(addStast, "ST_SPEC_RANK", "SpecRankInfo") + + // Update local configuration vars with value in cvars. + get_config_cvars() +} + +// Set hudmessage format. +set_hudtype_killer(Float:fDuration) + set_hudmessage(220, 80, 0, 0.05, 0.15, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1) + +set_hudtype_endround(Float:fDuration) +{ + set_hudmessage(100, 200, 0, 0.05, 0.55, 0, 0.02, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0) +} + +set_hudtype_attacker(Float:fDuration) + set_hudmessage(220, 80, 0, 0.55, 0.35, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1) + +set_hudtype_victim(Float:fDuration) + set_hudmessage(0, 80, 220, 0.55, 0.60, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1) + +set_hudtype_specmode() +{ + set_hudmessage(255, 255, 255, 0.02, 0.96, 2, 0.05, 0.1, 0.01, 3.0, -1) +} + +#if defined STATSX_DEBUG +public cmdHudTest(id) +{ + new i, iLen + iLen = 0 + + for (i = 1; i < 20; i++) + iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "....x....1....x....2....x....3....x....4....x....^n") + + set_hudtype_killer(50.0) + show_hudmessage(id, "%s", g_sBuffer) +} +#endif + +// Stats formulas +Float:accuracy(izStats[8]) +{ + if (!izStats[STATS_SHOTS]) + return (0.0) + + return (100.0 * float(izStats[STATS_HITS]) / float(izStats[STATS_SHOTS])) +} + +Float:effec(izStats[8]) +{ + if (!izStats[STATS_KILLS]) + return (0.0) + + return (100.0 * float(izStats[STATS_KILLS]) / float(izStats[STATS_KILLS] + izStats[STATS_DEATHS])) +} + +// Distance formula (metric) +Float:distance(iDistance) +{ + return float(iDistance) * 0.0254 +} + +// Get plugin config flags. +set_plugin_mode(id, sFlags[]) +{ + if (sFlags[0]) + g_iPluginMode = read_flags(sFlags) + + get_flags(g_iPluginMode, t_sText, MAX_TEXT_LENGTH) + console_print(id, "%L", id, "MODE_SET_TO", t_sText) + + return g_iPluginMode +} + +// Get config parameters. +get_config_cvars() +{ + g_fFreezeTime = get_cvar_float("mp_freezetime") + + if (g_fFreezeTime < 0.0) + g_fFreezeTime = 0.0 + + g_fHUDDuration = get_cvar_float(HUD_DURATION_CVAR) + + if (g_fHUDDuration < 1.0) + g_fHUDDuration = 1.0 + + g_fFreezeLimitTime = get_cvar_float(HUD_FREEZE_LIMIT_CVAR) +} + +// Get and format attackers header and list. +get_attackers(id, sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new izStats[8], izBody[8] + new iAttacker + new iFound, iLen + new iMaxPlayer = get_maxplayers() + + iFound = 0 + sBuffer[0] = 0 + + // Get and format header. Add killing attacker statistics if user is dead. + // Make sure shots is greater than zero or division by zero will occur. + // To print a '%', 4 of them must done in a row. + izStats[STATS_SHOTS] = 0 + iAttacker = g_izKilled[id][KILLED_KILLER_ID] + + if (iAttacker) + get_user_astats(id, iAttacker, izStats, izBody) + + if (izStats[STATS_SHOTS] && ShowFullStats) + { + get_user_name(iAttacker, t_sName, MAX_NAME_LENGTH) + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L -- %s -- %0.2f%% %L:^n", id, "ATTACKERS", t_sName, accuracy(izStats), id, "ACC") + } + else + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L:^n", id, "ATTACKERS") + + // Get and format attacker list. + for (iAttacker = 1; iAttacker <= iMaxPlayer; iAttacker++) + { + if (get_user_astats(id, iAttacker, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH)) + { + iFound = 1 + get_user_name(iAttacker, t_sName, MAX_NAME_LENGTH) + + if (izStats[STATS_KILLS]) + { + if (!ShowDistHS) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s^n", t_sName, izStats[STATS_HITS], id, "HIT_S", + izStats[STATS_DAMAGE], id, "DMG", t_sWpn) + else if (izStats[STATS_HS]) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m / HS^n", t_sName, izStats[STATS_HITS], id, "HIT_S", + izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserAttackerDistance[id])) + else + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m^n", t_sName, izStats[STATS_HITS], id, "HIT_S", + izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserAttackerDistance[id])) + } + else + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG") + } + } + + if (!iFound) + sBuffer[0] = 0 + + return iFound +} + +// Get and format victims header and list +get_victims(id, sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new izStats[8], izBody[8] + new iVictim + new iFound, iLen + new iMaxPlayer = get_maxplayers() + + iFound = 0 + sBuffer[0] = 0 + + // Get and format header. + // Make sure shots is greater than zero or division by zero will occur. + // To print a '%', 4 of them must done in a row. + izStats[STATS_SHOTS] = 0 + get_user_vstats(id, 0, izStats, izBody) + + if (izStats[STATS_SHOTS]) + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L -- %0.2f%% %L:^n", id, "VICTIMS", accuracy(izStats), id, "ACC") + else + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L:^n", id, "VICTIMS") + + for (iVictim = 1; iVictim <= iMaxPlayer; iVictim++) + { + if (get_user_vstats(id, iVictim, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH)) + { + iFound = 1 + get_user_name(iVictim, t_sName, MAX_NAME_LENGTH) + + if (izStats[STATS_DEATHS]) + { + if (!ShowDistHS) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s^n", t_sName, izStats[STATS_HITS], id, "HIT_S", + izStats[STATS_DAMAGE], id, "DMG", t_sWpn) + else if (izStats[STATS_HS]) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m / HS^n", t_sName, izStats[STATS_HITS], id, "HIT_S", + izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserVictimDistance[id][iVictim])) + else + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m^n", t_sName, izStats[STATS_HITS], id, "HIT_S", + izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserVictimDistance[id][iVictim])) + } + else + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG") + } + } + + if (!iFound) + sBuffer[0] = 0 + + return iFound +} + +// Get and format kill info. +get_kill_info(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new iFound, iLen + + iFound = 0 + sBuffer[0] = 0 + + if (iKiller && iKiller != id) + { + new izAStats[8], izABody[8], izVStats[8], iaVBody[8] + + iFound = 1 + get_user_name(iKiller, t_sName, MAX_NAME_LENGTH) + + izAStats[STATS_HITS] = 0 + izAStats[STATS_DAMAGE] = 0 + t_sWpn[0] = 0 + get_user_astats(id, iKiller, izAStats, izABody, t_sWpn, MAX_WEAPON_LENGTH) + + izVStats[STATS_HITS] = 0 + izVStats[STATS_DAMAGE] = 0 + get_user_vstats(id, iKiller, izVStats, iaVBody) + + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L^n", id, "KILLED_YOU_DIST", t_sName, t_sWpn, distance(g_izUserAttackerDistance[id])) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L^n", id, "DID_DMG_HITS", izAStats[STATS_DAMAGE], izAStats[STATS_HITS], g_izKilled[id][KILLED_KILLER_HEALTH], g_izKilled[id][KILLED_KILLER_ARMOUR]) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L^n", id, "YOU_DID_DMG", izVStats[STATS_DAMAGE], izVStats[STATS_HITS]) + } + + return iFound +} + +// Get and format most disruptive. +add_most_disruptive(sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new id, iMaxDamageId, iMaxDamage, iMaxHeadShots + + iMaxDamageId = 0 + iMaxDamage = 0 + iMaxHeadShots = 0 + + // Find player. + for (id = 1; id < MAX_PLAYERS; id++) + { + if (g_izUserRndStats[id][STATS_DAMAGE] >= iMaxDamage && (g_izUserRndStats[id][STATS_DAMAGE] > iMaxDamage || g_izUserRndStats[id][STATS_HS] > iMaxHeadShots)) + { + iMaxDamageId = id + iMaxDamage = g_izUserRndStats[id][STATS_DAMAGE] + iMaxHeadShots = g_izUserRndStats[id][STATS_HS] + } + } + + // Format statistics. + if (iMaxDamageId) + { + id = iMaxDamageId + + new Float:fGameEff = effec(g_izUserGameStats[id]) + new Float:fRndAcc = accuracy(g_izUserRndStats[id]) + + format(t_sText, MAX_TEXT_LENGTH, "%L: %s^n%d %L / %d %L -- %0.2f%% %L / %0.2f%% %L^n", LANG_SERVER, "MOST_DMG", g_izUserRndName[id], + g_izUserRndStats[id][STATS_HITS], LANG_SERVER, "HIT_S", iMaxDamage, LANG_SERVER, "DMG", fGameEff, LANG_SERVER, "EFF", fRndAcc, LANG_SERVER, "ACC") + add(sBuffer, MAX_BUFFER_LENGTH, t_sText) + } + + return iMaxDamageId +} + +// Get and format best score. +add_best_score(sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new id, iMaxKillsId, iMaxKills, iMaxHeadShots + + iMaxKillsId = 0 + iMaxKills = 0 + iMaxHeadShots = 0 + + // Find player + for (id = 1; id < MAX_PLAYERS; id++) + { + if (g_izUserRndStats[id][STATS_KILLS] >= iMaxKills && (g_izUserRndStats[id][STATS_KILLS] > iMaxKills || g_izUserRndStats[id][STATS_HS] > iMaxHeadShots)) + { + iMaxKillsId = id + iMaxKills = g_izUserRndStats[id][STATS_KILLS] + iMaxHeadShots = g_izUserRndStats[id][STATS_HS] + } + } + + // Format statistics. + if (iMaxKillsId) + { + id = iMaxKillsId + + new Float:fGameEff = effec(g_izUserGameStats[id]) + new Float:fRndAcc = accuracy(g_izUserRndStats[id]) + + format(t_sText, MAX_TEXT_LENGTH, "%L: %s^n%d %L / %d hs -- %0.2f%% %L / %0.2f%% %L^n", LANG_SERVER, "BEST_SCORE", g_izUserRndName[id], + iMaxKills, LANG_SERVER, "KILL_S", iMaxHeadShots, fGameEff, LANG_SERVER, "EFF", fRndAcc, LANG_SERVER, "ACC") + add(sBuffer, MAX_BUFFER_LENGTH, t_sText) + } + + return iMaxKillsId +} + +// Get and format team score. +add_team_score(sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS] + + // Calculate team stats + for (new iTeam = 0; iTeam < MAX_TEAMS; iTeam++) + { + fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam]) + fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam]) + fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam]) + } + + // Format round team stats, MOTD + format(t_sText, MAX_TEXT_LENGTH, "TERRORIST %d / %0.2f%% %L / %0.2f%% %L^nCT %d / %0.2f%% %L / %0.2f%% %L^n", g_izTeamScore[0], + fzMapEff[0], LANG_SERVER, "EFF", fzRndAcc[0], LANG_SERVER, "ACC", g_izTeamScore[1], fzMapEff[1], LANG_SERVER, "EFF", fzRndAcc[1], LANG_SERVER, "ACC") + add(sBuffer, MAX_BUFFER_LENGTH, t_sText) +} + +// Get and format team stats, chat version +save_team_chatscore() +{ + new Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS] + + // Calculate team stats + for (new iTeam = 0; iTeam < MAX_TEAMS; iTeam++) + { + fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam]) + fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam]) + fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam]) + } + + // Format game team stats, chat + format(g_sScore, MAX_BUFFER_LENGTH, "TERRORIST %d / %0.2f%% %L / %0.2f%% %L -- CT %d / %0.2f%% %L / %0.2f%% %L", g_izTeamScore[0], + fzMapEff[0], LANG_SERVER, "EFF", fzMapAcc[0], LANG_SERVER, "ACC", g_izTeamScore[1], fzMapEff[1], LANG_SERVER, "EFF", fzMapAcc[1], LANG_SERVER, "ACC") +} + +// Get and format total stats. +add_total_stats(sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + format(t_sText, MAX_TEXT_LENGTH, "%L: %d %L / %d hs -- %d %L / %d %L^n", LANG_SERVER, "TOTAL", g_izUserRndStats[0][STATS_KILLS], LANG_SERVER, "KILL_S", + g_izUserRndStats[0][STATS_HS], g_izUserRndStats[0][STATS_HITS], LANG_SERVER, "HITS", g_izUserRndStats[0][STATS_SHOTS], LANG_SERVER, "SHOT_S") + add(sBuffer, MAX_BUFFER_LENGTH, t_sText) +} + +// Get and format a user's list of body hits from an attacker. +add_attacker_hits(id, iAttacker, sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new iFound = 0 + + if (iAttacker && iAttacker != id) + { + new izStats[8], izBody[8], iLen + + izStats[STATS_HITS] = 0 + get_user_astats(id, iAttacker, izStats, izBody) + + if (izStats[STATS_HITS]) + { + iFound = 1 + iLen = strlen(sBuffer) + get_user_name(iAttacker, t_sName, MAX_NAME_LENGTH) + + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L:^n", id, "HITS_YOU_IN", t_sName) + + for (new i = 1; i < 8; i++) + { + if (!izBody[i]) + continue + + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L: %d^n", id, BODY_PART[i], izBody[i]) + } + } + } + + return iFound +} + +// Get and format killed stats: killer hp, ap, hits. +format_kill_ainfo(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new iFound = 0 + + if (iKiller && iKiller != id) + { + new izStats[8], izBody[8] + new iLen + + iFound = 1 + get_user_name(iKiller, t_sName, MAX_NAME_LENGTH) + izStats[STATS_HITS] = 0 + get_user_astats(id, iKiller, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH) + + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L (%dhp, %dap) >>", id, "KILLED_BY_WITH", t_sName, t_sWpn, distance(g_izUserAttackerDistance[id]), + g_izKilled[id][KILLED_KILLER_HEALTH], g_izKilled[id][KILLED_KILLER_ARMOUR]) + + if (izStats[STATS_HITS]) + { + for (new i = 1; i < 8; i++) + { + if (!izBody[i]) + continue + + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L: %d", id, BODY_PART[i], izBody[i]) + } + } + else + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L", id, "NO_HITS") + } + else + format(sBuffer, MAX_BUFFER_LENGTH, "%L", id, "YOU_NO_KILLER") + + return iFound +} + +// Get and format killed stats: hits, damage on killer. +format_kill_vinfo(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new iFound = 0 + new izStats[8] + new izBody[8] + new iLen + + izStats[STATS_HITS] = 0 + izStats[STATS_DAMAGE] = 0 + get_user_vstats(id, iKiller, izStats, izBody) + + if (iKiller && iKiller != id) + { + iFound = 1 + get_user_name(iKiller, t_sName, MAX_NAME_LENGTH) + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L >>", id, "YOU_HIT", t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE]) + } + else + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L >>", id, "LAST_RES", izStats[STATS_HITS], izStats[STATS_DAMAGE]) + + if (izStats[STATS_HITS]) + { + for (new i = 1; i < 8; i++) + { + if (!izBody[i]) + continue + + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L: %d", id, BODY_PART[i], izBody[i]) + } + } + else + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L", id, "NO_HITS") + + return iFound +} + +// Get and format top 15. +format_top15(sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new iMax = get_statsnum() + new izStats[8], izBody[8] + new iLen = 0 + + if (iMax > 15) + iMax = 15 + + new lKills[16], lDeaths[16], lHits[16], lShots[16], lEff[16], lAcc[16] + + format(lKills, 15, "%L", LANG_SERVER, "KILLS") + format(lDeaths, 15, "%L", LANG_SERVER, "DEATHS") + format(lHits, 15, "%L", LANG_SERVER, "HITS") + format(lShots, 15, "%L", LANG_SERVER, "SHOTS") + format(lEff, 15, "%L", LANG_SERVER, "EFF") + format(lAcc, 15, "%L", LANG_SERVER, "ACC") + + ucfirst(lEff) + ucfirst(lAcc) + + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>") + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2s %-22.22s %6s %6s %6s %6s %4s %4s %4s^n", "#", "Nick", lKills, lDeaths, lHits, lShots, "HS", lEff, lAcc) + + for (new i = 0; i < iMax && MAX_BUFFER_LENGTH - iLen > 0; i++) + { + get_stats(i, izStats, izBody, t_sName, MAX_NAME_LENGTH) + replace_all(t_sName, MAX_NAME_LENGTH, "<", "[") + replace_all(t_sName, MAX_NAME_LENGTH, ">", "]") + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2d %-22.22s %6d %6d %6d %6d %4d %3.0f%% %3.0f%%^n", i + 1, t_sName, izStats[STATS_KILLS], + izStats[STATS_DEATHS], izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_HS], effec(izStats), accuracy(izStats)) + } +} + +// Get and format rank stats. +format_rankstats(id, sBuffer[MAX_BUFFER_LENGTH + 1], iMyId = 0) +{ + new izStats[8] = {0, ...} + new izBody[8] + new iRankPos, iLen + new lKills[16], lDeaths[16], lHits[16], lShots[16], lDamage[16], lEff[16], lAcc[16] + + format(lKills, 15, "%L", id, "KILLS") + format(lDeaths, 15, "%L", id, "DEATHS") + format(lHits, 15, "%L", id, "HITS") + format(lShots, 15, "%L", id, "SHOTS") + format(lDamage, 15, "%L", id, "DAMAGE") + format(lEff, 15, "%L", id, "EFF") + format(lAcc, 15, "%L", id, "ACC") + + ucfirst(lEff) + ucfirst(lAcc) + + iRankPos = get_user_stats(id, izStats, izBody) + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>") + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L %L^n^n", id, (!iMyId || iMyId == id) ? "YOUR" : "PLAYERS", id, "RANK_IS", iRankPos, get_statsnum()) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%6s: %d (%d with hs)^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %0.2f%%^n%6s: %0.2f%%^n^n", + lKills, izStats[STATS_KILLS], izStats[STATS_HS], lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], lShots, izStats[STATS_SHOTS], + lDamage, izStats[STATS_DAMAGE], lEff, effec(izStats), lAcc, accuracy(izStats)) + + new L_BODY_PART[8][32] + + for (new i = 1; i < 8; i++) + { + format(L_BODY_PART[i], 31, "%L", id, BODY_PART[i]) + } + + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%10s:^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d", "HITS", + L_BODY_PART[1], izBody[1], L_BODY_PART[2], izBody[2], L_BODY_PART[3], izBody[3], L_BODY_PART[4], izBody[4], L_BODY_PART[5], + izBody[5], L_BODY_PART[6], izBody[6], L_BODY_PART[7], izBody[7]) +} + +// Get and format stats. +format_stats(id, sBuffer[MAX_BUFFER_LENGTH + 1]) +{ + new izStats[8] = {0, ...} + new izBody[8] + new iWeapon, iLen + new lKills[16], lDeaths[16], lHits[16], lShots[16], lDamage[16], lEff[16], lAcc[16], lWeapon[16] + + format(lKills, 15, "%L", id, "KILLS") + format(lDeaths, 15, "%L", id, "DEATHS") + format(lHits, 15, "%L", id, "HITS") + format(lShots, 15, "%L", id, "SHOTS") + format(lDamage, 15, "%L", id, "DAMAGE") + format(lEff, 15, "%L", id, "EFF") + format(lAcc, 15, "%L", id, "ACC") + format(lWeapon, 15, "%L", id, "WEAPON") + + ucfirst(lEff) + ucfirst(lAcc) + + get_user_wstats(id, 0, izStats, izBody) + + iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>") + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%6s: %d (%d with hs)^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %0.2f%%^n%6s: %0.2f%%^n^n", + lKills, izStats[STATS_KILLS], izStats[STATS_HS], lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], lShots, izStats[STATS_SHOTS], + lDamage, izStats[STATS_DAMAGE], lEff, effec(izStats), lAcc, accuracy(izStats)) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%-12.12s %6s %6s %6s %6s %6s %4s^n", lWeapon, lKills, lDeaths, lHits, lShots, lDamage, lAcc) + + for (iWeapon = 1; iWeapon < xmod_get_maxweapons() && MAX_BUFFER_LENGTH - iLen > 0 ; iWeapon++) + { + if (get_user_wstats(id, iWeapon, izStats, izBody)) + { + xmod_get_wpnname(iWeapon, t_sWpn, MAX_WEAPON_LENGTH) + iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%-12.12s %6d %6d %6d %6d %6d %3.0f%%^n", t_sWpn, izStats[STATS_KILLS], izStats[STATS_DEATHS], + izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_DAMAGE], accuracy(izStats)) + } + } +} + +// Show round end stats. If gametime is zero then use default duration time. +show_roundend_hudstats(id, Float:fGameTime) +{ + // Bail out if there no HUD stats should be shown + // for this player or end round stats not created. + if (!g_izStatsSwitch[id]) return + if (!g_sAwardAndScore[0]) return + + // If round end timer is zero clear round end stats. + if (g_fShowStatsTime == 0.0) + { + ClearSyncHud(id, g_HudSync_EndRound) +#if defined STATSX_DEBUG + log_amx("Clear round end HUD stats for #%d", id) +#endif + } + + // Set HUD-duration to default or remaining time. + new Float:fDuration + + if (fGameTime == 0.0) + fDuration = g_fHUDDuration + else + { + fDuration = g_fShowStatsTime + g_fHUDDuration - fGameTime + + if (fDuration > g_fFreezeTime + g_fFreezeLimitTime) + fDuration = g_fFreezeTime + g_fFreezeLimitTime + } + + // Show stats only if more time left than coded minimum. + if (fDuration >= HUD_MIN_DURATION) + { + set_hudtype_endround(fDuration) + ShowSyncHudMsg(id, g_HudSync_EndRound, "%s", g_sAwardAndScore) +#if defined STATSX_DEBUG + log_amx("Show %1.2fs round end HUD stats for #%d", fDuration, id) +#endif + } +} + +// Show round end stats. +show_user_hudstats(id, Float:fGameTime) +{ + // Bail out if there no HUD stats should be shown + // for this player or user stats timer is zero. + if (!g_izStatsSwitch[id]) return + if (g_fzShowUserStatsTime[id] == 0.0) return + + // Set HUD-duration to default or remaining time. + new Float:fDuration + + if (fGameTime == 0.0) + fDuration = g_fHUDDuration + else + { + fDuration = g_fzShowUserStatsTime[id] + g_fHUDDuration - fGameTime + + if (fDuration > g_fFreezeTime + g_fFreezeLimitTime) + fDuration = g_fFreezeTime + g_fFreezeLimitTime + } + + // Show stats only if more time left than coded minimum. + if (fDuration >= HUD_MIN_DURATION) + { + if (ShowKiller) + { + new iKiller + + iKiller = g_izKilled[id][KILLED_KILLER_ID] + get_kill_info(id, iKiller, g_sBuffer) + add_attacker_hits(id, iKiller, g_sBuffer) + set_hudtype_killer(fDuration) + show_hudmessage(id, "%s", g_sBuffer) +#if defined STATSX_DEBUG + log_amx("Show %1.2fs %suser HUD k-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id) +#endif + } + + if (ShowVictims) + { + get_victims(id, g_sBuffer) + set_hudtype_victim(fDuration) + show_hudmessage(id, "%s", g_sBuffer) +#if defined STATSX_DEBUG + log_amx("Show %1.2fs %suser HUD v-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id) +#endif + } + + if (ShowAttackers) + { + get_attackers(id, g_sBuffer) + set_hudtype_attacker(fDuration) + show_hudmessage(id, "%s", g_sBuffer) +#if defined STATSX_DEBUG + log_amx("Show %1.2fs %suser HUD a-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id) +#endif + } + } +} + +//------------------------------------------------------------ +// Plugin commands +//------------------------------------------------------------ + +// Set or get plugin config flags. +public cmdPluginMode(id, level, cid) +{ + if (!cmd_access(id, level, cid, 1)) + return PLUGIN_HANDLED + + if (read_argc() > 1) + read_argv(1, g_sBuffer, MAX_BUFFER_LENGTH) + else + g_sBuffer[0] = 0 + + set_plugin_mode(id, g_sBuffer) + + return PLUGIN_HANDLED +} + +// Display MOTD stats. +public cmdStatsMe(id) +{ + if (!SayStatsMe) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + format_stats(id, g_sBuffer) + get_user_name(id, t_sName, MAX_NAME_LENGTH) + show_motd(id, g_sBuffer, t_sName) + + return PLUGIN_CONTINUE +} + +// Display MOTD rank. +public cmdRankStats(id) +{ + if (!SayRankStats) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + format_rankstats(id, g_sBuffer) + get_user_name(id, t_sName, MAX_NAME_LENGTH) + show_motd(id, g_sBuffer, t_sName) + + return PLUGIN_CONTINUE +} + +// Display MOTD top15 ranked. +public cmdTop15(id) +{ + if (!SayTop15) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + format_top15(g_sBuffer) + show_motd(id, g_sBuffer, "Top 15") + + return PLUGIN_CONTINUE +} + +// Display killer information. +public cmdHp(id) +{ + if (!SayHP) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + new iKiller = g_izKilled[id][KILLED_KILLER_ID] + + format_kill_ainfo(id, iKiller, g_sBuffer) + client_print(id, print_chat, "* %s", g_sBuffer) + + return PLUGIN_CONTINUE +} + +// Display user stats. +public cmdMe(id) +{ + if (!SayMe) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + format_kill_vinfo(id, 0, g_sBuffer) + client_print(id, print_chat, "* %s", g_sBuffer) + + return PLUGIN_CONTINUE +} + +// Display user rank +public cmdRank(id) +{ + if (!SayRank) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + new izStats[8], izBody[8] + new iRankPos, iRankMax + new Float:fEff, Float:fAcc + + iRankPos = get_user_stats(id, izStats, izBody) + iRankMax = get_statsnum() + + fEff = effec(izStats) + fAcc = accuracy(izStats) + + client_print(id, print_chat, "* %L", id, "YOUR_RANK_IS", iRankPos, iRankMax, izStats[STATS_KILLS], izStats[STATS_HITS], fEff, fAcc) + + return PLUGIN_CONTINUE +} + +// Report user weapon status to team. +public cmdReport(id) +{ + if (!SayReport) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + new iWeapon, iClip, iAmmo, iHealth, iArmor + + iWeapon = get_user_weapon(id, iClip, iAmmo) + + if (iWeapon != 0) + xmod_get_wpnname(iWeapon, t_sWpn, MAX_WEAPON_LENGTH) + + iHealth = get_user_health(id) + iArmor = get_user_armor(id) + + new lWeapon[16] + + format(lWeapon, 15, "%L", id, "WEAPON") + strtolower(lWeapon) + + if (iClip >= 0) + { + format(g_sBuffer, MAX_BUFFER_LENGTH, "%s: %s, %L: %d/%d, %L: %d, %L: %d", lWeapon, t_sWpn, LANG_SERVER, "AMMO", iClip, iAmmo, LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor) + } + else + format(g_sBuffer, MAX_BUFFER_LENGTH, "%s: %s, %L: %d, %L: %d", lWeapon, t_sWpn[7], LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor) + + engclient_cmd(id, "say_team", g_sBuffer) + + return PLUGIN_CONTINUE +} + +// Display team map score +public cmdScore(id) +{ + if (!SayScore) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + client_print(id, print_chat, "%L: %s", id, "GAME_SCORE", g_sScore) + + return PLUGIN_CONTINUE +} + +// Client switch to enable or disable stats announcements. +public cmdSwitch(id) +{ + g_izStatsSwitch[id] = (g_izStatsSwitch[id]) ? 0 : -1 + num_to_str(g_izStatsSwitch[id], t_sText, MAX_TEXT_LENGTH) + client_cmd(id, "setinfo _amxstatsx %s", t_sText) + + new lEnDis[32] + + format(lEnDis, 31, "%L", id, g_izStatsSwitch[id] ? "ENABLED" : "DISABLED") + client_print(id, print_chat, "* %L", id, "STATS_ANNOUNCE", lEnDis) + + return PLUGIN_CONTINUE +} + +// Player stats menu. +public cmdStats(id) +{ + if (!SayStatsAll) + { + client_print(id, print_chat, "%L", id, "DISABLED_MSG") + return PLUGIN_HANDLED + } + + showStatsMenu(id, g_izUserMenuPosition[id] = 0) + + return PLUGIN_CONTINUE +} + +//-------------------------------- +// Menu +//-------------------------------- + +public actionStatsMenu(id, key) +{ + switch (key) + { + // Key '1' to '7', execute action on this option + case 0..6: + { + new iOption, iIndex + iOption = (g_izUserMenuPosition[id] * PPL_MENU_OPTIONS) + key + + if (iOption >= 0 && iOption < 32) + { + iIndex = g_izUserMenuPlayers[id][iOption] + + if (is_user_connected(iIndex)) + { + switch (g_izUserMenuAction[id]) + { + case 0: format_stats(iIndex, g_sBuffer) + case 1: format_rankstats(iIndex, g_sBuffer, id) + default: g_sBuffer[0] = 0 + } + + if (g_sBuffer[0]) + { + get_user_name(iIndex, t_sName, MAX_NAME_LENGTH) + show_motd(id, g_sBuffer, t_sName) + } + } + } + + showStatsMenu(id, g_izUserMenuPosition[id]) + } + // Key '8', change action + case 7: + { + g_izUserMenuAction[id]++ + + if (g_izUserMenuAction[id] >= MAX_PPL_MENU_ACTIONS) + g_izUserMenuAction[id] = 0 + + showStatsMenu(id, g_izUserMenuPosition[id]) + } + // Key '9', select next page of options + case 8: showStatsMenu(id, ++g_izUserMenuPosition[id]) + // Key '10', cancel or go back to previous menu + case 9: + { + if (g_izUserMenuPosition[id] > 0) + showStatsMenu(id, --g_izUserMenuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +new g_izUserMenuActionText[MAX_PPL_MENU_ACTIONS][] = {"Show stats", "Show rank stats"} + +showStatsMenu(id, iMenuPos) +{ + new iLen, iKeyMask, iPlayers + new iUserIndex, iMenuPosMax, iMenuOption, iMenuOptionMax + + get_players(g_izUserMenuPlayers[id], iPlayers) + iMenuPosMax = ((iPlayers - 1) / PPL_MENU_OPTIONS) + 1 + + // If menu pos does not excist use last menu (if players has left) + if (iMenuPos >= iMenuPosMax) + iMenuPos = iMenuPosMax - 1 + + iUserIndex = iMenuPos * PPL_MENU_OPTIONS + iLen = format(g_sBuffer, MAX_BUFFER_LENGTH, "\y%L\R%d/%d^n\w^n", id, "SERVER_STATS", iMenuPos + 1, iMenuPosMax) + iMenuOptionMax = iPlayers - iUserIndex + + if (iMenuOptionMax > PPL_MENU_OPTIONS) + iMenuOptionMax = PPL_MENU_OPTIONS + + for (iMenuOption = 0; iMenuOption < iMenuOptionMax; iMenuOption++) + { + get_user_name(g_izUserMenuPlayers[id][iUserIndex++], t_sName, MAX_NAME_LENGTH) + iKeyMask |= (1<<iMenuOption) + iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%d. %s^n\w", iMenuOption + 1, t_sName) + } + + iKeyMask |= MENU_KEY_8|MENU_KEY_0 + iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n8. %s^n\w", g_izUserMenuActionText[g_izUserMenuAction[id]]) + + if (iPlayers > iUserIndex) + { + iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n9. %L...", id, "MORE") + iKeyMask |= MENU_KEY_9 + } + + if (iMenuPos > 0) + iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "BACK") + else + iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "EXIT") + + show_menu(id, iKeyMask, g_sBuffer, -1, "Server Stats") + + return PLUGIN_HANDLED +} + +//------------------------------------------------------------ +// Plugin events +//------------------------------------------------------------ + +// Reset game stats on game start and restart. +public eventStartGame() +{ + read_data(2, t_sText, MAX_TEXT_LENGTH) + + if (t_sText[6] == 'w') + { + read_data(3, t_sText, MAX_TEXT_LENGTH) + g_fStartGame = get_gametime() + float(str_to_num(t_sText)) + } + else + g_fStartGame = get_gametime() + + return PLUGIN_CONTINUE +} + +// Round start +public eventStartRound() +{ + new iTeam, id, i + + new Float:roundtime = get_cvar_float("mp_roundtime"); + if (read_data(1) >= floatround(roundtime * 60.0,floatround_floor) || (roundtime == 2.3 && read_data(1) == 137)) // these round too weird for it to work through pawn, have to add an exception for it + { +#if defined STATSX_DEBUG + log_amx("Reset round stats") +#endif + + // Reset game stats on game start and restart. + if (g_fStartGame > 0.0 && g_fStartGame <= get_gametime()) + { +#if defined STATSX_DEBUG + log_amx("Reset game stats") +#endif + g_fStartGame = 0.0 + + // Clear team and game stats. + for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++) + { + g_izTeamEventScore[iTeam] = 0 + + for (i = 0; i < 8; i++) + g_izTeamGameStats[iTeam][i] = 0 + } + + // Clear game stats, incl '0' that is sum of all users. + for (id = 0; id < MAX_PLAYERS; id++) + { + for (i = 0; i < 8; i++) + g_izUserGameStats[id][i] = 0 + } + } + + // Update team score with "TeamScore" event values and + // clear team round stats. + for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++) + { + g_izTeamScore[iTeam] = g_izTeamEventScore[iTeam] + + for (i = 0; i < 8; i++) + g_izTeamRndStats[iTeam][i] = 0 + } + + // Clear user round stats, incl '0' that is sum of all users. + for (id = 0; id < MAX_PLAYERS; id++) + { + g_izUserRndName[id][0] = 0 + + for (i = 0; i < 8; i++) + g_izUserRndStats[id][i] = 0 + + g_fzShowUserStatsTime[id] = 0.0 + } + + // Allow end round stats and reset end round triggered indicator. + g_iRoundEndTriggered = 0 + g_iRoundEndProcessed = 0 + g_fShowStatsTime = 0.0 + + // Update local configuration vars with value in cvars. + get_config_cvars() + } + + return PLUGIN_CONTINUE +} + +// Reset killer info on round restart. +public eventResetHud(id) +{ + new args[1] + args[0] = id + + if (g_iPluginMode & MODE_HUD_DELAY) + set_task(0.01, "delay_resethud", 200 + id, args, 1) + else + delay_resethud(args) + + return PLUGIN_CONTINUE +} + +public delay_resethud(args[]) +{ + new id = args[0] + new Float:fGameTime + + // Show user and score round stats after HUD-reset +#if defined STATSX_DEBUG + log_amx("Reset HUD for #%d", id) +#endif + fGameTime = get_gametime() + show_user_hudstats(id, fGameTime) + show_roundend_hudstats(id, fGameTime) + + // Reset round stats + g_izKilled[id][KILLED_KILLER_ID] = 0 + g_izKilled[id][KILLED_KILLER_STATSFIX] = 0 + g_izShowStatsFlags[id] = -1 // Initialize flags + g_fzShowUserStatsTime[id] = 0.0 + g_izUserAttackerDistance[id] = 0 + + for (new i = 0; i < MAX_PLAYERS; i++) + g_izUserVictimDistance[id][i] = 0 + + return PLUGIN_CONTINUE +} + +// Save killer info on death. +public client_death(killer, victim, wpnindex, hitplace, TK) +{ + // Bail out if no killer. + if (!killer) + return PLUGIN_CONTINUE + + if (killer != victim) + { + new iaVOrigin[3], iaKOrigin[3] + new iDistance + + get_user_origin(victim, iaVOrigin) + get_user_origin(killer, iaKOrigin) + + g_izKilled[victim][KILLED_KILLER_ID] = killer + g_izKilled[victim][KILLED_KILLER_HEALTH] = get_user_health(killer) + g_izKilled[victim][KILLED_KILLER_ARMOUR] = get_user_armor(killer) + g_izKilled[victim][KILLED_KILLER_STATSFIX] = 0 + + iDistance = get_distance(iaVOrigin, iaKOrigin) + g_izUserAttackerDistance[victim] = iDistance + g_izUserVictimDistance[killer][victim] = iDistance + } + + g_izKilled[victim][KILLED_TEAM] = get_user_team(victim) + g_izKilled[victim][KILLED_KILLER_STATSFIX] = 1 + + // Display kill stats for the player if round + // end stats was not processed. + if (!g_iRoundEndProcessed) + kill_stats(victim) + + return PLUGIN_CONTINUE +} + +// Display hudmessage stats on death. +// This will also update all round and game stats. +// Must be called at least once per round. +kill_stats(id) +{ + // Bail out if user stats timer is non-zero, + // ie function already called. + if (g_fzShowUserStatsTime[id] > 0.0) + { + return + } + + new team = get_user_team(id) + if (team < 1 || team > 2) + { + return + } + + // Flag kill stats displayed for this player. + g_fzShowUserStatsTime[id] = get_gametime() + + // Add user death stats to user round stats + new izStats[8], izBody[8] + new iTeam, i + new iKiller + + iKiller = g_izKilled[id][KILLED_KILLER_ID] + + // Get user's team (if dead use the saved team) + if (iKiller) + iTeam = g_izKilled[id][KILLED_TEAM] - 1 + else + iTeam = get_user_team(id) - 1 + + get_user_name(id, g_izUserRndName[id], MAX_NAME_LENGTH) + + if (get_user_rstats(id, izStats, izBody)) + { + // Update user's team round stats + if (iTeam >= 0 && iTeam < MAX_TEAMS) + { + for (i = 0; i < 8; i++) + { + g_izTeamRndStats[iTeam][i] += izStats[i] + g_izTeamGameStats[iTeam][i] += izStats[i] + g_izUserRndStats[0][i] += izStats[i] + g_izUserGameStats[0][i] += izStats[i] + } + } + + // Update user's round stats + if (g_izUserUserID[id] == get_user_userid(id)) + { + for (i = 0; i < 8; i++) + { + g_izUserRndStats[id][i] += izStats[i] + g_izUserGameStats[id][i] += izStats[i] + } + } else { + g_izUserUserID[id] = get_user_userid(id) + + for (i = 0; i < 8; i++) + { + g_izUserRndStats[id][i] = izStats[i] + g_izUserGameStats[id][i] = izStats[i] + } + } + + } // endif (get_user_rstats()) + + // Report stats in the chat section, if player is killed. + if (KillerChat && iKiller && iKiller != id) + { + if (format_kill_ainfo(id, iKiller, g_sBuffer)) + { + client_print(id, print_chat, "* %s", g_sBuffer) + format_kill_vinfo(id, iKiller, g_sBuffer) + } + + client_print(id, print_chat, "* %s", g_sBuffer) + } + + // Display player stats info. +#if defined STATSX_DEBUG + log_amx("Kill stats for #%d", id) +#endif + show_user_hudstats(id, 0.0) +} + +public eventEndRound() +{ + // Update local configuration vars with value in cvars. + get_config_cvars() + + // If first end round event in the round, calculate team score. + if (!g_iRoundEndTriggered) + { + read_data(2, t_sText, MAX_TEXT_LENGTH) + + if (t_sText[7] == 't') // Terrorist wins + g_izTeamScore[0]++ + else if (t_sText[7] == 'c') // CT wins + g_izTeamScore[1]++ + } + + set_task(0.3, "ERTask", 997) + + return PLUGIN_CONTINUE +} + +public ERTask() +{ + // Flag round end triggered. + g_iRoundEndTriggered = 1 + + // Display round end stats to all players. + endround_stats() +} + +endround_stats() +{ + // Bail out if end round stats has already been processed + // or round end not triggered. + if (g_iRoundEndProcessed || !g_iRoundEndTriggered) + return + + new iaPlayers[32], iPlayer, iPlayers, id + + get_players(iaPlayers, iPlayers) + + // Display attacker & victim list for all living players. + // This will also update all round and game stats for all players + // not killed. +#if defined STATSX_DEBUG + log_amx("End round stats") +#endif + + for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) + { + id = iaPlayers[iPlayer] + + if (g_fzShowUserStatsTime[id] == 0.0) + { + kill_stats(id) + } + } + + g_sAwardAndScore[0] = 0 + + // Create round awards. + if (ShowMostDisruptive) + add_most_disruptive(g_sAwardAndScore) + if (ShowBestScore) + add_best_score(g_sAwardAndScore) + + // Create round score. + // Compensate HUD message if awards are disabled. + if (ShowTeamScore || ShowTotalStats) + { + if (ShowMostDisruptive && ShowBestScore) + add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n") + else if (ShowMostDisruptive || ShowBestScore) + add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n^n^n") + else + add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n^n^n^n^n") + + if (ShowTeamScore) + add_team_score(g_sAwardAndScore) + + if (ShowTotalStats) + add_total_stats(g_sAwardAndScore) + } + + save_team_chatscore() + + // Get and save round end stats time. + g_fShowStatsTime = get_gametime() + + // Display round end stats to all players. + for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) + { + id = iaPlayers[iPlayer] + show_roundend_hudstats(id, 0.0) + } + + // Flag round end processed. + g_iRoundEndProcessed = 1 +} + +public eventTeamScore() +{ + new sTeamID[1 + 1], iTeamScore + read_data(1, sTeamID, 1) + iTeamScore = read_data(2) + g_izTeamEventScore[(sTeamID[0] == 'C') ? 1 : 0] = iTeamScore + + return PLUGIN_CONTINUE +} + +public eventIntermission() +{ + if (EndPlayer || EndTop15) + set_task(1.0, "end_game_stats", 900) +} + +public end_game_stats() +{ + new iaPlayers[32], iPlayer, iPlayers, id + + if (EndPlayer) + { + get_players(iaPlayers, iPlayers) + + for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) + { + id = iaPlayers[iPlayer] + + if (!g_izStatsSwitch[id]) + continue // Do not show any stats + + cmdStatsMe(iaPlayers[iPlayer]) + } + } + else if (EndTop15) + { + get_players(iaPlayers, iPlayers) + format_top15(g_sBuffer) + + for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) + { + id = iaPlayers[iPlayer] + + if (!g_izStatsSwitch[id]) + continue // Do not show any stats + + show_motd(iaPlayers[iPlayer], g_sBuffer, "Top 15") + } + } + + return PLUGIN_CONTINUE +} + +public eventSpecMode(id) +{ + new sData[12] + read_data(2, sData, 11) + g_izSpecMode[id] = (sData[10] == '2') + + return PLUGIN_CONTINUE +} + +public eventShowRank(id) +{ + if (SpecRankInfo && g_izSpecMode[id]) + { + new iPlayer = read_data(2) + + if (is_user_connected(iPlayer)) + { + new izStats[8], izBody[8] + new iRankPos, iRankMax + + get_user_name(iPlayer, t_sName, MAX_NAME_LENGTH) + + iRankPos = get_user_stats(iPlayer, izStats, izBody) + iRankMax = get_statsnum() + + set_hudtype_specmode() + ShowSyncHudMsg(id, g_HudSync_SpecInfo, "%L", id, "X_RANK_IS", t_sName, iRankPos, iRankMax) + } + } + + return PLUGIN_CONTINUE +} + +public client_connect(id) +{ + if (ShowStats) + { + get_user_info(id, "_amxstatsx", t_sText, MAX_TEXT_LENGTH) + g_izStatsSwitch[id] = (t_sText[0]) ? str_to_num(t_sText) : -1 + } + else + g_izStatsSwitch[id] = 0 + + g_izKilled[id][KILLED_KILLER_ID] = 0 + g_izKilled[id][KILLED_KILLER_STATSFIX] = 0 + g_izShowStatsFlags[id] = 0 // Clear all flags + g_fzShowUserStatsTime[id] = 0.0 + + return PLUGIN_CONTINUE +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/telemenu.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/telemenu.sma new file mode 100644 index 0000000..d2d0b7a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/telemenu.sma @@ -0,0 +1,199 @@ +/* AMX Mod X +* Teleport Menu Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> +#include <amxmisc> +#include <fun> + +new g_menuPosition[33] +new g_menuPlayers[33][32] +new g_menuPlayersNum[33] +new g_menuOption[33] = {-1, ...} +new g_menuOrgin[33][3] +new g_coloredMenus + +public plugin_init() +{ + register_plugin("Teleport Menu", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("telemenu.txt") + register_dictionary("common.txt") + register_clcmd("amx_teleportmenu", "cmdTelMenu", ADMIN_CFG, "- displays teleport menu") + register_menucmd(register_menuid("Teleport Menu"), 1023, "actionTelMenu") + + g_coloredMenus = colored_menus() +} + +public actionTelMenu(id, key) +{ + switch (key) + { + case 6: + { + g_menuOption[id] = 1 - g_menuOption[id] + displayTelMenu(id, g_menuPosition[id]) + } + case 7: + { + if (g_menuOption[id] < 0) /* unlocking position for the first time */ + g_menuOption[id] = 0 + + get_user_origin(id, g_menuOrgin[id]) + displayTelMenu(id, g_menuPosition[id]) + } + case 8: displayTelMenu(id, ++g_menuPosition[id]) + case 9: displayTelMenu(id, --g_menuPosition[id]) + default: + { + new player = g_menuPlayers[id][g_menuPosition[id] * 6 + key] + new name2[32] + + get_user_name(player, name2, 31) + + if (!is_user_alive(player)) + { + client_print(id, print_chat, "%L", id, "CANT_PERF_DEAD", name2) + displayTelMenu(id, g_menuPosition[id]) + return PLUGIN_HANDLED + } + + if (g_menuOption[id] > 0) + { + set_user_origin(player, g_menuOrgin[id]) + } else { + new origin[3] + + get_user_origin(id, origin) + set_user_origin(player, origin) + } + + new authid[32], authid2[32], name[32] + + get_user_authid(id, authid, 31) + get_user_authid(player, authid2, 31) + get_user_name(id, name, 31) + + log_amx("Cmd: ^"%s<%d><%s><>^" teleport ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, name2, get_user_userid(player), authid2) + + show_activity_key("ADMIN_TELEPORT_1", "ADMIN_TELEPORT_2", name, name2); + + displayTelMenu(id, g_menuPosition[id]) + } + } + + return PLUGIN_HANDLED +} + +displayTelMenu(id, pos) +{ + if (pos < 0) + return + + get_players(g_menuPlayers[id], g_menuPlayersNum[id]) + + new menuBody[512] + new b = 0 + new i + new name[32] + new start = pos * 6 + new bool:blockMenu = (is_user_alive(id) && g_menuOption[id] < 1) ? true : false + + if (start >= g_menuPlayersNum[id]) + start = pos = g_menuPosition[id] = 0 + + new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "TELE_MENU", pos + 1, (g_menuPlayersNum[id] / 6 + ((g_menuPlayersNum[id] % 6) ? 1 : 0))) + new end = start + 6 + new keys = MENU_KEY_0|MENU_KEY_8 + + if (end > g_menuPlayersNum[id]) + end = g_menuPlayersNum[id] + + for (new a = start; a < end; ++a) + { + i = g_menuPlayers[id][a] + get_user_name(i, name, 31) + + if (blockMenu || !is_user_alive(i) || (id != i && get_user_flags(i) & ADMIN_IMMUNITY)) + { + ++b + + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name) + else + len += format(menuBody[len], 511-len, "#. %s^n", name) + } else { + keys |= (1<<b) + + if (is_user_admin(i)) + len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name) + else + len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name) + } + } + + if (g_menuOption[id] > 0) // 1 + { + keys |= MENU_KEY_7 + len += format(menuBody[len], 511-len, "^n7. To location: %d %d %d^n", g_menuOrgin[id][0], g_menuOrgin[id][1], g_menuOrgin[id][2]) + } + else if (g_menuOption[id]) // -1 + { + if (g_coloredMenus) + len += format(menuBody[len], 511-len, "^n\d7. %L^n\w", id, "CUR_LOC") + else + len += format(menuBody[len], 511-len, "^n#. %L^n", id, "CUR_LOC") + } else { // 0 + keys |= MENU_KEY_7 + len += format(menuBody[len], 511-len, "^n7. %L^n", id, "CUR_LOC") + } + + len += format(menuBody[len], 511-len, "8. %L^n", id, "SAVE_LOC") + + if (end != g_menuPlayersNum[id]) + { + format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") + keys |= MENU_KEY_9 + } + else + format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT") + + show_menu(id, keys, menuBody, -1, "Teleport Menu") +} + +public cmdTelMenu(id, level, cid) +{ + if (cmd_access(id, level, cid, 1)) + displayTelMenu(id, g_menuPosition[id] = 0) + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/admins_test.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/admins_test.sma new file mode 100644 index 0000000..ba8dd9a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/admins_test.sma @@ -0,0 +1,123 @@ +#include <amxmodx> + +new __testnumber; +new errcount; + +enum TestType +{ + TT_Equal = 0, + TT_LessThan, + TT_GreaterThan, + TT_LessThanEqual, + TT_GreaterThanEqual, + TT_NotEqual +}; + +new TestWords[6][] = { + "==", + "<", + ">", + "<=", + ">=", + "!=" +}; + + + +stock test(A,B=0,TestType:Type=TT_Equal) +{ + ++__testnumber; + + new passed=0; + + switch (Type) + { + case TT_Equal: if (A==B) passed=1; + case TT_LessThan: if (A<B) passed=1; + case TT_GreaterThan: if (A>B) passed=1; + case TT_LessThanEqual: if (A<=B) passed=1; + case TT_GreaterThanEqual: if (A>=B) passed=1; + case TT_NotEqual: if (A!=B) passed=1; + } + + if (!passed) + { + log_amx("Failed test #%d (%d %s %d)",__testnumber,A,TestWords[_:Type],B); + errcount++; + } +} + + +public plugin_init() +{ + register_srvcmd("testadmins","testadmins"); +} +public testadmins() +{ + + new AuthData[44]; + new Password[32]; + new Access; + new Flags; + new id; + + __testnumber=0; + errcount=0; + + + test(admins_num(),0); + + admins_push("STEAM_0:1:23456","",read_flags("abcdefghijklmnopqrstu"),read_flags("ce")); + + test(admins_num(),1); + + admins_push("ABCDEFGHIJKLMNOP","abcdefghijklmnop",read_flags("z"),read_flags("a")); + + test(admins_num(),2); + + admins_push("ZYXWVUTSRQPONMLKJIHGFEDCBA","plop",read_flags("a"),read_flags("b")); + + test(admins_num(),3); + + id=0; + + admins_lookup(id,AdminProp_Auth,AuthData,sizeof(AuthData)-1); + admins_lookup(id,AdminProp_Password,Password,sizeof(Password)-1); + Access=admins_lookup(id,AdminProp_Access); + Flags=admins_lookup(id,AdminProp_Flags); + + test(strcmp(AuthData,"STEAM_0:1:23456"),0); + test(strcmp(Password,""),0); + test(Access,read_flags("abcdefghijklmnopqrstu")); + test(Flags,read_flags("ce")); + + id++; + + admins_lookup(id,AdminProp_Auth,AuthData,sizeof(AuthData)-1); + admins_lookup(id,AdminProp_Password,Password,sizeof(Password)-1); + Access=admins_lookup(id,AdminProp_Access); + Flags=admins_lookup(id,AdminProp_Flags); + + test(strcmp(AuthData,"ABCDEFGHIJKLMNOP"),0); + test(strcmp(Password,"abcdefghijklmnop"),0); + test(Access,read_flags("z")); + test(Flags,read_flags("a")); + + id++; + + admins_lookup(id,AdminProp_Auth,AuthData,sizeof(AuthData)-1); + admins_lookup(id,AdminProp_Password,Password,sizeof(Password)-1); + Access=admins_lookup(id,AdminProp_Access); + Flags=admins_lookup(id,AdminProp_Flags); + + test(strcmp(AuthData,"ZYXWVUTSRQPONMLKJIHGFEDCBA"),0); + test(strcmp(Password,"plop"),0); + test(Access,read_flags("a")); + test(Flags,read_flags("b")); + + admins_flush(); + + test(admins_num(),0); + + server_print("test complete, %d errors",errcount); +} \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/arraytest.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/arraytest.sma new file mode 100644 index 0000000..7a25973 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/arraytest.sma @@ -0,0 +1,459 @@ +#include <amxmodx> + + +new __testnumber; +new errcount; +new __testfunc[32]; +new __testfuncnum; + +enum TestType +{ + TT_Equal = 0, + TT_LessThan, + TT_GreaterThan, + TT_LessThanEqual, + TT_GreaterThanEqual, + TT_NotEqual +}; + +new TestWords[6][] = { + "==", + "<", + ">", + "<=", + ">=", + "!=" +}; + + + +stock test(A,B=0,TestType:Type=TT_Equal) +{ + ++__testnumber; + + new passed=0; + + switch (Type) + { + case TT_Equal: if (A==B) passed=1; + case TT_LessThan: if (A<B) passed=1; + case TT_GreaterThan: if (A>B) passed=1; + case TT_LessThanEqual: if (A<=B) passed=1; + case TT_GreaterThanEqual: if (A>=B) passed=1; + case TT_NotEqual: if (A!=B) passed=1; + } + + if (!passed) + { + log_amx("Failed test #%d (%d %s %d)",__testnumber,A,TestWords[_:Type],B); + errcount++; + } +} +stock starttests(const startfunc[]) +{ + __testnumber=0; + errcount=0; + __testfuncnum=1; + server_print("Starting tests..."); + formatex(__testfunc,sizeof(__testfunc)-1,"%s",startfunc); + + new func[32]; + formatex(func,sizeof(func)-1,"%s%d",__testfunc,__testfuncnum++); + set_task(0.1,func); +} + +stock showres() +{ + if (errcount==0) + { + new func[32]; + formatex(func,sizeof(func)-1,"%s%d",__testfunc,__testfuncnum++); + if (get_func_id(func)==-1) + { + server_print("All tests ok!"); + } + else + { + server_print("Test ok, moving on..."); + + set_task(0.1,func); + } + } + else + { + server_print("Test failed, aborting."); + } +} + + + +public plugin_init() +{ + register_srvcmd("arraytest","arraytest"); +} + +public arraytest() +{ + starttests("arraytest"); +} +public arraytest1() +{ + server_print("Testing 1000 iterations of 1-cell arrays..."); + + new Float:f; + new Array:a=ArrayCreate(1); + if (a == Invalid_Array) + { + } + for (new i=0; i<1000; i++) + { + f=float(i); + ArrayPushCell(a,f); + } + new Float:r; + for (new i=0; i<1000; i++) + { + f=float(i); + r=Float:ArrayGetCell(a, i); + + // This is normally bad for float "casting", but in this case it should be fine. + test(_:f, _:r); + + + // Reset with inversed values + new g=_:f; + g=~g; + + ArraySetCell(a, i, g); + + r=Float:ArrayGetCell(a,i); + + test(g, _:r); + + } + + ArrayDestroy(a); + + showres(); +} +stock bool:checkarray(const a[], const b[], size) +{ + while (size--) + { + if (a[size]!=b[size]) + { + return false; + } + } + + return true; +} +stock invarray(a[],size) +{ + while (size--) + { + a[size] = ~a[size]; + } + +} +public arraytest2() +{ + server_print("Testing 1000 iterations of 40-cell arrays..."); + + new Array:a=ArrayCreate(40); + new buff[40]; + new buffb[40]; + for (new i=0; i<1000; i++) + { + arrayset(buff,i,sizeof(buff)); + + ArrayPushArray(a, buff); + } + for (new i=0; i<1000; i++) + { + arrayset(buff, i, sizeof(buff)); + + ArrayGetArray(a, i, buffb); + + test(_:checkarray(buff,buffb,sizeof(buff)),1); + + // Now overwrite the array with inversed value + invarray(buff,sizeof(buff)); + + ArraySetArray(a, i, buff); + + ArrayGetArray(a, i, buffb); + + test(_:checkarray(buff,buffb,sizeof(buff)),1); + } + + ArrayDestroy(a); + + showres(); +} +public arraytest3() +{ + server_print("Testing 1000 iterations of strings..."); + + // The string is 10 long, the string we're trying to pass is 20 long. + + new Array:a=ArrayCreate(10); + + new buff[20]="1234567890abcdefghi"; + new buffb[20]; + + for (new i=0; i<1000; i++) + { + ArrayPushString(a, buff); + } + for (new i=0; i<1000; i++) + { + ArrayGetString(a, i, buffb, sizeof(buffb)-1); + + test(strcmp(buffb,"123456789"),0); + + ArraySetString(a, i, "9876543210"); + + ArrayGetString(a, i, buffb, sizeof(buffb)-1); + + test(strcmp(buffb,"987654321"),0); + + buffb[0]=0; + + formatex(buffb,sizeof(buffb)-1,"%S", ArrayGetStringHandle(a, i)); + + test(strcmp(buffb, "987654321"),0); + } + + ArrayDestroy(a); + + showres(); +} + +public sortcallback(Array:a, b, c) +{ + static stra[40]; + static strb[40]; + + ArrayGetString(a, b, stra, sizeof(stra)-1); + ArrayGetString(a, c, strb, sizeof(strb)-1); + return strcmp(stra,strb); +} +public arraytest4() +{ + server_print("Testing sorting function..."); + + new Array:a=ArrayCreate(40); + + ArrayPushString(a, "z"); + ArrayPushString(a, "yz"); + ArrayPushString(a, "xyz"); + ArrayPushString(a, "wxyz"); + ArrayPushString(a, "vwxyz"); + ArrayPushString(a, "uvwxyz"); + ArrayPushString(a, "tuvwxyz"); + ArrayPushString(a, "stuvwxyz"); + ArrayPushString(a, "rstuvwxyz"); + ArrayPushString(a, "qrstuvwxyz"); + ArrayPushString(a, "pqrstuvwxyz"); + ArrayPushString(a, "opqrstuvwxyz"); + ArrayPushString(a, "nopqrstuvwxyz"); + ArrayPushString(a, "mnopqrstuvwxyz"); + ArrayPushString(a, "lmnopqrstuvwxyz"); + ArrayPushString(a, "klmnopqrstuvwxyz"); + ArrayPushString(a, "jklmnopqrstuvwxyz"); + ArrayPushString(a, "ijklmnopqrstuvwxyz"); + ArrayPushString(a, "hijklmnopqrstuvwxyz"); + ArrayPushString(a, "ghijklmnopqrstuvwxyz"); + ArrayPushString(a, "fghijklmnopqrstuvwxyz"); + ArrayPushString(a, "efghijklmnopqrstuvwxyz"); + ArrayPushString(a, "defghijklmnopqrstuvwxyz"); + ArrayPushString(a, "cdefghijklmnopqrstuvwxyz"); + ArrayPushString(a, "bcdefghijklmnopqrstuvwxyz"); + ArrayPushString(a, "abcdefghijklmnopqrstuvwxyz"); + + new OldSize=ArraySize(a); + + ArraySort(a, "sortcallback"); + + test(ArraySize(a),OldSize); + + new buff[40]; + + ArrayGetString(a,0,buff,sizeof(buff)-1); + + test(strcmp(buff,"abcdefghijklmnopqrstuvwxyz"),0); + + ArrayGetString(a,25,buff,sizeof(buff)-1); + + test(strcmp(buff,"z"),0); + + + new start='a'; + + for (new i=0;i<OldSize;i++) + { + ArrayGetString(a,i,buff,sizeof(buff)-1) + + test(buff[0],start++); + } + + showres(); +} +public arraytest5() +{ + server_print("Testing ArrayDeleteItem()..."); + new Array:a=ArrayCreate(1); + + new v; + + for (new i=0; i<1000; i++) + { + ArrayPushCell(a, i); + } + for (new i=ArraySize(a) - 1; i>=0 ; i--) + { + if (i % 2 == 0) + { + ArrayDeleteItem(a, i); + } + } + test(ArraySize(a), 500); + for (new i=0; i< 500; i++) + { + v=ArrayGetCell(a, i); + + // All items should be incrementing odd numbers + test(((i + 1) * 2) - 1, v); + + // All remaining entries should be odd + test((v & 1), 1); + } + ArrayDestroy(a); + + a=ArrayCreate(1); + // Repeat the same test, but check even numbers + for (new i=0; i<1000; i++) + { + ArrayPushCell(a, i); + } + for (new i=ArraySize(a) - 1; i>=0 ; i--) + { + if (i % 2 == 1) + { + ArrayDeleteItem(a, i); + } + } + test(ArraySize(a), 500); + for (new i=0; i< 500; i++) + { + v=ArrayGetCell(a, i); + + // All items should be incrementing even numbers + test(((i + 1) * 2) - 2, v); + + // All remaining entries should be even + test((v & 1), 0); + } + ArrayDestroy(a); + + showres(); +} +public arraytest6() +{ + server_print("Testing ArrayInsertCellAfter()..."); + + new Array:a=ArrayCreate(1); + + for (new i=0; i<10;i++) + { + ArrayPushCell(a, i); + new item=ArraySize(a)-1; + for (new j=0; j<10; j++) + { + ArrayInsertCellAfter(a, item + j, j); + } + } + + test(ArraySize(a), 110); + + new v; + for (new i=0; i<110; i++) + { + v=ArrayGetCell(a, i); + + test(v, i / 10); + for (new j=0; j<10; j++) + { + v=ArrayGetCell(a, ++i); + test(v, j); + } + } + + + ArrayDestroy(a); + + showres(); +} +public arraytest7() +{ + server_print("Testing ArrayInsertCellBefore()..."); + + new Array:a=ArrayCreate(1); + + for (new i=0; i<10;i++) + { + ArrayPushCell(a, i); + new item=ArraySize(a)-1; + for (new j=0; j<10; j++) + { + ArrayInsertCellBefore(a, item, j); + } + } + + test(ArraySize(a), 110); + + new v; + for (new i=0; i<110; i++) + { + for (new j=9; j>=0; j--) + { + v=ArrayGetCell(a, i++); + test(v, j); + } + + v=ArrayGetCell(a, i); + + test(v, (i - 10) / 10); + } + + + ArrayDestroy(a); + + showres(); +} +public arraytest8() +{ + server_print("Testing ArraySwap()..."); + new Array:a=ArrayCreate(1); + + for (new i=0; i<10; i++) + { + ArrayPushCell(a, i); + } + for (new i=0; i<5; i++) + { + ArraySwap(a, i, (10 - (i + 1))); + } + new v; + for (new i=0; i<5; i++) + { + v=ArrayGetCell(a, i); + + test(v, (10 - (i + 1))); + } + + ArrayDestroy(a); + + showres(); +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/callfunc_test.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/callfunc_test.sma new file mode 100644 index 0000000..59f23b2 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/callfunc_test.sma @@ -0,0 +1,60 @@ +#include <amxmodx> + +public plugin_init() +{ + register_plugin("callfunc test", "1.0", "BAILOPAN") + + register_srvcmd("test_callfunc", "Command_Callfunc") +} + +public OnCallfuncReceived(num, str[], &val, array[], array2[], size, hello2[1]) +{ + server_print("num = %d (expected: %d)", num, 5) + server_print("str[] = ^"%s^" (expected: %s)", str, "Gaben") + + server_print("val = %d (expected %d, setting to %d)", val, 62, 15) + val = 15 + server_print("printing %d elements of array[] (expected: %d)", size, 6) + for (new i=0; i<size; i++) + { + server_print("array[%d] = %d (expected: %d)", i, array[i], i) + } + for (new i=0; i<size; i++) + { + server_print("array2[%d] = %d (expected: %d)", i, array[i], i) + } + array[0] = 5 + array2[1] = 6 + hello2[0] = 25 +} + +public Command_Callfunc() +{ + new a = 62 + new hello[] = {0,1,2,3,4,5} + new hello2[] = {9} + new pm = 6 + new err + + if ((err=callfunc_begin("OnCallfuncReceived")) < 1) + { + server_print("Failed to call callfunc_begin()! Error: %d", err) + + return PLUGIN_HANDLED + } + callfunc_push_int(5) + callfunc_push_str("Gaben") + callfunc_push_intrf(a) + callfunc_push_array(hello, pm) + callfunc_push_array(hello, pm) + callfunc_push_int(pm) + callfunc_push_array(hello2, 1, false) + callfunc_end() + + server_print("a = %d (expected: %d)", a, 15) + server_print("hello[0] = %d (expected: %d)", hello[0], 5) + server_print("hello[1] = %d (expected: %d)", hello[1], 6) + server_print("hello2[0] = %d (expected: %d)", hello2[0], 9) + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fakemeta_tests.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fakemeta_tests.sma new file mode 100644 index 0000000..ac6a704 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fakemeta_tests.sma @@ -0,0 +1,18 @@ +#include <amxmodx> +#include <fakemeta> + +public plugin_init() +{ + register_plugin("Fakemeta Tests", "1.0", "BAILOPAN") + register_forward(FM_ServerDeactivate, "Hook_ServerDeactivate") +} + +public Hook_ServerDeactivate() +{ + server_print("[FAKEMETA TEST] ServerDeactivate() at %f", get_gametime()) +} + +public plugin_end() +{ + server_print("[FAKEMETA TEST] plugin_end() at %f", get_gametime()) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fmttest.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fmttest.sma new file mode 100644 index 0000000..8b99abe --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fmttest.sma @@ -0,0 +1,58 @@ +#include <amxmodx> + +public plugin_init() +{ + register_plugin("Format Test", "1.0", "BAILOPAN") + + register_srvcmd("test_format", "Command_TestFormat") + register_srvcmd("test_replace", "Command_TestReplace") +} + +public gabprint(const fmt[], ...) +{ + static buffer[2048] + vformat(buffer, 2047, fmt, 2) + + server_print("%s", buffer) +} + +public Command_TestFormat() +{ + server_print("Printing -1 with d: %d", -1) + server_print("Printing -1 with u: %u", -1) + server_print("Printing (1<<31) with d: %d", (1<<31)) + server_print("Printing (1<<31) with u: %u", (1<<31)) + server_print("Printing 1 with d: %d", 1) + server_print("Printing 1 with u: %u", 1) +} + +public Command_TestReplace() +{ + new message[192] = "^"@test^"" + + replace_all(message, 191, "^"", "") + server_print("Got: %s (expected: %s)", message, "@test") + + copy(message, 191, "test") + replace_all(message, 191, "t", "tt") + server_print("Got: %s (expected: %s)", message, "ttestt") + + replace_all(message, 191, "tt", "") + server_print("Got: %s (expected: %s)", message, "es") + + copy(message, 191, "good boys do fine always") + replace_all(message, 191, " ", "-----") + server_print("Got %s (expected: %s)", message, "good-----boys-----do-----fine-----always") + + copy(message, 191, "-----") + replace_all(message, 191, "-", "") + server_print("Got ^"%s%^" (expected: ^"%s%^")", message, "") + + copy(message, 191, "-----") + replace_all(message, 191, "--", "") + server_print("Got ^"%s%^" (expected: ^"%s%^")", message, "-") + + copy(message, 191, "aaaa") + replace_all(message, 191, "a", "Aaa") + server_print("Got %s (expected: %s)", message, "AaaAaaAaaAaa") +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fwdtest1.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fwdtest1.sma new file mode 100644 index 0000000..636f896 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fwdtest1.sma @@ -0,0 +1,54 @@ +#include <amxmodx> + +new g_forward +new g_id + +public plugin_init() +{ + g_id = register_plugin("Foward Test (Master)", "1.0", "Belsebub") +} + +public plugin_natives() +{ + register_native("test_createforward", "test_createforward_handler") + register_native("test_executeforward", "test_executeforward_handler") +} + +//test_createforward(function[]) +public test_createforward_handler(pluginid, numparams) +{ + server_print("(test_createforward_handler: %d,%d)", pluginid, numparams) + + new function[32] + get_string(1, function, 31) + + if (g_forward > 0) + { + DestroyForward(g_forward) + } + + g_forward = CreateOneForward(pluginid, function) + if (g_forward < 0) + { + server_print("Failed to create forward!") + } +} + +//test_executeforward() +public test_executeforward_handler(pluginid, numparams) +{ + new retval + + server_print("(test_executeforward_handler: %d,%d)", pluginid, numparams) + + if (!ExecuteForward(g_forward, retval)) + { + server_print("failed to execute forward (I'm %d)", g_id) + } + + if (g_forward > 0) + { + DestroyForward(g_forward) + g_forward = -1 + } +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fwdtest2.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fwdtest2.sma new file mode 100644 index 0000000..5c01d84 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/fwdtest2.sma @@ -0,0 +1,25 @@ +#include <amxmodx> + +new g_id + +native test_createforward(function[]) +native test_executeforward() + +public plugin_init() +{ + g_id = register_plugin("Forward Test (Client)", "1.0", "Belsebub") + + register_srvcmd("fwd_test1", "Test_Forward1") +} + +public Test_Forward1() +{ + server_print("Executing forward ^"gaben^" (I'm %d)", g_id) + test_createforward("gaben") + test_executeforward() +} + +public gaben() +{ + server_print("gaben executed (I'm %d)", g_id) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/logtest.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/logtest.sma new file mode 100644 index 0000000..47df015 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/logtest.sma @@ -0,0 +1,45 @@ +#include <amxmodx> + +new g_BlockLog + +public plugin_init() +{ + register_plugin("Log Tester", "1.0", "BAILOPAN") + register_srvcmd("log_addlogevent", "Command_AddLogEvent") + register_srvcmd("log_setblock", "Command_LogSetBlock") +} + +public event_round_start() +{ + +} + +public Command_LogSetBlock() +{ + if (read_argc() < 2) + { + server_print("Specify 1 or 0.") + return PLUGIN_HANDLED + } + + new temp[12] + read_argv(1, temp, 11) + + g_BlockLog = str_to_num(temp) ? true : false + + return PLUGIN_HANDLED +} + +public plugin_log() +{ + server_print("Got log event! Blocking: %d", g_BlockLog) + + return g_BlockLog ? PLUGIN_HANDLED : PLUGIN_CONTINUE +} + +public Command_AddLogEvent(id) +{ + register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start") + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/menutest.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/menutest.sma new file mode 100644 index 0000000..97c292a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/menutest.sma @@ -0,0 +1,169 @@ +#include <amxmodx> + +public plugin_init() +{ + register_plugin("Menu Tests", "1.0", "BAILOPAN") + + register_clcmd("menu_test1", "Test_Menu1") + register_clcmd("menu_test2", "Test_Menu2") + register_clcmd("menu_test3", "Test_Menu3") + register_clcmd("menu_test4", "Test_Menu4") + register_clcmd("menu_test5", "Test_Menu5") +} + +public Test_Menu1(id, level, cid) +{ + new menu = menu_create("Character Upgrade:", "Test_Menu1_Handler") + menu_additem(menu, "Gabezilla 1", "1", 0) + menu_additem(menu, "Gabezilla 2", "2", 0) + menu_additem(menu, "Gabezilla 3", "3", 0) + menu_additem(menu, "Gabezilla 4", "4", 0) + menu_additem(menu, "Gabezilla 5", "5", 0) + menu_additem(menu, "Gabezilla 6", "6", 0) + menu_addblank(menu, 7) + menu_additem(menu, "Gabezilla 7", "7", 0) + menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER) + menu_display(id, menu, 0) + return PLUGIN_HANDLED +} + +public Test_Menu2(id, level, cid) +{ + new menu = menu_create("Character Upgrade:", "Test_Menu1_Handler") + menu_additem(menu, "Gabezilla 1", "1", 0) + menu_additem(menu, "Gabezilla 2", "2", 0) + menu_additem(menu, "Gabezilla 3", "3", 0) + menu_additem(menu, "Gabezilla 4", "4", 0) + menu_additem(menu, "Gabezilla 5", "5", 0) + menu_additem(menu, "Gabezilla 6", "6", 0) + menu_display(id, menu, 0) + return PLUGIN_HANDLED +} + +public Test_Menu1_Handler(id, menu, item) +{ + client_print(id, print_chat, "Menu (%d->%d): Chose %d", menu, id, item) + if (item == MENU_EXIT) + { + menu_destroy(menu) + return PLUGIN_HANDLED + } + + new cmd[32], name[32], access + + menu_item_getinfo(menu, item, access, cmd, 31, name, 31, access) + + client_print(id, print_chat, "Menu resolved to: %s (%s)", name, cmd) + + menu_destroy(menu) + + return PLUGIN_HANDLED +} + +public Test_Menu3(id) +{ + new mHandleID = menu_create("Test Menu 3", "Test_Menu3_Handler") + menu_additem(mHandleID, "test1", "1", 0) + menu_additem(mHandleID, "test2", "2", 0) + menu_additem(mHandleID, "test3", "3", 0) + menu_additem(mHandleID, "test4", "4", 0) + menu_additem(mHandleID, "test5", "5", 0) + menu_additem(mHandleID, "test6", "6", 0) + menu_additem(mHandleID, "test7", "7", 0) + menu_additem(mHandleID, "test8", "8", 0) + menu_additem(mHandleID, "test9", "9", 0) + menu_additem(mHandleID, "test10", "10", 0) + menu_additem(mHandleID, "test11", "11", 0) + menu_addblank(mHandleID, 1) // add blank got problem + menu_setprop(mHandleID, MPROP_PERPAGE, 5) + + menu_display(id, mHandleID, 0) + + return PLUGIN_HANDLED +} + +public Test_Menu3_Handler(id, menu, item) +{ + if (item == MENU_EXIT) + { + menu_destroy(menu) + return PLUGIN_HANDLED + } + + client_print(id, print_chat, "item = %d", item) + + menu_destroy(menu) + + return PLUGIN_HANDLED +} + +public Test_Menu4(id) +{ + new mHandleID = menu_create("Test Menu 4", "Test_Menu4_Handler") + menu_setprop(mHandleID, MPROP_PERPAGE, 0) + menu_additem(mHandleID, "test1", "1", 0) + menu_additem(mHandleID, "test2", "2", 0) + menu_additem(mHandleID, "test3", "3", 0) + menu_additem(mHandleID, "test4", "4", 0) + menu_additem(mHandleID, "test5", "5", 0) + menu_additem(mHandleID, "test6", "6", 0) + menu_additem(mHandleID, "test7", "7", 0) + menu_additem(mHandleID, "test8", "8", 0) + menu_additem(mHandleID, "test9", "9", 0) + + menu_display(id, mHandleID, 0) + + return PLUGIN_HANDLED +} + +public Test_Menu4_Handler(id, menu, item) +{ + if (item == MENU_EXIT) + { + menu_destroy(menu) + return PLUGIN_HANDLED + } + + client_print(id, print_chat, "item = %d", item) + + menu_destroy(menu) + + return PLUGIN_HANDLED +} + +public Test_Menu5(id) +{ + new mHandleID = menu_create("Test Menu 5", "Test_Menu5_Handler") + menu_additem(mHandleID, "test1", "1", 0) + menu_additem(mHandleID, "test2", "2", 0) + menu_additem(mHandleID, "test3", "3", 0) + menu_additem(mHandleID, "test4", "4", 0) + menu_additem(mHandleID, "test5", "5", 0) + menu_additem(mHandleID, "test6", "6", 0) + menu_additem(mHandleID, "test7", "7", 0) + menu_additem(mHandleID, "test8", "8", 0) + menu_additem(mHandleID, "test9", "9", 0) + menu_additem(mHandleID, "test10", "10", 0) + menu_additem(mHandleID, "test11", "11", 0) + menu_addblank(mHandleID, 1) // add blank got problem + menu_setprop(mHandleID, MPROP_EXIT, MEXIT_NEVER) + + menu_display(id, mHandleID, 0) + + return PLUGIN_HANDLED +} + +public Test_Menu5_Handler(id, menu, item) +{ + if (item == MENU_EXIT) + { + menu_destroy(menu) + return PLUGIN_HANDLED + } + + client_print(id, print_chat, "item = %d", item) + + menu_destroy(menu) + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/native_test.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/native_test.sma new file mode 100644 index 0000000..fbce7c4 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/native_test.sma @@ -0,0 +1,31 @@ +#include <amxmodx> + +native Factorial(num) + +public __Factorial(id, num) +{ + new num = get_param(1) + if (num == 0) + { + return 1 + } + + return num * Factorial(num - 1) +} + +public plugin_natives() +{ + register_native("Factorial", "__Factorial") +} + +public plugin_init() +{ + register_plugin("Native Test", "1.0", "BAILOPAN") + register_srvcmd("test_native1", "Command_TestNative1") +} + +public Command_TestNative1() +{ + new num = Factorial(6) + server_print("Factorial of 6 is: %d", num) +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/nvault_test.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/nvault_test.sma new file mode 100644 index 0000000..bf665d8 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/nvault_test.sma @@ -0,0 +1,20 @@ +#include <amxmodx> +#include <nvault> + +public plugin_init() +{ + register_plugin("nVault Test", "1.0", "BAILOPAN") + + register_srvcmd("test_nvault", "Command_TestNvault") +} + +public Command_TestNvault() +{ + new v = nvault_open("://:/1/R!?#@41345$%:$") + server_print("Vault value: %d (expected: %d)", v, -1) + + if (v != -1) + { + nvault_close(v) + } +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sorttest.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sorttest.sma new file mode 100644 index 0000000..9c99f3d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sorttest.sma @@ -0,0 +1,153 @@ +#include <amxmodx> + +public plugin_init() +{ + register_plugin("Sort Test", "1.0", "BAILOPAN") + + register_srvcmd("test_sort_ints", "Command_TestSortInts") + register_srvcmd("test_sort_floats", "Command_TestSortFloats") + register_srvcmd("test_sort_strings", "Command_TestSortStrings") + register_srvcmd("test_sort_1d", "Command_TestSort1D") + register_srvcmd("test_sort_2d", "Command_TestSort2D") +} + +/***************** + * INTEGER TESTS * + *****************/ +// Note that integer comparison is just int1-int2 (or a variation therein) + +PrintIntegers(const array[], size) +{ + for (new i=0; i<size; i++) + { + server_print("array[%d] = %d", i, array[i]) + } +} + +public Command_TestSortInts() +{ + new array[10] = {6, 7, 3, 2, 8, 5, 0, 1, 4, 9} + + server_print("Testing ascending sort:") + SortIntegers(array, 10, Sort_Ascending) + PrintIntegers(array, 10) + + server_print("Testing descending sort:") + SortIntegers(array, 10, Sort_Descending) + PrintIntegers(array, 10) +} + +/************************** + * Float comparison tests * + **************************/ + +PrintFloats(const Float:array[], size) +{ + for (new i=0; i<size; i++) + { + server_print("array[%d] = %f", i, array[i]) + } +} + +public Command_TestSortFloats() +{ + new Float:array[10] = {6.3, 7.6, 3.2, 2.1, 8.5, 5.2, 0.4, 1.7, 4.8, 8.2} + + server_print("Testing ascending sort:") + SortFloats(array, 10, Sort_Ascending) + PrintFloats(array, 10) + + server_print("Testing descending sort:") + SortFloats(array, 10, Sort_Descending) + PrintFloats(array, 10) + + return PLUGIN_HANDLED +} + +public Custom1DSort(Float:elem1, Float:elem2) +{ + if (elem1 > elem2) + { + return -1; + } else if (elem1 < elem2) { + return 1; + } + + return 0; +} + +public Command_TestSort1D() +{ + new Float:array[10] = {6.3, 7.6, 3.2, 2.1, 8.5, 5.2, 0.4, 1.7, 4.8, 8.2} + + SortCustom1D(_:array, 10, "Custom1DSort") + PrintFloats(array, 10) + + return PLUGIN_HANDLED +} + +/*************************** + * String comparison tests * + ***************************/ + +PrintStrings(const array[][], size) +{ + for (new i=0; i<size; i++) + { + server_print("array[%d] = %s", i, array[i]) + } +} + +public Command_TestSortStrings() +{ + new array[][] = + { + "faluco", + "bailopan", + "pm onoto", + "damaged soul", + "sniperbeamer", + "sidluke", + "johnny got his gun", + "gabe newell", + "hello", + "WHAT?!" + } + + server_print("Testing ascending sort:") + SortStrings(array, 10, Sort_Ascending) + PrintStrings(array, 10) + + server_print("Testing descending sort:") + SortStrings(array, 10, Sort_Descending) + PrintStrings(array, 10) + + return PLUGIN_HANDLED +} + +public Custom2DSort(const elem1[], const elem2[]) +{ + return strcmp(elem1, elem2) +} + +public Command_TestSort2D() +{ + new array[][] = + { + "faluco", + "bailopan", + "pm onoto", + "damaged soul", + "sniperbeamer", + "sidluke", + "johnny got his gun", + "gabe newell", + "hello", + "WHAT?!" + } + + SortCustom2D(array, 10, "Custom2DSort") + PrintStrings(array, 10) + + return PLUGIN_HANDLED +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sma new file mode 100644 index 0000000..f0367a7 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sma @@ -0,0 +1,412 @@ +#include <amxmodx> +#include <amxmisc> +#include <dbi> +#include <sqlx> + +new Handle:g_DbInfo +new g_QueryNum +new bool:g_TestEnd = false + +public plugin_init() +{ + register_plugin("SQLX Test", "1.0", "BAILOPAN") + register_srvcmd("sqlx_test_normal", "SqlxTest_Normal") + register_srvcmd("sqlx_test_thread", "SqlxTest_Thread") + register_srvcmd("sqlx_test_proc", "SqlxTest_Proc") + register_srvcmd("sqlx_test_old1", "SqlxTest_Old1") + register_srvcmd("sqlx_test_old2", "SqlxTest_Old2") + register_srvcmd("sqlx_test_thread_end", "SqlxTest_ThreadEnd") + register_srvcmd("sqlx_test_bad", "SqlxTest_Bad") + register_srvcmd("sqlx_test_quote", "SqlxTest_Quote") + register_srvcmd("sqlx_test_affinity", "SqlxTest_Affinity") + + new configsDir[64] + get_configsdir(configsDir, 63) + + server_cmd("exec %s/sql.cfg", configsDir) + + set_task(2.0, "start_map") +} + +DoBasicInfo(affinities=0) +{ + new type[12] + new affinity[12] + new wanted_type[12] + + dbi_type(type, 11) + + server_print("DBI type: %s", type) + + if (!affinities) + return + + SQL_GetAffinity(affinity, 11); + server_print("SQLX Affinity: %s", affinity) + + get_cvar_string("amx_sql_type", wanted_type, 11) + if (!equal(wanted_type, affinity)) + { + if (g_DbInfo) + { + SQL_FreeHandle(g_DbInfo) + g_DbInfo = Empty_Handle + } + new res = SQL_SetAffinity(wanted_type) + server_print("Setting affinity from %s to %s: %s", + affinity, + wanted_type, + res ? "Success" : "Failed") + SQL_GetAffinity(affinity, 11) + start_map() + server_print("Verification: %s", affinity) + } +} + +public start_map() +{ + new host[64] + new user[64] + new pass[64] + new db[64] + + get_cvar_string("amx_sql_host", host, 63) + get_cvar_string("amx_sql_user", user, 63) + get_cvar_string("amx_sql_pass", pass, 63) + get_cvar_string("amx_sql_db", db, 63) + + g_DbInfo = SQL_MakeDbTuple(host, user, pass, db) +} + +public SqlxTest_Bad() +{ + new errnum, error[255] + new Handle:tempinfo = SQL_MakeDbTuple("1.2.3.4", "asdf", "gasdf", "gaben", 2) + new Handle:db = SQL_Connect(tempinfo, errnum, error, 254) + + if (db == Empty_Handle) + { + server_print(" --> Errored out! %d, %s", errnum, error) + } else { + server_print(" --> Something is wrong here.") + } + + return PLUGIN_HANDLED +} + +/** + * Note that this function works for both threaded and non-threaded queries. + */ +PrintQueryData(Handle:query) +{ + new columns = SQL_NumColumns(query) + new rows = SQL_NumResults(query) + static querystring[2048] + + SQL_GetQueryString(query, querystring, 2047) + + server_print("Original query string: %s", querystring) + server_print("Query columns: %d rows: %d", columns, rows) + + new num + new row + new str[32] + new cols[2][32] + SQL_FieldNumToName(query, 0, cols[0], 31) + SQL_FieldNumToName(query, 1, cols[1], 31) + while (SQL_MoreResults(query)) + { + num = SQL_ReadResult(query, 0) + SQL_ReadResult(query, 1, str, 31) + server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str) + SQL_NextRow(query) + row++ + } +} + +/** + * Handler for when a threaded query is resolved. + */ +public GetMyStuff(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime) +{ + server_print(" --> Resolved query %d, took %f seconds", data[0], queuetime) + if (failstate) + { + if (failstate == TQUERY_CONNECT_FAILED) + { + server_print(" --> Connection failed!") + } else if (failstate == TQUERY_QUERY_FAILED) { + server_print(" --> Query failed!") + } + server_print(" --> Error code: %d (Message: ^"%s^")", errnum, error) + + new querystring[1024] + SQL_GetQueryString(query, querystring, 1023) + server_print(" --> Original query: %s", querystring) + } else { + PrintQueryData(query) + } +} + +public SqlxTest_Affinity() +{ + server_print("[Access Manager] try SetAffinity to sqlite"); + SQL_SetAffinity("sqlite"); + server_print("[Access Manager] try SetAffinity to mysql"); + SQL_SetAffinity("mysql"); + server_print("[Access Manager] try SetAffinity to sqlite again"); + SQL_SetAffinity("sqlite"); +} + +/** + * Starts a threaded query. + */ +public SqlxTest_Thread() +{ + new query[512] + new data[1] + + data[0] = g_QueryNum + format(query, 511, "SELECT * FROM gaben") + + DoBasicInfo(1) + + server_print("Adding to %d queue at: %f", g_QueryNum, get_gametime()) + SQL_ThreadQuery(g_DbInfo, "GetMyStuff", query, data, 1) + + g_QueryNum++ +} + +/** + * Tests string quoting + */ +public SqlxTest_Quote() +{ + DoBasicInfo(1) + + new errno, error[255] + + new Handle:db = SQL_Connect(g_DbInfo, errno, error, sizeof(error)-1) + if (!db) + { + server_print("Query failure: [%d] %s", errno, error) + return + } + + new buffer[500], num + num = SQL_QuoteString(db, buffer, sizeof(buffer)-1, "Hi y'all! C\lam") + + server_print("num: %d str: %s", num, buffer) + + SQL_FreeHandle(db) +} + +public SqlxTest_Proc() +{ + new errnum, error[255] + + DoBasicInfo(1) + + new Handle:db = SQL_Connect(g_DbInfo, errnum, error, 254) + if (!db) + { + server_print("Query failure: [%d] %s", errnum, error) + return + } + + new Handle:query = SQL_PrepareQuery(db, "CALL ExampleProc()") + if (!SQL_Execute(query)) + { + errnum = SQL_QueryError(query, error, 254) + server_print("Query failure: [%d] %s", errnum, error) + SQL_FreeHandle(query) + SQL_FreeHandle(db) + return + } + + PrintQueryData(query) + + server_print("Next result: %d", SQL_NextResultSet(query)); + + PrintQueryData(query) + + SQL_FreeHandle(query) + SQL_FreeHandle(db) +} + +/** + * Does a normal query. + */ +public SqlxTest_Normal() +{ + new errnum, error[255] + + DoBasicInfo(1) + + new Handle:db = SQL_Connect(g_DbInfo, errnum, error, 254) + if (!db) + { + server_print("Query failure: [%d] %s", errnum, error) + return + } + + new Handle:query = SQL_PrepareQuery(db, "SELECT * FROM gaben") + if (!SQL_Execute(query)) + { + errnum = SQL_QueryError(query, error, 254) + server_print("Query failure: [%d] %s", errnum, error) + SQL_FreeHandle(query) + SQL_FreeHandle(db) + return + } + + PrintQueryData(query) + + server_print("Next result: %d", SQL_NextResultSet(query)); + + SQL_FreeHandle(query) + SQL_FreeHandle(db) +} + +/** + * Wrapper for an old-style connection. + */ +Sql:OldInitDatabase() +{ + new host[64] + new user[64] + new pass[64] + new db[64] + + get_cvar_string("amx_sql_host", host, 63) + get_cvar_string("amx_sql_user", user, 63) + get_cvar_string("amx_sql_pass", pass, 63) + get_cvar_string("amx_sql_db", db, 63) + + new error[255] + new Sql:sql = dbi_connect(host, user, pass, db, error, 254) + if (sql < SQL_OK) + { + server_print("Connection failure: %s", error) + return SQL_FAILED + } + + return sql +} + +/** + * Tests index-based lookup + */ +public SqlxTest_Old1() +{ + DoBasicInfo() + new Sql:sql = OldInitDatabase() + if (sql < SQL_OK) + return + + new Result:res = dbi_query(sql, "SELECT * FROM gaben") + + if (res == RESULT_FAILED) + { + new error[255] + new code = dbi_error(sql, error, 254) + server_print("Result failed! [%d]: %s", code, error) + } else if (res == RESULT_NONE) { + server_print("No result set returned.") + } else { + new cols[2][32] + new str[32] + new row, num + new rows = dbi_num_rows(res) + new columns = dbi_num_fields(res) + + dbi_field_name(res, 1, cols[0], 31) + dbi_field_name(res, 2, cols[1], 31) + server_print("Query columns: %d rows: %d", columns, rows) + while (dbi_nextrow(res) > 0) + { + num = dbi_field(res, 1) + dbi_field(res, 2, str, 31) + server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str) + row++ + } + dbi_free_result(res) + } + + dbi_close(sql) +} + + +/** + * Tests name-based lookup + */ +public SqlxTest_Old2() +{ + DoBasicInfo() + new Sql:sql = OldInitDatabase() + if (sql < SQL_OK) + return + + new Result:res = dbi_query(sql, "SELECT * FROM gaben") + + if (res == RESULT_FAILED) + { + new error[255] + new code = dbi_error(sql, error, 254) + server_print("Result failed! [%d]: %s", code, error) + } else if (res == RESULT_NONE) { + server_print("No result set returned.") + } else { + new cols[2][32] + new str[32] + new row, num + new rows = dbi_num_rows(res) + new columns = dbi_num_fields(res) + + dbi_field_name(res, 1, cols[0], 31) + dbi_field_name(res, 2, cols[1], 31) + server_print("Query columns: %d rows: %d", columns, rows) + while (dbi_nextrow(res) > 0) + { + num = dbi_result(res, cols[0]) + dbi_result(res, cols[1], str, 31) + server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str) + row++ + } + dbi_free_result(res) + } + + dbi_close(sql) +} + +public SqlxTest_ThreadEnd() +{ + if (read_argc() < 2) + { + server_print("Requires mapname!") + } else { + new mapname[64] + + read_argv(1, mapname, 63) + if (!is_map_valid(mapname)) + { + server_print("Invalid map: %s", mapname) + } else { + g_TestEnd = true + server_cmd("changelevel %s", mapname) + } + } + + return PLUGIN_HANDLED +} + + +public plugin_end() +{ + if (g_TestEnd) + { + SqlxTest_Thread() + } else { + SQL_FreeHandle(g_DbInfo) + } +} diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sq3 b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sq3 new file mode 100644 index 0000000..adba612 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sq3 differ diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sql b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sql new file mode 100644 index 0000000..bf22025 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/sqlxtest.sql @@ -0,0 +1,8 @@ + + +CREATE TABLE gaben (gaben int primary key, fat varchar(32)); + +INSERT INTO gaben VALUES(1, 'what the'); +INSERT INTO gaben VALUES(2, 'Bee''s Knees!'); +INSERT INTO gaben VALUES(3, 'newell'); +INSERT INTO gaben VALUES(4, 'CRAB CAKE.'); diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/trietest.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/trietest.sma new file mode 100644 index 0000000..42f122a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/testsuite/trietest.sma @@ -0,0 +1,169 @@ +#include <amxmodx> + + +// These natives are only available in a debug build of amxmodx +native TrieFreeCount(); +native TrieMallocCount(); + +new failcount = 0; +new passcount = 0; +public plugin_init() +{ + register_plugin("Trie Test", AMXX_VERSION_STR, "AMXX Dev Team"); + register_srvcmd("trietest", "trietest"); +} + +stock fail(const testname[]) +{ + server_print("[FAIL] %s", testname); + + failcount++; +} +stock pass(const testname[]) +{ + server_print("[PASS] %s", testname); + + passcount++; +} +stock done() +{ + server_print("Finished. %d tests, %d failed", failcount + passcount, failcount); +} +stock check_frees() +{ + if (TrieMallocCount() != TrieFreeCount()) + fail("free count == malloc count"); + + else + pass("free count == malloc count"); + + server_print("malloc count: %d free count: %d", TrieMallocCount(), TrieFreeCount()); +} +public trietest() +{ + failcount = 0; + passcount = 0; + + new bool:ok = true; + new Trie:t = TrieCreate(); + + new Trie:oldhandle = t; // Makes sure that the trie handle system recycles old handles + + new key[32]; + for (new i = 0; i < 100; i++) + { + formatex(key, charsmax(key), "K%dK", i); + TrieSetCell(t, key, i); + } + + for (new i = 0; i < 100; i++) + { + formatex(key, charsmax(key), "K%dK", i); + new val; + if (!TrieGetCell(t, key, val)) + { + server_print("TrieGetCell(%d, '%s', %d) failed", t, key, val); + ok = false; + } + + else if (val != i) + { + server_print("val mismatch, expected: %d got: %d", i, val); + ok = false; + } + + } + if (ok) + pass("Cell tests"); + + else + fail("Cell tests"); + + TrieClear(t); + TrieDestroy(t); + + t = TrieCreate(); + + if (t == oldhandle) + pass("Recycle handles"); + + else + fail("Recycle handles"); + + ok = true; + for (new i = 0; i < 100; i++) + { + static val[32]; + formatex(key, charsmax(key), "K%dK", i); + formatex(val, charsmax(val), "V%dV", i); + TrieSetString(t, key, val); + } + + for (new i = 0; i < 100; i++) + { + formatex(key, charsmax(key), "K%dK", i); + static val[32]; + static exp[32]; + formatex(exp, charsmax(exp), "V%dV", i); + if (!TrieGetString(t, key, val, charsmax(val))) + { + server_print("TrieGetString(%d, '%s', %s) failed", t, key, val); + ok = false; + } + + else if (!equal(val, exp)) + { + server_print("val mismatch, key: '%s' expected: '%s' got: '%s'", key, exp, val); + ok = false; + } + + } + if (ok) + pass("String tests"); + + else + fail("String tests"); + + TrieDestroy(t); + + check_frees(); + + t = TrieCreate(); + ok = true; + for (new i = 0; i < 1000; i++) + { + formatex(key, charsmax(key), "!%d!", i); + TrieSetString(t, key, key); + } + for (new i = 0; i < 1000; i++) + { + formatex(key, charsmax(key), "!%d!", i); + + if (!TrieKeyExists(t, key)) + { + ok = false; + server_print("Key '%s' does not exist", key); + } + else + { + if (!TrieDeleteKey(t, key)) + { + server_print("Key '%s' could not be deleted", key); + ok = false; + } + } + } + if (ok) + pass("Exists/Delete"); + + else + fail("Exists/Delete"); + + check_frees(); + TrieClear(t); + TrieDestroy(t); + check_frees(); + done(); + +} + diff --git a/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/timeleft.sma b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/timeleft.sma new file mode 100644 index 0000000..2825521 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/amxmodx/scripting/timeleft.sma @@ -0,0 +1,274 @@ +/* AMX Mod X +* TimeLeft Plugin +* +* by the AMX Mod X Development Team +* originally developed by OLO +* +* This file is part of AMX Mod X. +* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +*/ + +#include <amxmodx> + +new g_TimeSet[32][2] +new g_LastTime +new g_CountDown +new g_Switch + +public plugin_init() +{ + register_plugin("TimeLeft", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("timeleft.txt") + register_cvar("amx_time_voice", "1") + register_srvcmd("amx_time_display", "setDisplaying") + register_cvar("amx_timeleft", "00:00", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) + register_clcmd("say timeleft", "sayTimeLeft", 0, "- displays timeleft") + register_clcmd("say thetime", "sayTheTime", 0, "- displays current time") + + set_task(0.8, "timeRemain", 8648458, "", 0, "b") +} + +public sayTheTime(id) +{ + if (get_cvar_num("amx_time_voice")) + { + new mhours[6], mmins[6], whours[32], wmins[32], wpm[6] + + get_time("%H", mhours, 5) + get_time("%M", mmins, 5) + + new mins = str_to_num(mmins) + new hrs = str_to_num(mhours) + + if (mins) + num_to_word(mins, wmins, 31) + else + wmins[0] = 0 + + if (hrs < 12) + wpm = "am " + else + { + if (hrs > 12) hrs -= 12 + wpm = "pm " + } + + if (hrs) + num_to_word(hrs, whours, 31) + else + whours = "twelve " + + client_cmd(id, "spk ^"fvox/time_is_now %s_period %s%s^"", whours, wmins, wpm) + } + + new ctime[64] + + get_time("%m/%d/%Y - %H:%M:%S", ctime, 63) + client_print(0, print_chat, "%L: %s", LANG_PLAYER, "THE_TIME", ctime) + + return PLUGIN_CONTINUE +} + +public sayTimeLeft(id) +{ + if (get_cvar_float("mp_timelimit")) + { + new a = get_timeleft() + + if (get_cvar_num("amx_time_voice")) + { + new svoice[128] + setTimeVoice(svoice, 127, 0, a) + client_cmd(id, "%s", svoice) + } + client_print(0, print_chat, "%L: %d:%02d", LANG_PLAYER, "TIME_LEFT", (a / 60), (a % 60)) + } + else + client_print(0, print_chat, "%L", LANG_PLAYER, "NO_T_LIMIT") + + return PLUGIN_CONTINUE +} + +setTimeText(text[], len, tmlf, id) +{ + new secs = tmlf % 60 + new mins = tmlf / 60 + + if (secs == 0) + format(text, len, "%d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE") + else if (mins == 0) + format(text, len, "%d %L", secs, id, (secs > 1) ? "SECONDS" : "SECOND") + else + format(text, len, "%d %L %d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE", secs, id, (secs > 1) ? "SECONDS" : "SECOND") +} + +setTimeVoice(text[], len, flags, tmlf) +{ + new temp[7][32] + new secs = tmlf % 60 + new mins = tmlf / 60 + + for (new a = 0;a < 7;++a) + temp[a][0] = 0 + + if (secs > 0) + { + num_to_word(secs, temp[4], 31) + + if (!(flags & 8)) + temp[5] = "seconds " /* there is no "second" in default hl */ + } + + if (mins > 59) + { + new hours = mins / 60 + + num_to_word(hours, temp[0], 31) + + if (!(flags & 8)) + temp[1] = "hours " + + mins = mins % 60 + } + + if (mins > 0) + { + num_to_word(mins, temp[2], 31) + + if (!(flags & 8)) + temp[3] = "minutes " + } + + if (!(flags & 4)) + temp[6] = "remaining " + + return format(text, len, "spk ^"vox/%s%s%s%s%s%s%s^"", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], temp[6]) +} + +findDispFormat(time) +{ + for (new i = 0; g_TimeSet[i][0]; ++i) + { + if (g_TimeSet[i][1] & 16) + { + if (g_TimeSet[i][0] > time) + { + if (!g_Switch) + { + g_CountDown = g_Switch = time + remove_task(8648458) + set_task(1.0, "timeRemain", 34543, "", 0, "b") + } + + return i + } + } + else if (g_TimeSet[i][0] == time) + { + return i + } + } + + return -1 +} + +public setDisplaying() +{ + new arg[32], flags[32], num[32] + new argc = read_argc() - 1 + new i = 0 + + while (i < argc && i < 32) + { + read_argv(i + 1, arg, 31) + parse(arg, flags, 31, num, 31) + + g_TimeSet[i][0] = str_to_num(num) + g_TimeSet[i][1] = read_flags(flags) + + i++ + } + g_TimeSet[i][0] = 0 + + return PLUGIN_HANDLED +} + +public timeRemain(param[]) +{ + new gmtm = get_timeleft() + new tmlf = g_Switch ? --g_CountDown : gmtm + new stimel[12] + + format(stimel, 11, "%02d:%02d", gmtm / 60, gmtm % 60) + set_cvar_string("amx_timeleft", stimel) + + if (g_Switch && gmtm > g_Switch) + { + remove_task(34543) + g_Switch = 0 + set_task(0.8, "timeRemain", 8648458, "", 0, "b") + + return + } + + if (tmlf > 0 && g_LastTime != tmlf) + { + g_LastTime = tmlf + new tm_set = findDispFormat(tmlf) + + if (tm_set != -1) + { + new flags = g_TimeSet[tm_set][1] + new arg[128] + + if (flags & 1) + { + new players[32], pnum + + get_players(players, pnum, "c") + + for (new i = 0; i < pnum; i++) + { + setTimeText(arg, 127, tmlf, players[i]) + + if (flags & 16) + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 1.1, 0.1, 0.5, -1) + else + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 3.0, 0.0, 0.5, -1) + + show_hudmessage(players[i], "%s", arg) + } + } + + if (flags & 2) + { + setTimeVoice(arg, 127, flags, tmlf) + client_cmd(0, "%s", arg) + } + } + } +} \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/addons/metamod/dlls/metamod.so b/src/csserver/serverfiles/cstrike/addons/metamod/dlls/metamod.so new file mode 100644 index 0000000..a964265 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/metamod/dlls/metamod.so differ diff --git a/src/csserver/serverfiles/cstrike/addons/metamod/plugins.ini b/src/csserver/serverfiles/cstrike/addons/metamod/plugins.ini new file mode 100644 index 0000000..7bcc9dd --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/metamod/plugins.ini @@ -0,0 +1,2 @@ +linux addons/amxmodx/dlls/amxmodx_mm_i386.so +linux addons/semiclip/semiclip_mm_i386.so diff --git a/src/csserver/serverfiles/cstrike/addons/semiclip/config.ini b/src/csserver/serverfiles/cstrike/addons/semiclip/config.ini new file mode 100644 index 0000000..1d514eb --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/semiclip/config.ini @@ -0,0 +1,29 @@ +# Description +# +# semiclip 0|1 disable/enable semiclip +# team 0|1|2|3 +# - 0 Semiclip works for all +# - 1 Semiclip works only for Terrorists +# - 2 Semiclip works only for Counter-Terrorists +# - 3 Semiclip works only for teammates. +# +# time 0|60 How many time in seconds semiclip will work from the beginning of the round. 0 for all time. +# patch 0|1 Fix jamming on a mobile platform. (A global problem on DeathrunMod) +# crouch 0|1 Allows jump to crouching players when semiclip works. +# effects 0|1 Effect of transparency of the player. Depends from distance between players. +# flashfix 0|1 Fix flashing throw transparent players +# noteamflash 0|1 Teammates blocking flashing +# distance 0|200 At what distance player can have transparency and semiclip. +# transparency 0|255 transparency of the player. +# + +semiclip = 1; +team = 3; +time = 0; +patch = 0; +crouch = 1; +effects = 0; +flashfix = 1; +noteamflash = 0; +distance = 50; +transparency = 120; diff --git a/src/csserver/serverfiles/cstrike/addons/semiclip/maps/_de_dust2.ini b/src/csserver/serverfiles/cstrike/addons/semiclip/maps/_de_dust2.ini new file mode 100644 index 0000000..eba5ad3 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/semiclip/maps/_de_dust2.ini @@ -0,0 +1,10 @@ +/* + * Settings semiclip to map + * + * Example name configuration: .../semiclip/maps/mapname.ini + * Example settings: + * +*/ + +time = 3 +noteamflash = 0 \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/addons/semiclip/maps/_prefix_de.ini b/src/csserver/serverfiles/cstrike/addons/semiclip/maps/_prefix_de.ini new file mode 100644 index 0000000..d81b09e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/addons/semiclip/maps/_prefix_de.ini @@ -0,0 +1,10 @@ +/* + * Settings semiclip to map + * + * Example name configuration: .../semiclip/maps/prefix_*.ini + * Example settings: + * +*/ + +time = 3 +noteamflash = 0 \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/addons/semiclip/semiclip.dll b/src/csserver/serverfiles/cstrike/addons/semiclip/semiclip.dll new file mode 100644 index 0000000..9f4b471 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/semiclip/semiclip.dll differ diff --git a/src/csserver/serverfiles/cstrike/addons/semiclip/semiclip_mm_i386.so b/src/csserver/serverfiles/cstrike/addons/semiclip/semiclip_mm_i386.so new file mode 100644 index 0000000..9e61249 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/addons/semiclip/semiclip_mm_i386.so differ diff --git a/src/csserver/serverfiles/cstrike/aim_xqus.wad b/src/csserver/serverfiles/cstrike/aim_xqus.wad new file mode 100644 index 0000000..a357540 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/aim_xqus.wad differ diff --git a/src/csserver/serverfiles/cstrike/bastardonio.wad b/src/csserver/serverfiles/cstrike/bastardonio.wad new file mode 100644 index 0000000..6ec472d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/bastardonio.wad differ diff --git a/src/csserver/serverfiles/cstrike/bjchristmas.wad b/src/csserver/serverfiles/cstrike/bjchristmas.wad new file mode 100644 index 0000000..9e92f69 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/bjchristmas.wad differ diff --git a/src/csserver/serverfiles/cstrike/cm_organicwad.wad b/src/csserver/serverfiles/cstrike/cm_organicwad.wad new file mode 100644 index 0000000..44c0598 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/cm_organicwad.wad differ diff --git a/src/csserver/serverfiles/cstrike/csserver.cfg b/src/csserver/serverfiles/cstrike/csserver.cfg new file mode 100644 index 0000000..587216e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/csserver.cfg @@ -0,0 +1,48 @@ +// Hostname for server. +hostname "PEWPEW 1000FPS Funmaps only + FASTDL" + +// RCON - remote console password. +rcon_password "foobar" + +// Server password - for private servers. +sv_password "" + +// Server Logging +log on +sv_logbans 1 +sv_logecho 1 +sv_logfile 1 +sv_log_onefile 0 + +mp_timelimit 15 +sv_maxspeed 320 +sv_cheats 0 +allow_spectators 1 +pausable 0 +mp_autoteambalance 0 +mp_chattime 0 +mp_autokick 0 +mp_buytime 0.5 +mp_c4timer 35 +mp_forcecamera 0 +mp_friendlyfire 0 +mp_freezetime 0 +sv_aim 0 +sv_timeout 65 +sv_maxunlag 1 +sv_voiceenable 1 +mp_consistency 0 +mp_hostagepenalty 0 + +sv_lan 0 +sv_maxrate 100000 +sv_minrate 70000 +sv_maxupdaterate 101 +sv_minupdaterate 60 +sys_ticrate 1000 +sv_unlag 1 +sv_region 3 +sys_ticrate 1000 +sv_allowdownload 1 +sv_allowupload 1 +sv_downloadurl "https://dl.ardestani.org/cstrike" diff --git a/src/csserver/serverfiles/cstrike/de_vegas.wad b/src/csserver/serverfiles/cstrike/de_vegas.wad new file mode 100644 index 0000000..7886ffd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/de_vegas.wad differ diff --git a/src/csserver/serverfiles/cstrike/gamba.wad b/src/csserver/serverfiles/cstrike/gamba.wad new file mode 100644 index 0000000..7e6169d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/gamba.wad differ diff --git a/src/csserver/serverfiles/cstrike/hl2textures.wad b/src/csserver/serverfiles/cstrike/hl2textures.wad new file mode 100644 index 0000000..39e724e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/hl2textures.wad differ diff --git a/src/csserver/serverfiles/cstrike/jos.wad b/src/csserver/serverfiles/cstrike/jos.wad new file mode 100644 index 0000000..c700bd6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/jos.wad differ diff --git a/src/csserver/serverfiles/cstrike/liblist.gam b/src/csserver/serverfiles/cstrike/liblist.gam new file mode 100644 index 0000000..404e2d0 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/liblist.gam @@ -0,0 +1,18 @@ +game "Counter-Strike" +url_info "www.counter-strike.net" +url_dl "" +version "1.6" +size "184000000" +svonly "0" +secure "1" +type "multiplayer_only" +cldll "1" +hlversion "1111" +nomodels "1" +nohimodel "1" +mpentity "info_player_start" +gamedll "dlls\mp.dll" +gamedll_linux "addons/metamod/dlls/metamod.so" +gamedll_osx "dlls/cs.dylib" +trainmap "tr_1" +edicts "1800" diff --git a/src/csserver/serverfiles/cstrike/mapcycle.txt b/src/csserver/serverfiles/cstrike/mapcycle.txt new file mode 100644 index 0000000..d32bc3d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/mapcycle.txt @@ -0,0 +1,83 @@ +aim_00_awp +aim_00 +aim_ak-colt +aim_akcolt +aim_brucke +aim_buildings +aim_deagleshotgun +aim_desertconflic_ikyfy +aim_fixit +aim_grass +aim_headshot +aiming_map +aim_map +aim_map2 +aim_map3 +aim_map +aim_map_hlo +aim_map_usp +aim_russka_usp +aim_speedball +aimtrain +aim_training +aim_viva +aim_xqus +awp_4fun +awp_building_roof +awp_darkcrypt +awp_dust2_largo +awp_fantastic +awp_glass +awp_l337sk337beta +awp_map_mind2 +awp_map_pro +awp_maya +awp_monopoly_v2 +awp-mta-deagle-v11 +awp_nite +awp_puzzleroom +awp_republik +awp_reunited +awp_rotative +awp_ruins +awp_shqiponja +awp_yuki_v2 +cs_mansion +de_esl_autumn +de_esl_construct +de_esl_scorpions +de_esl_village +de_esl_villaggio_b1 +de_rats +de_sands +de_westwood +de_xtrain +dust_pro +fun_death_arena_s +fy_action_4p_xmas +fy_amglad +fy_awp_rush +fy_baga_4p_xmas +fy_battlefront +fy_bawoney +fy_bombworld +fy_csproject +fy_deagletraining +fy_deep_ichigo +fy_dustworld2k +fy_icepub +fy_iceworld2k +fy_iceworld_4p_xmas +fy_iceworld +fy_iceworld_xxl_4p +fy_iceworld_xxl_4p_xmas +fy_italygemetzel +fy_pool_bar +fy_pool_day +fy_poolparty +fy_snow +fy_stoneworld +fy_waterfall +he_glass +hunters_awpdawn +ka_fightclub \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_00.bsp b/src/csserver/serverfiles/cstrike/maps/aim_00.bsp new file mode 100644 index 0000000..dedb8d2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_00.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_00.txt b/src/csserver/serverfiles/cstrike/maps/aim_00.txt new file mode 100644 index 0000000..b871e55 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_00.txt @@ -0,0 +1,26 @@ +aim_00 - Aim-Map +------------------------- + +mapping +>> by Gimli (www.gimli-maps.de) + +textures +>> by Diggedagg and Blazeer + +betatesting +>> by NicTheSick + +gimli-maps: +www.gimli-maps.de + +clan00: +www.clan00.de + +Terrorists: +Simply aim fast and kill your enemies. + + +Counter-Terrorists: +Exactly the same! + +(Press FIRE to b4sh!) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_00_awp.bsp b/src/csserver/serverfiles/cstrike/maps/aim_00_awp.bsp new file mode 100644 index 0000000..d9fb65e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_00_awp.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_00_awp.txt b/src/csserver/serverfiles/cstrike/maps/aim_00_awp.txt new file mode 100644 index 0000000..6760c06 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_00_awp.txt @@ -0,0 +1,26 @@ +aim_00_awp - Aim-Map +------------------------- + +mapping +>> by Gimli (www.gimli-maps.de) + +textures +>> by Diggedagg and Blazeer + +betatesting +>> by NicTheSick + +gimli-maps: +www.gimli-maps.de + +clan00: +www.clan00.de + +Terrorists: +Simply aim fast and kill your enemies. + + +Counter-Terrorists: +Exactly the same! + +(Press FIRE to b4sh!) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_00_readme.txt b/src/csserver/serverfiles/cstrike/maps/aim_00_readme.txt new file mode 100644 index 0000000..b3ffa83 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_00_readme.txt @@ -0,0 +1,70 @@ +aim_00! (aim_00.bsp) +================================== + +Aim-Multiplayer map for Half-Life Counterstrike +------------------------------------------------------- + +General +------- +Author : Gimli +E-Mail : GimliW@gmx.net + +Textures : Diggedagge, Blazeer + +Sky : the cstrike team +Sound Editing : - +Models : - + +Map Information +--------------- +Version : Final Version 1.0 (28/03/2006) +Spawn Points : 32 +Other Notes : Just aim! + + +Construction +------------ +Level Editor : Valve Hammer Editor Beta 3.5 +Compile Tools : Zoner's HL Tools 1.7p15 modified by XP-Cagey +Compile Time : ~0,2 h on an AMD64 3700+, 1024 MB RAM +Build Time : ~4 hours but many more testing :-) + + +Other Maps from same author +--------------------------- +de_alps +cs_alps +csde_gimlirats +he_nature +de_esl_autumn + +latest news: http://www.gimli-maps.de + + +Install Information +------------------- +Unzip all files into your Half-Life / Counter-Strike directory + + + +Notes +----- + +You may only distribute this map via internet or BBS. +You are not allowed to distribute this map or parts of +the zip-file containing the map on a CD. + + + +Credits +------- +Greetings to the guys from #cs.maps (quakenet) and #clan00, +especially to Doc, Mewel, Jayjay, Sumi and the rest of the cs squad. +Thx to the mentioned artists for making awesome textures, skies, sounds and models. + +Big thx to NicTheSick / quiqueg for intensive beta testing. + + +Copyright +--------- +İ2006 by Daniel "Gimli" Westhofen \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.bsp b/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.bsp new file mode 100644 index 0000000..68ee7c2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.res b/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.res new file mode 100644 index 0000000..dba5e69 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.res @@ -0,0 +1,21 @@ +sound/misc/Couplebucks.wav +sound/misc/Awwcrap.wav +sound/misc/Awwman.wav +sound/misc/Haha.wav +sound/misc/Dohoo.wav +sound/misc/Ow.wav +sound/misc/Doomed.wav +sound/misc/Beback.wav +sound/misc/Fuck.wav +sound/misc/Cheese.wav +sound/misc/Shutup.wav +sound/misc/Whykillme.wav +sound/misc/Lol.wav +sound/misc/Gay.wav +sound/misc/Holycow.wav +sound/misc/Bullseye.wav +sound/misc/Sword.wav +sound/misc/Help.wav +sound/misc/Bleeeat.wav +maps/aim_ak-colt.res +maps/default.txt \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.txt b/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.txt new file mode 100644 index 0000000..2c6f9e0 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_ak-colt.txt @@ -0,0 +1,13 @@ +AIM training - COLT and AK +by Pontus Leander (alegro) +pontus.leander@gbg.bonet.se + +Counter-Terrorists: +Kill all the bad Terrorists. + +Terrorists: +Kill all the good Counter- +Terrorists + + +(Press Fire to Continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_akcolt.bsp b/src/csserver/serverfiles/cstrike/maps/aim_akcolt.bsp new file mode 100644 index 0000000..68ee7c2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_akcolt.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_brucke.bsp b/src/csserver/serverfiles/cstrike/maps/aim_brucke.bsp new file mode 100644 index 0000000..dfcd3cc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_brucke.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_brucke.txt b/src/csserver/serverfiles/cstrike/maps/aim_brucke.txt new file mode 100644 index 0000000..687a83d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_brucke.txt @@ -0,0 +1,15 @@ +aim_brucke (brucke is German for bridge) +By Keldon and Deletable_Man of the + Can i Get Paid? Clan + + and lots of + optimization, advice, tips, and + debugging by the great KornyBizkit! + +Thanks KB!! +---------------------------------------- +Counter-Terrorists: Kill the Terrorists +Terrorists: Kill the Counter-Terrorists +---------------------------------------- +http://cigp.recongamer.com +server.cigp.recongamer.com:27015 \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_buildings.bsp b/src/csserver/serverfiles/cstrike/maps/aim_buildings.bsp new file mode 100644 index 0000000..f2e2376 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_buildings.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_deagleshotgun.bsp b/src/csserver/serverfiles/cstrike/maps/aim_deagleshotgun.bsp new file mode 100644 index 0000000..c75b942 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_deagleshotgun.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.bsp b/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.bsp new file mode 100644 index 0000000..e05a6df Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.nav b/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.nav new file mode 100644 index 0000000..3fb1e17 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.nav differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.txt b/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.txt new file mode 100644 index 0000000..47bdf13 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_desertconflic_ikyfy.txt @@ -0,0 +1,10 @@ +Desert Conflict - Aim +by DraZoR (ikyfy@yahoo.co.id) + +CT: The Americans (CT) have found that those +Drug Dealer from Arabic (T) are hiding in +this sector. Eliminate them ! + +T : Those dirty americans has found our +sacred place, there is no way but to fight! +Comrade..! Don't let ANY survivor !! \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_fixit.bsp b/src/csserver/serverfiles/cstrike/maps/aim_fixit.bsp new file mode 100644 index 0000000..1e06752 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_fixit.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_ghost_s.bsp b/src/csserver/serverfiles/cstrike/maps/aim_ghost_s.bsp new file mode 100644 index 0000000..6d01a13 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_ghost_s.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_ghost_s.res b/src/csserver/serverfiles/cstrike/maps/aim_ghost_s.res new file mode 100644 index 0000000..daf71bd --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_ghost_s.res @@ -0,0 +1,18 @@ +maps/aim_ghost_s.bsp +maps/aim_ghost_s.txt +cc.wad +gfx/env/()arm1_bk.tga +gfx/env/()arm1_dn.tga +gfx/env/()arm1_ft.tga +gfx/env/()arm1_lf.tga +gfx/env/()arm1_rt.tga +gfx/env/()arm1_up.tga +models/S3B/araignee.mdl +models/S3B/chauvesouris.mdl +models/S3B/cvpt_lampout1.mdl +models/S3B/forge_tree1.mdl +models/S3B/forge_tree3.mdl +models/S3B/friendly.mdl +models/S3B/gargoyle.mdl +models/S3B/utspile.mdl +sprites/flames.spr \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_grass.bsp b/src/csserver/serverfiles/cstrike/maps/aim_grass.bsp new file mode 100644 index 0000000..a92692b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_grass.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_headshot.bsp b/src/csserver/serverfiles/cstrike/maps/aim_headshot.bsp new file mode 100644 index 0000000..b8fb7f0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_headshot.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_headshot.txt b/src/csserver/serverfiles/cstrike/maps/aim_headshot.txt new file mode 100644 index 0000000..ee41a48 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_headshot.txt @@ -0,0 +1,3 @@ +Map par Shoutman +Pour le clan Rc +Et tous les joueurs de counter-strike \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_map.bsp b/src/csserver/serverfiles/cstrike/maps/aim_map.bsp new file mode 100644 index 0000000..305cd01 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_map.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_map2.bsp b/src/csserver/serverfiles/cstrike/maps/aim_map2.bsp new file mode 100644 index 0000000..305cd01 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_map2.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_map_hlo.bsp b/src/csserver/serverfiles/cstrike/maps/aim_map_hlo.bsp new file mode 100644 index 0000000..0b708bd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_map_hlo.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_map_usp.bsp b/src/csserver/serverfiles/cstrike/maps/aim_map_usp.bsp new file mode 100644 index 0000000..53360b8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_map_usp.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_map_usp.txt b/src/csserver/serverfiles/cstrike/maps/aim_map_usp.txt new file mode 100644 index 0000000..2a046f7 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_map_usp.txt @@ -0,0 +1,14 @@ +Aimtraining USP - HiGhland Online +Map by Som (figge75@hotmail.com) +Additional textures by Som + +Please visit online café "HiGhland" +at tuletorget, sundbyberg, stockholm + +Counter-Terrorists: +Practice your usp aim + +Terrorists: +Same as ct. + +(Press FIRE to continue) diff --git a/src/csserver/serverfiles/cstrike/maps/aim_speedball.bsp b/src/csserver/serverfiles/cstrike/maps/aim_speedball.bsp new file mode 100644 index 0000000..ed72f07 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_speedball.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_speedball.txt b/src/csserver/serverfiles/cstrike/maps/aim_speedball.txt new file mode 100644 index 0000000..fb47fb1 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_speedball.txt @@ -0,0 +1,9 @@ +speedball - Just a edit from aim_ak-colt. [yeah I am a satans child now] +Mapping by: -FixXxer- [b3t@] Netherlands + +Terrorist - Place gewoon a bomb waar you can. + +Counter-terrorists - Kill all terrorists...bladibla + +Watch y0 aarz voor mines....You kan see them als very small +dots on the grond. \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_training.bsp b/src/csserver/serverfiles/cstrike/maps/aim_training.bsp new file mode 100644 index 0000000..e128616 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_training.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_viva.bsp b/src/csserver/serverfiles/cstrike/maps/aim_viva.bsp new file mode 100644 index 0000000..b8a53ae Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_viva.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_viva.nav b/src/csserver/serverfiles/cstrike/maps/aim_viva.nav new file mode 100644 index 0000000..f1a49bc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_viva.nav differ diff --git a/src/csserver/serverfiles/cstrike/maps/aim_viva.res b/src/csserver/serverfiles/cstrike/maps/aim_viva.res new file mode 100644 index 0000000..7ff5725 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_viva.res @@ -0,0 +1,5 @@ +maps/aim_viva.txt +maps/aim_viva.res +maps/aim_viva.nav +overviews/aim_viva.txt +overviews/aim_viva.tga \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/aim_viva.txt b/src/csserver/serverfiles/cstrike/maps/aim_viva.txt new file mode 100644 index 0000000..164aa68 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/aim_viva.txt @@ -0,0 +1,8 @@ +aim_viva (dedicated for VivaGamer Servers @ www.vivagamers.com) +by deepeyes (http://www.deepeyes-maps.com or denny.edita@gmail.com) + +Counter-Terrorists: Kill Terrorists. + +Terrorists: Kill Counter-Terrorists. + +Other Notes: No Buy Zone. JUst Point and Shoot. diff --git a/src/csserver/serverfiles/cstrike/maps/aim_xqus.bsp b/src/csserver/serverfiles/cstrike/maps/aim_xqus.bsp new file mode 100644 index 0000000..470d3d6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aim_xqus.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aiming_map.bsp b/src/csserver/serverfiles/cstrike/maps/aiming_map.bsp new file mode 100644 index 0000000..305cd01 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aiming_map.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/aimtrain.bsp b/src/csserver/serverfiles/cstrike/maps/aimtrain.bsp new file mode 100644 index 0000000..7fcb7bd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/aimtrain.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/ak_rh_warehouse.bsp b/src/csserver/serverfiles/cstrike/maps/ak_rh_warehouse.bsp new file mode 100644 index 0000000..4a73950 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/ak_rh_warehouse.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/as_oilrig.bsp b/src/csserver/serverfiles/cstrike/maps/as_oilrig.bsp new file mode 100644 index 0000000..626f257 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/as_oilrig.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/as_oilrig.txt b/src/csserver/serverfiles/cstrike/maps/as_oilrig.txt new file mode 100644 index 0000000..5b697ff --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/as_oilrig.txt @@ -0,0 +1,19 @@ +OilRig - Assassination +Map by MacMan (macmaninfi@aol.com) +Textures by MacMan +Westland Wessex helicopter by Agent Orange +[agentorange@freemail.nl] + +Background: The most important criminal +witness in history has been hiding out on +an oilrig as part of a witness protection +program. But word is that his location has +been discovered. A transport helicopter has +been sent in to move the witness to a new +location. + +Counter-Terrorists: Protect the VIP at all +costs. Escort him topside to the helicopter. + +Terrorists: Eliminate the VIP before he +escapes. diff --git a/src/csserver/serverfiles/cstrike/maps/awp_4fun.bsp b/src/csserver/serverfiles/cstrike/maps/awp_4fun.bsp new file mode 100644 index 0000000..7326969 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_4fun.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_4fun.txt b/src/csserver/serverfiles/cstrike/maps/awp_4fun.txt new file mode 100644 index 0000000..dc6042d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_4fun.txt @@ -0,0 +1,14 @@ + + .-----------------TTTT_-----_______ + /''''''''''(______O] ----------____ \______/]_ + __...---'"""\_ --'' awp_4fun - Created By AG[3]NT _________@ + |''' ._ _______________=---------""""""" + | ..--''| l L |_l | + | ..--'' . /-___j ' ' + | ..--'' / , ' ' + |--'' / ` \ + L__' \ - + - '-. + '. / + '-./ +Mission is easy.....Kill all enemies and win the round..... \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_building_roof.bsp b/src/csserver/serverfiles/cstrike/maps/awp_building_roof.bsp new file mode 100644 index 0000000..07dcafc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_building_roof.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_building_roof.txt b/src/csserver/serverfiles/cstrike/maps/awp_building_roof.txt new file mode 100644 index 0000000..5c46ec3 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_building_roof.txt @@ -0,0 +1,23 @@ + + +----------- + +awp_building_roof + +Par Joe_BlacK (peperonni_pizza@hotmail.com) + +http://joeblack.ift.cx + +----------- + + +Une awp map assez sympa. Ambience nocturne à consommer sans modération + + + +----------- + +More maps in my website http://joeblack.ift.cx + +----------- + diff --git a/src/csserver/serverfiles/cstrike/maps/awp_darkcrypt.bsp b/src/csserver/serverfiles/cstrike/maps/awp_darkcrypt.bsp new file mode 100644 index 0000000..d501f04 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_darkcrypt.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_darkcrypt.log b/src/csserver/serverfiles/cstrike/maps/awp_darkcrypt.log new file mode 100644 index 0000000..ad9de17 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_darkcrypt.log @@ -0,0 +1,16 @@ +AWP_DarkCrypt by tizu +======================= + +Decided to change the +FY_ style maps and do +an AWP_ style map. I +choosed a temple-like +map with big dimensions. +Big map, 32 spawns, +good gameplay, result: +fun! + +Hope you'll enjoy it! +======================= +(Orbital Studio leader) +======================= \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_dust2_largo.bsp b/src/csserver/serverfiles/cstrike/maps/awp_dust2_largo.bsp new file mode 100644 index 0000000..c668ba1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_dust2_largo.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_dust2_largo.txt b/src/csserver/serverfiles/cstrike/maps/awp_dust2_largo.txt new file mode 100644 index 0000000..568780c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_dust2_largo.txt @@ -0,0 +1,10 @@ +awp_dust2_largo +--------------- + +de_dust2_largo modificado para AWP + +By D@nGer | Wolfenstein 3D + +Visita http://www.clandanger.com.ar/ + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_fantastic.bsp b/src/csserver/serverfiles/cstrike/maps/awp_fantastic.bsp new file mode 100644 index 0000000..f97987b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_fantastic.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_forever.bsp b/src/csserver/serverfiles/cstrike/maps/awp_forever.bsp new file mode 100644 index 0000000..9a5261a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_forever.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_forever.res b/src/csserver/serverfiles/cstrike/maps/awp_forever.res new file mode 100644 index 0000000..bda9ef8 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_forever.res @@ -0,0 +1,9 @@ +maps/awp_forever.bsp +maps/awp_forever.txt +gfx/env/sunnybk.tga +gfx/env/sunnydn.tga +gfx/env/sunnyft.tga +gfx/env/sunnylf.tga +gfx/env/sunnyrt.tga +gfx/env/sunnyup.tga +awp.wad \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_forever.txt b/src/csserver/serverfiles/cstrike/maps/awp_forever.txt new file mode 100644 index 0000000..9accee1 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_forever.txt @@ -0,0 +1,13 @@ + awp_forever + + Made by StA_S3B (2007) + +Fun map Awp + + +I hope you'll enjoy this map. + + +My Website : http://shoot.a.free.fr + + Contact : sta.fr@hotmail.fr \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_glass.bsp b/src/csserver/serverfiles/cstrike/maps/awp_glass.bsp new file mode 100644 index 0000000..2efdac0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_glass.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.bsp b/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.bsp new file mode 100644 index 0000000..277ff9c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.res b/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.res new file mode 100644 index 0000000..2cb5917 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.res @@ -0,0 +1,18 @@ +// awp_l337sk337beta.res - created with RESGen v1.10 +// RESGen is made by Jeroen "ShadowLord" Bogers +// URL: http://www.unitedadmins.com/mapRESGEN.asp +// E-MAIL: resgen@hltools.com +// Res creation date, GMT timezone (dd-mm-yyyy): 17-12-2002 + +// .res entries: +cstrike.wad +halflife.wad +cs_bdog.wad +decals.wad +gfx/env/trainyardup.tga +gfx/env/trainyarddn.tga +gfx/env/trainyardlf.tga +gfx/env/trainyardrt.tga +gfx/env/trainyardft.tga +gfx/env/trainyardbk.tga +sound/ambience/skeetthoop.wav diff --git a/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.txt b/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.txt new file mode 100644 index 0000000..7e6bd1d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_l337sk337beta.txt @@ -0,0 +1,7 @@ +AWP L337 SK337 + + +Teams take turns as skeets while the other +team tries to blow them out of the sky! + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_map_mind2.bsp b/src/csserver/serverfiles/cstrike/maps/awp_map_mind2.bsp new file mode 100644 index 0000000..23f72d6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_map_mind2.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_map_mind2.txt b/src/csserver/serverfiles/cstrike/maps/awp_map_mind2.txt new file mode 100644 index 0000000..34edde7 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_map_mind2.txt @@ -0,0 +1,13 @@ +*** awp_map_mind2 *** +Creado, Diseñado y Pensado por Agustin Milicich (agus45mili@hotmail.com) + +Gracias por Todo y Disfruten. + + +///////////////////////////////////////// +*** awp_map_mind2 *** + + +"Created, Designed and Thought by Agustin Milicich (agus45mili@hotmail.com) + +Thanks for Everything and Enjoy." \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_map_pro.bsp b/src/csserver/serverfiles/cstrike/maps/awp_map_pro.bsp new file mode 100644 index 0000000..80a9166 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_map_pro.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_maya.bsp b/src/csserver/serverfiles/cstrike/maps/awp_maya.bsp new file mode 100644 index 0000000..8a98d56 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_maya.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_monopoly_v2.bsp b/src/csserver/serverfiles/cstrike/maps/awp_monopoly_v2.bsp new file mode 100644 index 0000000..b105dd9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_monopoly_v2.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_monopoly_v2.txt b/src/csserver/serverfiles/cstrike/maps/awp_monopoly_v2.txt new file mode 100644 index 0000000..f1c3022 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_monopoly_v2.txt @@ -0,0 +1,18 @@ +monopoly - awp map + +by newbielein aka -kr4ss- + +newbielein@nexgo.de oder daporius@t-online.de + +http://home.nexgo.de/newbielein + + +Counter-Terrorists and Terrorists: +Vernichtet die gegnerischen Spielfiguren. +Wer verliert geht Bankrott und wer will das ... + +neue Version : - neue eigens gemachte texturen + - 2 neue Beamer hinzugefügt + - etwas umgebaut (ach seht selbst :)) + +(So lets dance and press FIRE!!!!!!) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_nite.bsp b/src/csserver/serverfiles/cstrike/maps/awp_nite.bsp new file mode 100644 index 0000000..1b6d268 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_nite.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_nite.txt b/src/csserver/serverfiles/cstrike/maps/awp_nite.txt new file mode 100644 index 0000000..9b0166d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_nite.txt @@ -0,0 +1,11 @@ +Awp Nite +map by BurQiousX (burqiousx@gmail.com) + + +Have Fun! + + + +Credits: jEFE (sr_jefe@hotmail.com) + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_puzzleroom.bsp b/src/csserver/serverfiles/cstrike/maps/awp_puzzleroom.bsp new file mode 100644 index 0000000..f2f93c2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_puzzleroom.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_puzzleroom.log b/src/csserver/serverfiles/cstrike/maps/awp_puzzleroom.log new file mode 100644 index 0000000..9a7755e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_puzzleroom.log @@ -0,0 +1,5 @@ +Map made by Shotgun a.k.a xShotgunx + +Do not try and copy this map! + +Have fun! \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_republik.bsp b/src/csserver/serverfiles/cstrike/maps/awp_republik.bsp new file mode 100644 index 0000000..d42f567 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_republik.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_reunited.bsp b/src/csserver/serverfiles/cstrike/maps/awp_reunited.bsp new file mode 100644 index 0000000..8d6818c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_reunited.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_reunited.log b/src/csserver/serverfiles/cstrike/maps/awp_reunited.log new file mode 100644 index 0000000..6952046 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_reunited.log @@ -0,0 +1,13 @@ +AWP_REUNITED +by tizu +======================= + +A map created for +Reunited.ro community. +Enjoy! + +======================= +(Orbital Studio leader) +======================= +----www.reunited.ro---- +======================= \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_reunited.nav b/src/csserver/serverfiles/cstrike/maps/awp_reunited.nav new file mode 100644 index 0000000..6086a11 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_reunited.nav differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_rotative.bsp b/src/csserver/serverfiles/cstrike/maps/awp_rotative.bsp new file mode 100644 index 0000000..9904649 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_rotative.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_rotative.log b/src/csserver/serverfiles/cstrike/maps/awp_rotative.log new file mode 100644 index 0000000..c0f610c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_rotative.log @@ -0,0 +1,15 @@ +*** awp_rotative *** +Creado, Diseñado y Pensado por Agustin Milicich (agus45mili@hotmail.com) +Ayuda de MorDeLoNNNN en su Produccion. + +Gracias por Todo y Disfruten. + + +///////////////////////////////////////// +*** awp_rotative *** + + +"Created, Designed and Thought by Agustin Milicich (agus45mili@hotmail.com) +Aid of MorDeLoNNNN about its Production. + +Thanks for Everything and Enjoy." \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_ruins.bsp b/src/csserver/serverfiles/cstrike/maps/awp_ruins.bsp new file mode 100644 index 0000000..06f6083 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_ruins.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_ruins.txt b/src/csserver/serverfiles/cstrike/maps/awp_ruins.txt new file mode 100644 index 0000000..5c136dd --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_ruins.txt @@ -0,0 +1,13 @@ +Ruins - AWP only map +by He@ven (heaven_mm@yahoo.com) + +Counter-Terrorists: It's easy. Just kill +your enemy... + +Terrorists: It's easy. Just kill +your enemy... + +Other Notes: It's easy. Just kill +your enemy... + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_shqiponja.bsp b/src/csserver/serverfiles/cstrike/maps/awp_shqiponja.bsp new file mode 100644 index 0000000..203c086 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_shqiponja.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_shqiponja.txt b/src/csserver/serverfiles/cstrike/maps/awp_shqiponja.txt new file mode 100644 index 0000000..97c594b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_shqiponja.txt @@ -0,0 +1,16 @@ +AWP Eagle by Frosty... +I'm Albanian, what can i say... the best!!! + +Loja fillon me + +AWP- 2 klipa +Desert Eagle - 4 klipa +Granat- 1 +Thika- normal +Pancir - Kevlar pa helmet + +Terrorat- Vrit CT'at +CT'at- Vrit Terrorat + +Muzika prej mapes ka_matrix by Lacos (e kom vjedh, qa me bo) +s'paku po e kreditoj... \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/awp_yuki_v2.bsp b/src/csserver/serverfiles/cstrike/maps/awp_yuki_v2.bsp new file mode 100644 index 0000000..27812be Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/awp_yuki_v2.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/awp_yuki_v2.txt b/src/csserver/serverfiles/cstrike/maps/awp_yuki_v2.txt new file mode 100644 index 0000000..73007dd --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/awp_yuki_v2.txt @@ -0,0 +1,22 @@ +awp_yuki_v2 by.. well.. Yuki. +Just to let you guys know, I'm the Yuki +that has a pink Chii spray from Chobits. +Anyone else is.. well.. somebody else. +I name myself Soren sometimes too. Also, +I sometimes feel bored so I name myself +Soren - Weeee ^^ or maybe Soren - Happy. + +The only edit in this version is that I +made it so that if people were afk and +hidden behind a block or something, you +can climb over the glass to kill them. + +Oh, and just for reference, this copy of +awp_yuki_v2 was downloaded from +fpsbanana.com. + +Anyways, have fun everybody ^^! + +CT: Kill Ts. + +T: Kill CTs. \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/bw_pcjump.bsp b/src/csserver/serverfiles/cstrike/maps/bw_pcjump.bsp new file mode 100644 index 0000000..cb03625 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/bw_pcjump.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_747.bsp b/src/csserver/serverfiles/cstrike/maps/cs_747.bsp new file mode 100644 index 0000000..48a2791 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_747.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_747.txt b/src/csserver/serverfiles/cstrike/maps/cs_747.txt new file mode 100644 index 0000000..c57c5b9 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_747.txt @@ -0,0 +1,19 @@ +747 Hijack - Hostage Rescue +by Stephen "Judas" Superville +(witchdawn@hotmail.com) +textures by "The Postman" +(heavengame@yahoo.com) + +Counter-Terrorists: Infiltrate the +plane and rescue the remaining hostages +from the Terrorists holding them. + +Terrorists: Prevent the Counter- +Terrorist team from rescuing the +hostages. + +Other Notes: +There are 5 hostages in the plane. + +Special thanks to Leon Nieuwoudt, +who began the map. diff --git a/src/csserver/serverfiles/cstrike/maps/cs_assault.bsp b/src/csserver/serverfiles/cstrike/maps/cs_assault.bsp new file mode 100644 index 0000000..c940301 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_assault.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_assault.txt b/src/csserver/serverfiles/cstrike/maps/cs_assault.txt new file mode 100644 index 0000000..c59cf23 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_assault.txt @@ -0,0 +1,14 @@ +Assault - Hostage Rescue +by CryptR (lmuur@dlc.fi) + +Counter-Terrorists: Rescue the hostages. +Take out the Terrorists without jeopardizing +the hostages. The Terrorists may be watching +you with their cameras. + +Terrorists: Prevent Counter-Terrorist +force from rescuing the hostages. Use +whatever force needed. + +Other Notes: There are 4 hostages in +the mission. Rescue them! diff --git a/src/csserver/serverfiles/cstrike/maps/cs_backalley.bsp b/src/csserver/serverfiles/cstrike/maps/cs_backalley.bsp new file mode 100644 index 0000000..66a57eb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_backalley.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_backalley.txt b/src/csserver/serverfiles/cstrike/maps/cs_backalley.txt new file mode 100644 index 0000000..a6f87fc --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_backalley.txt @@ -0,0 +1,15 @@ +Alleyway - Hostage Rescue +by TYR (tyr@barking-dog.com) + +Counter-Terrorists: +Infiltrate Terrorist stronghold and escort +the hostages to the rescue zone. Take out +the Terrorists without jeopardizing the +hostages. + +Terrorists: +Eliminate the Counter-Terrorist +force before they rescue any hostages. + +Background: +There are 4 hostages in the mission. diff --git a/src/csserver/serverfiles/cstrike/maps/cs_estate.bsp b/src/csserver/serverfiles/cstrike/maps/cs_estate.bsp new file mode 100644 index 0000000..5d59524 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_estate.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_estate.txt b/src/csserver/serverfiles/cstrike/maps/cs_estate.txt new file mode 100644 index 0000000..065e6b6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_estate.txt @@ -0,0 +1,9 @@ +Zaphod's Estate - Hostage Rescue +by Zaphod Beeblebrox +zaphod@mapcore.com + +Counter-Terrorists: Rescue the three +hostages being held captive in the mansion. + +Terrorists: Prevent the Counter-Terrorists +from rescuing the hostages. diff --git a/src/csserver/serverfiles/cstrike/maps/cs_havana.bsp b/src/csserver/serverfiles/cstrike/maps/cs_havana.bsp new file mode 100644 index 0000000..622970c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_havana.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_havana.txt b/src/csserver/serverfiles/cstrike/maps/cs_havana.txt new file mode 100644 index 0000000..032e202 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_havana.txt @@ -0,0 +1,14 @@ +Havana- Hostage Rescue + +Ido Magal *ido@valvesoftware.com* +Macman *chrisa@valvesoftware.com* + + +Terrorists: You are holding political hostages +in Habana Vieja, awaiting a chopper lift which +will arrive to evacuate you immediately after the +round ends. + +Counter-Terrorists: You have control of the perimeter +and must now rescue all of the surviving hostages before +the terrorists manage to escape. diff --git a/src/csserver/serverfiles/cstrike/maps/cs_italy.bsp b/src/csserver/serverfiles/cstrike/maps/cs_italy.bsp new file mode 100644 index 0000000..b38c8b5 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_italy.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_italy.txt b/src/csserver/serverfiles/cstrike/maps/cs_italy.txt new file mode 100644 index 0000000..7a1a96e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_italy.txt @@ -0,0 +1,13 @@ +Italy - Hostage Rescue +Mapping by: +glenC AKA [HOTSHEEP]Bastard (glenc@hotsheep.com) +Textures/Graphics by: +DigiChaos (digichaos@hotsheep.com) + +Counter-Terrorists: Navigate your way +around the Italian city and get those +Hostages from the foreign Terrorists. + +Terrorists: Prevent the Counter-Terrorists +from rescuing the Hostages or eliminate +the Counter-Terrorists. diff --git a/src/csserver/serverfiles/cstrike/maps/cs_mansion.bsp b/src/csserver/serverfiles/cstrike/maps/cs_mansion.bsp new file mode 100644 index 0000000..02bf9b7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_mansion.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_militia.bsp b/src/csserver/serverfiles/cstrike/maps/cs_militia.bsp new file mode 100644 index 0000000..77ee93b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_militia.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_militia.txt b/src/csserver/serverfiles/cstrike/maps/cs_militia.txt new file mode 100644 index 0000000..a591b1b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_militia.txt @@ -0,0 +1,13 @@ +Militia - Hostage Rescue +by Andrew Aumann (andrewja@home.com) + +Counter-Terrorists: Enter Cliffe's +Compound to rescue the hostages. Take +out the Terrorists without jeopardizing +the hostages. + +Terrorists: Prevent Counter-Terrorist +force from rescuing the hostages. + +Other Notes: There are 4 hostages in +the mission and one floater. diff --git a/src/csserver/serverfiles/cstrike/maps/cs_office.bsp b/src/csserver/serverfiles/cstrike/maps/cs_office.bsp new file mode 100644 index 0000000..6a7d9e1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_office.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_office.txt b/src/csserver/serverfiles/cstrike/maps/cs_office.txt new file mode 100644 index 0000000..d18e3b6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_office.txt @@ -0,0 +1,15 @@ +The Office Complex - Hostage Rescue + +by Hobbit (Hobbit@nodream.net) +textures by Sphinx and George_Pooshoes. + +Counter-Terrorists: Enter the office +building and rescue the hostages. +Take out the Terrorists without +jeopardizing the hostages. + +Terrorists: Prevent Counter-Terrorist +force from rescuing the hostages. + +Other Notes: There are 4 hostages in +this mission. diff --git a/src/csserver/serverfiles/cstrike/maps/cs_siege.bsp b/src/csserver/serverfiles/cstrike/maps/cs_siege.bsp new file mode 100644 index 0000000..88f8ad3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/cs_siege.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/cs_siege.txt b/src/csserver/serverfiles/cstrike/maps/cs_siege.txt new file mode 100644 index 0000000..e38d289 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/cs_siege.txt @@ -0,0 +1,13 @@ +Canyon Siege - Hostage Rescue +by N0TH1NG (n0th1ng@mailcity.com) + +Counter-Terrorists: Enter the POW +stronghold and rescue the hostages. +Take out the Terrorists without +jeopardizing the hostages. + +Terrorists: Prevent Counter-Terrorist +force from rescuing the hostages. + +Other Notes: There are 4 hostages in +the mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_airstrip.bsp b/src/csserver/serverfiles/cstrike/maps/de_airstrip.bsp new file mode 100644 index 0000000..f5e3ad4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_airstrip.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_airstrip.txt b/src/csserver/serverfiles/cstrike/maps/de_airstrip.txt new file mode 100644 index 0000000..5aae1ca --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_airstrip.txt @@ -0,0 +1,13 @@ +Airstrip - Defusion +by Barney (aka narby) (narby@counter-strike.net) + +Special thanks to Iikka Keranen, John Morello and Minh Le + +Counter-Terrorists: Prevent the terrorist +planting the explosives in the airstrip +compound. + +Terrorists: Plant the c4 inside the airstrip +compound and destroy the fuel and cargo areas. + +Other Notes: There are 2 bomb points in this map. \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_aztec.bsp b/src/csserver/serverfiles/cstrike/maps/de_aztec.bsp new file mode 100644 index 0000000..53555c0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_aztec.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_aztec.txt b/src/csserver/serverfiles/cstrike/maps/de_aztec.txt new file mode 100644 index 0000000..f3a1105 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_aztec.txt @@ -0,0 +1,11 @@ +Aztec - Defusion +by Chris Auty (Barney) (narby@counter-strike.net) +Texture builds by Macman + +Counter-Terrorists: Prevent the Terrorists +bombing the archeological site. + +Terrorists: Destroy the valuable Aztec ruins. + +Other Notes: There are 2 bomb sites in this +mission. \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_cbble.bsp b/src/csserver/serverfiles/cstrike/maps/de_cbble.bsp new file mode 100644 index 0000000..120c8ce Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_cbble.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_cbble.txt b/src/csserver/serverfiles/cstrike/maps/de_cbble.txt new file mode 100644 index 0000000..0ee5241 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_cbble.txt @@ -0,0 +1,15 @@ +Cobble - Bomb/Defuse +by DaveJ (http://www.johnsto.co.uk/) +textures by MacMan (MacManInfi@aol.com) + +Counter-Terrorists: Prevent Terrorists +from bombing Lord William's country +farmhouse. He has been the target of +assassination in light of recent government +proposals. + +Terrorists: The Terrorist carrying the +C4 must place the bomb at one of the two +bomb sites around the map, thereby +killing Lord William and severely +damaging his home. diff --git a/src/csserver/serverfiles/cstrike/maps/de_cbble_detail.txt b/src/csserver/serverfiles/cstrike/maps/de_cbble_detail.txt new file mode 100644 index 0000000..8f9e5d6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_cbble_detail.txt @@ -0,0 +1,65 @@ +// Detail texture map file for de_cbble level +// [texture name] [detail texture name] [hscale] [vscale] + +{cstrike_le6lad detail/dt_metal1 5.0 5.0 +{msnMoss1 detail/dt_snow2 5.0 5.0 +{msnMossSparse detail/dt_snow2 5.0 5.0 +{msnMossTop detail/dt_snow2 5.0 5.0 +{msnMossTop2 detail/dt_snow2 5.0 5.0 ++0smLight1 detail/dt_smooth1 10.0 10.0 +-0CastWll detail/dt_stone3 10.0 10.0 +-0CastWllFung detail/dt_stone3 10.0 10.0 +-0Rock detail/dt_stone1 10.0 10.0 +-1CastWll detail/dt_stone3 10.0 10.0 +-1CastWllFung detail/dt_stone3 10.0 10.0 +-1Rock detail/dt_stone1 10.0 10.0 +-2CastWll detail/dt_stone3 10.0 10.0 +-2Rock detail/dt_stone1 10.0 10.0 +-3Rock detail/dt_stone1 10.0 10.0 +CastCrnL detail/dt_stone3 10.0 10.0 +CastCrnR detail/dt_stone3 10.0 10.0 +CastFlt detail/dt_stone3 10.0 10.0 +CastBgArch detail/dt_stone3 10.0 10.0 +CastBgArchFng detail/dt_stone3 10.0 10.0 +CastSmArch detail/dt_stone3 10.0 10.0 +CastWindow detail/dt_stone3 10.0 10.0 +CastWindow2 detail/dt_stone3 10.0 10.0 +CastWindow3 detail/dt_stone3 10.0 10.0 +CastSign1 detail/dt_wood1 10.0 10.0 +CastSign1b detail/dt_wood1 10.0 10.0 +CastSign2 detail/dt_wood1 10.0 10.0 +CastSign3 detail/dt_wood1 10.0 10.0 +CastSignFood detail/dt_smooth1 10.0 10.0 +CastSignSm1 detail/dt_smooth1 10.0 10.0 +CastSignSm2 detail/dt_smooth1 10.0 10.0 +CastSignSm3 detail/dt_smooth1 10.0 10.0 +CastSignSm4 detail/dt_smooth1 10.0 10.0 +CastYummy detail/dt_smooth1 10.0 10.0 +clayTile1 detail/dt_stone1 10.0 10.0 +clayTile2 detail/dt_stone1 10.0 10.0 +clayTile3 detail/dt_stone1 10.0 10.0 +CstlCbbl detail/dt_ground3 10.0 10.0 +CstlCncr detail/dt_conc 10.0 10.5 +CstlDr1 detail/dt_stone1 10.0 10.0 +CstlDr2 detail/dt_wood1 10.0 10.0 +CstlDr2Big detail/dt_wood1 10.0 10.0 +CstlDr3 detail/dt_wood1 10.0 10.0 +CstlDr4 detail/dt_metal1 5.0 5.0 +CstlGrass detail/dt_grass1 5.0 5.0 +CstlMld detail/dt_stone1 10.0 10.0 +djConstBlock detail/dt_wood1 10.0 10.0 +djCrateSd1 detail/dt_wood1 10.0 10.0 +djCrateSd2 detail/dt_wood1 10.0 10.0 +djCrateSd3 detail/dt_wood1 10.0 10.0 +djCrateSm detail/dt_wood1 10.0 10.0 +djCrateSmTp detail/dt_wood1 10.0 10.0 +djCrateTop detail/dt_wood1 10.0 10.0 +emerglightb detail/dt_smooth1 10.0 10.0 +EMERGLIGHTB2 detail/dt_smooth1 10.0 10.0 +emerglightc detail/dt_smooth1 10.0 10.0 +msnMossFull detail/dt_snow2 5.0 5.0 +telephonepole detail/dt_wood 10.0 10.0 +tsibeam detail/dt_metal1 5.0 5.0 +tsmoss detail/dt_grass1 5.0 5.0 +tsvent detail/dt_metal1 5.0 5.0 +generic49 detail/dt_ground2 10.0 10.0 \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_chateau.bsp b/src/csserver/serverfiles/cstrike/maps/de_chateau.bsp new file mode 100644 index 0000000..dba12c7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_chateau.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_chateau.txt b/src/csserver/serverfiles/cstrike/maps/de_chateau.txt new file mode 100644 index 0000000..79d8262 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_chateau.txt @@ -0,0 +1,15 @@ +Chateau - Bomb-Defuse + +Macman *chrisa@valvesoftware.com* +Ido Magal *ido@valvesoftware.com* + +Terrorists: After the loss of +Cobble, Lord Williams is rebuilding +his summer chateau. You must prevent +his remodeling. Plant the C4 at +either the front, or the rear courtyard. + + +Counter-Terrorists: Protect Lord +Williams' investment and prevent the +Terrorists from destroying his new home. diff --git a/src/csserver/serverfiles/cstrike/maps/de_dust.bsp b/src/csserver/serverfiles/cstrike/maps/de_dust.bsp new file mode 100644 index 0000000..c69b985 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_dust.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_dust.txt b/src/csserver/serverfiles/cstrike/maps/de_dust.txt new file mode 100644 index 0000000..482921a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_dust.txt @@ -0,0 +1,15 @@ +Dust - Bomb/Defuse +by DaveJ (http://www.johnsto.co.uk/) +textures by Macman (MacManInfi@aol.com) + +Counter-Terrorists: Prevent Terrorists +from bombing chemical weapon crates. +Team members must defuse any bombs +that threaten targeted areas. + +Terrorists: The Terrorist carrying the +C4 must destroy one of the chemical +weapon stashes. + +Other Notes: There are 2 chemical +weapon stashes in the mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_dust2.bsp b/src/csserver/serverfiles/cstrike/maps/de_dust2.bsp new file mode 100644 index 0000000..69c694f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_dust2.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_dust2.txt b/src/csserver/serverfiles/cstrike/maps/de_dust2.txt new file mode 100644 index 0000000..b38d891 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_dust2.txt @@ -0,0 +1,16 @@ +Dust II - Bomb/Defuse +*** GameHelper.com exclusive *** +by DaveJ (http://www.johnsto.co.uk/) +textures by MacMan (MacManInfi@aol.com) + +Counter-Terrorists: Prevent Terrorists +from bombing chemical weapon crates. +Team members must defuse any bombs +that threaten targeted areas. + +Terrorists: The Terrorist carrying the +C4 must destroy one of the chemical +weapon stashes. + +Other Notes: There are 2 chemical +weapon stashes in the mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.bsp b/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.bsp new file mode 100644 index 0000000..ed06ee8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.res b/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.res new file mode 100644 index 0000000..12908bf --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.res @@ -0,0 +1,33 @@ +////////////////////////////////////////////////////////// +// Resources file, created with 17buddies php script!!! // +// İ Chapo 2005-2007 - Infos @ http://www.17buddies.net // +// More than 15000 maps to download! // +// // +// Can you play all of our maps ?? Sure not!! // +////////////////////////////////////////////////////////// +// +// Res file generated by mikado for 17Buddies. +// +// Map Name : de_dust2_christmas +// +// Download @: http://dwl.17buddies.net/link/map/12897/de_dust2_christmas.html +// +////////////////////////////////////////////////////////// + +as_tundra.wad +bjchristmas.wad + +gfx/env/snowup.tga +gfx/env/snowdn.tga +gfx/env/snowlf.tga +gfx/env/snowrt.tga +gfx/env/snowft.tga +gfx/env/snowbk.tga + +models/mil_crategibs.mdl +models/smann.mdl +models/wbaum.mdl +models/gesch2.mdl +models/gesch1.mdl + +sprites/glow04.spr diff --git a/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.txt b/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.txt new file mode 100644 index 0000000..1a94f0f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_dust2_christmas.txt @@ -0,0 +1,30 @@ +de_dust2_Christmas - Bomb/Defuse + +Merry Christmas From PUB :) + +Map by PUB|Cardiphonia +purplesnakeuk@hotmail.com + + +Original +Mapping by: DaveJ (dv@btinternet.com) + + +Counter-Terrorists: +Prevent Terrorists from bombing chemical +weapon crates. Team members must defuse +any bombs that threaten targeted areas. + +Terrorists: +The Terrorist carrying the C4 +must destroy one of the chemical +weapon stashes. + + +Other Notes: There are 2 chemical +weapon stashes in the map. + +(Press FIRE to continue) + + + diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.bsp b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.bsp new file mode 100644 index 0000000..39fcd30 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.res b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.res new file mode 100644 index 0000000..d0fa32e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.res @@ -0,0 +1,10 @@ +models/eslmap/gim_birka_big.mdl +models/eslmap/gim_birke_small.mdl +models/eslmap/hessi_baum03.mdl +sound/eslmap/guitar.wav +overviews/de_esl_autumn.tga +overviews/de_esl_autumn.txt +maps/de_esl_autumn.txt +maps/de_esl_autumn.txt +maps/de_esl_autumn.res + diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.txt b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.txt new file mode 100644 index 0000000..e569ff4 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn.txt @@ -0,0 +1,37 @@ +ESL_AUTUMN - Bomb/Defuse +------------------ + +mapping +>> by Daniel 'Gimli' (www.gimli-maps.de) + +textures/models +>> by the Valve Team +>> by Gimli (www.gimli-maps.de) +>> by Hessi (www.thomashess.net) +>> refs by www.mayang.com & Relative + +sky / sounds +>> by the Valve Team +>> by Naomi Saskia King + + +A big company found a huge deposit of oil, +the black gold, right beneath a small +Italian village. The unethical company +wants to build a large reffinery, but the +villagers refuse to move. Thus the company +hired a group of terrorist to chase +away the villagers by destroying their +warehouses. + +Counter-Terrorists: Prevent the terrorists +from destroying the villagers depots. + +Terrorists: Destroy one of the warehouses +to scare and chase the villagers. + +Other Notes: There are 2 bomb sites in this +mission. + + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_autumn_readme.txt b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn_readme.txt new file mode 100644 index 0000000..9d88903 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_autumn_readme.txt @@ -0,0 +1,98 @@ +de_esl_autumn! (de_esl_autumn.bsp) +================================== + +Defuse-Multiplayer map for Half-Life Counterstrike +------------------------------------------------------- + +General +------- +Author : Gimli +E-Mail : GimliW@gmx.net +ESL-Sheet : http://www.esl-europe.net/de/player/65255/ + +Textures : The Valve Team +Textures : Gimli +Textures : Hessi (www.thomashess.net) +Ref-Pictures : www.mayang.com + Relative + +Sky : The Valve Team +Sound Editing : The Valve Team + Naomi Saskia King + (gituar song under Creative Common License) + (Namensnennung-KeineBearbeitung 2.5) +Models : The Valve Team + +Map Information +--------------- +Version : Pre-Final Version 1.0 (26/05/2006) +Spawn Points : 32 +Other Notes : ESL-EPS-Contest Map (original map was built within 5 weeks) + + +A big company found a huge deposit of oil, +the black gold, right beneath a small +Italian village. The unethical company +wants to build a large reffinery, but the +villagers refuse to move. Thus the company +hired a group of terrorist to chase +away the villagers by destroying their +warehouses. + +Counter-Terrorists: Prevent the terrorists +from destroying the villagers depots. + +Terrorists: Destroy one of the warehouses +to scare and chase the villagers. + +Other Notes: There are 2 bomb sites in this +mission. + + + +Construction +------------ +Level Editor : Valve Hammer Editor Beta 3.5 +Compile Tools : Zoner's HL Tools 1.7p15 modified by XP-Cagey +Compile Time : ~1 h (-nopaque) on an AMD64 3700+, 1024 MB RAM +Build Time : ~90 hours + + +Other Maps from same author +--------------------------- +de_alps (ESL AT-Ladder Map) +he_nature (ESL FML Map) +train_hideout (ESL FML Map) +cs_alps +csde_gimlirats +aim_00 + + +latest news: http://www.gimli-maps.de + + +Install Information +------------------- +Unzip all files into your Half-Life / Counter-Strike directory + + + +Notes +----- + +You may only distribute this map via internet or BBS. +You are not allowed to distribute this map or parts of +the zip-file containing the map on a CD. + + + +Credits +------- +Greetings to the guys from #cs.maps (quakenet), #clan00 and #cstrike.de. +especially to Heglaf, Mewel, Relative, JayJay, Doc, Psycho, Kane, Crow, Hessi and m1chi. +Thx to the mentioned artists for making awesome textures, skies, sounds and models. + + +Copyright +--------- +İ2006 by Daniel "Gimli" Westhofen \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_construct.bsp b/src/csserver/serverfiles/cstrike/maps/de_esl_construct.bsp new file mode 100644 index 0000000..88546e0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_esl_construct.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_construct.txt b/src/csserver/serverfiles/cstrike/maps/de_esl_construct.txt new file mode 100644 index 0000000..158edd6 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_construct.txt @@ -0,0 +1,16 @@ +de_esl_construct - Defusion +by raziel a.k.a. philipp (sr_raziel@web.de) + +Counter-Terrorists: Prevent Terrorists +from bombing the new constructions. +Team members must defuse any bombs +that threaten targeted areas. + +Terrorists: The Terrorist carrying the +C4 must destroy one of the explosive +crate areas. + +Other Notes: There are 2 bomb targets +in the mission. + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_scorpions.bsp b/src/csserver/serverfiles/cstrike/maps/de_esl_scorpions.bsp new file mode 100644 index 0000000..beabca1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_esl_scorpions.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_scorpions.txt b/src/csserver/serverfiles/cstrike/maps/de_esl_scorpions.txt new file mode 100644 index 0000000..e70b70b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_scorpions.txt @@ -0,0 +1,65 @@ +Bomb / Defuse +"For the Scorpions" + +Terrorist : +Bomb the boat or the Gasoline +Barrel to prevent the CTs +shipping illegaly Scorpions +out of the country. + +Counter-Terrorist +Prevent the Terrorists from +bombing one of the two spots +to fullfil your plan to sell +Scorpions to a Zoo in Europe + + +Map Design : s-Force | j0k3 +Textures : Doenerking +Sky : Mighty Pete +on Wadfathers Site +Models : ginsengavenger +Doenerking +Texture Set Manager : +s-Force | Oy +Ideas : +s-Force | j0k3 +s-Force | supreme +s-Force | Oy + +Spz Thx 2 : +scorpion-Force Clan +---------------------- +Elbenkrieger +Oy +supreme +luckz +andY +paula* +nEsSi +DrMadEval +Karacho Pete +Shorty +Asmodai +Hellius +DarkAngel +Knofi +t!n +Chybo +Schildi + +also to: +---------------------- +Doenerking +Mighty Pete +Wadfather +ginsengavenger +www.dragonkiss.com +www.thewall.de +my Friends for the Ideas + +Visit : +www.scorpion-force.de +www.dragonkiss.com +www.thewall.de +www.thedoenerking.de \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_village.bsp b/src/csserver/serverfiles/cstrike/maps/de_esl_village.bsp new file mode 100644 index 0000000..79cbe07 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_esl_village.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_village.txt b/src/csserver/serverfiles/cstrike/maps/de_esl_village.txt new file mode 100644 index 0000000..265a2a0 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_village.txt @@ -0,0 +1,19 @@ +ESL_ESL_VILLAGE - Bomb/Defuse +------------------ + +Mapping by: +Rooka (www.rooka.net , info@rooka-design.de) +Textures/Graphics by: +Blazeeer, Rooka +Models by: +TheDoenerKing and e4g1e + +Counter-Terrorists: Prevent Terrorists +from bombing the main buildings. +Team members must defuse any bombs +that threaten targeted areas. + +Terrorists: The Terrorist carrying the +C4 must destroy the main buildings. + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.bsp b/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.bsp new file mode 100644 index 0000000..ab3688d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.res b/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.res new file mode 100644 index 0000000..9c57f9c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.res @@ -0,0 +1,12 @@ +decals.wad +gfx/env/tornskybk.tga +gfx/env/tornskydn.tga +gfx/env/tornskyft.tga +gfx/env/tornskylf.tga +gfx/env/tornskyrt.tga +gfx/env/tornskyup.tga +models/hessi_bank.mdl +models/pi_fern.mdl +models/pi_outlamp1.mdl +models/pi_tree3.mdl +sprites/glow02.spr diff --git a/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.txt b/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.txt new file mode 100644 index 0000000..26a3252 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_esl_villaggio_b1.txt @@ -0,0 +1,5 @@ +------ +de_Villaggio_rc6 made for the ESL (www.esl.eu) Mappingcontest 2006 +------ +If you want more Information visit www.michael-z.info +------ diff --git a/src/csserver/serverfiles/cstrike/maps/de_inferno.bsp b/src/csserver/serverfiles/cstrike/maps/de_inferno.bsp new file mode 100644 index 0000000..c3b9443 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_inferno.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_inferno.txt b/src/csserver/serverfiles/cstrike/maps/de_inferno.txt new file mode 100644 index 0000000..50bc219 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_inferno.txt @@ -0,0 +1,14 @@ +Inferno - Defusion +by Chris Auty (Barney) (narby@counter-strike.net) +Texture builds by Valve software + +Terrorist are attempting to blow up two critical +gas pipeline through part of a small village. + +Counter-Terrorists: Prevent the terrorists +from destroying the pipelines. + +Terrorists: Destroy the two gas pipelines. + +Other Notes: There are 2 bomb sites in this +mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_nuke.bsp b/src/csserver/serverfiles/cstrike/maps/de_nuke.bsp new file mode 100644 index 0000000..7c695c6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_nuke.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_nuke.txt b/src/csserver/serverfiles/cstrike/maps/de_nuke.txt new file mode 100644 index 0000000..9439caa --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_nuke.txt @@ -0,0 +1,14 @@ +Nuke - Bomb/Defuse +by Jo Bieg (MEEEEDIC@gmx.net) + +Counter-Terrorists: Prevent Terrorists +from bombing the nuclear missile. The +mission can be targeted from above and +below. Team members must defuse any +bombs that threaten targeted areas. + +Terrorists: The Terrorist carrying the +C4 must destroy the nuclear missile. + +Other Notes: There are 2 bomb targets +in the mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_piranesi.bsp b/src/csserver/serverfiles/cstrike/maps/de_piranesi.bsp new file mode 100644 index 0000000..3cea917 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_piranesi.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_piranesi.txt b/src/csserver/serverfiles/cstrike/maps/de_piranesi.txt new file mode 100644 index 0000000..007c124 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_piranesi.txt @@ -0,0 +1,20 @@ +Piranesi - Bomb-Defuse + +Fingers - iikkak@valvesoftware.com + +Thanks to Ido Magal for texture sources + +Background: a sprawling neo-romanesque +palace known as Villa Piranesi is to be +opened to the public as a museum. +Restored furniture and works of art are +being shipped into the compound. + +Terrorists: Prevent the museum from +opening by destroying one of its two +main attractions; the antique sundial +in the front courtyard or the grand +celestial orrery in the back garden. + +Counter-Terrorists: Protect the +historical site against the terrorists. diff --git a/src/csserver/serverfiles/cstrike/maps/de_prodigy.bsp b/src/csserver/serverfiles/cstrike/maps/de_prodigy.bsp new file mode 100644 index 0000000..bad1376 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_prodigy.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_prodigy.txt b/src/csserver/serverfiles/cstrike/maps/de_prodigy.txt new file mode 100644 index 0000000..2c9285b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_prodigy.txt @@ -0,0 +1,14 @@ +Prodigy - Bomb/Defuse +by Hobbit (hobbit@nodream.net) + +Counter-Terrorists: Prevent Terrorists +from bombing the computer lab or the fuel +pipeline control room. Team members must +defuse any bombs that threaten targeted +areas. + +Terrorists: The Terrorist carrying the +C4 must destroy one of the targets. + +Other Notes: There are 2 targets +in this mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_rats.bsp b/src/csserver/serverfiles/cstrike/maps/de_rats.bsp new file mode 100644 index 0000000..2742c24 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_rats.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_sands.bsp b/src/csserver/serverfiles/cstrike/maps/de_sands.bsp new file mode 100644 index 0000000..bf1e39a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_sands.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_sands.res b/src/csserver/serverfiles/cstrike/maps/de_sands.res new file mode 100644 index 0000000..336eeaa --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_sands.res @@ -0,0 +1,13 @@ +// de_pf_dust.res - created with RESGen v2.0 BETA 3. +// RESGen is made by Jeroen "ShadowLord" Bogers. +// For more info go to http://resgen.hltools.com +// or E-mail me at resgen@hltools.com. + +// .res entries (12): +cs_dust.wad +cstrike.wad +decals.wad +halflife.wad +maps/de_sands.txt +maps/de_sands.res + diff --git a/src/csserver/serverfiles/cstrike/maps/de_sands.txt b/src/csserver/serverfiles/cstrike/maps/de_sands.txt new file mode 100644 index 0000000..cdd1dbf --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_sands.txt @@ -0,0 +1,23 @@ +de_sands + +MA/7EP <de_sands> BuldoZZeR + +HE3A6bIBAEMIE MIHyTbI CTPEJI6bI rAPAHTiPOBAHHbI!!!! + +/7OCETI HALLI CEPBEP +Counter-Strike v1.6 +Counter-Strike v1.6 (NO-STEEM) +cs.iptcom.net:27016 +cs.kaa.kev.ua:27016 + + +cs.iptcom.net CAN*T CEPBEPA + +PEKOMEHDYEMIN* CAN*T /7O MAPPINGy +http://cs-mapping.com.ua/ + +Home Page +http://buldozzer.com.ua/ +Testing +TAK! | BulDOG + diff --git a/src/csserver/serverfiles/cstrike/maps/de_storm.bsp b/src/csserver/serverfiles/cstrike/maps/de_storm.bsp new file mode 100644 index 0000000..b5a8a13 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_storm.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_storm.res b/src/csserver/serverfiles/cstrike/maps/de_storm.res new file mode 100644 index 0000000..b663c84 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_storm.res @@ -0,0 +1,17 @@ +// .\de_storm.res - created with RESGen v1.00 +// RESGen is made by Jeroen "ShadowLord" Bogers +// URL: http://www.unitedadmins.com/mapRESGEN.asp +// Res creation date, GMT timezone (dd-mm-yyyy): 08-06-2001 + +// .res entries: +de_storm.wad +gfx/env/de_stormup.tga +gfx/env/de_stormdn.tga +gfx/env/de_stormlf.tga +gfx/env/de_stormrt.tga +gfx/env/de_stormft.tga +gfx/env/de_stormbk.tga +sprites/glow01.spr +models/w_ak47.mdl +models/skeleton.mdl +sound/storm/thunder-theme.wav diff --git a/src/csserver/serverfiles/cstrike/maps/de_storm.txt b/src/csserver/serverfiles/cstrike/maps/de_storm.txt new file mode 100644 index 0000000..3f77c84 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_storm.txt @@ -0,0 +1,17 @@ +Storm - Bomb/Defuse +by: FLiPMoDE|Daank + (daankvirus420k@icqmail.com) +textures: Fingers - jOeSmOe - MattC + +Counter-Terrorists: Protect weapons +crates. These weapons are to be +delivered to an allied country +threatened by terrorists. + +Terrorists: There is an attempt to arm +a small country your faction wishes to +attack for the political reasons. Stop +the weapons from reaching them. + +Other Notes: There are 2 stashes of +weapon crates in this mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_survivor.bsp b/src/csserver/serverfiles/cstrike/maps/de_survivor.bsp new file mode 100644 index 0000000..b4d7857 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_survivor.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_survivor.txt b/src/csserver/serverfiles/cstrike/maps/de_survivor.txt new file mode 100644 index 0000000..1faa864 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_survivor.txt @@ -0,0 +1,27 @@ +DE_SURVIVOR - DEFUSION +By Michael Visser aka 3D_Mike +(3D_Mike@soneramail.nl) (3DMike@nmtrix.com) +www.lanmaniax.com + +Terrorists: +-Bomb Truck or Crashed plane. + +Counter-Terrorists: +-Prevent the Terrorists from bombing. + +Storyline: +In a heavy snowstorm a plane carrying a +topsecret load gets in trouble. The +onboard guard parachute to safety. They +recover the crashed plane and start +unloading the cargo into a captured +truck. But the weather plays a second +trick as heavy snowfall prevent the +SWAT-team from getting the entire cargo +over to the truck. + +Terrorist have tracked the plane as well +and in an attempt to prevent the Swat-Team +from escaping with their valuable load +they set a plan to bomb the two possible +locations of the load. \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/de_torn.bsp b/src/csserver/serverfiles/cstrike/maps/de_torn.bsp new file mode 100644 index 0000000..9d94aef Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_torn.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_torn.txt b/src/csserver/serverfiles/cstrike/maps/de_torn.txt new file mode 100644 index 0000000..9ed02cc --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_torn.txt @@ -0,0 +1,14 @@ +Torn - Bomb/Defuse +by Crinity & Madcross +www.planethalflife.com/crinity/ + +Terrorists: Detonate a toxic nerve agent +into the town's water supply that will +spread to nearby cities. + +Counter-Terrorists: Contain the situation. +Prevent hostiles from completing their +objectives. + +Other Notes: There are 2 detonation +targets in the town. diff --git a/src/csserver/serverfiles/cstrike/maps/de_train.bsp b/src/csserver/serverfiles/cstrike/maps/de_train.bsp new file mode 100644 index 0000000..8b64adf Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_train.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_train.txt b/src/csserver/serverfiles/cstrike/maps/de_train.txt new file mode 100644 index 0000000..a7ccf40 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_train.txt @@ -0,0 +1,12 @@ +Trainyard - Bomb/Defuse + +Counter-Terrorists: Prevent Terrorists +from bombing the nuclear payloads on two +trains. Team members must defuse any +bombs that threaten the payloads. + +Terrorists: The Terrorist carrying the +C4 must destroy one of the payloads. + +Other Notes: There are 2 payloads on the +trains in the mission. diff --git a/src/csserver/serverfiles/cstrike/maps/de_vertigo.bsp b/src/csserver/serverfiles/cstrike/maps/de_vertigo.bsp new file mode 100644 index 0000000..e9941de Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_vertigo.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_vertigo.txt b/src/csserver/serverfiles/cstrike/maps/de_vertigo.txt new file mode 100644 index 0000000..b1df6f4 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_vertigo.txt @@ -0,0 +1,14 @@ +Vertigo - Defusion +by Chris Auty (Barney) (fragged101@yahoo.com) +Texture builds by Telnets and J0esm0e + +Terrorists are trying to bomb rizzleton tower +before it reaches completion. + +Counter-Terrorists: Prevent the builing from +being destroyed. + +Terrorists: Plant the bomb and blow up the +building. + +Other Notes: Dont fall off. diff --git a/src/csserver/serverfiles/cstrike/maps/de_westwood.bsp b/src/csserver/serverfiles/cstrike/maps/de_westwood.bsp new file mode 100644 index 0000000..a5b4bfb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_westwood.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_westwood.txt b/src/csserver/serverfiles/cstrike/maps/de_westwood.txt new file mode 100644 index 0000000..9c7c26f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_westwood.txt @@ -0,0 +1,15 @@ +Westwood - Bomb + +By Nathaniel Miller AKA NIPPER +(nipperproductions@hotmail.com) +maps @ www.geocities.com/nipper14223 + +Those wacky terrorists are at it again. +This time they have gone back in time +to try and blow up a water tower and/or +some barrels of booze in ye olde bombsite. + +CT: Protect the water tower and ye olde +bombsite. + +T: Blow up one of the bombsites. diff --git a/src/csserver/serverfiles/cstrike/maps/de_xtrain.bsp b/src/csserver/serverfiles/cstrike/maps/de_xtrain.bsp new file mode 100644 index 0000000..6a394a9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/de_xtrain.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/de_xtrain.res b/src/csserver/serverfiles/cstrike/maps/de_xtrain.res new file mode 100644 index 0000000..4307c4c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/de_xtrain.res @@ -0,0 +1,7 @@ +noname1.wad +noname2.wad +models/smann.mdl +models/wbaum.mdl +models/gesch2.mdl +models/gesch1.mdl + diff --git a/src/csserver/serverfiles/cstrike/maps/default.res b/src/csserver/serverfiles/cstrike/maps/default.res new file mode 100644 index 0000000..39ec2e3 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/default.res @@ -0,0 +1,21 @@ +"classes/Default.res" +{ + + "infolabel" + { + "ControlName" "Label" + "fieldName" "infolabel" + "xpos" "0" + "ypos" "0" + "wide" "360" + "tall" "24" + "autoResize" "0" + "pinCorner" "0" + "visible" "1" + "enabled" "1" + "labelText" "THERE IS NO DESCRIPTION FILE FOR THIS MAP." + "textAlignment" "west" + "dulltext" "0" + "brighttext" "0" + } +} \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/dust_pro.bsp b/src/csserver/serverfiles/cstrike/maps/dust_pro.bsp new file mode 100644 index 0000000..67c71e9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/dust_pro.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/dust_pro.res b/src/csserver/serverfiles/cstrike/maps/dust_pro.res new file mode 100644 index 0000000..000ce51 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/dust_pro.res @@ -0,0 +1 @@ +de_dust.wad \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/dust_pro.txt b/src/csserver/serverfiles/cstrike/maps/dust_pro.txt new file mode 100644 index 0000000..d5a2184 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/dust_pro.txt @@ -0,0 +1,6 @@ +Map Feito + +Por Timao Mande um email +para povaoserver@hotmail.com + +Daora \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/dz_oilplatform.bsp b/src/csserver/serverfiles/cstrike/maps/dz_oilplatform.bsp new file mode 100644 index 0000000..93ef837 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/dz_oilplatform.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.bsp b/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.bsp new file mode 100644 index 0000000..96997b8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.res b/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.res new file mode 100644 index 0000000..e3c00e2 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.res @@ -0,0 +1,2 @@ +maps/fun_death_arena_s.bsp +maps/fun_death_arena_s.txt diff --git a/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.txt b/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.txt new file mode 100644 index 0000000..89a4301 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fun_death_arena_s.txt @@ -0,0 +1,14 @@ +fun_death_arena_s +================= + + +Made by StA_S3B +=============== + + + + +My Website : http://shoot.a.free.fr + http://cs.release.free.fr + +Contact : sta.fr@hotmail.fr \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.bsp b/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.bsp new file mode 100644 index 0000000..2cc99e9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.res b/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.res new file mode 100644 index 0000000..45224bf --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.res @@ -0,0 +1,17 @@ +// fy_action_xmas.res - created with RESGen v2.0 RC2. +// RESGen is made by Jeroen "ShadowLord" Bogers, +// with serveral improvements and additions by Zero3Cool. +// For more info go to http://resgen.hltools.com + +// .res entries (18): +gfx/env/officebk.tga +gfx/env/officedn.tga +gfx/env/officeft.tga +gfx/env/officelf.tga +gfx/env/officert.tga +gfx/env/officeup.tga +models/smann.mdl +models/wbaum.mdl +sound/letitsnow.wav +sound/Xmas_Classic_rock.wav +sprites/glow03.spr diff --git a/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.txt b/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.txt new file mode 100644 index 0000000..e0f8e0e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_action_4p_xmas.txt @@ -0,0 +1,8 @@ +Edited and Rebuild by Term!nator525 +Im Auftrag von Counterstrike.de + +Das Copyright der Orginalmaps liegen bei den Orginalmappern! + +vielen dank an/Custom Texturen von: + +X-Tender \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_amglad.bsp b/src/csserver/serverfiles/cstrike/maps/fy_amglad.bsp new file mode 100644 index 0000000..ff9bd50 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_amglad.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_amglad.res b/src/csserver/serverfiles/cstrike/maps/fy_amglad.res new file mode 100644 index 0000000..dbf867b --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_amglad.res @@ -0,0 +1,9 @@ +sound/fy_amglad/cheer.wav +sound/fy_amglad/fanfare2.wav +sound/fy_amglad/fanfare.wav +sound/fy_amglad/applaus.wav +sound/fy_amglad/charge.wav +maps/fy_amglad.bsp +maps/fy_amglad.txt +overviews/fy_amglad.tga +overviews/fy_amglad.txt \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_amglad.txt b/src/csserver/serverfiles/cstrike/maps/fy_amglad.txt new file mode 100644 index 0000000..80510c5 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_amglad.txt @@ -0,0 +1,16 @@ +fy_amglad +---------------------------------------- +by [SaW]dreiundzwanzig (ICQ 135468068) +hag23@t-online.de +www.enter-for-action.de + +Gladiators(CTs): Eliminate all contenders +Contenders(Ts):Elimiate all contenders or +press the final button. In order to gain +access to this button you have to push the +button of each level first. +Note: You can't advance to the next level +without pushing the button of the +preceding level. + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_awp_rush.bsp b/src/csserver/serverfiles/cstrike/maps/fy_awp_rush.bsp new file mode 100644 index 0000000..5aaa9ba Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_awp_rush.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_awp_rush.txt b/src/csserver/serverfiles/cstrike/maps/fy_awp_rush.txt new file mode 100644 index 0000000..24435a5 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_awp_rush.txt @@ -0,0 +1,16 @@ +Awp_Rush +Map by: -=ELE=-Mysterious? +-=ELE=-Clanpage: www.ele-clan.de.vu + +Greetz to: +|tV|Ragnar +and all other Members of +The Vortex clan: +www.the-vortex.de + +Also Greetz to: +The Whole team of: +www.hl-mods.com +& +Anticheater: +http://hopkins.j-ws.de \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.bsp b/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.bsp new file mode 100644 index 0000000..fdc5b6b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.res b/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.res new file mode 100644 index 0000000..b4cfe35 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.res @@ -0,0 +1,16 @@ +// fy_baga_4p_xmas.res - created with RESGen v2.0 RC2. +// RESGen is made by Jeroen "ShadowLord" Bogers, +// with serveral improvements and additions by Zero3Cool. +// For more info go to http://resgen.hltools.com + +// .res entries (15): +gfx/env/backalleybk.tga +gfx/env/backalleydn.tga +gfx/env/backalleyft.tga +gfx/env/backalleylf.tga +gfx/env/backalleyrt.tga +gfx/env/backalleyup.tga +models/wbaum.mdl +sound/magic_moment.wav +sound/Xmas_Classic_rock.wav +sprites/glow03.spr diff --git a/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.txt b/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.txt new file mode 100644 index 0000000..e0f8e0e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_baga_4p_xmas.txt @@ -0,0 +1,8 @@ +Edited and Rebuild by Term!nator525 +Im Auftrag von Counterstrike.de + +Das Copyright der Orginalmaps liegen bei den Orginalmappern! + +vielen dank an/Custom Texturen von: + +X-Tender \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_battlefront.bsp b/src/csserver/serverfiles/cstrike/maps/fy_battlefront.bsp new file mode 100644 index 0000000..17ffa49 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_battlefront.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_battlefront.txt b/src/csserver/serverfiles/cstrike/maps/fy_battlefront.txt new file mode 100644 index 0000000..c53d584 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_battlefront.txt @@ -0,0 +1,14 @@ +fy_battlefront (max. 16 vs 16) + +by Razor (design, mapping and texturing) +razor87_@hotmail.com - http://www.tauriainen.info + +Waleu (original design, testing) +k_k (design, testing) +Gremmy (design, testing) + +greetings to +Majin +nrk +raineri +tontza666 \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_bawoney.bsp b/src/csserver/serverfiles/cstrike/maps/fy_bawoney.bsp new file mode 100644 index 0000000..9dbc2c1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_bawoney.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_bawoney.res b/src/csserver/serverfiles/cstrike/maps/fy_bawoney.res new file mode 100644 index 0000000..7f37b27 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_bawoney.res @@ -0,0 +1,3 @@ +// .res entries: +maps/fy_Bawoney.res +maps/fy_Bawoney_info.txt diff --git a/src/csserver/serverfiles/cstrike/maps/fy_bawoney_info.txt b/src/csserver/serverfiles/cstrike/maps/fy_bawoney_info.txt new file mode 100644 index 0000000..2ed20c5 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_bawoney_info.txt @@ -0,0 +1,22 @@ +fy_Bawoney was created for my friend Bawoney + +- the map should be small +- possible to jump from roof to roof +- and have some similarities with fy_iceworld + +So I tried my best to comply his wishes. + +Info: Map can be used for GunGame! + +################################################# + +My special thanks go to: + +Bawoney, dark85, RedNex, Solid, 3m!l, devinmorash + +################################################# +Autor: +Klau3 + +Mail: +trixa2000-schrott@yahoo.de \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_bombworld.bsp b/src/csserver/serverfiles/cstrike/maps/fy_bombworld.bsp new file mode 100644 index 0000000..6e984bd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_bombworld.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_bombworld.txt b/src/csserver/serverfiles/cstrike/maps/fy_bombworld.txt new file mode 100644 index 0000000..3f76862 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_bombworld.txt @@ -0,0 +1,2 @@ +www.cs-cn.net +map.cs-cn.net \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_csproject.bsp b/src/csserver/serverfiles/cstrike/maps/fy_csproject.bsp new file mode 100644 index 0000000..c42c6ff Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_csproject.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_csproject.log b/src/csserver/serverfiles/cstrike/maps/fy_csproject.log new file mode 100644 index 0000000..eea9fa1 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_csproject.log @@ -0,0 +1,11 @@ +FY CSProject by tizu +======================= + +This map was build to +represent my server. +- server.csproject.org - +Enjoy! + +======================= +(Orbital Studio leader) +======================= \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.bsp b/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.bsp new file mode 100644 index 0000000..f251538 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.nav b/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.nav new file mode 100644 index 0000000..9df3a1b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.nav differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.txt b/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.txt new file mode 100644 index 0000000..f45abfe --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_deagletraining.txt @@ -0,0 +1,21 @@ + +fy_DeagleTraining + +Map By Adeon + + +The map is't finished 100%...i wanted to add a couple of trains...but I was laizy, so this is what ended up... + +I think is nice though... + + +Have Fun Fraging!!! + + + + CONTACT Y!M: no_limit_Adeon + + +Other maps:-De_Training + -fy_Train_training + -De_AD2remake \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_deep_ichigo.bsp b/src/csserver/serverfiles/cstrike/maps/fy_deep_ichigo.bsp new file mode 100644 index 0000000..d292269 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_deep_ichigo.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_dustworld2k.bsp b/src/csserver/serverfiles/cstrike/maps/fy_dustworld2k.bsp new file mode 100644 index 0000000..d7723a3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_dustworld2k.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_icepub.bsp b/src/csserver/serverfiles/cstrike/maps/fy_icepub.bsp new file mode 100644 index 0000000..d4c237b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_icepub.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld.bsp b/src/csserver/serverfiles/cstrike/maps/fy_iceworld.bsp new file mode 100644 index 0000000..df97c7a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_iceworld.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld.txt b/src/csserver/serverfiles/cstrike/maps/fy_iceworld.txt new file mode 100644 index 0000000..2c7bf34 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld.txt @@ -0,0 +1,21 @@ +ICEWORLD... + +Pick up a gun... + +And dont die... + +Terrorist: Kill CT +Counter-terrorist: Kill T +(Soon will be fixed up by |-DD-| CLAN) + +We are playing on makin sequals to this map so please stay tooned to our site! +Play fair! + +|Ż\ /Ż\ |Ż| |/ |Ż\ |Ż| /Ż\ |Ż |Ż| |\| |Ż |Ż | /Ż\ |\| +|_/ |Ż| |Ż\ |Ż\ |_/ |Ż\ |Ż| | | |_| | | Ż| |_ |_ |Ż| | | + Ż Ż + +Vist Us: at http://www.geocities.com/csddclan +If you have any Qustions email me here at: csddclan@yahoo.com + +(Press FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld2k.bsp b/src/csserver/serverfiles/cstrike/maps/fy_iceworld2k.bsp new file mode 100644 index 0000000..73e09d7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_iceworld2k.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld2k.txt b/src/csserver/serverfiles/cstrike/maps/fy_iceworld2k.txt new file mode 100644 index 0000000..2d6acba --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld2k.txt @@ -0,0 +1,18 @@ +*************************************************** + Welcome to the G-SPOT Server +*************************************************** +=================================================== + bussines hour:1:00pm-3:00am (408)873-9058 +=================================================== +Inquire with admin about your 3 free hour when you +register with Gamers Spot today. +Come join the fun at G-spot. $3 buxs for an hour all +day long is the same price. ever wished you had the +latency of 10 or lower, come join the fun!!!!! +ip:205.158.114.3:27015 +ip:205.158.114.4:2701 +=================================================== + +=================================================== +\\\\\\\\\\\\\\\\\\\\\\\\\\///////////////////////// +//////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\ \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.bsp b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.bsp new file mode 100644 index 0000000..9828fce Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.res b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.res new file mode 100644 index 0000000..3fb04d8 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.res @@ -0,0 +1,18 @@ +// fy_iceworld_4p_xmas.res - created with RESGen v2.0 RC2. +// RESGen is made by Jeroen "ShadowLord" Bogers, +// with serveral improvements and additions by Zero3Cool. +// For more info go to http://resgen.hltools.com + +// .res entries (19): +gfx/env/officebk.tga +gfx/env/officedn.tga +gfx/env/officeft.tga +gfx/env/officelf.tga +gfx/env/officert.tga +gfx/env/officeup.tga +models/gesch1.mdl +models/gesch3.mdl +models/smann.mdl +models/wbaum.mdl +sound/ambience/xwishb.wav +sprites/glow03.spr diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.txt b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.txt new file mode 100644 index 0000000..e0f8e0e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_4p_xmas.txt @@ -0,0 +1,8 @@ +Edited and Rebuild by Term!nator525 +Im Auftrag von Counterstrike.de + +Das Copyright der Orginalmaps liegen bei den Orginalmappern! + +vielen dank an/Custom Texturen von: + +X-Tender \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p.bsp b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p.bsp new file mode 100644 index 0000000..0e7ae94 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p.res b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p.res new file mode 100644 index 0000000..7e9211e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p.res @@ -0,0 +1,13 @@ +// fy_iceworld_xxl_4p.res - created with RESGen v2.0 RC2. +// RESGen is made by Jeroen "ShadowLord" Bogers, +// with serveral improvements and additions by Zero3Cool. +// For more info go to http://resgen.hltools.com + +// .res entries (16): +gfx/env/snowbk.tga +gfx/env/snowdn.tga +gfx/env/snowft.tga +gfx/env/snowlf.tga +gfx/env/snowrt.tga +gfx/env/snowup.tga +sprites/glow03.spr diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.bsp b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.bsp new file mode 100644 index 0000000..2870c38 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.res b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.res new file mode 100644 index 0000000..c62d1ec --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.res @@ -0,0 +1,20 @@ +// fy_iceworld_xxl_4p_xmas.res - created with RESGen v2.0 RC2. +// RESGen is made by Jeroen "ShadowLord" Bogers, +// with serveral improvements and additions by Zero3Cool. +// For more info go to http://resgen.hltools.com + +// .res entries (21): +gfx/env/snowbk.tga +gfx/env/snowdn.tga +gfx/env/snowft.tga +gfx/env/snowlf.tga +gfx/env/snowrt.tga +gfx/env/snowup.tga +models/gesch1.mdl +models/gesch2.mdl +models/gesch3.mdl +models/smann.mdl +models/wbaum.mdl +sound/ambience/xbellsc.wav +sound/magic_moment.wav +sprites/glow03.spr diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.txt b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.txt new file mode 100644 index 0000000..e0f8e0e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_4p_xmas.txt @@ -0,0 +1,8 @@ +Edited and Rebuild by Term!nator525 +Im Auftrag von Counterstrike.de + +Das Copyright der Orginalmaps liegen bei den Orginalmappern! + +vielen dank an/Custom Texturen von: + +X-Tender \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_xmas.txt b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_xmas.txt new file mode 100644 index 0000000..e0f8e0e --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_iceworld_xxl_xmas.txt @@ -0,0 +1,8 @@ +Edited and Rebuild by Term!nator525 +Im Auftrag von Counterstrike.de + +Das Copyright der Orginalmaps liegen bei den Orginalmappern! + +vielen dank an/Custom Texturen von: + +X-Tender \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.bsp b/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.bsp new file mode 100644 index 0000000..d1278eb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.res b/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.res new file mode 100644 index 0000000..a284c55 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.res @@ -0,0 +1,16 @@ +// This .res File was generated by 'ResMaker v0.1b' (doesn't have a proper name yet!) +// 'ResCreater' was written by BigBadaBoom +// bigbadaboom@mapscene.de +// Visit: www.MapScene.de + +cstrike.wad +itsitaly.wad +gfx/env/Cliffup.tga +gfx/env/Cliffdn.tga +gfx/env/Clifflf.tga +gfx/env/Cliffrt.tga +gfx/env/Cliffft.tga +gfx/env/Cliffbk.tga +sound/misc/killChicken.wav +models/chick.mdl +sound/ambience/Opera.wav diff --git a/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.txt b/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.txt new file mode 100644 index 0000000..32f1e0f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_italygemetzel.txt @@ -0,0 +1,10 @@ +fy_italygemetzel + +use the guns to kill the other team! +CT must kill T +T must kill CT + +this map is created by -=KRK=-Cassiopeia (-krk-cassiopeia@arcor.de) + +-=KRANKE ROTE KREUZ=- +!DAS KANN DIR AUCH PASSIEREN! \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_marioland.bsp b/src/csserver/serverfiles/cstrike/maps/fy_marioland.bsp new file mode 100644 index 0000000..5be6703 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_marioland.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_marioland.res b/src/csserver/serverfiles/cstrike/maps/fy_marioland.res new file mode 100644 index 0000000..c90f5de --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_marioland.res @@ -0,0 +1,18 @@ +// .res entries: +maps/fy_marioland.res +maps/fy_marioland.txt +mario.wad +gfx/env/toonbk.tga +gfx/env/toonlf.tga +gfx/env/toondn.tga +gfx/env/toonrt.tga +gfx/env/toonft.tga +gfx/env/toonup.tga +sound/mario/coin.wav +sound/mario/smb31 +sound/mario/dwnthepipe +sound/mario/evil1 + + + + diff --git a/src/csserver/serverfiles/cstrike/maps/fy_marioland.txt b/src/csserver/serverfiles/cstrike/maps/fy_marioland.txt new file mode 100644 index 0000000..ad7e85a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_marioland.txt @@ -0,0 +1,6 @@ +ENJOY MA MAP ! +lol no comment, mais les textures sont pa de moi, les sons non plus, mais dune map pour sveencoop : sc_marioland. +ya juste la map ki est de moi mdr. + + +SHOUTMAN \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_pool_bar.bsp b/src/csserver/serverfiles/cstrike/maps/fy_pool_bar.bsp new file mode 100644 index 0000000..1b54153 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_pool_bar.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_pool_day.bsp b/src/csserver/serverfiles/cstrike/maps/fy_pool_day.bsp new file mode 100644 index 0000000..b0ef8b9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_pool_day.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_pool_day.txt b/src/csserver/serverfiles/cstrike/maps/fy_pool_day.txt new file mode 100644 index 0000000..266903f --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_pool_day.txt @@ -0,0 +1,11 @@ +Blast 'em All. + +Map by Squall +steveas@goshen.edu +Get my other maps: + +www.goshen.edu/~steveas/maps + + + + diff --git a/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.bsp b/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.bsp new file mode 100644 index 0000000..ceca582 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.rbl b/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.rbl new file mode 100644 index 0000000..f9f4c5a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.rbl differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.txt b/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.txt new file mode 100644 index 0000000..3168419 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_pool_day2.txt @@ -0,0 +1,3 @@ + Fy_Pool_Day2 by f117bomb + ------------------------ +www.snowboardingandstuff.com \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_poolparty.bsp b/src/csserver/serverfiles/cstrike/maps/fy_poolparty.bsp new file mode 100644 index 0000000..6ee44dd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_poolparty.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_poolparty.rbl b/src/csserver/serverfiles/cstrike/maps/fy_poolparty.rbl new file mode 100644 index 0000000..3e16054 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_poolparty.rbl differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_poolparty.txt b/src/csserver/serverfiles/cstrike/maps/fy_poolparty.txt new file mode 100644 index 0000000..c42fce4 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_poolparty.txt @@ -0,0 +1,23 @@ +------------------------------------------- + fy_poolparty by Squall +------------------------------------------- + +www.bidgear.com +server.counter-strike.net/maps + + +Check out my other maps: + +de_dorms +de_wallmart +de_scootathon2k +de_desktop +fy_pool_day +he_pool_night +he_offroad +fy_party + +------------------------------------------- + +steveas@goshen.edu +Squall \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_snow.bsp b/src/csserver/serverfiles/cstrike/maps/fy_snow.bsp new file mode 100644 index 0000000..14a7d13 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_snow.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_stoneworld.bsp b/src/csserver/serverfiles/cstrike/maps/fy_stoneworld.bsp new file mode 100644 index 0000000..d2b7862 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_stoneworld.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_stoneworld.txt b/src/csserver/serverfiles/cstrike/maps/fy_stoneworld.txt new file mode 100644 index 0000000..6a5b20c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_stoneworld.txt @@ -0,0 +1,11 @@ +***Stone World*** +Crackerjack + + +Terrorists: Shoot up the CTs. + +Counter-Terrorists: Kill those ragheaded camel raping +building bombing bastards. + + +(Press Fire to Continue) diff --git a/src/csserver/serverfiles/cstrike/maps/fy_town_s.bsp b/src/csserver/serverfiles/cstrike/maps/fy_town_s.bsp new file mode 100644 index 0000000..7374cdd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_town_s.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_town_s.res b/src/csserver/serverfiles/cstrike/maps/fy_town_s.res new file mode 100644 index 0000000..a1bdc96 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_town_s.res @@ -0,0 +1,12 @@ +maps/fy_town_s.bsp +maps/fy_town_s.txt +gfx/env/stonefieldbk.tga +gfx/env/stonefielddn.tga +gfx/env/stonefieldft.tga +gfx/env/stonefieldlf.tga +gfx/env/stonefieldrt.tga +gfx/env/stonefieldup.tga +models/S3B/arc_bush.mdl +models/S3B/forge_tree1.mdl +models/S3B/forge_tree3.mdl +fy_town_s.wad \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_town_s.txt b/src/csserver/serverfiles/cstrike/maps/fy_town_s.txt new file mode 100644 index 0000000..d2198d8 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_town_s.txt @@ -0,0 +1,24 @@ +fy_town_s +========= + + +Made by StA_S3B +=============== + + + + +My another maps: + +http://www.fpsbanana.com/maps/search?s%5Bmaps.author%5D=sta_s3b&maps_page=3 + +http://www.fpsbanana.com/maps/search?s%5Bmaps.author%5D=sta_s3b&maps_page=2 + +http://www.fpsbanana.com/maps/search?s%5Bmaps.author%5D=sta_s3b + + + + + + +Contact : sta.fr@hotmail.fr \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/fy_waterfall.bsp b/src/csserver/serverfiles/cstrike/maps/fy_waterfall.bsp new file mode 100644 index 0000000..ba981c3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/fy_waterfall.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/fy_waterfall.txt b/src/csserver/serverfiles/cstrike/maps/fy_waterfall.txt new file mode 100644 index 0000000..81ed85d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/fy_waterfall.txt @@ -0,0 +1,9 @@ +fy_waterfall - Deathmatch +by Punkster + +T's & CT's: + +Don't stay! Run and shoot... +or you die... + +(Press motherfucking FIRE to continue) \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/he_glass.bsp b/src/csserver/serverfiles/cstrike/maps/he_glass.bsp new file mode 100644 index 0000000..8275eb2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/he_glass.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/hunters_awpdawn.bsp b/src/csserver/serverfiles/cstrike/maps/hunters_awpdawn.bsp new file mode 100644 index 0000000..8d01fea Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/hunters_awpdawn.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/ka_fightclub.bsp b/src/csserver/serverfiles/cstrike/maps/ka_fightclub.bsp new file mode 100644 index 0000000..0f7c3d5 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/ka_fightclub.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/po_island.bsp b/src/csserver/serverfiles/cstrike/maps/po_island.bsp new file mode 100644 index 0000000..1d4bc2d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/po_island.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/po_island.txt b/src/csserver/serverfiles/cstrike/maps/po_island.txt new file mode 100644 index 0000000..62f1589 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/po_island.txt @@ -0,0 +1,22 @@ +PO_ISLAND - Deathmatch fun map +Pre-armed with Pistols Only! + +Terrorist: +Kill all CounterTerrorists. + +CounterTerrorist: +Kill All Terrorists. + +Both Teams: +You arent allowed to buy anything. +But you will be pre-armed with 5 +pistols. To change weapon choose +the secondary weapon key. (slot 2) + +Author: +<UE30>EsMerAllDo + +PISTOLS ONLY, for more fun. + +(Press FIRE to continue) + diff --git a/src/csserver/serverfiles/cstrike/maps/po_weirdclimb.bsp b/src/csserver/serverfiles/cstrike/maps/po_weirdclimb.bsp new file mode 100644 index 0000000..70f4d13 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/po_weirdclimb.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/scoutzknivez.bsp b/src/csserver/serverfiles/cstrike/maps/scoutzknivez.bsp new file mode 100644 index 0000000..2211165 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/scoutzknivez.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/sniperworld.bsp b/src/csserver/serverfiles/cstrike/maps/sniperworld.bsp new file mode 100644 index 0000000..4e52914 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/sniperworld.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/sniperworld.res b/src/csserver/serverfiles/cstrike/maps/sniperworld.res new file mode 100644 index 0000000..41adc23 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/sniperworld.res @@ -0,0 +1,6 @@ +// .res entries: +Sniperworld.wad +overviews/Sniperworld.tga +overviews/Sniperworld.txt +maps/Sniperworld.txt +maps/Sniperworld.res diff --git a/src/csserver/serverfiles/cstrike/maps/sniperworld.txt b/src/csserver/serverfiles/cstrike/maps/sniperworld.txt new file mode 100644 index 0000000..7bcc6b0 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/sniperworld.txt @@ -0,0 +1,24 @@ +Sniperworld - Snipermap + +by Klau3 +(www.faith-clan.de) + + +Counter-Terrorists: Blow the terrorists with sniperweapons away! + +Terrorists: Get those bastards! + + + 1. Don't cheat + 2. Don't flame + 3. Be nicely + 4. Rule or get ruled + + + + + + + + + gl&hf \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/wurf_ricochet.bsp b/src/csserver/serverfiles/cstrike/maps/wurf_ricochet.bsp new file mode 100644 index 0000000..e4048fc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/wurf_ricochet.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/wurf_ricochet.res b/src/csserver/serverfiles/cstrike/maps/wurf_ricochet.res new file mode 100644 index 0000000..ae58adf --- /dev/null +++ b/src/csserver/serverfiles/cstrike/maps/wurf_ricochet.res @@ -0,0 +1,8 @@ +// wurf_ricochet.res - created with RESGen v2.0 RC2. +// RESGen is made by Jeroen "ShadowLord" Bogers, +// with serveral improvements and additions by Zero3Cool. +// For more info go to http://resgen.hltools.com + +// .res entries (18): +models/fern.mdl +sprites/fire.spr \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/maps/xm_mountainclimb.bsp b/src/csserver/serverfiles/cstrike/maps/xm_mountainclimb.bsp new file mode 100644 index 0000000..0b5eb6a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/xm_mountainclimb.bsp differ diff --git a/src/csserver/serverfiles/cstrike/maps/zr_hetablock.bsp b/src/csserver/serverfiles/cstrike/maps/zr_hetablock.bsp new file mode 100644 index 0000000..6f55ec2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/maps/zr_hetablock.bsp differ diff --git a/src/csserver/serverfiles/cstrike/metalost.wad b/src/csserver/serverfiles/cstrike/metalost.wad new file mode 100644 index 0000000..95cb6b3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/metalost.wad differ diff --git a/src/csserver/serverfiles/cstrike/models/Emi/einstein/Einstein.mdl b/src/csserver/serverfiles/cstrike/models/Emi/einstein/Einstein.mdl new file mode 100644 index 0000000..f254cbc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/Emi/einstein/Einstein.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/Emi/grass1.mdl b/src/csserver/serverfiles/cstrike/models/Emi/grass1.mdl new file mode 100644 index 0000000..9c7d92e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/Emi/grass1.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/Emi/lag_generator774.mdl b/src/csserver/serverfiles/cstrike/models/Emi/lag_generator774.mdl new file mode 100644 index 0000000..f10928f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/Emi/lag_generator774.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/awp_island/bush_palmplant.mdl b/src/csserver/serverfiles/cstrike/models/awp_island/bush_palmplant.mdl new file mode 100644 index 0000000..9b09327 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/awp_island/bush_palmplant.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/awp_island/palmier.mdl b/src/csserver/serverfiles/cstrike/models/awp_island/palmier.mdl new file mode 100644 index 0000000..a9045e4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/awp_island/palmier.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/baboon.mdl b/src/csserver/serverfiles/cstrike/models/baboon.mdl new file mode 100644 index 0000000..60bb9c9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/baboon.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/cool/arc_flower.mdl b/src/csserver/serverfiles/cstrike/models/cool/arc_flower.mdl new file mode 100644 index 0000000..64c7f86 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/cool/arc_flower.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/de_forge/forge_truck.mdl b/src/csserver/serverfiles/cstrike/models/de_forge/forge_truck.mdl new file mode 100644 index 0000000..f4721f9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/de_forge/forge_truck.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/eslmap/gim_birke_big.mdl b/src/csserver/serverfiles/cstrike/models/eslmap/gim_birke_big.mdl new file mode 100644 index 0000000..f9a0b4f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/eslmap/gim_birke_big.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/eslmap/gim_birke_small.mdl b/src/csserver/serverfiles/cstrike/models/eslmap/gim_birke_small.mdl new file mode 100644 index 0000000..98c3f93 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/eslmap/gim_birke_small.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/eslmap/hessi_baum03.mdl b/src/csserver/serverfiles/cstrike/models/eslmap/hessi_baum03.mdl new file mode 100644 index 0000000..2f2bda2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/eslmap/hessi_baum03.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/gesch1.mdl b/src/csserver/serverfiles/cstrike/models/gesch1.mdl new file mode 100644 index 0000000..250b202 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/gesch1.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/gesch2.mdl b/src/csserver/serverfiles/cstrike/models/gesch2.mdl new file mode 100644 index 0000000..ada1b54 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/gesch2.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/gesch3.mdl b/src/csserver/serverfiles/cstrike/models/gesch3.mdl new file mode 100644 index 0000000..9024351 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/gesch3.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/ha_chair_office.mdl b/src/csserver/serverfiles/cstrike/models/ha_chair_office.mdl new file mode 100644 index 0000000..ca902c1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/ha_chair_office.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/hessi_bank.mdl b/src/csserver/serverfiles/cstrike/models/hessi_bank.mdl new file mode 100644 index 0000000..bf283c8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/hessi_bank.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/hl_map_palm.mdl b/src/csserver/serverfiles/cstrike/models/hl_map_palm.mdl new file mode 100644 index 0000000..6f5c9be Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/hl_map_palm.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/holo_dropship.mdl b/src/csserver/serverfiles/cstrike/models/holo_dropship.mdl new file mode 100644 index 0000000..439ea22 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/holo_dropship.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/ice.mdl b/src/csserver/serverfiles/cstrike/models/ice.mdl new file mode 100644 index 0000000..c99bff2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/ice.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/icebeak.mdl b/src/csserver/serverfiles/cstrike/models/icebeak.mdl new file mode 100644 index 0000000..97a4863 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/icebeak.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/maya_gate.mdl b/src/csserver/serverfiles/cstrike/models/maya_gate.mdl new file mode 100644 index 0000000..decc45d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/maya_gate.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/mayanplanet.mdl b/src/csserver/serverfiles/cstrike/models/mayanplanet.mdl new file mode 100644 index 0000000..71af5d8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/mayanplanet.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/medion/big_anubis.mdl b/src/csserver/serverfiles/cstrike/models/medion/big_anubis.mdl new file mode 100644 index 0000000..332e993 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/medion/big_anubis.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/mil_crategibs.mdl b/src/csserver/serverfiles/cstrike/models/mil_crategibs.mdl new file mode 100644 index 0000000..3de8229 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/mil_crategibs.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/monika.mdl b/src/csserver/serverfiles/cstrike/models/monika.mdl new file mode 100644 index 0000000..5b015fc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/monika.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/pi_fern.mdl b/src/csserver/serverfiles/cstrike/models/pi_fern.mdl new file mode 100644 index 0000000..6edb31f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/pi_fern.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/pi_tree3.mdl b/src/csserver/serverfiles/cstrike/models/pi_tree3.mdl new file mode 100644 index 0000000..34f510c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/pi_tree3.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/props/apache_hunter.mdl b/src/csserver/serverfiles/cstrike/models/props/apache_hunter.mdl new file mode 100644 index 0000000..bad70c8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/props/apache_hunter.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/props/car_hummvee.mdl b/src/csserver/serverfiles/cstrike/models/props/car_hummvee.mdl new file mode 100644 index 0000000..4705172 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/props/car_hummvee.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/props/flag_alb.mdl b/src/csserver/serverfiles/cstrike/models/props/flag_alb.mdl new file mode 100644 index 0000000..0e3dcdc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/props/flag_alb.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/props/truck_tankpacker.mdl b/src/csserver/serverfiles/cstrike/models/props/truck_tankpacker.mdl new file mode 100644 index 0000000..1a8572e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/props/truck_tankpacker.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/rooka/e4g1e_corolla.mdl b/src/csserver/serverfiles/cstrike/models/rooka/e4g1e_corolla.mdl new file mode 100644 index 0000000..7831a94 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/rooka/e4g1e_corolla.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/rooka/nissanprimera.mdl b/src/csserver/serverfiles/cstrike/models/rooka/nissanprimera.mdl new file mode 100644 index 0000000..dc96306 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/rooka/nissanprimera.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/araignee.mdl b/src/csserver/serverfiles/cstrike/models/s3b/araignee.mdl new file mode 100644 index 0000000..d908779 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/araignee.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/arc_bush.mdl b/src/csserver/serverfiles/cstrike/models/s3b/arc_bush.mdl new file mode 100644 index 0000000..ae80565 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/arc_bush.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/chauvesouris.mdl b/src/csserver/serverfiles/cstrike/models/s3b/chauvesouris.mdl new file mode 100644 index 0000000..87255aa Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/chauvesouris.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/cvpt_lampout1.mdl b/src/csserver/serverfiles/cstrike/models/s3b/cvpt_lampout1.mdl new file mode 100644 index 0000000..9623c37 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/cvpt_lampout1.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/forge_tree1.mdl b/src/csserver/serverfiles/cstrike/models/s3b/forge_tree1.mdl new file mode 100644 index 0000000..f21f6e9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/forge_tree1.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/forge_tree3.mdl b/src/csserver/serverfiles/cstrike/models/s3b/forge_tree3.mdl new file mode 100644 index 0000000..0a5a91e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/forge_tree3.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/friendly.mdl b/src/csserver/serverfiles/cstrike/models/s3b/friendly.mdl new file mode 100644 index 0000000..aa7716e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/friendly.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/gargoyle.mdl b/src/csserver/serverfiles/cstrike/models/s3b/gargoyle.mdl new file mode 100644 index 0000000..877f8c3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/gargoyle.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/s3b/utspile.mdl b/src/csserver/serverfiles/cstrike/models/s3b/utspile.mdl new file mode 100644 index 0000000..ced96eb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/s3b/utspile.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/scorpions/bush1.mdl b/src/csserver/serverfiles/cstrike/models/scorpions/bush1.mdl new file mode 100644 index 0000000..46b6fed Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/scorpions/bush1.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/scorpions/palm1.mdl b/src/csserver/serverfiles/cstrike/models/scorpions/palm1.mdl new file mode 100644 index 0000000..39070d9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/scorpions/palm1.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/scorpions/palms2.mdl b/src/csserver/serverfiles/cstrike/models/scorpions/palms2.mdl new file mode 100644 index 0000000..cd9b506 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/scorpions/palms2.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/scorpions/truck.mdl b/src/csserver/serverfiles/cstrike/models/scorpions/truck.mdl new file mode 100644 index 0000000..c92b57a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/scorpions/truck.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/scoutkos/gins_palmfam600_256.mdl b/src/csserver/serverfiles/cstrike/models/scoutkos/gins_palmfam600_256.mdl new file mode 100644 index 0000000..01b9242 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/scoutkos/gins_palmfam600_256.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/smann.mdl b/src/csserver/serverfiles/cstrike/models/smann.mdl new file mode 100644 index 0000000..7b5a588 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/smann.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/spyder.mdl b/src/csserver/serverfiles/cstrike/models/spyder.mdl new file mode 100644 index 0000000..da16145 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/spyder.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/surf_rocks/rocks.mdl b/src/csserver/serverfiles/cstrike/models/surf_rocks/rocks.mdl new file mode 100644 index 0000000..11c8b1e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/surf_rocks/rocks.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/surf_rocks/tree1.mdl b/src/csserver/serverfiles/cstrike/models/surf_rocks/tree1.mdl new file mode 100644 index 0000000..fe2ce00 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/surf_rocks/tree1.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/surf_rocks/tree3.mdl b/src/csserver/serverfiles/cstrike/models/surf_rocks/tree3.mdl new file mode 100644 index 0000000..6bb7673 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/surf_rocks/tree3.mdl differ diff --git a/src/csserver/serverfiles/cstrike/models/wbaum.mdl b/src/csserver/serverfiles/cstrike/models/wbaum.mdl new file mode 100644 index 0000000..9986c61 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/models/wbaum.mdl differ diff --git a/src/csserver/serverfiles/cstrike/noname1.wad b/src/csserver/serverfiles/cstrike/noname1.wad new file mode 100644 index 0000000..951ebb4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/noname1.wad differ diff --git a/src/csserver/serverfiles/cstrike/noname2.wad b/src/csserver/serverfiles/cstrike/noname2.wad new file mode 100644 index 0000000..d0c64d8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/noname2.wad differ diff --git a/src/csserver/serverfiles/cstrike/overviews/aim_viva.tga b/src/csserver/serverfiles/cstrike/overviews/aim_viva.tga new file mode 100644 index 0000000..9c8280e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/aim_viva.tga differ diff --git a/src/csserver/serverfiles/cstrike/overviews/aim_viva.txt b/src/csserver/serverfiles/cstrike/overviews/aim_viva.txt new file mode 100644 index 0000000..a8c3b7d --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/aim_viva.txt @@ -0,0 +1,15 @@ +// overview description file for aim_viva.tga + +global +{ + ZOOM 1.92 + ORIGIN 0 0 -561 + ROTATED 0 +} + +layer +{ + IMAGE "overviews/aim_viva.tga" + HEIGHT -561 +} + diff --git a/src/csserver/serverfiles/cstrike/overviews/awp_damage.bmp b/src/csserver/serverfiles/cstrike/overviews/awp_damage.bmp new file mode 100644 index 0000000..28a621d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/awp_damage.bmp differ diff --git a/src/csserver/serverfiles/cstrike/overviews/awp_damage.txt b/src/csserver/serverfiles/cstrike/overviews/awp_damage.txt new file mode 100644 index 0000000..b4a830a --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/awp_damage.txt @@ -0,0 +1,14 @@ +// overview description file for awp_damage.bsp + +global +{ + ZOOM 1.58 + ORIGIN 44.50 96.00 -159.50 + ROTATED 1 +} + +layer +{ + IMAGE "overviews/awp_damage.bmp" + HEIGHT -448.00 +} diff --git a/src/csserver/serverfiles/cstrike/overviews/awp_gamers_ba.bmp b/src/csserver/serverfiles/cstrike/overviews/awp_gamers_ba.bmp new file mode 100644 index 0000000..78901f9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/awp_gamers_ba.bmp differ diff --git a/src/csserver/serverfiles/cstrike/overviews/awp_gamers_ba.txt b/src/csserver/serverfiles/cstrike/overviews/awp_gamers_ba.txt new file mode 100644 index 0000000..8c7390c --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/awp_gamers_ba.txt @@ -0,0 +1,14 @@ +// overview description file for awp_gamers_ba.bsp + +global +{ + ZOOM 1.77 + ORIGIN 1184.50 42.50 139.00 + ROTATED 0 +} + +layer +{ + IMAGE "overviews/awp_gamers_ba.bmp" + HEIGHT 2.38 +} diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_autumn.tga b/src/csserver/serverfiles/cstrike/overviews/de_esl_autumn.tga new file mode 100644 index 0000000..60e17e1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/de_esl_autumn.tga differ diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_autumn.txt b/src/csserver/serverfiles/cstrike/overviews/de_esl_autumn.txt new file mode 100644 index 0000000..a5cfda8 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/de_esl_autumn.txt @@ -0,0 +1,14 @@ +// overview description file for de_esl_autumn.bsp + +global +{ + ZOOM 1.33 + ORIGIN 288 -416 160 + ROTATED 0 +} + +layer +{ + IMAGE "overviews/de_esl_autumn.tga" + HEIGHT -481 +} diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_scorpions.tga b/src/csserver/serverfiles/cstrike/overviews/de_esl_scorpions.tga new file mode 100644 index 0000000..c2ea516 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/de_esl_scorpions.tga differ diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_scorpions.txt b/src/csserver/serverfiles/cstrike/overviews/de_esl_scorpions.txt new file mode 100644 index 0000000..3198721 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/de_esl_scorpions.txt @@ -0,0 +1,14 @@ +// overview description file for de_esl_scorpions.bsp + +global +{ +ZOOM 1.37 +ORIGIN -1078.04 189.59 114.00 +ROTATED 1 +} + +layer +{ +IMAGE "overviews/de_esl_scorpions.tga" +HEIGHT -232.00 +} \ No newline at end of file diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_village.tga b/src/csserver/serverfiles/cstrike/overviews/de_esl_village.tga new file mode 100644 index 0000000..85706c1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/de_esl_village.tga differ diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_village.txt b/src/csserver/serverfiles/cstrike/overviews/de_esl_village.txt new file mode 100644 index 0000000..cebff80 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/de_esl_village.txt @@ -0,0 +1,14 @@ +// overview description file for de_esl_village.bsp + +global +{ + ZOOM 1.62 + ORIGIN -1144 864 -100 + ROTATED 1 +} + +layer +{ + IMAGE "overviews/de_esl_village.tga" + HEIGHT -457 +} diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_villaggio_b1.bmp b/src/csserver/serverfiles/cstrike/overviews/de_esl_villaggio_b1.bmp new file mode 100644 index 0000000..39ad4ad Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/de_esl_villaggio_b1.bmp differ diff --git a/src/csserver/serverfiles/cstrike/overviews/de_esl_villaggio_b1.txt b/src/csserver/serverfiles/cstrike/overviews/de_esl_villaggio_b1.txt new file mode 100644 index 0000000..23e2a32 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/de_esl_villaggio_b1.txt @@ -0,0 +1,13 @@ +// overview description file for de_esl_villaggio_b1.bmp +global +{ + ZOOM 1.62 + ORIGIN 314.23 -366.57 392.00 + ROTATED 0 +} + +layer +{ + IMAGE "overviews/de_esl_villaggio_b1.bmp" + HEIGHT 913.00 +} diff --git a/src/csserver/serverfiles/cstrike/overviews/de_westwood.bmp b/src/csserver/serverfiles/cstrike/overviews/de_westwood.bmp new file mode 100644 index 0000000..09ad49d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/de_westwood.bmp differ diff --git a/src/csserver/serverfiles/cstrike/overviews/de_westwood.txt b/src/csserver/serverfiles/cstrike/overviews/de_westwood.txt new file mode 100644 index 0000000..34ce242 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/de_westwood.txt @@ -0,0 +1,15 @@ + + +global +{ + ZOOM 2.16 + ORIGIN 1152 512 0 + ROTATED 1 +} + +layer +{ + IMAGE "overviews/de_westwood.bmp" + HEIGHT -369 +} + diff --git a/src/csserver/serverfiles/cstrike/overviews/po_island.bmp b/src/csserver/serverfiles/cstrike/overviews/po_island.bmp new file mode 100644 index 0000000..6cebded Binary files /dev/null and b/src/csserver/serverfiles/cstrike/overviews/po_island.bmp differ diff --git a/src/csserver/serverfiles/cstrike/overviews/po_island.txt b/src/csserver/serverfiles/cstrike/overviews/po_island.txt new file mode 100644 index 0000000..6c01e35 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/po_island.txt @@ -0,0 +1,14 @@ +// overview description file for po_island.bsp + +global +{ + ZOOM 3.49 + ORIGIN 176 -40 -265 + ROTATED 0 +} + +layer +{ + IMAGE "overviews/po_island.bmp" + HEIGHT -265 +} diff --git a/src/csserver/serverfiles/cstrike/overviews/sniperworld.txt b/src/csserver/serverfiles/cstrike/overviews/sniperworld.txt new file mode 100644 index 0000000..b5135de --- /dev/null +++ b/src/csserver/serverfiles/cstrike/overviews/sniperworld.txt @@ -0,0 +1,14 @@ +// overview description file for Sniperworld.bsp + +global +{ + ZOOM 2.19 + ORIGIN -222.67 -621.25 -513.00 + ROTATED 0 +} + +layer +{ + IMAGE "overviews/Sniperworld.tga" + HEIGHT -513.00 +} diff --git a/src/csserver/serverfiles/cstrike/sound/311comeoriginal.wav b/src/csserver/serverfiles/cstrike/sound/311comeoriginal.wav new file mode 100644 index 0000000..0344cdc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/311comeoriginal.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/311mindspin.wav b/src/csserver/serverfiles/cstrike/sound/311mindspin.wav new file mode 100644 index 0000000..bfd7ea6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/311mindspin.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Emi/firefx7.wav b/src/csserver/serverfiles/cstrike/sound/Emi/firefx7.wav new file mode 100644 index 0000000..3ded9b5 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Emi/firefx7.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Emi/time_machine_history.wav b/src/csserver/serverfiles/cstrike/sound/Emi/time_machine_history.wav new file mode 100644 index 0000000..5bdde6a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Emi/time_machine_history.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Emi/time_mch_3.wav b/src/csserver/serverfiles/cstrike/sound/Emi/time_mch_3.wav new file mode 100644 index 0000000..f0a6aca Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Emi/time_mch_3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Emi/time_mch_mistake.wav b/src/csserver/serverfiles/cstrike/sound/Emi/time_mch_mistake.wav new file mode 100644 index 0000000..9771e67 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Emi/time_mch_mistake.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Emi/timemachine.wav b/src/csserver/serverfiles/cstrike/sound/Emi/timemachine.wav new file mode 100644 index 0000000..2d7d9e6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Emi/timemachine.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Emi/warn2.wav b/src/csserver/serverfiles/cstrike/sound/Emi/warn2.wav new file mode 100644 index 0000000..d6a4718 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Emi/warn2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Emi/waterfall.wav b/src/csserver/serverfiles/cstrike/sound/Emi/waterfall.wav new file mode 100644 index 0000000..ade95b9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Emi/waterfall.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Oriental_Melody.wav b/src/csserver/serverfiles/cstrike/sound/Oriental_Melody.wav new file mode 100644 index 0000000..5c193c9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Oriental_Melody.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/assasin.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/assasin.wav new file mode 100644 index 0000000..817e2d3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/assasin.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/bullseye.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/bullseye.wav new file mode 100644 index 0000000..f3bf3af Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/bullseye.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/comboking.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/comboking.wav new file mode 100644 index 0000000..231d330 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/comboking.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/dominating.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/dominating.wav new file mode 100644 index 0000000..c45eda3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/dominating.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/doublekill.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/doublekill.wav new file mode 100644 index 0000000..37330c0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/doublekill.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/doublekill2.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/doublekill2.wav new file mode 100644 index 0000000..f7d69e8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/doublekill2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/eagleeye.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/eagleeye.wav new file mode 100644 index 0000000..9620bff Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/eagleeye.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/excellent.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/excellent.wav new file mode 100644 index 0000000..bc74f87 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/excellent.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood.wav new file mode 100644 index 0000000..9ce8494 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood2.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood2.wav new file mode 100644 index 0000000..3180987 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood3.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood3.wav new file mode 100644 index 0000000..06334e5 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/firstblood3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/flawless.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/flawless.wav new file mode 100644 index 0000000..9694aa0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/flawless.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/godlike.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/godlike.wav new file mode 100644 index 0000000..2760e62 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/godlike.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/hattrick.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/hattrick.wav new file mode 100644 index 0000000..d632519 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/hattrick.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headhunter.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headhunter.wav new file mode 100644 index 0000000..3abbfe4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headhunter.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot.wav new file mode 100644 index 0000000..9d2e3a3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot2.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot2.wav new file mode 100644 index 0000000..0f89227 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot3.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot3.wav new file mode 100644 index 0000000..f375524 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/headshot3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/holyshit.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/holyshit.wav new file mode 100644 index 0000000..8217e92 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/holyshit.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/impressive.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/impressive.wav new file mode 100644 index 0000000..ed9a0ee Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/impressive.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/killingmachine.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/killingmachine.wav new file mode 100644 index 0000000..12d4e7a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/killingmachine.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/killingspree.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/killingspree.wav new file mode 100644 index 0000000..82c1a8e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/killingspree.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife.wav new file mode 100644 index 0000000..be49544 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife2.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife2.wav new file mode 100644 index 0000000..3567282 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife3.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife3.wav new file mode 100644 index 0000000..3d0fde8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/knife3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ludicrouskill.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ludicrouskill.wav new file mode 100644 index 0000000..af2f21d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ludicrouskill.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/maniac.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/maniac.wav new file mode 100644 index 0000000..ae91f74 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/maniac.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/massacre.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/massacre.wav new file mode 100644 index 0000000..ee6acd6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/massacre.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/megakill.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/megakill.wav new file mode 100644 index 0000000..6195057 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/megakill.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/monsterkill.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/monsterkill.wav new file mode 100644 index 0000000..ad17eba Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/monsterkill.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/multikill.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/multikill.wav new file mode 100644 index 0000000..2d10404 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/multikill.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/nade.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/nade.wav new file mode 100644 index 0000000..17d158f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/nade.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/outstanding.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/outstanding.wav new file mode 100644 index 0000000..71fc1c1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/outstanding.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ownage.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ownage.wav new file mode 100644 index 0000000..7ad1f85 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ownage.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/pancake.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/pancake.wav new file mode 100644 index 0000000..66210f4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/pancake.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/payback.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/payback.wav new file mode 100644 index 0000000..224986c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/payback.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare.wav new file mode 100644 index 0000000..c921295 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare2.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare2.wav new file mode 100644 index 0000000..8c8a324 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare3.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare3.wav new file mode 100644 index 0000000..1a59997 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare4.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare4.wav new file mode 100644 index 0000000..efb237e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/prepare4.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/rampage.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/rampage.wav new file mode 100644 index 0000000..021843b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/rampage.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/retribution.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/retribution.wav new file mode 100644 index 0000000..658714c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/retribution.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide.wav new file mode 100644 index 0000000..416a3ad Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide2.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide2.wav new file mode 100644 index 0000000..58c6d40 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide3.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide3.wav new file mode 100644 index 0000000..43a23ed Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide4.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide4.wav new file mode 100644 index 0000000..f328fbc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/suicide4.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/teamkiller.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/teamkiller.wav new file mode 100644 index 0000000..fd3454b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/teamkiller.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/triplekill.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/triplekill.wav new file mode 100644 index 0000000..c8c3ba8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/triplekill.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ultrakill.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ultrakill.wav new file mode 100644 index 0000000..e4d5d82 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/ultrakill.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/unreal.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/unreal.wav new file mode 100644 index 0000000..fa00cf0 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/unreal.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/unstoppable.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/unstoppable.wav new file mode 100644 index 0000000..a57ce8d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/unstoppable.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/vengeance.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/vengeance.wav new file mode 100644 index 0000000..37652d7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/vengeance.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/QuakeSounds/whickedsick.wav b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/whickedsick.wav new file mode 100644 index 0000000..45839bc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/QuakeSounds/whickedsick.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Simpsons_Moes.wav b/src/csserver/serverfiles/cstrike/sound/Simpsons_Moes.wav new file mode 100644 index 0000000..f48f9d8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Simpsons_Moes.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Simpsons_thankyou.wav b/src/csserver/serverfiles/cstrike/sound/Simpsons_thankyou.wav new file mode 100644 index 0000000..4c9457f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Simpsons_thankyou.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Simpsons_welcome.wav b/src/csserver/serverfiles/cstrike/sound/Simpsons_welcome.wav new file mode 100644 index 0000000..aaceca7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Simpsons_welcome.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Trance_high.wav b/src/csserver/serverfiles/cstrike/sound/Trance_high.wav new file mode 100644 index 0000000..6283db3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Trance_high.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/Xmas_Classic_rock.wav b/src/csserver/serverfiles/cstrike/sound/Xmas_Classic_rock.wav new file mode 100644 index 0000000..2ff4701 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/Xmas_Classic_rock.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/aliendoor3.wav b/src/csserver/serverfiles/cstrike/sound/aliendoor3.wav new file mode 100644 index 0000000..b4b67eb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/aliendoor3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/brush_movement1.wav b/src/csserver/serverfiles/cstrike/sound/ambience/brush_movement1.wav new file mode 100644 index 0000000..3ad6624 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/brush_movement1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/hohoho.wav b/src/csserver/serverfiles/cstrike/sound/ambience/hohoho.wav new file mode 100644 index 0000000..1253d4c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/hohoho.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/telsnd8.wav b/src/csserver/serverfiles/cstrike/sound/ambience/telsnd8.wav new file mode 100644 index 0000000..d84b0eb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/telsnd8.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/waterrun.wav b/src/csserver/serverfiles/cstrike/sound/ambience/waterrun.wav new file mode 100644 index 0000000..ade95b9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/waterrun.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/xbellsb.wav b/src/csserver/serverfiles/cstrike/sound/ambience/xbellsb.wav new file mode 100644 index 0000000..cdb5d91 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/xbellsb.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/xbellsc.wav b/src/csserver/serverfiles/cstrike/sound/ambience/xbellsc.wav new file mode 100644 index 0000000..e8bfe83 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/xbellsc.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/xmassa.wav b/src/csserver/serverfiles/cstrike/sound/ambience/xmassa.wav new file mode 100644 index 0000000..074ebed Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/xmassa.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/xwisha.wav b/src/csserver/serverfiles/cstrike/sound/ambience/xwisha.wav new file mode 100644 index 0000000..9b501c2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/xwisha.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/xwishb.wav b/src/csserver/serverfiles/cstrike/sound/ambience/xwishb.wav new file mode 100644 index 0000000..07fb1b1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/xwishb.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ambience/xwishc.wav b/src/csserver/serverfiles/cstrike/sound/ambience/xwishc.wav new file mode 100644 index 0000000..07fb1b1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ambience/xwishc.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/black_high.wav b/src/csserver/serverfiles/cstrike/sound/black_high.wav new file mode 100644 index 0000000..a9c3d8c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/black_high.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/bowserroar.wav b/src/csserver/serverfiles/cstrike/sound/bowserroar.wav new file mode 100644 index 0000000..51c65b1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/bowserroar.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/burnburn.wav b/src/csserver/serverfiles/cstrike/sound/burnburn.wav new file mode 100644 index 0000000..5ab67ab Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/burnburn.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/button3.wav b/src/csserver/serverfiles/cstrike/sound/button3.wav new file mode 100644 index 0000000..61d8fb7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/button3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/coin2.wav b/src/csserver/serverfiles/cstrike/sound/coin2.wav new file mode 100644 index 0000000..a0b23e9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/coin2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/doom.wav b/src/csserver/serverfiles/cstrike/sound/doom.wav new file mode 100644 index 0000000..ce60337 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/doom.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/drunkenninja.wav b/src/csserver/serverfiles/cstrike/sound/drunkenninja.wav new file mode 100644 index 0000000..5e3303e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/drunkenninja.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/eslmap/guitar.wav b/src/csserver/serverfiles/cstrike/sound/eslmap/guitar.wav new file mode 100644 index 0000000..8495866 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/eslmap/guitar.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/forcefield1.wav b/src/csserver/serverfiles/cstrike/sound/forcefield1.wav new file mode 100644 index 0000000..cae1f8e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/forcefield1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/forscorp/GameCfg.wc b/src/csserver/serverfiles/cstrike/sound/forscorp/GameCfg.wc new file mode 100644 index 0000000..663095b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/forscorp/GameCfg.wc differ diff --git a/src/csserver/serverfiles/cstrike/sound/forscorp/beach.wav b/src/csserver/serverfiles/cstrike/sound/forscorp/beach.wav new file mode 100644 index 0000000..b8d3da1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/forscorp/beach.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/forscorp/beach.wav.ztmp b/src/csserver/serverfiles/cstrike/sound/forscorp/beach.wav.ztmp new file mode 100644 index 0000000..4ff4987 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/forscorp/beach.wav.ztmp differ diff --git a/src/csserver/serverfiles/cstrike/sound/forscorp/seagulls.wav b/src/csserver/serverfiles/cstrike/sound/forscorp/seagulls.wav new file mode 100644 index 0000000..09f3844 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/forscorp/seagulls.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/forscorp/seagulls.wav.ztmp b/src/csserver/serverfiles/cstrike/sound/forscorp/seagulls.wav.ztmp new file mode 100644 index 0000000..59e3543 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/forscorp/seagulls.wav.ztmp differ diff --git a/src/csserver/serverfiles/cstrike/sound/glang1.wav b/src/csserver/serverfiles/cstrike/sound/glang1.wav new file mode 100644 index 0000000..beb3358 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/glang1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/hma_311nixhex.wav b/src/csserver/serverfiles/cstrike/sound/hma_311nixhex.wav new file mode 100644 index 0000000..e265df7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/hma_311nixhex.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/hma_daftpunknightvis.wav b/src/csserver/serverfiles/cstrike/sound/hma_daftpunknightvis.wav new file mode 100644 index 0000000..d83de9b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/hma_daftpunknightvis.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/holodisplay.wav b/src/csserver/serverfiles/cstrike/sound/holodisplay.wav new file mode 100644 index 0000000..664af6d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/holodisplay.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/kaboom.wav b/src/csserver/serverfiles/cstrike/sound/kaboom.wav new file mode 100644 index 0000000..cdd5b66 --- /dev/null +++ b/src/csserver/serverfiles/cstrike/sound/kaboom.wav @@ -0,0 +1,26 @@ +<HTML> +<HEAD> +<style type="text/css"> +<!-- +.style1 { + font-family: Verdana, Arial, Helvetica, sans-serif; + color: #CCCCCC; +} +body,td,th { + color: 35485A; +} +body { + background-color: #141F2C; +} +--> +</style> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></HEAD> +<BODY> + + +<h2 class="style1">Uppps ein BREITer 404 Error </h2> +<h3 class="style1">Datei nicht vorhanden :/</h3> +<p class="style1">Falls es ein Website-Bug ist ... Beschwer dich bei zOOm ;) </p> +<p class="style1"><a href="javascript:history.back()"onMouseOver="window.status='Zurück';return true;" onMouseOut="window.status=''">Zurück zur Seite von der du hierher geschickt wurdest (doofe Seite *fg*)</a> </p> +</BODY> +</HTML> diff --git a/src/csserver/serverfiles/cstrike/sound/kata_event1b.wav b/src/csserver/serverfiles/cstrike/sound/kata_event1b.wav new file mode 100644 index 0000000..517d32b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/kata_event1b.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ksys.wav b/src/csserver/serverfiles/cstrike/sound/ksys.wav new file mode 100644 index 0000000..bc01b2c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ksys.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/laguna/la_chirpin.wav b/src/csserver/serverfiles/cstrike/sound/laguna/la_chirpin.wav new file mode 100644 index 0000000..cbabba4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/laguna/la_chirpin.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/las-tur.wav b/src/csserver/serverfiles/cstrike/sound/las-tur.wav new file mode 100644 index 0000000..e2fe746 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/las-tur.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/letitsnow.wav b/src/csserver/serverfiles/cstrike/sound/letitsnow.wav new file mode 100644 index 0000000..fee09b2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/letitsnow.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/m_fall.wav b/src/csserver/serverfiles/cstrike/sound/m_fall.wav new file mode 100644 index 0000000..e519aca Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/m_fall.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/m_thanks.wav b/src/csserver/serverfiles/cstrike/sound/m_thanks.wav new file mode 100644 index 0000000..b96bf58 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/m_thanks.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/magic_moment.wav b/src/csserver/serverfiles/cstrike/sound/magic_moment.wav new file mode 100644 index 0000000..e1a8376 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/magic_moment.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/maya/push.wav b/src/csserver/serverfiles/cstrike/sound/maya/push.wav new file mode 100644 index 0000000..c94c213 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/maya/push.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/maya/sg_close.wav b/src/csserver/serverfiles/cstrike/sound/maya/sg_close.wav new file mode 100644 index 0000000..5dcf702 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/maya/sg_close.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/maya/sg_open.wav b/src/csserver/serverfiles/cstrike/sound/maya/sg_open.wav new file mode 100644 index 0000000..8bdc8bb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/maya/sg_open.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/maya/sg_water.wav b/src/csserver/serverfiles/cstrike/sound/maya/sg_water.wav new file mode 100644 index 0000000..6ba5779 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/maya/sg_water.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/maya/sg_wtrsnd.wav b/src/csserver/serverfiles/cstrike/sound/maya/sg_wtrsnd.wav new file mode 100644 index 0000000..0a8dd77 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/maya/sg_wtrsnd.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/maya/speedup.wav b/src/csserver/serverfiles/cstrike/sound/maya/speedup.wav new file mode 100644 index 0000000..85de2c6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/maya/speedup.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/maya/wormhole.wav b/src/csserver/serverfiles/cstrike/sound/maya/wormhole.wav new file mode 100644 index 0000000..e7a617f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/maya/wormhole.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/misc/bs.wav b/src/csserver/serverfiles/cstrike/sound/misc/bs.wav new file mode 100644 index 0000000..d61e82f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/misc/bs.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/misc/impressive.wav b/src/csserver/serverfiles/cstrike/sound/misc/impressive.wav new file mode 100644 index 0000000..2934af7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/misc/impressive.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/misc/taliban.wav b/src/csserver/serverfiles/cstrike/sound/misc/taliban.wav new file mode 100644 index 0000000..d4e3307 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/misc/taliban.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/nm_goodbadugly.wav b/src/csserver/serverfiles/cstrike/sound/nm_goodbadugly.wav new file mode 100644 index 0000000..cf00f1f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/nm_goodbadugly.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/p-groan1.wav b/src/csserver/serverfiles/cstrike/sound/p-groan1.wav new file mode 100644 index 0000000..94e8c16 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/p-groan1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/pipewarp.wav b/src/csserver/serverfiles/cstrike/sound/pipewarp.wav new file mode 100644 index 0000000..968db83 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/pipewarp.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/psychomotorloop.wav b/src/csserver/serverfiles/cstrike/sound/psychomotorloop.wav new file mode 100644 index 0000000..87ad6f7 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/psychomotorloop.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/rebar_computerbleep1.wav b/src/csserver/serverfiles/cstrike/sound/rebar_computerbleep1.wav new file mode 100644 index 0000000..1c75edd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/rebar_computerbleep1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/rebar_fridge3.wav b/src/csserver/serverfiles/cstrike/sound/rebar_fridge3.wav new file mode 100644 index 0000000..95f16b5 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/rebar_fridge3.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/rebar_motorstartup.wav b/src/csserver/serverfiles/cstrike/sound/rebar_motorstartup.wav new file mode 100644 index 0000000..20a1811 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/rebar_motorstartup.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/rumble1.wav b/src/csserver/serverfiles/cstrike/sound/rumble1.wav new file mode 100644 index 0000000..cb9017c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/rumble1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/rust_forcefield1a.wav b/src/csserver/serverfiles/cstrike/sound/rust_forcefield1a.wav new file mode 100644 index 0000000..7b1b3c2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/rust_forcefield1a.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/scream_ricochet.wav b/src/csserver/serverfiles/cstrike/sound/scream_ricochet.wav new file mode 100644 index 0000000..8c7a05d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/scream_ricochet.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/simpsons_start.wav b/src/csserver/serverfiles/cstrike/sound/simpsons_start.wav new file mode 100644 index 0000000..16e74a8 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/simpsons_start.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/sped/song1.wav b/src/csserver/serverfiles/cstrike/sound/sped/song1.wav new file mode 100644 index 0000000..092c7a2 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/sped/song1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/ssxjump.wav b/src/csserver/serverfiles/cstrike/sound/ssxjump.wav new file mode 100644 index 0000000..193154a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/ssxjump.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_challenge.wav b/src/csserver/serverfiles/cstrike/sound/surf_challenge.wav new file mode 100644 index 0000000..d5bce4a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_challenge.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_rocks/burning1.wav b/src/csserver/serverfiles/cstrike/sound/surf_rocks/burning1.wav new file mode 100644 index 0000000..2155588 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_rocks/burning1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_rocks/rain.wav b/src/csserver/serverfiles/cstrike/sound/surf_rocks/rain.wav new file mode 100644 index 0000000..914abef Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_rocks/rain.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_rocks/rumble1.wav b/src/csserver/serverfiles/cstrike/sound/surf_rocks/rumble1.wav new file mode 100644 index 0000000..cb9017c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_rocks/rumble1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_rocks/waterrun.wav b/src/csserver/serverfiles/cstrike/sound/surf_rocks/waterrun.wav new file mode 100644 index 0000000..ade95b9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_rocks/waterrun.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/chor.wav b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/chor.wav new file mode 100644 index 0000000..058aa71 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/chor.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/df_amb1.wav b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/df_amb1.wav new file mode 100644 index 0000000..b160e58 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/df_amb1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/toonskank.wav b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/toonskank.wav new file mode 100644 index 0000000..bf86e07 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/toonskank.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/ugambience.wav b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/ugambience.wav new file mode 100644 index 0000000..2bb3665 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/ugambience.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/zuma002.wav b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/zuma002.wav new file mode 100644 index 0000000..cc5e51e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/surf_templeoftoon/zuma002.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/tekssx1.wav b/src/csserver/serverfiles/cstrike/sound/tekssx1.wav new file mode 100644 index 0000000..602fd9e Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/tekssx1.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/teleport_ricochet.wav b/src/csserver/serverfiles/cstrike/sound/teleport_ricochet.wav new file mode 100644 index 0000000..3bb4381 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/teleport_ricochet.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/tot_ele.wav b/src/csserver/serverfiles/cstrike/sound/tot_ele.wav new file mode 100644 index 0000000..018d0a4 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/tot_ele.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/waterrun.wav b/src/csserver/serverfiles/cstrike/sound/waterrun.wav new file mode 100644 index 0000000..ade95b9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/waterrun.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/worms.wav b/src/csserver/serverfiles/cstrike/sound/worms.wav new file mode 100644 index 0000000..654ac9f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/worms.wav differ diff --git a/src/csserver/serverfiles/cstrike/sound/xssover.wav b/src/csserver/serverfiles/cstrike/sound/xssover.wav new file mode 100644 index 0000000..09000fa Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sound/xssover.wav differ diff --git a/src/csserver/serverfiles/cstrike/sounds/bw_mtune2.wav b/src/csserver/serverfiles/cstrike/sounds/bw_mtune2.wav new file mode 100644 index 0000000..541d2ef Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sounds/bw_mtune2.wav differ diff --git a/src/csserver/serverfiles/cstrike/sounds/fallscream.wav b/src/csserver/serverfiles/cstrike/sounds/fallscream.wav new file mode 100644 index 0000000..ef3b616 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sounds/fallscream.wav differ diff --git a/src/csserver/serverfiles/cstrike/sounds/rr/escape.wav b/src/csserver/serverfiles/cstrike/sounds/rr/escape.wav new file mode 100644 index 0000000..a66de5c Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sounds/rr/escape.wav differ diff --git a/src/csserver/serverfiles/cstrike/sounds/waterrun.wav b/src/csserver/serverfiles/cstrike/sounds/waterrun.wav new file mode 100644 index 0000000..ade95b9 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sounds/waterrun.wav differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/c-tele1.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/c-tele1.spr new file mode 100644 index 0000000..2faf6c6 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/c-tele1.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/emi_star.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/emi_star.spr new file mode 100644 index 0000000..f8610cf Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/emi_star.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/fire2.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/fire2.spr new file mode 100644 index 0000000..27489bf Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/fire2.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/glow01.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/glow01.spr new file mode 100644 index 0000000..c4693cd Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/glow01.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/hp.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/hp.spr new file mode 100644 index 0000000..67bbf91 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/hp.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/lightgreen.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/lightgreen.spr new file mode 100644 index 0000000..8bcda5d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/lightgreen.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/lightyellow.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/lightyellow.spr new file mode 100644 index 0000000..d083940 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/lightyellow.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/plasma.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/plasma.spr new file mode 100644 index 0000000..13f9317 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/plasma.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/Emi/portal1.spr b/src/csserver/serverfiles/cstrike/sprites/Emi/portal1.spr new file mode 100644 index 0000000..852dc62 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/Emi/portal1.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/comicflame1.spr b/src/csserver/serverfiles/cstrike/sprites/comicflame1.spr new file mode 100644 index 0000000..525dd2b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/comicflame1.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/dragonhit.spr b/src/csserver/serverfiles/cstrike/sprites/dragonhit.spr new file mode 100644 index 0000000..b91d970 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/dragonhit.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/flame.spr b/src/csserver/serverfiles/cstrike/sprites/flame.spr new file mode 100644 index 0000000..576d81f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/flame.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/flame1.spr b/src/csserver/serverfiles/cstrike/sprites/flame1.spr new file mode 100644 index 0000000..74a07cb Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/flame1.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/flames.spr b/src/csserver/serverfiles/cstrike/sprites/flames.spr new file mode 100644 index 0000000..3e64cdc Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/flames.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/flare6.spr b/src/csserver/serverfiles/cstrike/sprites/flare6.spr new file mode 100644 index 0000000..e65f872 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/flare6.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/gausspuff.spr b/src/csserver/serverfiles/cstrike/sprites/gausspuff.spr new file mode 100644 index 0000000..c176c3d Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/gausspuff.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/glow02.spr b/src/csserver/serverfiles/cstrike/sprites/glow02.spr new file mode 100644 index 0000000..ee0cc6f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/glow02.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/glow04.spr b/src/csserver/serverfiles/cstrike/sprites/glow04.spr new file mode 100644 index 0000000..6511137 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/glow04.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/hugeball.spr b/src/csserver/serverfiles/cstrike/sprites/hugeball.spr new file mode 100644 index 0000000..3ce9a2a Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/hugeball.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/kata.spr b/src/csserver/serverfiles/cstrike/sprites/kata.spr new file mode 100644 index 0000000..8a3a338 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/kata.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/kataimpact.spr b/src/csserver/serverfiles/cstrike/sprites/kataimpact.spr new file mode 100644 index 0000000..aaba001 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/kataimpact.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/lgtning.spr b/src/csserver/serverfiles/cstrike/sprites/lgtning.spr new file mode 100644 index 0000000..96f28ba Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/lgtning.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/loz_flame.spr b/src/csserver/serverfiles/cstrike/sprites/loz_flame.spr new file mode 100644 index 0000000..0cd5a34 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/loz_flame.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/maya/sg_open.spr b/src/csserver/serverfiles/cstrike/sprites/maya/sg_open.spr new file mode 100644 index 0000000..e4a263b Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/maya/sg_open.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/sprites/lgtning.spr b/src/csserver/serverfiles/cstrike/sprites/sprites/lgtning.spr new file mode 100644 index 0000000..96f28ba Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/sprites/lgtning.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/sprites/xffloor.spr b/src/csserver/serverfiles/cstrike/sprites/sprites/xffloor.spr new file mode 100644 index 0000000..f7c5780 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/sprites/xffloor.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/sprites/xsmoke1.spr b/src/csserver/serverfiles/cstrike/sprites/sprites/xsmoke1.spr new file mode 100644 index 0000000..5434df3 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/sprites/xsmoke1.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/suicideexplode.spr b/src/csserver/serverfiles/cstrike/sprites/suicideexplode.spr new file mode 100644 index 0000000..54a8370 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/suicideexplode.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/tekssx.spr b/src/csserver/serverfiles/cstrike/sprites/tekssx.spr new file mode 100644 index 0000000..6ae051f Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/tekssx.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/train_warning.spr b/src/csserver/serverfiles/cstrike/sprites/train_warning.spr new file mode 100644 index 0000000..253cd85 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/train_warning.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/xbeam1.spr b/src/csserver/serverfiles/cstrike/sprites/xbeam1.spr new file mode 100644 index 0000000..19fa448 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/xbeam1.spr differ diff --git a/src/csserver/serverfiles/cstrike/sprites/zerogxplode2.spr b/src/csserver/serverfiles/cstrike/sprites/zerogxplode2.spr new file mode 100644 index 0000000..8a3aac1 Binary files /dev/null and b/src/csserver/serverfiles/cstrike/sprites/zerogxplode2.spr differ diff --git a/mapcheck.js b/src/scripts/mapcheck.js similarity index 100% rename from mapcheck.js rename to src/scripts/mapcheck.js