diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1ed28d3..8dfd252 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,101 +6,198 @@ on: - '*' jobs: - build: + build-linux: runs-on: ubuntu-latest + container: centos:centos7 + env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true steps: - - name: Checkout repository - uses: actions/checkout@v3 - + - name: Setting up CentOS 7 mirrorlist + run: | + sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* + sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* + + - name: Installing required packages + run: | + yum install -y git make wget tar zip gcc gcc-c++ glibc-devel.i686 libstdc++-devel.i686 + - name: Install NodeJS uses: actions/setup-node@v3 with: - node-version: 18 - - - name: Install dependencies for Linux + node-version: 12 + + - name: Clone LLHL AGMOD repository run: | - make init-linux + git clone https://github.com/7mochi/llhl-agmod + + - name: Clone LLHL repository + run: | + git clone https://github.com/7mochi/llhl + - name: Clone LLHL Resources repository + run: | + git clone https://github.com/7mochi/llhl-resources + + - name: Build LLHL AGMOD serverfile .so + run: | + cd llhl-agmod + + CPATH=$CPATH:/usr/include/c++/4.8.5/i686-redhat-linux CFG=$CONFIGURATION make -C dlls + - name: Build LLHL proyect (Linux) with node-amxxpack run: | - make build-linux - - - name: Rename dist folder + cd llhl && make init-linux && make build-linux + + - name: Download latest AMX Mod X 1.9 run: | - mv dist dist-linux - - - name: Install dependencies for Windows + wget "https://www.amxmodx.org/latest.php?version=1.9&os=linux&package=base" -O amxx.tar.gz + tar -xzf amxx.tar.gz -C llhl/dist/ag + + - name: Replace hamdata.ini with our custom one run: | - make init-windows + cp -f llhl/assets/addons/amxmodx/configs/hamdata.ini llhl/dist/ag/addons/amxmodx/configs/hamdata.ini + + - name: Create folder and copy LLHL AGMOD .so + run: | + mkdir -p llhl/dist/ag/dlls + cp llhl-agmod/dlls/ag_i386.so llhl/dist/ag/dlls/ag.so + cp llhl-agmod/network/delta.lst llhl/dist/ag/delta.lst - - name: Build LLHL proyect (Windows) with node-amxxpack + - name: Create folder for full release run: | - make build-windows + mkdir -p llhl/dist-full + cp -r llhl/dist/* llhl/dist-full - - name: Generate hashfile.sha1 + - name: Copy LLHL resources to LLHL folder + run: | + cp -r llhl-resources/maps-ag-official/* llhl/dist-full/ag + cp -r llhl-resources/maps-ehll-unofficial/* llhl/dist-full/ag + cp -r llhl-resources/maps-valve-official/* llhl/dist-full/ag + + - name: Prepare releases in zip run: | - # First linux - cd dist-linux + cd llhl/dist && zip -r ../llhl-${{github.ref_name}}-linux.zip * + + - name: Upload artifact (Lite version) + uses: actions/upload-artifact@v3 + with: + name: llhl-${{github.ref_name}}-linux-lite + path: llhl/dist - # Find all files in the dist folder except for a few - find "$PWD" -type f -not -name "llhl.cfg" \ - -and -not -name "plugins.ini" \ - -and -not -name "*.inc" \ - -and -not -name "*.sma" \ - -and -not -name "*.gam" \ - -and -not -name "motd_llhl*" \ - -and -not -name "startup_server.cfg" \ - -and -not -name "*.sha1" \ - -exec sha1sum {} \; > hashfile.sha1 + - name: Upload artifact (Full version) + uses: actions/upload-artifact@v3 + with: + name: llhl-${{github.ref_name}}-linux-full + path: llhl/dist-full - # Go back to root folder - cd $GITHUB_WORKSPACE - - # Move hashfile out of dist folder - mv dist-linux/hashfile.sha1 hashfile.sha1 + build-windows: + runs-on: windows-2019 - # Now windows - cd dist + steps: + - name: Install NodeJS + uses: actions/setup-node@v4 + with: + node-version: 20 - # Find remaining files - find "$PWD" -type f -name "*.dll" -exec sha1sum {} \; > hashfile_2.sha1 + - name: Clone LLHL AGMOD repository + run: | + git clone https://github.com/7mochi/llhl-agmod - # Go back again - cd $GITHUB_WORKSPACE + - name: Clone LLHL repository + run: | + git clone https://github.com/7mochi/llhl + + - name: Clone LLHL Resources repository + run: | + git clone https://github.com/7mochi/llhl-resources - # Move hashfile 2 out of dist folder - mv dist/hashfile_2.sha1 hashfile_2.sha1 + - name: Setup MSBuild.exe + uses: microsoft/setup-msbuild@v1.1 - # Merge the contents of both files - cat hashfile_2.sha1 >> hashfile.sha1 && rm hashfile_2.sha1 + - name: Build LLHL AGMOD serverfile .dll + run: | + cd llhl-agmod - # Remove useless path from the hashfile - sed -e "s,${PWD}/dist-linux/ag/,,g; s,${PWD}/dist/ag/,,g; s,addons/amxmodx/plugins/,,g" -i hashfile.sha1 + msbuild multiplayer.sln -target:ag /p:Configuration=Release - - name: Replace llhl.amxx on windows with the one from linux - run: | - yes | cp -rf dist-linux/ag/addons/amxmodx/plugins/llhl.amxx dist/ag/addons/amxmodx/plugins/llhl.amxx + - name: Build LLHL proyect (Windows) with node-amxxpack + run: | + cd llhl && make init-windows && make build-windows - - name: Download latest AMX Mod X 1.9 - run: | - wget "https://www.amxmodx.org/latest.php?version=1.9&os=linux&package=base" -O amxx-linux.tar.gz - wget "https://www.amxmodx.org/latest.php?version=1.9&os=windows&package=base" -O amxx-windows.zip - tar -xzf amxx-linux.tar.gz -C dist-linux/ag - unzip amxx-windows.zip -d dist/ag - - - name: Prepare releases in zip - run: | - cd dist-linux && zip -r ../llhl-${{github.ref_name}}-linux.zip * && cd $GITHUB_WORKSPACE - cd dist && zip -r ../llhl-${{github.ref_name}}-windows.zip * && cd $GITHUB_WORKSPACE - - - name: Upload all assets (Release) + - name: Download latest AMX Mod X 1.9 + run: | + Invoke-WebRequest -Uri "https://www.amxmodx.org/latest.php?version=1.9&os=windows&package=base" -OutFile amxx.zip + Expand-Archive -Force -Path amxx.zip -DestinationPath llhl/dist/ag + + - name: Replace hamdata.ini with our custom one + run: | + Copy-Item llhl/assets/addons/amxmodx/configs/hamdata.ini llhl/dist/ag/addons/amxmodx/configs/hamdata.ini -Force + + - name: Create folder and copy LLHL AGMOD .dll + run: | + mkdir -p llhl/dist/ag/dlls + Copy-Item llhl-agmod/dlls/msvc/Release/ag.dll llhl/dist/ag/dlls/ag.dll + Copy-Item llhl-agmod/network/delta.lst llhl/dist/ag/delta.lst + + - name: Create folder for full release + run: | + mkdir -p llhl/dist-full + Copy-Item -Path llhl/dist/* -Destination llhl/dist-full -Recurse + + - name: Copy LLHL resources to LLHL folder + run: | + xcopy llhl-resources\maps-ag-official\* llhl\dist-full\ag /E /Y /I + xcopy llhl-resources\maps-ehll-unofficial\* llhl\dist-full\ag /E /Y /I + xcopy llhl-resources\maps-valve-official\* llhl\dist-full\ag /E /Y /I + + - name: Prepare releases in zip + run: | + cd llhl/dist && Compress-Archive -Path * -DestinationPath ../llhl-${{github.ref_name}}-windows.zip + + - name: Upload artifact (Lite version) + uses: actions/upload-artifact@v3 + with: + name: llhl-${{github.ref_name}}-windows-lite + path: llhl/dist + + - name: Upload artifact (Full version) + uses: actions/upload-artifact@v3 + with: + name: llhl-${{github.ref_name}}-windows-full + path: llhl/dist-full + + release: + runs-on: ubuntu-latest + needs: [build-linux, build-windows] + steps: + - name: Download Linux artifact (Lite version) + uses: actions/download-artifact@v3 + with: + name: llhl-${{github.ref_name}}-linux-lite + + - name: Download Linux artifact (Full version) + uses: actions/download-artifact@v3 + with: + name: llhl-${{github.ref_name}}-linux-full + + - name: Download Windows artifact (Lite version) + uses: actions/download-artifact@v3 + with: + name: llhl-${{github.ref_name}}-windows-lite + + - name: Download Windows artifact (Full version) + uses: actions/download-artifact@v3 + with: + name: llhl-${{github.ref_name}}-windows-full + + - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: files: | - ./llhl-${{github.ref_name}}-linux.zip - ./llhl-${{github.ref_name}}-windows.zip - ./dist-linux/ag/addons/amxmodx/plugins/llhl.amxx - ./hashfile.sha1 + llhl-${{github.ref_name}}-linux-lite.zip + llhl-${{github.ref_name}}-linux-full.zip + llhl-${{github.ref_name}}-windows-lite.zip + llhl-${{github.ref_name}}-windows-full.zip env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/README.md b/README.md index 69151d7..5e7dc49 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,64 @@ # ![LLHL Banner](https://raw.githubusercontent.com/FlyingCat-X/llhl/master/LLHL_logo.png) ### [English Version](https://github.com/FlyingCat-X/llhl/blob/master/README.md) | [Spanish Version](https://github.com/FlyingCat-X/llhl/blob/master/README_ES.md) | [Portuguese Version](https://github.com/FlyingCat-X/llhl/blob/master/README_PT.md) | Chinese Version (Pending) -This plugin is a port for Adrenaline Gamer 6.6 (And AGMini) from my [LLHL gamemode](https://github.com/rtxa/agmodx/blob/master/valve/addons/amxmodx/scripting/agmodx_llhl.sma) that was developed for rtxa's agmodx. +This plugin is a port for Adrenaline Gamer 6.6 from my [LLHL gamemode](https://github.com/rtxa/agmodx/blob/master/valve/addons/amxmodx/scripting/agmodx_llhl.sma) that was developed for rtxa's agmodx. Unlike my gamemode for agmodx, this one only supports Protocol 48. # Important notes If you have any problem in your server, before opening an issue or contacting me by any means (Facebook, Whatsapp, Discord, etc.) make sure that the error is related to the LLHL plugin. If you have any problem associated to the plugin try to be as detailed as possible and provide me with logs and ways to get to the error. I won’t give you support if the problem is related to other plugins e.g. dproto or reunion. ## Features -- FPS Limiter (Default value is 144). -- FOV Limiter (Minimum value is 85, disabled by default). +- FPS Limiter (Default value is 144, switchable from 144 to 240 and vice versa, you can toggle between them with the fpslimitmode vote) +- FOV Limiter (Default value is 85, enabled by default). - Records a demo automatically when a match is started (With agstart). - /unstuck command (10 seconds cooldown). - Check certain sound files, they're the same sounds that are verified in the EHLL gamemode - AG6.6. -- Be able to destroy other players satchels (Optional, disabled by default). - Block nickname and model changes when a game is in progress (Optional, both enabled by default). - New intermission mode. - More than 1 HLTV allowed. - Force connected HLTV to have a certain delay value as a minimum (Minimum value is 30). -- Ghostmine Blocker. -- Simple OpenGF32 and AGFix detection (Through cheat commands). +- Nuke blocking capabilities (Lampgauss, ghostmine, rocket, etc) +- Simple OpenGF32 and AGFix detection (Through cheat commands. Optional, enabled by default). - Take screenshots at map end and occasionally when a player dies. -- Avoid abusing a ReHLDS bug (Server disappears from the masterlist when it's' paused) only when there's no game in progress. - Changing model during a match subtract 1 from the score. (Optional, enabled by default). - Block access to players who have the game via Family Sharing. (Optional, disabled by default). -- Random spawns (Optional, disabled by default) -- Blocks location/HP/Weapon/etc messages for spectators -- Check for new updates and it will download them automatically. -- llhl_match_manager command (For administrators only) +- Random spawns (Optional, disabled by default). +- Blocks location/HP/Weapon/etc messages for spectators. +- Block spectators from voting (Optional, enabled by default). +- Respawn time are now FPS-independent. +- Fixes bodies frozen in the air when using high fps. +- Check for new updates and it will notify you in the server console. +- llhl_match_manager command (For administrators only). ## New cvars -- sv_ag_fpslimit_max_fps "144" -- sv_ag_fpslimit_max_detections "2" -- sv_ag_min_default_fov_enabled "0" -- sv_ag_min_default_fov "85" -- sv_ag_cvar_check_interval "1.5" +- sv_ag_fps_limit_warnings "2" +- sv_ag_fps_limit_check_interval "5.0" +- sv_ag_fov_min_enabled "1" +- sv_ag_fov_min_check_interval "1.5" +- sv_ag_fov_min "85" +- sv_ag_respawn_delay "0.75" - sv_ag_unstuck_cooldown "10.0" - sv_ag_unstuck_start_distance "32" - sv_ag_unstuck_max_attempts "64" -- sv_ag_destroyable_satchel "0" -- sv_ag_destroyable_satchel_hp "1" - sv_ag_block_namechange_inmatch "1" - sv_ag_block_modelchange_inmatch "1" - sv_ag_min_hltv_delay "30.0" -- sv_ag_block_ghostmine "1" +- sv_ag_nuke_grenade "0" +- sv_ag_nuke_crossbow "0" +- sv_ag_nuke_rpg "0" +- sv_ag_nuke_gauss "1" +- sv_ag_nuke_egon "0" +- sv_ag_nuke_tripmine "0" +- sv_ag_nuke_satchel "0" +- sv_ag_nuke_snark "0" +- sv_ag_explosion_fix "0" +- sv_ag_cheat_cmd_check "1" - sv_ag_cheat_cmd_check_interval "5.0" - sv_ag_cheat_cmd_max_detections "5" - sv_ag_change_model_penalization "1" - sv_ag_block_family_sharing "0" - sv_ag_random_spawns "0" - sv_ag_block_cmd_enhancements "1" +- sv_ag_block_vote_spectators "1" - sv_ag_steam_api_key "" - sv_ag_check_updates "1" - sv_ag_check_updates_retrys "3" @@ -58,20 +68,18 @@ If you have any problem in your server, before opening an issue or contacting me - sv_ag_autoupdate_dl_retry_delay "3" ## Requirements -- Last version of HLDS (build 8308) or ReHLDS 3.6 or newer (Warning: Last version of ReHLDS for Linux has an auto-aim bug, download version 3.7.0.693 instead). -- Metamod 1.21.37p or newer, I recommend using [this version of metamod](https://github.com/Solokiller/Metamod-P-CMake/releases/tag/v1.21p39) (included and ready to use in development builds). -- Have [AMXX 1.9](https://www.amxmodx.org/downloads-new.php) installed or newer (included and ready to use in development builds). -- AMXX Module: [GoldSrc REST In Pawn (gRIP)](https://forums.alliedmods.net/showthread.php?t=315567) +- Pre-anniversary edition of HLDS (Build 8684) or latest [ReHLDS](https://github.com/dreamstalker/rehlds/releases) installed. 25th Anniversary compatibility hasn't been tested. +- A base installation of [AGMOD](https://openag.pro/latest/ag.7z). +- Metamod 1.21.37p or newer, I recommend using [this version of metamod](https://github.com/theAsmodai/metamod-r/releases/tag/1.3.0.149) +- Have [AMXX 1.9](https://www.amxmodx.org/downloads-new.php) installed or newer. +- AMXX Module: [Curl](https://forums.alliedmods.net/showthread.php?t=285656). -## Download (Stable) +## Download - Full releases: Besides containing everything necessary for the proper functioning of the LLHL gamemode, it has new maps with their respective dependencies (Locs, wads, sprites, sounds, etc). -- Lite releases: Only contain what is necessary for the correct functioning of the LLHL gamemode. (Metamod and AMXX) +- Lite releases: Only contain what is necessary for the correct functioning of the LLHL gamemode. (Metamod, AMXX and the custom AGMOD for LLHL) Download the [Latest Release](https://github.com/FlyingCat-X/llhl/releases/). -## Download (Dev builds) -- You can download them from [Github Actions](https://github.com/FlyingCat-X/llhl/actions). Click on any of the commits you want to try and download the corresponding artifact. (Windows or linux). The artifacts come with everything you need to run LLHL (Plugin, Gamemode .cfg file, Sounds to verify, amxmodx, metamod, etc). - ## Installation (The easy way) - Have a clean installation of Half Life with Adrenaline Gamer ready. - Download any of the latest releases (Full or lite). diff --git a/README_ES.md b/README_ES.md index 3f221c2..9822f70 100644 --- a/README_ES.md +++ b/README_ES.md @@ -1,53 +1,63 @@ # ![LLHL Banner](https://raw.githubusercontent.com/FlyingCat-X/llhl/master/LLHL_logo.png) ### [Versión en Inglés](https://github.com/FlyingCat-X/llhl/blob/master/README.md) | [Versión en Español](https://github.com/FlyingCat-X/llhl/blob/master/README_ES.md) | [Versión en Portugués](https://github.com/FlyingCat-X/llhl/blob/master/README_PT.md) | Versión en Chino (Pendiente) -Este plugin es una adaptación para Adrenaline Gamer 6.6 (y AGMini) de mi [LLHL gamemode](https://github.com/rtxa/agmodx/blob/master/valve/addons/amxmodx/scripting/agmodx_llhl.sma) que fue desarrollado para el agmodx de rtxa. +Este plugin es una adaptación para Adrenaline Gamer 6.6 de mi [LLHL gamemode](https://github.com/rtxa/agmodx/blob/master/valve/addons/amxmodx/scripting/agmodx_llhl.sma) que fue desarrollado para el agmodx de rtxa. A diferencia de mi gamemode para agmodx, este solo es compatible con Protocolo 48. # Consideraciones importantes Si tienes algún problema en tu servidor, antes de abrir una issue o contactarme por cualquier medio (Facebook, Whatsapp, Discord, etc) asegurate de que el error es relacionado al plugin LLHL. Si tienes algún problema asociado al plugin trata de ser lo mas detallado posible y brindarme logs y maneras de como llegar a que salga dicho error. No daré soporte/ayuda si el problema es relacionado a otros plugins como dproto o reunion por ejemplo. ## Características -- Limitador de FPS (el valor por defecto es de 144). -- Limitador de FOV (el valor mínimo es de 85, por defecto está desactivado). +- Limitador de FPS (el valor por defecto es de 144, se puede cambiar de 144 a 240 y viceversa, puedes alternar entre ellos con el voto fpslimitmode). +- Limitador de FOV (el valor por defecto es de 85, por defecto está activado). - Se graba una demo automaticamente cuando se inicia una partida (con agstart). - Comando /unstuck implementado (El tiempo de espera es de 10 segundos para volverlo a usar). - Verificación de archivos de sonido, son los mismos que son checkeados en el EHLL gamemode - AG6.6. -- Posibilidad de destruir las satchels de otros jugadores (Opcional, por defecto está desactivado). - No se permiten cambios de nombre y model cuando hay una partida en curso (Opcional, ambos activados por defecto). - Nuevo modo de espera al finalizar un mapa. - Se fuerza al HLTV conectado a tener un cierto valor de delay como mínimo (Valor mínimo por defecto es 30). -- Bloqueador de ghostmines. -- Detección simple de OpenGF32 y AGFix (Mediante comandos del cheat). +- Capacidades de bloqueo de nukes (Lampgauss, ghostmine, cohetes, etc) +- Detección simple de OpenGF32 y AGFix (Mediante comandos del cheat. Opcional, por defecto está activado). - Toma screenshots al termino de un mapa y ocasionalmente cuando un jugador muere. -- Se evita el abuso de un bug de ReHLDS (el servidor desaparece de la lista mundial cuando está pausado) solo cuando no hay una partida en curso. - Cambiar de model durante una partida resta 1 de la puntuación. (Opcional, por defecto está activado). - Bloquear el acceso a los jugadores que tengan el juego vía prestamo familiar. (Opcional, por defecto está desactivado). - Spawns aleatorias (Opcional, por defecto está desactivado). - Bloquea mensajes de ubicación/HP/arma/etc para los espectadores. -- Verifica si hay nuevas actualizaciones y las descargará automáticamente. -- Comando llhl_match_manager implementado (Solo para administradores) +- Bloquear que los espectadores voten (Opcional, activado por defecto). +- Los tiempos de respawn son ahora independientes de los FPS. +- Arregla los cuerpos congelados en el aire cuando se utilizan altos fps. +- Verifica si hay nuevas actualizaciones y te notificará en la consola del server. +- Comando llhl_match_manager implementado (Solo para administradores). ## Nuevas cvars -- sv_ag_fpslimit_max_fps "144" -- sv_ag_fpslimit_max_detections "2" -- sv_ag_min_default_fov_enabled "0" -- sv_ag_min_default_fov "85" -- sv_ag_cvar_check_interval "1.5" +- sv_ag_fps_limit_warnings "2" +- sv_ag_fps_limit_check_interval "5.0" +- sv_ag_fov_min_enabled "1" +- sv_ag_fov_min_check_interval "1.5" +- sv_ag_fov_min "85" +- sv_ag_respawn_delay "0.75" - sv_ag_unstuck_cooldown "10.0" - sv_ag_unstuck_start_distance "32" - sv_ag_unstuck_max_attempts "64" -- sv_ag_destroyable_satchel "0" -- sv_ag_destroyable_satchel_hp "1" - sv_ag_block_namechange_inmatch "1" - sv_ag_block_modelchange_inmatch "1" - sv_ag_min_hltv_delay "30.0" -- sv_ag_block_ghostmine "1" +- sv_ag_nuke_grenade "0" +- sv_ag_nuke_crossbow "0" +- sv_ag_nuke_rpg "0" +- sv_ag_nuke_gauss "1" +- sv_ag_nuke_egon "0" +- sv_ag_nuke_tripmine "0" +- sv_ag_nuke_satchel "0" +- sv_ag_nuke_snark "0" +- sv_ag_explosion_fix "0 +- sv_ag_cheat_cmd_check "1" - sv_ag_cheat_cmd_check_interval "5.0" - sv_ag_cheat_cmd_max_detections "5" - sv_ag_change_model_penalization "1" - sv_ag_block_family_sharing "0" - sv_ag_random_spawns "0" - sv_ag_block_cmd_enhancements "1" +- sv_ag_block_vote_spectators "1" - sv_ag_steam_api_key "" - sv_ag_check_updates "1" - sv_ag_check_updates_retrys "3" @@ -57,20 +67,18 @@ Si tienes algún problema en tu servidor, antes de abrir una issue o contactarme - sv_ag_autoupdate_dl_retry_delay "3" ## Requerimientos -- Última version de HLDS (build 8308) o ReHLDS 3.6 o más nueva (Advertencia: la versión más reciente de ReHLDS para Linux tiene un bug de auto apuntado, como alternativa se recomienda descargar la version 3.7.0.693). -- Metamod 1.21.37p o más reciente; recomiendo usar [esta versión de metamod](https://github.com/Solokiller/Metamod-P-CMake/releases/tag/v1.21p39) (incluido y listo para usar en versiones de desarrollo). -- Tener [AMXX 1.9](https://www.amxmodx.org/downloads-new.php) instalado o una versión más reciente (incluido y listo para usar en versiones de desarrollo). -- Módulo AMXX: [GoldSrc REST In Pawn (gRIP)](https://forums.alliedmods.net/showthread.php?t=315567) +- Edición de preaniversario de HLDS (Build 8684) o el último [ReHLDS](https://github.com/dreamstalker/rehlds/releases) instalado. La compatibilidad con la versión del 25avo aniversario no ha sido probada. +- Una instalacion base de [AGMOD](https://openag.pro/latest/ag.7z). +- Metamod 1.21.37p o más reciente; recomiendo usar [esta versión de metamod](https://github.com/theAsmodai/metamod-r/releases/tag/1.3.0.149). +- Tener [AMXX 1.9](https://www.amxmodx.org/downloads-new.php) instalado o una versión más reciente. +- Módulo AMXX: [Curl](https://forums.alliedmods.net/showthread.php?t=285656). -## Descargas (Estables) +## Descargas - Paquete full: Además de tener todo lo necesario para el correcto funcionamiento del LLHL gamemode, se incluyen nuevos mapas con sus respectivos archivos adicionales (Locs, wads, sprites, sounds, etc). -- Paquete lite: Solo contiene lo necesario para el adecuado funcionamiento del LLHL gamemode (Metamod y AMXX). +- Paquete lite: Solo contiene lo necesario para el adecuado funcionamiento del LLHL gamemode (Metamod, AMXX el custom AGMOD para LLHL). Descargar la [Última versión](https://github.com/FlyingCat-X/llhl/releases/). -## Descargas (versiones de desarrollo) -- Se pueden descargar de [Github Actions](https://github.com/FlyingCat-X/llhl/actions). Click en cualquiera de los commits que desees probar y descarga el artifact correspondiente (Windows o linux). Los artifacts tienen todo lo que se necesita para correr el LLHL (Plugin, archivo .cfg del gamemode, sonidos a verificar, amxmodx, metamod, etc). - ## Instalación (La manera fácil) - Tener instalado Half-Life con Adrenaline Gamer listo para usar. - Descarga cualquiera de los paquetes (full o lite). diff --git a/README_PT.md b/README_PT.md index d0c5fe7..409f6b3 100644 --- a/README_PT.md +++ b/README_PT.md @@ -1,52 +1,62 @@ # ![LLHL Banner](https://raw.githubusercontent.com/FlyingCat-X/llhl/master/LLHL_logo.png) ### [Versão em inglês](https://github.com/FlyingCat-X/llhl/blob/master/README.md) | [Versão em espanhol](https://github.com/FlyingCat-X/llhl/blob/master/README_ES.md) | [Versão em português](https://github.com/FlyingCat-X/llhl/blob/master/README_PT.md) | Versão em chinês (Pendente) -Este plugin é uma adaptação para Adrenaline Gamer 6.6 (e AGMini) do meu [modo de jogo LLHL](https://github.com/rtxa/agmodx/blob/master/valve/addons/amxmodx/scripting/agmodx_llhl.sma) que foi desenvolvido para rtxa agmodx. A diferença do meu modo de jogo para agmodx, este suporta apenas o Portocolo 48. +Este plugin é uma adaptação para Adrenaline Gamer 6.6 do meu [modo de jogo LLHL](https://github.com/rtxa/agmodx/blob/master/valve/addons/amxmodx/scripting/agmodx_llhl.sma) que foi desenvolvido para rtxa agmodx. A diferença do meu modo de jogo para agmodx, este suporta apenas o Portocolo 48. # Considerações importantes Se tiver um problema no seu servidor antes de abrir uma issue ou entrar em contato comigo por qualquer meio (Facebook, Whatsapp, Discord, etc) certifique-se de que o erro esteja relacionado ao plugin LLHL. Si tiver algum problema associado a o plugin tente ser o mais detalhado possível e forneça logs e maneiras de resolver esse erro. Não darei suporte / ajuda se o problema estiver relacionado a outros plugins como dproto ou reunion por exemplo. ## Características -- Limitador de FPS (o valor por padrão e de 144). -- Limitador de FOV (o valor mínimo é 85, por padrão está desabilitado). +- Limitador de FPS (o valor por padrão e de 144, pode ser alternado de 144 para 240 e vice-versa, pode alternar entre eles com o voto fpslimitmode). +- Limitador de FOV (o valor por padrão e de 85, por padrão está ativado). - Uma demonstração e gravada automaticamente quando uma partida começa (con agstart). - Comando /unstuck implementado (O tempo de espera é de 10 segundos para usá-lo de volta). - Verificação dos arquivos de som, são os mesmos verificados no modo de jogo EHLL - AG6.6. -- Possibilidade de destruir as satchels de outros jogadores (Opcional, por padrão está desativado) - Não são permitidas mudanças de nome e model quando um jogo está em andamento (opcional ambos ativados por padrão). - Novo modo de espera ao terminar um mapa. - Es forçado a ter HLTV conectado um certo valor de delay pelo mínimo (o valor padrão mínimo é 30). -- Bloqueador de ghostmines. -- Detecção simples de OpenGF32 e AGFix (Atraves do comandos do cheat) +- Capacidades de bloqueio de nukes (Lampgauss, ghostmine, rocket, etc.) +- Detecção simples de OpenGF32 e AGFix (Atraves do comandos do cheat. Opcional, por padrão está activado). - Faça screenshots no final de um mapa e ocasionalmente quando um jogador morre. -- Evite o abuso de um bug ReHLDS (o servidor desaparece da lista da mundial quando e pausado) apenas quando não há uma match em andamento. - A mudança de model durante uma partida subtrai 1 da pontuação. (Opcional, por padrão está activado). - Bloquear o acesso aos jogadores que têm o jogo através do compartilhamento de bibliotecas. - Spawns aleatórias (Opcional, por padrão está desabilitado). - Localização dos blocos/Mensagens de localização/HP/Weapon/etc para os espectadores. -- Verifica se há novas actualizações e vai baixar automaticamente. -- Comando llhl_match_manager implementado (Apenas para administradores) +- Bloquear a votação dos espectadores (opcional, por padrão está ativado). +- Os tempos de respawn são agora independentes do FPS. +- Corrige corpos congelados em pleno ar quando se usa fps elevado. +- Verifica se há novas actualizações e será notificado na consola do servidor. +- Comando llhl_match_manager implementado (Apenas para administradores). ## Novas cvars -- sv_ag_fpslimit_max_fps "144" -- sv_ag_fpslimit_max_detections "2" -- sv_ag_min_default_fov_enabled "0" -- sv_ag_min_default_fov "85" -- sv_ag_cvar_check_interval "1.5" +- sv_ag_fps_limit_warnings "2" +- sv_ag_fps_limit_check_interval "5.0" +- sv_ag_fov_min_enabled "1" +- sv_ag_fov_min_check_interval "1.5" +- sv_ag_fov_min "85" +- sv_ag_respawn_delay "0.75" - sv_ag_unstuck_cooldown "10.0" - sv_ag_unstuck_start_distance "32" - sv_ag_unstuck_max_attempts "64" -- sv_ag_destroyable_satchel "0" -- sv_ag_destroyable_satchel_hp "1" - sv_ag_block_namechange_inmatch "1" - sv_ag_block_modelchange_inmatch "1" - sv_ag_min_hltv_delay "30.0" -- sv_ag_block_ghostmine "1" +- sv_ag_nuke_grenade "0" +- sv_ag_nuke_crossbow "0" +- sv_ag_nuke_rpg "0" +- sv_ag_nuke_gauss "1" +- sv_ag_nuke_egon "0" +- sv_ag_nuke_tripmine "0" +- sv_ag_nuke_satchel "0" +- sv_ag_nuke_snark "0" +- sv_ag_explosion_fix "0" +- sv_ag_cheat_cmd_check "1" - sv_ag_cheat_cmd_check_interval "5.0" - sv_ag_cheat_cmd_max_detections "5" - sv_ag_change_model_penalization "1" - sv_ag_block_family_sharing "0" - sv_ag_random_spawns "0" - sv_ag_block_cmd_enhancements "1" +- sv_ag_block_vote_spectators "1" - sv_ag_steam_api_key "" - sv_ag_check_updates "1" - sv_ag_check_updates_retrys "3" @@ -56,20 +66,18 @@ Se tiver um problema no seu servidor antes de abrir uma issue ou entrar em conta - sv_ag_autoupdate_dl_retry_delay "3" ## Requisitos -- Versão mais recente do HLDS (build 8308) ou ReHLDS 3.6 ou mais recente (Atenção: a versão mais recente do ReHLDS para Linux tem um bug de auto-apontar, como alternativa é recomendado baixar a versão 3.7.0.693). -- Metamod 1.21.37p ou mais recente; recomendo usar [esta versão do metamod](https://github.com/Solokiller/Metamod-P-CMake/releases/tag/v1.21p39) (incluído e pronto para uso em versões de desenvolvimento). -- Ter AMXX 1.9 instalado a versão mais recente (incluído e pronto para uso em versões de desenvolvimento). -- Módulo AMXX: [GoldSrc REST In Pawn (gRIP)](https://forums.alliedmods.net/showthread.php?t=315567) +- Edição pré-aniversário do HLDS (Build 8684) ou a última versão [ReHLDS] (https://github.com/dreamstalker/rehlds/releases) instalada. A compatibilidade com a versão do 25º aniversário não foi testada. +- Uma instalação base do [AGMOD](https://openag.pro/latest/ag.7z) +- Metamod 1.21.37p ou mais recente; recomendo usar [esta versão do metamod](https://github.com/theAsmodai/metamod-r/releases/tag/1.3.0.149). +- Ter [AMXX 1.9](https://www.amxmodx.org/downloads-new.php) instalado a versão mais recente. +- Módulo AMXX: [Curl](https://forums.alliedmods.net/showthread.php?t=285656) -## Downloads (Estável) +## Downloads - Pacote completo: Além de ter todo o necessário para o correto funcionamento do LLHL gamemode, novos mapas são incluídos com seus respectivos arquivos adicionais (Locs, wads, sprites, sounds, etc). -- Pacote Lite: Contém apenas o necessário para o bom funcionamento do LLHL gamemode (Metamod y AMXX). +- Pacote Lite: Contém apenas o necessário para o bom funcionamento do LLHL gamemode (Metamod, AMXX e o AGMOD personalizado para LLHL). Baixe a [última versão](https://github.com/FlyingCat-X/llhl/releases/). -## Downloads (versões de desenvolvimento) -- Podem ser baixados do [Github Actions](https://github.com/FlyingCat-X/llhl/actions). Clique em qualquer um dos commits que deseja testar e baixe o artifact correspondente (Windows ou linux). Os artifacts têm tudo o que precisa para executar o LLHL (Plugin, arquivo .cfg de gamemode, sons para verificar, amxmodx, metamod, etc). - ## Instalação (a maneira fácil) - Ter o Half-Life instalado com o Adrenaline Gamer pronto para usar. - Baixe qualquer um dos pacotes (full o lite). diff --git a/assets/addons/amxmodx/configs/hamdata.ini b/assets/addons/amxmodx/configs/hamdata.ini new file mode 100644 index 0000000..27a3a99 --- /dev/null +++ b/assets/addons/amxmodx/configs/hamdata.ini @@ -0,0 +1,4187 @@ +; 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 +@mirror valve dmc + +; Bugfixed and improved HL release: http://aghl.ru/forum/viewtopic.php?f=32&t=686 +@section valve_aghlru 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 + 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 44 + think 45 + touch 46 + use 47 + blocked 48 + respawn 49 + updateowner 50 + fbecomeprone 51 + center 52 + eyeposition 53 + earposition 54 + bodytarget 55 + illumination 56 + fvisible 57 + fvecvisible 58 + + look 60 + changeyaw 63 + irelationship 65 + monsterinitdead 67 + becomedead 68 + bestvisibleenemy 70 + finviewcone 71 + fvecinviewcone 72 + + runai 61 + monsterthink 64 + monsterinit 66 + checklocalmove 73 + move 74 + moveexecute 75 + shouldadvanceroute 76 + getstoppedactivity 77 + stop 78 + checkrangeattack1 79 + checkrangeattack2 80 + checkmeleeattack1 81 + checkmeleeattack2 82 + schedulechange 88 + canplaysequence 89 + canplaysentence 90 + playsentence 91 + playscriptedsentence 92 + sentencestop 93 + getidealstate 94 + setactivity 95 + reportaistate 96 + checkenemy 97 + ftriangulate 98 + setyawspeed 99 + buildnearestroute 100 + findcover 101 + coverradius 103 + fcancheckattacks 104 + checkammo 105 + ignoreconditions 106 + fvalidatehinttype 107 + fcanactiveidle 108 + isoundmask 109 + hearingsensitivity 112 + barnaclevictimbitten 113 + barnaclevictimreleased 114 + preschedulethink 115 + getdeathactivity 116 + gibmonster 117 + hashumangibs 118 + hasaliengibs 119 + fademonster 120 + deathsound 122 + alertsound 123 + idlesound 124 + painsound 125 + stopfollowing 126 + + player_jump 127 + player_duck 128 + player_prethink 129 + player_postthink 130 + player_getgunposition 121 + player_shouldfadeondeath 62 + player_impulsecommands 132 + player_updateclientdata 131 + + item_addtoplayer 60 + item_addduplicate 61 + item_getiteminfo 62 + item_candeploy 63 + item_deploy 64 + item_canholster 65 + item_holster 66 + item_updateiteminfo 67 + item_preframe 68 + item_postframe 69 + item_drop 70 + item_kill 71 + item_attachtoplayer 72 + item_primaryammoindex 73 + item_secondaryammoindex 74 + item_updateclientdata 75 + item_getweaponptr 76 + item_itemslot 77 + + weapon_extractammo 78 + weapon_extractclipammo 79 + weapon_addweapon 80 + weapon_playemptysound 81 + weapon_resetemptysound 82 + weapon_sendweaponanim 83 + weapon_isusable 84 + weapon_primaryattack 85 + weapon_secondaryattack 86 + weapon_reload 87 + weapon_weaponidle 88 + weapon_retireweapon 89 + weapon_shouldweaponidle 90 + weapon_usedecrement 91 +@end +@section valve_aghlru 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 + + look 58 + changeyaw 61 + irelationship 63 + monsterinitdead 65 + becomedead 66 + bestvisibleenemy 68 + finviewcone 69 + fvecinviewcone 70 + + runai 59 + monsterthink 62 + monsterinit 64 + checklocalmove 71 + move 72 + moveexecute 73 + shouldadvanceroute 74 + getstoppedactivity 75 + stop 76 + checkrangeattack1 77 + checkrangeattack2 78 + checkmeleeattack1 79 + checkmeleeattack2 80 + schedulechange 86 + canplaysequence 87 + canplaysentence 88 + playsentence 89 + playscriptedsentence 90 + sentencestop 91 + getidealstate 92 + setactivity 93 + reportaistate 94 + checkenemy 95 + ftriangulate 96 + setyawspeed 97 + buildnearestroute 98 + findcover 99 + coverradius 101 + fcancheckattacks 102 + checkammo 103 + ignoreconditions 104 + fvalidatehinttype 105 + fcanactiveidle 106 + isoundmask 107 + hearingsensitivity 110 + barnaclevictimbitten 111 + barnaclevictimreleased 112 + preschedulethink 113 + getdeathactivity 114 + gibmonster 115 + hashumangibs 116 + hasaliengibs 117 + fademonster 118 + deathsound 120 + alertsound 121 + idlesound 122 + painsound 123 + stopfollowing 124 + + 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 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 + changeyaw 59 + hashumangibs 60 + hasaliengibs 61 + fademonster 62 + gibmonster 63 + getdeathactivity 64 + becomedead 65 + irelationship 67 + painsound 68 + reportaistate 70 + monsterinitdead 71 + look 72 + bestvisibleenemy 73 + finviewcone 74 + fvecinviewcone 75 + + 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_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_isweapon 65 + cstrike_item_getmaxspeed 78 + cstrike_weapon_sendweaponanim 85 + cstrike_player_resetmaxspeed 69 + cstrike_player_isbot 81 + cstrike_player_getautoaimvector 85 + cstrike_player_blind 86 + cstrike_player_ontouchingweapon 87 + +@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 + fvecvisible 56 + fvisible 57 + changeyaw 59 + hashumangibs 60 + hasaliengibs 61 + fademonster 62 + gibmonster 63 + getdeathactivity 64 + becomedead 65 + irelationship 67 + painsound 68 + reportaistate 70 + monsterinitdead 71 + look 72 + bestvisibleenemy 73 + finviewcone 75 + fvecinviewcone 74 + + 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_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_isweapon 65 + cstrike_item_getmaxspeed 78 + cstrike_weapon_sendweaponanim 85 + cstrike_player_resetmaxspeed 69 + cstrike_player_isbot 81 + cstrike_player_getautoaimvector 85 + cstrike_player_blind 86 + cstrike_player_ontouchingweapon 87 +@end + +@section dod linux + pev 4 + base 0x0 + + spawn 3 + precache 4 + keyvalue 5 + objectcaps 8 + activate 9 + setobjectcollisionbox 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 38 + 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 + + look 64 + changeyaw 67 + irelationship 69 + monsterinitdead 71 + bestvisibleenemy 74 + finviewcone 75 + fvecinviewcone 76 + + runai 65 + monsterthink 68 + monsterinit 70 + checklocalmove 77 + move 78 + moveexecute 79 + shouldadvanceroute 80 + getstoppedactivity 81 + stop 82 + checkrangeattack1 83 + checkrangeattack2 84 + checkmeleeattack1 85 + checkmeleeattack2 86 + schedulechange 92 + canplaysequence 93 + canplaysentence 94 + playsentence 95 + playscriptedsentence 96 + sentencestop 97 + getidealstate 98 + setactivity 99 + reportaistate 100 + checkenemy 101 + ftriangulate 102 + setyawspeed 103 + buildnearestroute 104 + findcover 105 + coverradius 107 + fcancheckattacks 108 + checkammo 109 + ignoreconditions 110 + fvalidatehinttype 111 + fcanactiveidle 112 + isoundmask 113 + hearingsensitivity 116 + barnaclevictimbitten 117 + barnaclevictimreleased 118 + preschedulethink 120 + getdeathactivity 121 + gibmonster 122 + hashumangibs 123 + hasaliengibs 124 + fademonster 125 + deathsound 127 + alertsound 128 + idlesound 129 + painsound 130 + stopfollowing 131 + + 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_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_setscriptreset 119 + + dod_item_candrop 70 + dod_item_spawndeploy 69 + dod_item_setdmgtime 71 + dod_item_dropgren 72 + + dod_weapon_sendweaponanim 91 + dod_weapon_isuseable 92 + dod_weapon_aim 93 + dod_weapon_flaim 94 + dod_weapon_removestamina 95 + dod_weapon_changefov 96 + dod_weapon_zoomout 97 + dod_weapon_zoomin 98 + dod_weapon_getfov 99 + dod_weapon_playeriswatersniping 100 + dod_weapon_updatezoomspeed 101 + dod_weapon_special 105 +@end +@section dod windows + pev 4 + base 0x0 + + spawn 3 + precache 4 + keyvalue 5 + objectcaps 8 + activate 9 + setobjectcollisionbox 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 38 + 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 62 + fvecvisible 61 + + look 64 + changeyaw 67 + irelationship 69 + monsterinitdead 71 + bestvisibleenemy 74 + finviewcone 76 + fvecinviewcone 75 + + runai 65 + monsterthink 68 + monsterinit 70 + checklocalmove 77 + move 78 + moveexecute 79 + shouldadvanceroute 80 + getstoppedactivity 81 + stop 82 + checkrangeattack1 83 + checkrangeattack2 84 + checkmeleeattack1 85 + checkmeleeattack2 86 + schedulechange 92 + canplaysequence 93 + canplaysentence 94 + playsentence 95 + playscriptedsentence 96 + sentencestop 97 + getidealstate 98 + setactivity 99 + reportaistate 100 + checkenemy 101 + ftriangulate 102 + setyawspeed 103 + buildnearestroute 104 + findcover 105 + coverradius 107 + fcancheckattacks 108 + checkammo 109 + ignoreconditions 110 + fvalidatehinttype 111 + fcanactiveidle 112 + isoundmask 113 + hearingsensitivity 116 + barnaclevictimbitten 117 + barnaclevictimreleased 118 + preschedulethink 120 + getdeathactivity 121 + gibmonster 122 + hashumangibs 123 + hasaliengibs 124 + fademonster 125 + deathsound 127 + alertsound 128 + idlesound 129 + painsound 130 + stopfollowing 131 + + 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_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 16 + dod_getstateent 15 + dod_setscriptreset 119 + + dod_item_candrop 70 + dod_item_spawndeploy 69 + dod_item_setdmgtime 71 + dod_item_dropgren 72 + + dod_weapon_sendweaponanim 91 + dod_weapon_isuseable 92 + dod_weapon_aim 93 + dod_weapon_flaim 94 + dod_weapon_removestamina 95 + dod_weapon_changefov 96 + dod_weapon_zoomout 97 + dod_weapon_zoomin 98 + dod_weapon_getfov 99 + dod_weapon_playeriswatersniping 100 + dod_weapon_updatezoomspeed 101 + dod_weapon_special 105 +@end + +; TFC Does not have the following "standard" entries in its vtable: +; addpoints, addpointstoteam, getgunposition, teamid, usedecrement, updateclientdata +@section tfc linux + pev 4 + base 0x0 + + spawn 2 + precache 3 + keyvalue 4 + objectcaps 7 + activate 8 + setobjectcollisionbox 9 + classify 10 + deathnotice 11 + traceattack 12 + takedamage 13 + takehealth 14 + bloodcolor 16 + tracebleed 17 + mymonsterpointer 19 + mysquadmonsterpointer 20 + gettogglestate 21 + addplayeritem 22 + removeplayeritem 23 + 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 + 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 + + look 66 + changeyaw 69 + irelationship 71 + monsterinitdead 73 + becomedead 74 + bestvisibleenemy 76 + finviewcone 77 + fvecinviewcone 78 + + runai 67 + monsterthink 70 + monsterinit 72 + checklocalmove 79 + move 80 + moveexecute 81 + shouldadvanceroute 82 + getstoppedactivity 83 + stop 84 + checkrangeattack1 85 + checkrangeattack2 86 + checkmeleeattack1 87 + checkmeleeattack2 88 + schedulechange 94 + canplaysequence 95 + canplaysentence 96 + playsentence 97 + playscriptedsentence 98 + sentencestop 99 + getidealstate 100 + setactivity 101 + reportaistate 102 + checkenemy 103 + ftriangulate 104 + setyawspeed 105 + buildnearestroute 106 + findcover 107 + coverradius 109 + fcancheckattacks 110 + checkammo 111 + ignoreconditions 112 + fvalidatehinttype 113 + fcanactiveidle 114 + isoundmask 115 + hearingsensitivity 118 + barnaclevictimbitten 119 + barnaclevictimreleased 120 + preschedulethink 121 + getdeathactivity 122 + gibmonster 123 + hashumangibs 124 + hasaliengibs 125 + fademonster 126 + deathsound 129 + alertsound 130 + idlesound 131 + painsound 132 + stopfollowing 133 + + player_jump 134 + player_duck 135 + player_prethink 136 + player_postthink 137 + player_shouldfadeondeath 68 + player_impulsecommands 138 + + item_addtoplayer 66 + item_addduplicate 67 + item_getiteminfo 69 + item_candeploy 70 + item_deploy 71 + item_canholster 72 + item_holster 73 + 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 68 + + weapon_extractammo 84 + weapon_extractclipammo 85 + weapon_addweapon 86 + weapon_playemptysound 87 + weapon_resetemptysound 88 + weapon_sendweaponanim 89 + weapon_isusable 90 + weapon_primaryattack 91 + weapon_secondaryattack 92 + weapon_reload 93 + weapon_weaponidle 94 + weapon_retireweapon 95 + weapon_shouldweaponidle 96 + weapon_getnextattackdelay 97 + + tfc_killed 15 + tfc_istriggered 18 + tfc_giveammo 24 + tfc_dbgetitemname 41 + tfc_engineeruse 57 + tfc_finished 58 + tfc_empexplode 59 + tfc_calcempdmgrad 60 + tfc_takeempblast 61 + tfc_empremove 62 + tfc_takeconcussionblast 63 + tfc_concuss 64 + tfc_radiusdamage 127 + tfc_radiusdamage2 128 +@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 + bloodcolor 15 + tracebleed 16 + mymonsterpointer 18 + mysquadmonsterpointer 19 + gettogglestate 20 + addplayeritem 21 + removeplayeritem 22 + 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 55 + fvecvisible 54 + + look 65 + changeyaw 68 + irelationship 70 + monsterinitdead 72 + becomedead 73 + bestvisibleenemy 75 + finviewcone 77 + fvecinviewcone 76 + + runai 66 + monsterthink 69 + monsterinit 71 + checklocalmove 78 + move 79 + moveexecute 80 + shouldadvanceroute 81 + getstoppedactivity 82 + stop 83 + checkrangeattack1 84 + checkrangeattack2 85 + checkmeleeattack1 86 + checkmeleeattack2 87 + schedulechange 93 + canplaysequence 94 + canplaysentence 95 + playsentence 96 + playscriptedsentence 97 + sentencestop 98 + getidealstate 99 + setactivity 100 + reportaistate 101 + checkenemy 102 + ftriangulate 103 + setyawspeed 104 + buildnearestroute 105 + findcover 106 + coverradius 108 + fcancheckattacks 109 + checkammo 110 + ignoreconditions 111 + fvalidatehinttype 112 + fcanactiveidle 113 + isoundmask 114 + hearingsensitivity 117 + barnaclevictimbitten 118 + barnaclevictimreleased 119 + preschedulethink 120 + getdeathactivity 121 + gibmonster 122 + hashumangibs 123 + hasaliengibs 124 + fademonster 125 + deathsound 128 + alertsound 129 + idlesound 130 + painsound 131 + stopfollowing 132 + + 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 + wepaon_getnextattackdelay 96 + + tfc_killed 14 + tfc_istriggered 17 + tfc_giveammo 23 + tfc_dbgetitemname 40 + tfc_engineeruse 56 + tfc_finished 57 + tfc_empexplode 58 + tfc_calcempdmgrad 59 + tfc_takeempblast 60 + tfc_empremove 61 + tfc_takeconcussionblast 62 + tfc_concuss 63 + tfc_radiusdamage 127 + tfc_radiusdamage2 126 +@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 + + changeyaw 65 + hashumangibs 66 + hasaliengibs 67 + fademonster 68 + gibmonster 69 + getdeathactivity 70 + becomedead 71 + irelationship 73 + painsound 74 + reportaistate 75 + monsterinitdead 76 + look 77 + bestvisibleenemy 78 + finviewcone 80 + fvecinviewcone 81 + + 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 + ns_setbonecontroller 63 + ns_savedataforreset 64 + ns_gethull 79 + ns_getmaxwalkspeed 88 + ns_setteamid 90 + ns_geteffectiveplayerclass 91 + ns_getauthenticationmask 92 + ns_effectiveplayerclasschanged 93 + ns_needsteamupdate 94 + ns_sendteamupdate 95 + ns_sendweaponupdate 96 + ns_initplayerfromspawn 97 + ns_packdeadplayeritems 98 + ns_getanimationforactivity 100 + ns_startobserver 102 + ns_stopobserver 103 + ns_getadrenalinefactor 104 + ns_givenameditem 106 + ns_suicide 107 + ns_getcanuseweapon 108 + + ns_weapon_getweaponprimetime 90 + ns_weapon_primeweapon 91 + ns_weapon_getisweaponprimed 92 + ns_weapon_getisweaponpriming 93 + ns_weapon_defaultdeploy 95 + ns_weapon_defaultreload 96 + ns_weapon_getdeploytime 97 +@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 + + changeyaw 65 + hashumangibs 66 + hasaliengibs 67 + fademonster 68 + gibmonster 69 + getdeathactivity 70 + becomedead 71 + irelationship 73 + painsound 74 + reportaistate 75 + monsterinitdead 76 + look 77 + bestvisibleenemy 78 + finviewcone 80 + fvecinviewcone 81 + + 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 + ns_setbonecontroller 63 + ns_savedataforreset 64 + ns_gethull 79 + ns_getmaxwalkspeed 88 + ns_setteamid 90 + ns_geteffectiveplayerclass 91 + ns_getauthenticationmask 92 + ns_effectiveplayerclasschanged 93 + ns_needsteamupdate 94 + ns_sendteamupdate 95 + ns_sendweaponupdate 96 + ns_initplayerfromspawn 97 + ns_packdeadplayeritems 98 + ns_getanimationforactivity 100 + ns_startobserver 102 + ns_stopobserver 103 + ns_getadrenalinefactor 104 + ns_givenameditem 106 + ns_suicide 107 + ns_getcanuseweapon 108 + + ns_weapon_getweaponprimetime 90 + ns_weapon_primeweapon 91 + ns_weapon_getisweaponprimed 92 + ns_weapon_getisweaponpriming 93 + ns_weapon_defaultdeploy 95 + ns_weapon_defaultreload 96 + ns_weapon_getdeploytime 97 +@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 + + changeyaw 70 + hashumangibs 71 + hasaliengibs 72 + fademonster 73 + gibmonster 74 + getdeathactivity 75 + becomedead 76 + irelationship 78 + painsound 79 + reportaistate 80 + monsterinitdead 81 + look 82 + bestvisibleenemy 83 + finviewcone 84 + fvecinviewcone 85 + + 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 + + changeyaw 68 + hashumangibs 69 + hasaliengibs 70 + fademonster 71 + gibmonster 72 + getdeathactivity 73 + becomedead 74 + irelationship 76 + painsound 77 + reportaistate 78 + monsterinitdead 79 + look 80 + bestvisibleenemy 81 + finviewcone 82 + fvecinviewcone 83 + + 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 + +; Sven-Coop 4.8 +@section svencoop linux + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + irelationship 10 + classify 11 + deathnotice 12 + traceattack 13 + takedamage 14 + killed 17 + bloodcolor 18 + tracebleed 19 + istriggered 20 + mymonsterpointer 21 + mysquadmonsterpointer 22 + gettogglestate 23 + addpoints 24 + addpointstoteam 25 + addplayeritem 26 + removeplayeritem 27 + getdelay 29 + ismoving 30 + overridereset 31 + damagedecal 32 + settogglestate 33 + startsneaking 34 + stopsneaking 35 + oncontrols 36 + issneaking 37 + isalive 38 + isbspmodel 39 + reflectgauss 40 + hastarget 41 + isinworld 42 + isplayer 44 + isnetclient 46 + teamid 49 + 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 + fvecvisible 66 + + look 77 + runai 78 + changeyaw 80 + monsterthink 81 + monsterinit 83 + monsterinitdead 84 + becomedead 85 + bestvisibleenemy 88 + finviewcone 89 + fvecinviewcone 90 + checklocalmove 91 + move 92 + moveexecute 93 + shouldadvanceroute 94 + getstoppedactivity 95 + stop 96 + checkrangeattack1 97 + checkrangeattack2 99 + checkmeleeattack1 101 + checkmeleeattack2 103 + schedulechange 111 + canplaysequence 112 + canplaysentence 113 + playsentence 114 + playscriptedsentence 115 + sentencestop 116 + getidealstate 117 + setactivity 118 + reportaistate 120 + checkenemy 121 + setyawspeed 124 + buildnearestroute 125 + findcover 126 + coverradius 131 + fcancheckattacks 132 + checkammo 134 + ignoreconditions 135 + fvalidatehinttype 136 + fcanactiveidle 137 + isoundmask 138 + hearingsensitivity 141 + barnaclevictimbitten 142 + barnaclevictimreleased 143 + preschedulethink 150 + getdeathactivity 151 + gibmonster 152 + hashumangibs 154 + hasaliengibs 155 + fademonster 156 + deathsound 159 + alertsound 160 + idlesound 161 + painsound 162 + stopfollowing 163 + + player_getgunposition 157 + player_jump 179 + player_duck 180 + player_prethink 181 + player_postthink 182 + player_updateclientdata 184 + player_impulsecommands 185 + + item_addtoplayer 77 + item_addduplicate 78 + item_getiteminfo 80 + item_candeploy 81 + item_deploy 82 + item_canholster 83 + item_holster 84 + item_updateiteminfo 85 + item_preframe 86 + item_postframe 87 + item_drop 88 + item_kill 89 + item_attachtoplayer 90 + item_primaryammoindex 91 + item_secondaryammoindex 92 + item_updateclientdata 93 + item_getweaponptr 94 + item_itemslot 95 + + weapon_extractammo 96 + weapon_extractclipammo 97 + weapon_addweapon 98 + weapon_playemptysound 99 + weapon_resetemptysound 100 + weapon_sendweaponanim 101 + weapon_isusable 103 + weapon_primaryattack 104 + weapon_secondaryattack 105 + weapon_reload 107 + weapon_weaponidle 108 + weapon_retireweapon 109 + weapon_shouldweaponidle 110 + weapon_usedecrement 111 + + sc_getclassification 9 + sc_takehealth 15 + sc_takearmor 16 + sc_giveammo 28 + sc_ismonster 43 + sc_isphysx 45 + sc_ispointentity 47 + sc_ismachine 48 + sc_criticalremove 50 + sc_updateonremove 56 + sc_fvisible 65 + sc_fvisiblefrompos 67 + sc_isfacing 68 + sc_getpointsfordamage 69 + sc_getdamagepoints 70 + sc_oncreate 73 + sc_ondestroy 74 + sc_isvalidentity 75 + sc_shouldfadeondeath 79 + sc_setupfriendly 80 + sc_revivethink 85 + sc_revive 86 + sc_startmonster 87 + sc_checkrangeattack1_move 98 + sc_checkrangeattack2_move 100 + sc_checkmeleeattack1_move 102 + sc_checkmeleeattack2_move 104 + sc_checktankusage 105 + sc_setgaitactivity 119 + sc_ftriangulate 122 + sc_ftriangulateextension 123 + sc_findcovergrenade 127 + sc_findcoverdistance 128 + sc_findattackpoint 129 + sc_fvalidatecover 130 + sc_checkattacker 133 + sc_nofriendlyfire1 144 + sc_nofriendlyfire2 145 + sc_nofriendlyfire3 146 + sc_nofriendlyfiretopos 147 + sc_fvisiblegunpos 148 + sc_finbulletcone 149 + sc_callgibmonster 153 + sc_checktimebaseddamage 157 + sc_ismoving 158 + sc_isplayerfollowing 164 + sc_startplayerfollowing 165 + sc_stopplayerfollowing 166 + sc_usesound 167 + sc_unusesound 168 + sc_ridemonster 169 + sc_checkandapplygenericattacks 170 + sc_checkscared 171 + sc_checkcreaturedanger 172 + sc_checkfalldamage 173 + sc_checkrevival 174 + sc_mediccallsound 175 + + sc_player_menuinputperformed 176 + sc_player_ismenuinputdone 177 + sc_player_specialspawn 178 + sc_player_isconnected 182 + sc_player_isvalidinfoentity 186 + sc_player_levelend 187 + sc_player_votestarted 188 + sc_player_canstartnextvote 189 + sc_player_vote 190 + sc_player_hasvoted 191 + sc_player_resetvote 192 + sc_player_lastvoteinput 193 + sc_player_initvote 194 + sc_player_timetostartnextvote 195 + sc_player_resetview 196 + sc_player_getlogfrequency 197 + sc_player_logplayerstats 198 + sc_player_disablecollisionwithplayer 199 + sc_player_enablecollisionwithplayer 200 + sc_player_cantouchplayer 201 + + sc_item_materialize 79 + + sc_weapon_bulletaccuracy 102 + sc_weapon_tertiaryattack 106 + sc_weapon_burstsupplement 112 + sc_weapon_getp_model 113 + sc_weapon_getw_model 114 + sc_weapon_getv_model 115 + sc_weapon_precachecustommodels 116 + sc_weapon_ismultiplayer 117 + sc_weapon_frunfuncs 118 + sc_weapon_setfov 119 + sc_weapon_fcanrun 120 + sc_weapon_customdecrement 121 + sc_weapon_setv_model 122 + sc_weapon_setp_model 123 + sc_weapon_changeweaponskin 124 +@end + +; Sven-Coop 4.8 +@section svencoop windows + pev 4 + base 0x0 + + spawn 0 + precache 1 + keyvalue 2 + objectcaps 6 + activate 7 + setobjectcollisionbox 8 + irelationship 10 + classify 11 + deathnotice 12 + traceattack 13 + takedamage 14 + killed 17 + bloodcolor 18 + tracebleed 19 + istriggered 20 + mymonsterpointer 21 + mysquadmonsterpointer 22 + gettogglestate 23 + addpoints 24 + addpointstoteam 25 + addplayeritem 26 + removeplayeritem 27 + getdelay 29 + ismoving 30 + overridereset 31 + damagedecal 32 + settogglestate 33 + startsneaking 34 + stopsneaking 35 + oncontrols 36 + issneaking 37 + isalive 38 + isbspmodel 39 + reflectgauss 40 + hastarget 41 + isinworld 42 + isplayer 44 + isnetclient 46 + teamid 49 + 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 + fvecvisible 65 + + look 76 + runai 77 + changeyaw 79 + monsterthink 80 + monsterinit 82 + monsterinitdead 83 + becomedead 84 + bestvisibleenemy 87 + finviewcone 88 + fvecinviewcone 89 + checklocalmove 90 + move 91 + moveexecute 92 + shouldadvanceroute 93 + getstoppedactivity 94 + stop 95 + checkrangeattack1 96 + checkrangeattack2 98 + checkmeleeattack1 100 + checkmeleeattack2 102 + schedulechange 110 + canplaysequence 111 + canplaysentence 112 + playsentence 113 + playscriptedsentence 114 + sentencestop 115 + getidealstate 116 + setactivity 117 + reportaistate 119 + checkenemy 120 + setyawspeed 123 + buildnearestroute 124 + findcover 125 + coverradius 130 + fcancheckattacks 131 + checkammo 133 + ignoreconditions 134 + fvalidatehinttype 135 + fcanactiveidle 136 + isoundmask 137 + hearingsensitivity 140 + barnaclevictimbitten 141 + barnaclevictimreleased 142 + preschedulethink 149 + getdeathactivity 150 + gibmonster 151 + hashumangibs 153 + hasaliengibs 154 + fademonster 155 + deathsound 158 + alertsound 159 + idlesound 160 + painsound 161 + stopfollowing 162 + + player_getgunposition 156 + player_jump 178 + player_duck 179 + player_prethink 180 + player_postthink 181 + player_updateclientdata 183 + player_impulsecommands 184 + + item_addtoplayer 76 + item_addduplicate 77 + item_getiteminfo 79 + item_candeploy 80 + item_deploy 81 + item_canholster 82 + item_holster 83 + item_updateiteminfo 84 + item_preframe 85 + item_postframe 86 + item_drop 87 + item_kill 88 + item_attachtoplayer 89 + item_primaryammoindex 90 + item_secondaryammoindex 91 + item_updateclientdata 92 + item_getweaponptr 93 + item_itemslot 94 + + weapon_extractammo 95 + weapon_extractclipammo 96 + weapon_addweapon 97 + weapon_playemptysound 98 + weapon_resetemptysound 99 + weapon_sendweaponanim 100 + weapon_isusable 102 + weapon_primaryattack 103 + weapon_secondaryattack 104 + weapon_reload 106 + weapon_weaponidle 107 + weapon_retireweapon 108 + weapon_shouldweaponidle 109 + weapon_usedecrement 110 + + sc_getclassification 9 + sc_takehealth 15 + sc_takearmor 16 + sc_giveammo 28 + sc_ismonster 43 + sc_isphysx 45 + sc_ispointentity 47 + sc_ismachine 48 + sc_criticalremove 50 + sc_updateonremove 56 + sc_fvisible 66 + sc_fvisiblefrompos 67 + sc_isfacing 68 + sc_getpointsfordamage 69 + sc_getdamagepoints 70 + sc_oncreate 72 + sc_ondestroy 73 + sc_isvalidentity 74 + sc_shouldfadeondeath 78 + sc_setupfriendly 79 + sc_revivethink 84 + sc_revive 85 + sc_startmonster 86 + sc_checkrangeattack1_move 97 + sc_checkrangeattack2_move 99 + sc_checkmeleeattack1_move 101 + sc_checkmeleeattack2_move 103 + sc_checktankusage 104 + sc_setgaitactivity 118 + sc_ftriangulate 121 + sc_ftriangulateextension 122 + sc_findcovergrenade 126 + sc_findcoverdistance 127 + sc_findattackpoint 128 + sc_fvalidatecover 129 + sc_checkattacker 132 + sc_nofriendlyfire1 145 + sc_nofriendlyfire2 144 + sc_nofriendlyfire3 143 + sc_nofriendlyfiretopos 146 + sc_fvisiblegunpos 147 + sc_finbulletcone 148 + sc_callgibmonster 152 + sc_checktimebaseddamage 156 + sc_ismoving 157 + sc_isplayerfollowing 163 + sc_startplayerfollowing 164 + sc_stopplayerfollowing 165 + sc_usesound 166 + sc_unusesound 167 + sc_ridemonster 168 + sc_checkandapplygenericattacks 169 + sc_checkscared 170 + sc_checkcreaturedanger 171 + sc_checkfalldamage 172 + sc_checkrevival 173 + sc_mediccallsound 174 + + sc_player_menuinputperformed 175 + sc_player_ismenuinputdone 176 + sc_player_specialspawn 177 + sc_player_isconnected 181 + sc_player_isvalidinfoentity 185 + sc_player_levelend 186 + sc_player_votestarted 187 + sc_player_canstartnextvote 188 + sc_player_vote 189 + sc_player_hasvoted 190 + sc_player_resetvote 191 + sc_player_lastvoteinput 192 + sc_player_initvote 193 + sc_player_timetostartnextvote 194 + sc_player_resetview 195 + sc_player_getlogfrequency 196 + sc_player_logplayerstats 197 + sc_player_disablecollisionwithplayer 198 + sc_player_enablecollisionwithplayer 199 + sc_player_cantouchplayer 200 + + sc_item_materialize 78 + + sc_weapon_bulletaccuracy 101 + sc_weapon_tertiaryattack 105 + sc_weapon_burstsupplement 111 + sc_weapon_getp_model 112 + sc_weapon_getw_model 113 + sc_weapon_getv_model 114 + sc_weapon_precachecustommodels 115 + sc_weapon_ismultiplayer 116 + sc_weapon_frunfuncs 117 + sc_weapon_setfov 118 + sc_weapon_fcanrun 119 + sc_weapon_customdecrement 120 + sc_weapon_setv_model 121 + sc_weapon_setp_model 122 + sc_weapon_changeweaponskin 123 +@end + +; Earth's Special Forces 1.2.3 +@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 + + look 59 + changeyaw 62 + irelationship 64 + monsterinitdead 66 + becomedead 67 + bestvisibleenemy 69 + finviewcone 70 + fvecinviewcone 71 + + runai 60 + monsterthink 63 + monsterinit 65 + checklocalmove 72 + move 73 + moveexecute 74 + shouldadvanceroute 75 + getstoppedactivity 76 + stop 77 + checkrangeattack1 78 + checkrangeattack2 79 + checkmeleeattack1 80 + checkmeleeattack2 81 + schedulechange 87 + canplaysequence 88 + canplaysentence 89 + playsentence 90 + playscriptedsentence 91 + sentencestop 92 + getidealstate 93 + setactivity 94 + reportaistate 95 + checkenemy 96 + ftriangulate 97 + setyawspeed 98 + buildnearestroute 99 + findcover 100 + coverradius 102 + fcancheckattacks 103 + checkammo 104 + ignoreconditions 105 + fvalidatehinttype 106 + fcanactiveidle 107 + isoundmask 108 + hearingsensitivity 111 + barnaclevictimbitten 112 + barnaclevictimreleased 113 + preschedulethink 114 + getdeathactivity 115 + gibmonster 116 + hashumangibs 117 + hasaliengibs 118 + fademonster 119 + deathsound 121 + alertsound 122 + idlesound 123 + painsound 124 + stopfollowing 125 + + 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 + + esf_weapon_holsterwhenmeleed 86 +@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 + + look 57 + changeyaw 60 + irelationship 62 + monsterinitdead 64 + becomedead 65 + bestvisibleenemy 67 + finviewcone 68 + fvecinviewcone 69 + + runai 58 + monsterthink 61 + monsterinit 63 + checklocalmove 70 + move 71 + moveexecute 72 + shouldadvanceroute 73 + getstoppedactivity 74 + stop 75 + checkrangeattack1 76 + checkrangeattack2 77 + checkmeleeattack1 78 + checkmeleeattack2 79 + schedulechange 85 + canplaysequence 86 + canplaysentence 87 + playsentence 88 + playscriptedsentence 89 + sentencestop 90 + getidealstate 91 + setactivity 92 + reportaistate 93 + checkenemy 94 + ftriangulate 95 + setyawspeed 96 + buildnearestroute 97 + findcover 98 + coverradius 100 + fcancheckattacks 101 + checkammo 102 + ignoreconditions 103 + fvalidatehinttype 104 + fcanactiveidle 105 + isoundmask 106 + hearingsensitivity 109 + barnaclevictimbitten 110 + barnaclevictimreleased 111 + preschedulethink 112 + getdeathactivity 113 + gibmonster 114 + hashumangibs 115 + hasaliengibs 116 + fademonster 117 + deathsound 119 + alertsound 120 + idlesound 121 + painsound 122 + stopfollowing 123 + + 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 + + esf_weapon_holsterwhenmeleed 84 +@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 43 + teamid 44 + getnexttarget 47 + think 48 + touch 49 + use 50 + blocked 51 + respawn 52 + updateowner 53 + fbecomeprone 54 + center 55 + eyeposition 56 + earposition 57 + bodytarget 58 + illumination 59 + fvisible 60 + fvecvisible 61 + + look 63 + changeyaw 66 + irelationship 68 + monsterinitdead 70 + becomedead 71 + bestvisibleenemy 73 + finviewcone 74 + fvecinviewcone 75 + + runai 64 + monsterthink 67 + monsterinit 69 + checklocalmove 76 + move 77 + moveexecute 78 + shouldadvanceroute 79 + getstoppedactivity 80 + stop 81 + checkrangeattack1 82 + checkrangeattack2 83 + checkmeleeattack1 84 + checkmeleeattack2 85 + schedulechange 91 + canplaysequence 92 + canplaysentence 93 + playsentence 94 + playscriptedsentence 95 + sentencestop 96 + getidealstate 97 + setactivity 98 + reportaistate 99 + checkenemy 100 + ftriangulate 101 + setyawspeed 102 + buildnearestroute 103 + findcover 104 + coverradius 106 + fcancheckattacks 107 + checkammo 108 + ignoreconditions 109 + fvalidatehinttype 110 + fcanactiveidle 111 + isoundmask 112 + hearingsensitivity 115 + barnaclevictimbitten 116 + barnaclevictimreleased 117 + preschedulethink 118 + getdeathactivity 119 + gibmonster 120 + hashumangibs 121 + hasaliengibs 122 + fademonster 123 + deathsound 125 + alertsound 126 + idlesound 127 + painsound 128 + stopfollowing 129 + + player_updateclientdata 186 + player_jump 187 + player_prethink 189 + player_postthink 190 + player_getgunposition 124 + player_shouldfadeondeath 65 + player_impulsecommands 193 + + item_addtoplayer 63 + item_addduplicate 64 + item_getiteminfo 65 + item_candeploy 66 + item_deploy 67 + item_canholster 68 + item_holster 69 + item_updateiteminfo 70 + item_preframe 71 + item_postframe 72 + item_drop 73 + item_kill 74 + item_attachtoplayer 75 + item_primaryammoindex 76 + item_secondaryammoindex 77 + item_updateclientdata 78 + item_getweaponptr 79 + item_itemslot 80 + + weapon_playemptysound 81 + weapon_resetemptysound 82 + weapon_sendweaponanim 83 + weapon_primaryattack 84 + weapon_secondaryattack 85 + weapon_weaponidle 86 + weapon_retireweapon 87 + weapon_shouldweaponidle 88 + weapon_usedecrement 89 + + esf_isenvmodel 40 + esf_takedamage2 12 + esf_isfighter 41 + esf_isbuddy 42 + esf_emitsound 45 + esf_emitnullsound 46 + esf_increasestrength 130 + esf_increasepl 131 + esf_setpowerlevel 132 + esf_setmaxpowerlevel 133 + esf_stopanitrigger 134 + esf_stopfly 135 + esf_hideweapon 136 + esf_clientremoveweapon 137 + esf_sendclientcustommodel 138 + esf_canturbo 139 + esf_canprimaryfire 140 + esf_cansecondaryfire 141 + esf_canstopfly 142 + esf_canblock 143 + esf_canraiseKi 144 + esf_canraisestamina 145 + esf_canteleport 146 + esf_canstartfly 147 + esf_canstartpowerup 148 + esf_canjump 149 + esf_canwalljump 150 + esf_issuperjump 151 + esf_ismoveback 152 + esf_checkwalljump 153 + esf_enablewalljump 154 + esf_disablewalljump 155 + esf_resetwalljumpvars 156 + esf_getwalljumpanim 157 + esf_getwalljumpanim2 158 + esf_setwalljumpanimation 159 + esf_setflymovetype 160 + esf_isflymovetype 161 + esf_iswalkmovetype 162 + esf_setwalkmovetype 163 + esf_drawchargebar 164 + esf_startblock 165 + esf_stopblock 166 + esf_startfly 167 + esf_getmaxspeed 168 + esf_setanimation 169 + esf_playanimation 170 + esf_getmoveforward 171 + esf_getmoveright 172 + esf_getmoveup 173 + esf_addblindfx 174 + esf_removeblindfx 175 + esf_disablepsbar 176 + esf_addbeamboxcrosshair 177 + esf_removebeamboxcrosshair 178 + esf_drawpswinbonus 179 + esf_drawpsbar 180 + esf_lockcrosshair 181 + esf_unlockcrosshair 182 + esf_rotatecrosshair 183 + esf_unrotatecrosshair 184 + esf_watermove 185 + esf_checktimebaseddamage 188 + esf_doessecondaryattack 191 + esf_doesprimaryattack 192 + esf_removespecialmodes 194 + esf_stopturbo 195 + esf_takebean 196 + esf_getpowerlevel 197 + esf_removeallotherweapons 198 + esf_stopswoop 199 + esf_setdeathanimation 201 + esf_setmodel 202 + esf_addattacks 203 + esf_emitclasssound 205 + esf_checklightning 206 + esf_freezecontrols 207 + esf_unfreezecontrols 208 + esf_updateki 209 + esf_updatehealth 210 + esf_getteleportdir 211 + + esf_weapon_holsterwhenmeleed 90 + +@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 43 + teamid 44 + getnexttarget 47 + think 48 + touch 49 + use 50 + blocked 51 + respawn 52 + updateowner 53 + fbecomeprone 54 + center 55 + eyeposition 56 + earposition 57 + bodytarget 58 + illumination 59 + fvisible 60 + fvecvisible 61 + + look 63 + changeyaw 66 + irelationship 68 + monsterinitdead 70 + becomedead 71 + bestvisibleenemy 73 + finviewcone 74 + fvecinviewcone 75 + + runai 64 + monsterthink 67 + monsterinit 69 + checklocalmove 76 + move 77 + moveexecute 78 + shouldadvanceroute 79 + getstoppedactivity 80 + stop 81 + checkrangeattack1 82 + checkrangeattack2 83 + checkmeleeattack1 84 + checkmeleeattack2 85 + schedulechange 91 + canplaysequence 92 + canplaysentence 93 + playsentence 94 + playscriptedsentence 95 + sentencestop 96 + getidealstate 97 + setactivity 98 + reportaistate 99 + checkenemy 100 + ftriangulate 101 + setyawspeed 102 + buildnearestroute 103 + findcover 104 + coverradius 106 + fcancheckattacks 107 + checkammo 108 + ignoreconditions 109 + fvalidatehinttype 110 + fcanactiveidle 111 + isoundmask 112 + hearingsensitivity 115 + barnaclevictimbitten 116 + barnaclevictimreleased 117 + preschedulethink 118 + getdeathactivity 119 + gibmonster 120 + hashumangibs 121 + hasaliengibs 122 + fademonster 123 + deathsound 125 + alertsound 126 + idlesound 127 + painsound 128 + stopfollowing 129 + + player_updateclientdata 186 + player_jump 187 + player_prethink 189 + player_postthink 190 + player_getgunposition 124 + player_shouldfadeondeath 65 + player_impulsecommands 193 + + item_addtoplayer 63 + item_addduplicate 64 + item_getiteminfo 65 + item_candeploy 66 + item_deploy 67 + item_canholster 68 + item_holster 69 + item_updateiteminfo 70 + item_preframe 71 + item_postframe 72 + item_drop 73 + item_kill 74 + item_attachtoplayer 75 + item_primaryammoindex 76 + item_secondaryammoindex 77 + item_updateclientdata 78 + item_getweaponptr 79 + item_itemslot 80 + + weapon_playemptysound 81 + weapon_resetemptysound 82 + weapon_sendweaponanim 83 + weapon_primaryattack 84 + weapon_secondaryattack 85 + weapon_weaponidle 86 + weapon_retireweapon 87 + weapon_shouldweaponidle 88 + weapon_usedecrement 89 + + esf_isenvmodel 40 + esf_takedamage2 12 + esf_isfighter 41 + esf_isbuddy 42 + esf_emitsound 45 + esf_emitnullsound 46 + esf_increasestrength 130 + esf_increasepl 131 + esf_setpowerlevel 132 + esf_setmaxpowerlevel 133 + esf_stopanitrigger 134 + esf_stopfly 135 + esf_hideweapon 136 + esf_clientremoveweapon 137 + esf_sendclientcustommodel 138 + esf_canturbo 139 + esf_canprimaryfire 140 + esf_cansecondaryfire 141 + esf_canstopfly 142 + esf_canblock 143 + esf_canraiseKi 144 + esf_canraisestamina 145 + esf_canteleport 146 + esf_canstartfly 147 + esf_canstartpowerup 148 + esf_canjump 149 + esf_canwalljump 150 + esf_issuperjump 151 + esf_ismoveback 152 + esf_checkwalljump 153 + esf_enablewalljump 154 + esf_disablewalljump 155 + esf_resetwalljumpvars 156 + esf_getwalljumpanim 157 + esf_getwalljumpanim2 158 + esf_setwalljumpanimation 159 + esf_setflymovetype 160 + esf_isflymovetype 161 + esf_iswalkmovetype 162 + esf_setwalkmovetype 163 + esf_drawchargebar 164 + esf_startblock 165 + esf_stopblock 166 + esf_startfly 167 + esf_getmaxspeed 168 + esf_setanimation 169 + esf_playanimation 170 + esf_getmoveforward 171 + esf_getmoveright 172 + esf_getmoveup 173 + esf_addblindfx 174 + esf_removeblindfx 175 + esf_disablepsbar 176 + esf_addbeamboxcrosshair 177 + esf_removebeamboxcrosshair 178 + esf_drawpswinbonus 179 + esf_drawpsbar 180 + esf_lockcrosshair 181 + esf_unlockcrosshair 182 + esf_rotatecrosshair 183 + esf_unrotatecrosshair 184 + esf_watermove 185 + esf_checktimebaseddamage 188 + esf_doessecondaryattack 191 + esf_doesprimaryattack 192 + esf_removespecialmodes 194 + esf_stopturbo 195 + esf_takebean 196 + esf_getpowerlevel 197 + esf_removeallotherweapons 198 + esf_stopswoop 199 + esf_setdeathanimation 201 + esf_setmodel 202 + esf_addattacks 203 + esf_emitclasssound 205 + esf_checklightning 206 + esf_freezecontrols 207 + esf_unfreezecontrols 208 + esf_updateki 209 + esf_updatehealth 210 + esf_getteleportdir 211 + + esf_weapon_holsterwhenmeleed 90 + +@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 + + look 58 + changeyaw 61 + irelationship 63 + monsterinitdead 65 + becomedead 66 + bestvisibleenemy 68 + finviewcone 69 + fvecinviewcone 70 + + runai 59 + monsterthink 62 + monsterinit 64 + checklocalmove 71 + move 72 + moveexecute 73 + shouldadvanceroute 74 + getstoppedactivity 75 + stop 76 + checkrangeattack1 77 + checkrangeattack2 78 + checkmeleeattack1 79 + checkmeleeattack2 80 + schedulechange 86 + canplaysequence 87 + canplaysentence 88 + playsentence 89 + playscriptedsentence 90 + sentencestop 91 + getidealstate 92 + setactivity 93 + reportaistate 94 + checkenemy 95 + ftriangulate 96 + setyawspeed 97 + buildnearestroute 98 + findcover 99 + coverradius 101 + fcancheckattacks 102 + checkammo 103 + ignoreconditions 104 + fvalidatehinttype 105 + fcanactiveidle 106 + isoundmask 107 + hearingsensitivity 110 + barnaclevictimbitten 111 + barnaclevictimreleased 112 + preschedulethink 113 + getdeathactivity 114 + gibmonster 115 + hashumangibs 116 + hasaliengibs 117 + fademonster 118 + deathsound 120 + alertsound 121 + idlesound 122 + painsound 123 + stopfollowing 124 + + 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 + + look 58 + changeyaw 61 + irelationship 63 + monsterinitdead 65 + becomedead 66 + bestvisibleenemy 68 + finviewcone 69 + fvecinviewcone 70 + + runai 59 + monsterthink 62 + monsterinit 64 + checklocalmove 71 + move 72 + moveexecute 73 + shouldadvanceroute 74 + getstoppedactivity 75 + stop 76 + checkrangeattack1 77 + checkrangeattack2 78 + checkmeleeattack1 79 + checkmeleeattack2 80 + schedulechange 86 + canplaysequence 87 + canplaysentence 88 + playsentence 89 + playscriptedsentence 90 + sentencestop 91 + getidealstate 92 + setactivity 93 + reportaistate 94 + checkenemy 95 + ftriangulate 96 + setyawspeed 97 + buildnearestroute 98 + findcover 99 + coverradius 101 + fcancheckattacks 102 + checkammo 103 + ignoreconditions 104 + fvalidatehinttype 105 + fcanactiveidle 106 + isoundmask 107 + hearingsensitivity 110 + barnaclevictimbitten 111 + barnaclevictimreleased 112 + preschedulethink 113 + getdeathactivity 114 + gibmonster 115 + hashumangibs 116 + hasaliengibs 117 + fademonster 118 + deathsound 120 + alertsound 121 + idlesound 122 + painsound 123 + stopfollowing 124 + + 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 gearbox 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 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 57 + fvecvisible 56 + + look 60 + changeyaw 63 + irelationship 65 + monsterinitdead 67 + becomedead 68 + bestvisibleenemy 70 + finviewcone 72 + fvecinviewcone 71 + + runai 61 + monsterthink 64 + monsterinit 66 + checklocalmove 73 + move 74 + moveexecute 75 + shouldadvanceroute 76 + getstoppedactivity 77 + stop 78 + checkrangeattack1 79 + checkrangeattack2 80 + checkmeleeattack1 81 + checkmeleeattack2 82 + schedulechange 88 + canplaysequence 89 + canplaysentence 90 + playsentence 91 + playscriptedsentence 92 + sentencestop 93 + getidealstate 94 + setactivity 95 + reportaistate 96 + checkenemy 97 + ftriangulate 98 + setyawspeed 99 + buildnearestroute 100 + findcover 101 + coverradius 103 + fcancheckattacks 104 + checkammo 105 + ignoreconditions 106 + fvalidatehinttype 107 + fcanactiveidle 108 + isoundmask 109 + hearingsensitivity 112 + barnaclevictimbitten 113 + barnaclevictimreleased 114 + preschedulethink 115 + getdeathactivity 116 + gibmonster 117 + hashumangibs 118 + hasaliengibs 119 + fademonster 120 + deathsound 123 + alertsound 124 + idlesound 125 + painsound 126 + stopfollowing 127 + + player_jump 127 + player_duck 128 + player_prethink 129 + player_postthink 130 + player_getgunposition 121 + player_shouldfadeondeath 62 + player_impulsecommands 132 + player_updateclientdata 131 + + item_addtoplayer 60 + item_addduplicate 61 + item_getiteminfo 62 + item_candeploy 63 + item_deploy 64 + item_canholster 65 + item_holster 66 + item_updateiteminfo 67 + item_preframe 68 + item_postframe 69 + item_drop 70 + item_kill 71 + item_attachtoplayer 72 + item_primaryammoindex 73 + item_secondaryammoindex 74 + item_updateclientdata 76 + item_getweaponptr 77 + item_itemslot 78 + + weapon_extractammo 79 + weapon_extractclipammo 80 + weapon_addweapon 81 + weapon_playemptysound 82 + weapon_resetemptysound 83 + weapon_sendweaponanim 84 + weapon_isusable 85 + weapon_primaryattack 86 + weapon_secondaryattack 87 + weapon_reload 88 + weapon_weaponidle 89 + weapon_retireweapon 90 + weapon_shouldweaponidle 91 + weapon_usedecrement 92 + + gearbox_mysquadtalkmonsterpointer 19 + gearbox_weapontimebase 58 +@end + +@section gearbox 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 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 + + look 60 + changeyaw 63 + irelationship 65 + monsterinitdead 67 + becomedead 68 + bestvisibleenemy 70 + finviewcone 71 + fvecinviewcone 72 + + runai 61 + monsterthink 64 + monsterinit 66 + checklocalmove 73 + move 74 + moveexecute 75 + shouldadvanceroute 76 + getstoppedactivity 77 + stop 78 + checkrangeattack1 79 + checkrangeattack2 80 + checkmeleeattack1 81 + checkmeleeattack2 82 + schedulechange 88 + canplaysequence 89 + canplaysentence 90 + playsentence 91 + playscriptedsentence 92 + sentencestop 93 + getidealstate 94 + setactivity 95 + reportaistate 96 + checkenemy 97 + ftriangulate 98 + setyawspeed 99 + buildnearestroute 100 + findcover 101 + coverradius 103 + fcancheckattacks 104 + checkammo 105 + ignoreconditions 106 + fvalidatehinttype 107 + fcanactiveidle 108 + isoundmask 109 + hearingsensitivity 112 + barnaclevictimbitten 113 + barnaclevictimreleased 114 + preschedulethink 115 + getdeathactivity 116 + gibmonster 117 + hashumangibs 118 + hasaliengibs 119 + fademonster 120 + deathsound 123 + alertsound 124 + idlesound 125 + painsound 126 + stopfollowing 127 + + player_jump 127 + player_duck 128 + player_prethink 129 + player_postthink 130 + player_getgunposition 121 + player_shouldfadeondeath 62 + player_impulsecommands 132 + player_updateclientdata 131 + + item_addtoplayer 60 + item_addduplicate 61 + item_getiteminfo 62 + item_candeploy 63 + item_deploy 64 + item_canholster 65 + item_holster 66 + item_updateiteminfo 67 + item_preframe 68 + item_postframe 69 + item_drop 70 + item_kill 71 + item_attachtoplayer 72 + item_primaryammoindex 73 + item_secondaryammoindex 74 + item_updateclientdata 76 + item_getweaponptr 77 + item_itemslot 78 + + weapon_extractammo 79 + weapon_extractclipammo 80 + weapon_addweapon 81 + weapon_playemptysound 82 + weapon_resetemptysound 83 + weapon_sendweaponanim 84 + weapon_isusable 85 + weapon_primaryattack 86 + weapon_secondaryattack 87 + weapon_reload 88 + weapon_weaponidle 89 + weapon_retireweapon 90 + weapon_shouldweaponidle 91 + weapon_usedecrement 92 + + gearbox_mysquadtalkmonsterpointer 19 + gearbox_weapontimebase 58 +@end + +@section ag 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 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + look 60 + changeyaw 63 + irelationship 65 + monsterinitdead 67 + becomedead 68 + bestvisibleenemy 70 + finviewcone 71 + fvecinviewcone 72 + + runai 61 + monsterthink 64 + monsterinit 66 + checklocalmove 73 + move 74 + moveexecute 75 + shouldadvanceroute 76 + getstoppedactivity 77 + stop 78 + checkrangeattack1 79 + checkrangeattack2 80 + checkmeleeattack1 81 + checkmeleeattack2 82 + schedulechange 88 + canplaysequence 89 + canplaysentence 90 + playsentence 91 + playscriptedsentence 92 + sentencestop 93 + getidealstate 94 + setactivity 95 + reportaistate 96 + checkenemy 97 + ftriangulate 98 + setyawspeed 99 + buildnearestroute 100 + findcover 101 + coverradius 103 + fcancheckattacks 104 + checkammo 105 + ignoreconditions 106 + fvalidatehinttype 107 + fcanactiveidle 108 + isoundmask 109 + hearingsensitivity 112 + barnaclevictimbitten 113 + barnaclevictimreleased 114 + preschedulethink 115 + getdeathactivity 116 + gibmonster 117 + hashumangibs 118 + hasaliengibs 119 + fademonster 120 + deathsound 122 + alertsound 123 + idlesound 124 + painsound 125 + stopfollowing 126 + + player_jump 127 + player_duck 128 + player_prethink 129 + player_postthink 130 + player_getgunposition 121 + player_shouldfadeondeath 62 + player_impulsecommands 132 + player_updateclientdata 131 + + 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_extractammo 77 + weapon_extractclipammo 78 + weapon_addweapon 79 + weapon_playemptysound 80 + weapon_resetemptysound 81 + weapon_sendweaponanim 82 + weapon_isusable 83 + weapon_primaryattack 84 + weapon_secondaryattack 85 + weapon_reload 86 + weapon_weaponidle 87 + weapon_retireweapon 88 + weapon_shouldweaponidle 89 + weapon_usedecrement 90 + +@end +@section ag 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 48 + updateowner 49 + fbecomeprone 50 + center 51 + eyeposition 52 + earposition 53 + bodytarget 54 + illumination 55 + fvisible 56 + fvecvisible 57 + + look 60 + changeyaw 63 + irelationship 65 + monsterinitdead 67 + becomedead 68 + bestvisibleenemy 70 + finviewcone 71 + fvecinviewcone 72 + + runai 61 + monsterthink 64 + monsterinit 66 + checklocalmove 73 + move 74 + moveexecute 75 + shouldadvanceroute 76 + getstoppedactivity 77 + stop 78 + checkrangeattack1 79 + checkrangeattack2 80 + checkmeleeattack1 81 + checkmeleeattack2 82 + schedulechange 88 + canplaysequence 89 + canplaysentence 90 + playsentence 91 + playscriptedsentence 92 + sentencestop 93 + getidealstate 94 + setactivity 95 + reportaistate 96 + checkenemy 97 + ftriangulate 98 + setyawspeed 99 + buildnearestroute 100 + findcover 101 + coverradius 103 + fcancheckattacks 104 + checkammo 105 + ignoreconditions 106 + fvalidatehinttype 107 + fcanactiveidle 108 + isoundmask 109 + hearingsensitivity 112 + barnaclevictimbitten 113 + barnaclevictimreleased 114 + preschedulethink 115 + getdeathactivity 116 + gibmonster 117 + hashumangibs 118 + hasaliengibs 119 + fademonster 120 + deathsound 122 + alertsound 123 + idlesound 124 + painsound 125 + stopfollowing 126 + + player_jump 127 + player_duck 128 + player_prethink 129 + player_postthink 130 + player_getgunposition 121 + player_shouldfadeondeath 62 + player_impulsecommands 132 + player_updateclientdata 131 + + 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_extractammo 77 + weapon_extractclipammo 78 + weapon_addweapon 79 + weapon_playemptysound 80 + weapon_resetemptysound 81 + weapon_sendweaponanim 82 + weapon_isusable 83 + weapon_primaryattack 84 + weapon_secondaryattack 85 + weapon_reload 86 + weapon_weaponidle 87 + weapon_retireweapon 88 + weapon_shouldweaponidle 89 + weapon_usedecrement 90 +@end + diff --git a/assets/addons/amxmodx/data/lang/llhl.txt b/assets/addons/amxmodx/data/lang/llhl.txt index d9c5165..e6fb3b1 100644 --- a/assets/addons/amxmodx/data/lang/llhl.txt +++ b/assets/addons/amxmodx/data/lang/llhl.txt @@ -1,6 +1,5 @@ [en] -CVAR_PROTECTOR_KICK = CVAR Blocker/Protector Detected -FPSL_WARNING_MSG = Your 'fps_max' can't be higher than %d +FPSL_WARNING_MSG = Warning #%d: Your 'fps_max' can't be higher than %d FPSL_KICK = Your 'fps_max' value is higher than %d FPSL_KICK_MSG = %s has been kicked for exceeding the FPS limit (Max: %d) MINFOV_KICK = Your 'default_fov' value is lower than %d @@ -14,10 +13,11 @@ UNSTUCK_PLAYER_DEAD = You can't use this command while you're dead. BLOCK_NAMECHANGE_MSG = You can't change your name while a match is in progress. BLOCK_MODELCHANGE_MSG = You can't change your model while a match is in progress. MINDELAY_HLTV_KICK = Delay of your HLTV is very low (Min: %.1f) +LLHL_FPS_LIMIT_MODE_AD = [%s] Both 144 and 240 fps are supported on this server. You can toggle between them with the fpslimitmode vote. LLHL_INITIALIZING = [%s] Initializing plugin +LLHL_INITIALIZED = [%s] Plugin initialized successfully LLHL_CANT_RUN = [%s] The '%s' plugin can only be run in the '%s' gamemode on AG 6.6 or its Mini version for HL -LLHL_GM_BLOCK_DEACTIVATED = [%s] GhostMine blocker has been deactivated -LLHL_REHLDS_DETECTED = [%s] ReHLDS detected, pauses will be blocked when there are no games in progress to avoid abusing a bug +LLHL_CANT_RUN_2 = [%s] The '%s' plugin requires AGMOD 6.6-llhl installed on the server, the plugin will be disabled. LLHL_CHECK_GH_FAILED = [%s] Couldn't connect to Github API. Connection failed. LLHL_CHECK_GH_PARSE_ERROR = [%s] An error occurred while parsing JSON. (Github) LLHL_CHECK_GH_NO_UPDATE = [%s] No updates available. @@ -25,43 +25,32 @@ LLHL_CHECK_GH_HIGHER_VER = [%s] You have a higher than official version of LLHL. LLHL_CHECK_GH_NEW_UPDATE = [%s] There is a new update available. Download it from: https://github.com/7mochi/llhl/releases/latest LLHL_CHECK_GH_RETRYING = [%s] Retrying within %.1f seconds. Attempts: %i/%i LLHL_STEAM_API_KEY_EMPTY = [%s] You haven't set any Steam API Key or isn't valid. -LLHL_CHECK_STEAM_FAILED = [%s] Couldn't connect to Steam API. Connection failed. -LLHL_CHECK_STEAM_PARSE_ERROR = [%s] An error occurred while parsing JSON. (Steam) LLHL_CURL_INIT_ERROR = [%s] ERROR: cURL couldn't be initialized. LLHL_CURL_CODE_ERROR = [%s] ERROR: The request couldn't be completed. (Error code: %i) LLHL_CHECK_FS_KICK_1 = Family Sharing isn't allowed on this server. LLHL_CHECK_FS_KICK_2 = Private Steam profiles aren't allowed on this server. LLHL_CHECK_FS_NOTICE_1 = [%s] %s (%s) is using a game shared. LLHL_CHECK_FS_NOTICE_2 = [%s] %s (%s) has a private Steam profile. -LLHL_UPDATE_DL_CANT_OPEN_FILE = [%s] ERROR: File %s couldn't be opened. -LLHL_UPDATE_DL_DOWNLOADING_FILE = [%s] Downloading file: %s -LLHL_UPDATE_DL_DOWNLOAD_FINISHED = [%s] Download finished. -LLHL_UPDATE_DL_RETRYING = [%s] Retrying the download in %.1f seconds. Attempts: %i/%i -LLHL_UPDATE_DL_LLHLFILE_FINISHED = [%s] The LLHL file download is finished. Progress: %i/%i -LLHL_UPDATE_DL_LLHLALLF_FINISHED = [%s] Download of LLHL files finished. -LLHL_UPDATE_DL_LLHLFILE_HASH_ERR = [%s] The hash of the LLHL file %s doesn't match. Trying to delete it... -LLHL_UPDATE_DL_CLEAN_UPDATER_DIR = [%s] Deleting folders and temporary files. -LLHL_UPDATE_DL_ALL_FINISHED = [%s] Plugin update completed. -LLHL_UPDATE_DL_FAILED = [%s] Plugin update failed. LLHL_SCD_POSSIBLE_DETECTION = [%s - Simple Cheat Detector] %s (%s) has been detected a possible use of OpenGF32/AGFix. Command Sent: %s | Remaining attemps: %i/%i LLHL_SCD_DETECTION = [%s - Simple Cheat Detector] %s (%s) has been detected OpenGF32/AGFix after %i attempts -LLHL_REHLDS_XPLOIT = [%s] %s (%s) tried to pause the server when no one else was around. Possible ReHLDS Bug Exploit LLHL_IS_OUTDATED = [%s] This server uses an outdated version of the gamemode. -LLHL_SP_AGSTART_NOT_ENOUGH = [%s] Not enough players found to start a game. LLHL_MM_MENU_MAIN_TITLE = LLHL Match Manager | Main Menu LLHL_MM_ITEM_MAIN_2 = Select the match type: [%s] LLHL_MM_ITEM_MAIN_3 = Assign players: Blue [%i-%i] Red LLHL_MM_ITEM_MAIN_4 = Start match +LLHL_MM_ITEM_MAIN_5 = Abort match LLHL_MM_MENU_IN_USE = The menu is currently in use. Try again later. LLHL_MM_OPT_2_TITLE = Match type: LLHL_MM_OPT_3_TITLE = Assigning players: LLHL_MM_NO_MATCH_TYPE = No match type has been selected. -LLHL_MM_MATCH_ALREADY_STARTED = A game is starting. Try again later. +LLHL_MM_MATCH_IS_IDLE = There is no match in progress. +LLHL_MM_MATCH_ABORTED = The match has been aborted. +LLHL_MM_MATCH_IS_STARTING = A match is starting. +LLHL_MM_MATCH_IS_RUNNING = A match is in progress. Abort it before starting another. LLHL_MM_INVALID_PLAYER_COUNT = The number of players selected isn't correct. [es] -CVAR_PROTECTOR_KICK = Bloqueador/Protector de CVAR Detectado -FPSL_WARNING_MSG = El valor de 'fps_max' no puede ser mayor que %d +FPSL_WARNING_MSG = Advertencia #%d: El valor de 'fps_max' no puede ser mayor que %d FPSL_KICK = El valor de 'fps_max' que estas usando es mayor que %d FPSL_KICK_MSG = %s ha sido desconectado por superar el limite de FPS (Maximo: %d) MINFOV_KICK = El valor de 'default_fov' que estas usando es menor que %d @@ -75,10 +64,11 @@ UNSTUCK_PLAYER_DEAD = No puedes usar este comando mientras estas muerto. BLOCK_NAMECHANGE_MSG = No puedes cambiar tu nombre mientras hay una partida en curso. BLOCK_MODELCHANGE_MSG = No puedes cambiarte de model mientras hay una partida en curso. MINDELAY_HLTV_KICK = El retraso de tu HLTV es muy bajo (Minimo: %.1f) +LLHL_FPS_LIMIT_MODE_AD = [%s] En este servidor se admiten tanto 144 como 240 fps. Puedes cambiar entre uno y otro con el voto fpslimitmode LLHL_INITIALIZING = [%s] Inicializando el plugin +LLHL_INITIALIZED = [%s] Plugin inicializado correctamente LLHL_CANT_RUN = [%s] El plugin '%s' solo puede ser ejecutado en el modo de juego '%s' en AG 6.6 o su version Mini para HL -LLHL_GM_BLOCK_DEACTIVATED = [%s] El bloqueador de GhostMine ha sido desactivado -LLHL_REHLDS_DETECTED = [%s] ReHLDS detectado, las pausas se bloquearan cuando no haya partidas en curso para evitar el abuso de un bug +LLHL_CANT_RUN_2 = [%s] El plugin '%s' requiere del AGMOD 6.6-llhl instalado en el servidor, el plugin se desactivara. LLHL_CHECK_GH_FAILED = [%s] No se pudo conectar a la API de Github. Conexión fallida. LLHL_CHECK_GH_PARSE_ERROR = [%s] Ocurrio un error al parsear el JSON. (Github) LLHL_CHECK_GH_NO_UPDATE = [%s] No hay actualizaciones disponibles. @@ -86,43 +76,32 @@ LLHL_CHECK_GH_HIGHER_VER = [%s] Tienes una versión más alta que la oficial del LLHL_CHECK_GH_NEW_UPDATE = [%s] Hay una nueva actualización disponible. Descárguela de: https://github.com/7mochi/llhl/releases/latest LLHL_CHECK_GH_RETRYING = [%s] Reintentando dentro de %.1f segundos. Intentos: %i/%i LLHL_STEAM_API_KEY_EMPTY = [%s] No has establecido ninguna clave API de Steam o no es válida. -LLHL_CHECK_STEAM_FAILED = [%s] No se pudo conectar a la API de Steam. Conexión fallida. -LLHL_CHECK_STEAM_PARSE_ERROR = [%s] Ocurrio un error al parsear el JSON. (Steam) LLHL_CURL_INIT_ERROR = [%s] ERROR: No se pudo inicializar cURL. LLHL_CURL_CODE_ERROR = [%s] ERROR: No se ha podido realizar la solicitud. (Codigo de error: %i) LLHL_CHECK_FS_KICK_1 = El prestamo familiar no está permitido en este servidor. LLHL_CHECK_FS_KICK_2 = Los perfiles privados de Steam no están permitidos en este servidor. LLHL_CHECK_FS_NOTICE_1 = [%s] %s (%s) está utilizando un juego compartido. LLHL_CHECK_FS_NOTICE_2 = [%s] %s (%s) tiene el perfil de Steam privado. -LLHL_UPDATE_DL_CANT_OPEN_FILE = [%s] ERROR: No se pudo abrir el fichero %s -LLHL_UPDATE_DL_DOWNLOADING_FILE = [%s] Descargando fichero: %s -LLHL_UPDATE_DL_DOWNLOAD_FINISHED = [%s] Descarga finalizada. -LLHL_UPDATE_DL_RETRYING = [%s] Reintentando la descarga dentro de %.1f segundos. Intentos: %i/%i -LLHL_UPDATE_DL_LLHLFILE_FINISHED = [%s] La descarga del fichero LLHL ha finalizado. Progreso: %i/%i -LLHL_UPDATE_DL_LLHLALLF_FINISHED = [%s] Descarga de los ficheros LLHL finalizada. -LLHL_UPDATE_DL_LLHLFILE_HASH_ERR = [%s] El hash del fichero LLHL %s no coincide. Intentando eliminarlo... -LLHL_UPDATE_DL_CLEAN_UPDATER_DIR = [%s] Eliminando carpetas y ficheros temporales. -LLHL_UPDATE_DL_ALL_FINISHED = [%s] Actualizacion del plugin finalizada. -LLHL_UPDATE_DL_FAILED = [%s] La actualizacion del plugin ha fallado. LLHL_SCD_POSSIBLE_DETECTION = [%s - Simple Cheat Detector] A %s (%s) se le ha detectado un posible uso de OpenGF32/AGFix. Comando enviado: %s | Intentos restantes: %i/%i LLHL_SCD_DETECTION = [%s - Simple Cheat Detector] A %s (%s) se le ha detectado OpenGF32/AGFix despues de %i intentos -LLHL_REHLDS_XPLOIT = [%s] %s (%s) trato de pausar el servidor cuando no habia nadie alrededor. Possible exploit de bug del ReHLDS LLHL_IS_OUTDATED = [%s] Este servidor usa una version desactualizada del modo de juego. -LLHL_SP_AGSTART_NOT_ENOUGH = [%s] No se encontro suficientes jugadores para iniciar una partida. LLHL_MM_MENU_MAIN_TITLE = LLHL Gestor de partidas | Menu principal LLHL_MM_ITEM_MAIN_2 = Seleccione el tipo de partida: [%s] LLHL_MM_ITEM_MAIN_3 = Asignar jugadores: Blue [%i-%i] Red LLHL_MM_ITEM_MAIN_4 = Iniciar partida +LLHL_MM_ITEM_MAIN_5 = Abortar partida LLHL_MM_MENU_IN_USE = El menú está siendo usado actualmente. Inténtalo nuevamente luego. LLHL_MM_OPT_2_TITLE = Tipo de partida: LLHL_MM_OPT_3_TITLE = Asignando jugadores: LLHL_MM_NO_MATCH_TYPE = No se ha seleccionado un tipo de partida. -LLHL_MM_MATCH_ALREADY_STARTED = Una partida se está iniciando. Inténtalo nuevamente luego. +LLHL_MM_MATCH_IS_IDLE = No hay ninguna partida en curso. +LLHL_MM_MATCH_ABORTED = La partida ha sido abortada. +LLHL_MM_MATCH_IS_STARTING = Una partida se está iniciando. +LLHL_MM_MATCH_IS_RUNNING = Una partida está en curso. Abortala antes de iniciar otra. LLHL_MM_INVALID_PLAYER_COUNT = La cantidad de jugadores seleccionados no es la correcta. [pt] -CVAR_PROTECTOR_KICK = Bloqueador/Protetor de CVAR Detectado -FPSL_WARNING_MSG = O valor de 'fps_max' não pode ser maior que %d +FPSL_WARNING_MSG = Aviso #%d: O valor de 'fps_max' não pode ser maior que %d FPSL_KICK = O valor de 'fps_max' que esta usando é maior que %d FPSL_KICK_MSG = %s foi desconectado por exceder o limite de FPS (Maximo: %d) MINFOV_KICK = O valor de 'default_fov' que está usando é menor que %d @@ -136,10 +115,11 @@ UNSTUCK_PLAYER_DEAD = Não pode usar este comando enquanto estiver morto. BLOCK_NAMECHANGE_MSG = Não pode mudar seu nome enquanto um jogo estiver em andamento. BLOCK_MODELCHANGE_MSG = não pode mudar seu model enquanto um jogo está em andamento. MINDELAY_HLTV_KICK = Seu atraso HLTV está muito baixo (Minimo: %.1f) +LLHL_FPS_LIMIT_MODE_AD = [%s] Tanto 144 como 240 fps são suportados neste servidor. Podes alternar entre os dois com o voto fpslimitmode LLHL_INITIALIZING = [%s] Inicializando o plugin +LLHL_INITIALIZED = [%s] Plugin inicializado com sucesso LLHL_CANT_RUN = [%s] O plugin '%s' só pode ser executado no modo de jogo '%s' en AG 6.6 ou em sua versão Mini para HL -LLHL_GM_BLOCK_DEACTIVATED = [%s] O bloqueador GhostMine foi desativado -LLHL_REHLDS_DETECTED = [%s] ReHLDS detectado, as pausas serão bloqueadas quando não houver jogos em andamento para evitar o abuso de um bug +LLHL_CANT_RUN_2 = [%s] O plugin '%s' requer o AGMOD 6.6-llhl instalado no servidor, o plugin será desativado. LLHL_CHECK_GH_FAILED = [%s] Não foi possível conectar à API do Github. A conexão falhou. LLHL_CHECK_GH_PARSE_ERROR = [%s] Ocorreu um erro ao analisar o JSON. (Github) LLHL_CHECK_GH_NO_UPDATE = [%s] Não á atualização disponível. @@ -147,43 +127,32 @@ LLHL_CHECK_GH_HIGHER_VER = [%s] Tem uma versão superior ao LLHL oficial. Pode s LLHL_CHECK_GH_NEW_UPDATE = [%s] Há uma nova atualização disponível. Baixe de: https://github.com/7mochi/llhl/releases/latest LLHL_CHECK_GH_RETRYING = [%s] Tentando novamente em %.1f segundos. Tentativas: %i/%i LLHL_STEAM_API_KEY_EMPTY = [%s] Você não definiu nenhuma chave Steam API ou não é válida. -LLHL_CHECK_STEAM_FAILED = [%s] Não foi possível conectar à API do Steam. A conexão falhou. -LLHL_CHECK_STEAM_PARSE_ERROR = [%s] Ocorreu um erro ao analisar o JSON. (Steam) LLHL_CURL_INIT_ERROR = [%s] ERROR: Não pôde inicializar cURL. LLHL_CURL_CODE_ERROR = [%s] ERROR: Não pôde ser feito a solicitação. (Codigo do error: %i) LLHL_CHECK_FS_KICK_1 = O compartilhamento de bibliotecas não é permitido neste servidor. LLHL_CHECK_FS_KICK_2 = Perfis de Steam privados não são permitidos neste servidor. LLHL_CHECK_FS_NOTICE_1 = [%s] %s (%s) está usando um jogo compartilhado. LLHL_CHECK_FS_NOTICE_2 = [%s] %s (%s) tem um perfil de Steam privado. -LLHL_UPDATE_DL_CANT_OPEN_FILE = [%s] ERROR: Não pôde ser aberto o arquivo %s -LLHL_UPDATE_DL_DOWNLOADING_FILE = [%s] Baixando arquivos: %s -LLHL_UPDATE_DL_DOWNLOAD_FINISHED = [%s] Transferência concluída. -LLHL_UPDATE_DL_RETRYING = [%s] Tentando novamente a Transferência em %.1f segundos. Tentativas: %i/%i -LLHL_UPDATE_DL_LLHLFILE_FINISHED = [%s] A Transferência do arquivo LLHL foi concluído. Progresso: %i/%i -LLHL_UPDATE_DL_LLHLALLF_FINISHED = [%s] Transferência dos arquivos LLHL concluído. -LLHL_UPDATE_DL_LLHLFILE_HASH_ERR = [%s] Hash do arquivo LLHL %s não coincide. Tentando eliminarlo... -LLHL_UPDATE_DL_CLEAN_UPDATER_DIR = [%s] Removendo pastas e arquivos temporpários. -LLHL_UPDATE_DL_ALL_FINISHED = [%s] Atualização do plugin concluída. -LLHL_UPDATE_DL_FAILED = [%s] Actualização do plugin falhou. LLHL_SCD_POSSIBLE_DETECTION = [%s - Simple Cheat Detector] %s (%s) foi detectada uma possível utilização do OpenGF32/AGFix. Comando enviado: %s | Tentativas restantes: %i/%i LLHL_SCD_DETECTION = [%s - Simple Cheat Detector] %s (%s) foi detectado OpenGF32/AGFix após %i tentativas -LLHL_REHLDS_XPLOIT = [%s] %s (%s) tentou fazer uma pausa no servidor quando mais ninguém estava por perto. Possível ReHLDS Bug Exploit LLHL_IS_OUTDATED = [%s] Este servidor utiliza uma versão desactualizada do modo de jogo. -LLHL_SP_AGSTART_NOT_ENOUGH = [%s] Não foram encontrados jogadores suficientes para iniciar um jogo. LLHL_MM_MENU_MAIN_TITLE = LLHL Gestor de jogos | Menu principal LLHL_MM_ITEM_MAIN_2 = Seleccionar o tipo de jogo: [%s] LLHL_MM_ITEM_MAIN_3 = Designar jogadores: Blue [%i-%i] Red LLHL_MM_ITEM_MAIN_4 = Iniciar jogo +LLHL_MM_ITEM_MAIN_5 = Abortar jogo LLHL_MM_MENU_IN_USE = O menu está actualmente em uso. Tente novamente mais tarde. LLHL_MM_OPT_2_TITLE = Tipo de jogo: LLHL_MM_OPT_3_TITLE = Designação de jogadores: LLHL_MM_NO_MATCH_TYPE = Não foi seleccionado nenhum tipo de jogo. -LLHL_MM_MATCH_ALREADY_STARTED = Um jogo está a começar. Tente novamente mais tarde. +LLHL_MM_MATCH_IS_IDLE = Não há nenhum jogo em andamento. +LLHL_MM_MATCH_ABORTED = O jogo foi abortado. +LLHL_MM_MATCH_IS_STARTING = Um jogo está a começar. +LLHL_MM_MATCH_IS_RUNNING = Um jogo está em andamento. Aborta-o antes de iniciar outro. LLHL_MM_INVALID_PLAYER_COUNT = O número de jogadores seleccionados não é o correcto. [cn] -CVAR_PROTECTOR_KICK = 检测到参数限制器. -FPSL_WARNING_MSG = “fps_max”的值不能高于 %d +FPSL_WARNING_MSG = 警告 #%d: “fps_max”的值不能高于 %d FPSL_KICK = 您目前的“fps_max”值高于 %d FPSL_KICK_MSG = %s 由于超出FPS限制而被踢出. (允许的最大值: %d) MINFOV_KICK = 您目前的“default_fov”值低于 %d @@ -197,10 +166,11 @@ UNSTUCK_PLAYER_DEAD = 您不能在死亡状态下使用该指令. BLOCK_NAMECHANGE_MSG = 您不能在比赛过程中更改名称. BLOCK_MODELCHANGE_MSG = 您不能在比赛过程中更改模型. MINDELAY_HLTV_KICK = 您的HLTV延时太短了. (允许的最短延时: %.1f) +LLHL_FPS_LIMIT_MODE_AD = [%s] 该服务器支持 144 和 240 fps。您可以通过投票 fpslimitmode 在两者之间切换 LLHL_INITIALIZING = [%s] 正在初始化插件... +LLHL_INITIALIZED = [%s] 插件初始化成功. LLHL_CANT_RUN = [%s] 插件 '%s' 只允许在AG 6.6中或装载了AG Mini的半条命中的 '%s' 游戏模式下运行. -LLHL_GM_BLOCK_DEACTIVATED = [%s] GhostMine Blocker 已被禁用. -LLHL_REHLDS_DETECTED = [%s] 检测到 ReHLDS, 为了避免发生错误,当没有比赛正在进行时,暂停功能将被禁用. +LLHL_CANT_RUN_2 = [%s] 插件 '%s' 需要服务器上安装了AGMOD 6.6-llhl, 插件将被禁用. LLHL_CHECK_GH_FAILED = [%s] 无法连接到Github API,连接失败. LLHL_CHECK_GH_PARSE_ERROR = [%s] 在解析 JSON 的过程中发生了错误. (Github) LLHL_CHECK_GH_NO_UPDATE = [%s] 没有可用的更新. @@ -208,36 +178,26 @@ LLHL_CHECK_GH_HIGHER_VER = [%s] 您正在使用的版本高于目前LLHL的官 LLHL_CHECK_GH_NEW_UPDATE = [%s] 有新的LLHL版本可用,下载地址: https://github.com/7mochi/llhl/releases/latest LLHL_CHECK_GH_RETRYING = [%s] 将在 %.1f 秒后重试. 尝试次数: %i/%i LLHL_STEAM_API_KEY_EMPTY = [%s] 您尚未设置任何Steam API密钥或该密钥无效. -LLHL_CHECK_STEAM_FAILED = [%s] 无法连接到Steam API,连接失败. -LLHL_CHECK_STEAM_PARSE_ERROR = [%s] 在解析 JSON 的过程中发生了错误. (Steam) LLHL_CURL_INIT_ERROR = [%s] 错误 cURL 无法初始化. LLHL_CURL_CODE_ERROR = [%s] [%s] 错误:无法完成请求. (错误代码: %i) LLHL_CHECK_FS_KICK_1 = 此服务器不支持家庭共享游戏. LLHL_CHECK_FS_KICK_2 = 此服务器上不允许私人配置文件。 LLHL_CHECK_FS_NOTICE_1 = [%s] %s (%s) 正在使用由. LLHL_CHECK_FS_NOTICE_2 = [%s] %s (%s) 有一个私人的steam资料。 -LLHL_UPDATE_DL_CANT_OPEN_FILE = [%s] 错误:文件 %s 无法打开. -LLHL_UPDATE_DL_DOWNLOADING_FILE = [%s] 正在下载文件: %s -LLHL_UPDATE_DL_DOWNLOAD_FINISHED = [%s] 下载完成. -LLHL_UPDATE_DL_RETRYING = [%s] %.1f 秒后重试下载. 重试次数: %i/%i -LLHL_UPDATE_DL_LLHLFILE_FINISHED = [%s] 已完成LLHL的文件下载. 进度: %i/%i -LLHL_UPDATE_DL_LLHLALLF_FINISHED = [%s] 已经完成LLHL的文件下载. -LLHL_UPDATE_DL_LLHLFILE_HASH_ERR = [%s] LLHL的文件 %s 的哈希值不匹配. 正在尝试删除该文件... -LLHL_UPDATE_DL_CLEAN_UPDATER_DIR = [%s] 正在删除文件夹和临时文件. -LLHL_UPDATE_DL_ALL_FINISHED = [%s] 插件已更新. -LLHL_UPDATE_DL_FAILED = [%s] 插件更新失败. LLHL_SCD_POSSIBLE_DETECTION = [%s - 作弊检测] %s (%s) 已检测到可能使用了 OpenGF32/AGFix | 剩余检测次数: %i/%i LLHL_SCD_DETECTION = [%s - 作弊检测] %s (%s) 经过了%i次尝试后被检测到使用了 OpenGF32/AGFix -LLHL_REHLDS_XPLOIT = [%s] %s (%s) 尝试在没有人的时候暂停服务器, 可能是rehlds漏洞攻击. LLHL_IS_OUTDATED = [%s] 此服务器正在使用旧的游戏模式.. -LLHL_SP_AGSTART_NOT_ENOUGH = [%s] 没有找到足够的球员来开始游戏. LLHL_MM_MENU_MAIN_TITLE = LLHL 比赛经理 | 主菜单 LLHL_MM_ITEM_MAIN_2 = 选择匹配类型: [%s] LLHL_MM_ITEM_MAIN_3 = 指派球员: Blue [%i-%i] Red LLHL_MM_ITEM_MAIN_4 = 开始比赛 +LLHL_MM_ITEM_MAIN_5 = 中止比赛 LLHL_MM_MENU_IN_USE = 此菜单当前正在使用中. 稍后再试. LLHL_MM_OPT_2_TITLE = 比赛类型: LLHL_MM_OPT_3_TITLE = 指派球员: LLHL_MM_NO_MATCH_TYPE = 未选择匹配类型. -LLHL_MM_MATCH_ALREADY_STARTED = 一个游戏正在开始。稍后再试. +LLHL_MM_MATCH_IS_IDLE = 没有比赛进行中. +LLHL_MM_MATCH_ABORTED = 比赛已中止. +LLHL_MM_MATCH_IS_STARTING = 一个游戏正在开始。 +LLHL_MM_MATCH_IS_RUNNING = 一个游戏正在进行中。在开始另一个游戏之前,请中止它。 LLHL_MM_INVALID_PLAYER_COUNT = 被选中的球员数量并不正确. diff --git a/assets/addons/metamod/dlls/gm_block_mm.dll b/assets/addons/metamod/dlls/gm_block_mm.dll deleted file mode 100644 index 1d21817..0000000 Binary files a/assets/addons/metamod/dlls/gm_block_mm.dll and /dev/null differ diff --git a/assets/addons/metamod/dlls/gm_block_mm_i386.so b/assets/addons/metamod/dlls/gm_block_mm_i386.so deleted file mode 100644 index 30787ba..0000000 Binary files a/assets/addons/metamod/dlls/gm_block_mm_i386.so and /dev/null differ diff --git a/assets/addons/metamod/dlls/metamod.dll b/assets/addons/metamod/dlls/metamod.dll index 50e2eef..2b83e85 100755 Binary files a/assets/addons/metamod/dlls/metamod.dll and b/assets/addons/metamod/dlls/metamod.dll differ diff --git a/assets/addons/metamod/dlls/metamod.so b/assets/addons/metamod/dlls/metamod.so index 387e21a..5decf38 100755 Binary files a/assets/addons/metamod/dlls/metamod.so and b/assets/addons/metamod/dlls/metamod.so differ diff --git a/assets/addons/metamod/plugins.ini b/assets/addons/metamod/plugins.ini index 3674dbb..f007790 100644 --- a/assets/addons/metamod/plugins.ini +++ b/assets/addons/metamod/plugins.ini @@ -1,4 +1,2 @@ -win32 addons/metamod/dlls/gm_block_mm.dll win32 addons/amxmodx/dlls/amxmodx_mm.dll -linux addons/metamod/dlls/gm_block_mm_i386.so linux addons/amxmodx/dlls/amxmodx_mm_i386.so \ No newline at end of file diff --git a/assets/gamemodes/llhl.cfg b/assets/gamemodes/llhl.cfg index 43a1288..5b859a2 100644 --- a/assets/gamemodes/llhl.cfg +++ b/assets/gamemodes/llhl.cfg @@ -1,129 +1,137 @@ //LLHL //Liga Latinoamericana de Half-Life -sv_ag_gametype "llhl" -mp_teamplay "1" -mp_teamlist "" -mp_friendlyfire "1" -mp_forcerespawn "1" -mp_weaponstay "0" -mp_timelimit "20" -mp_fraglimit "0" -mp_falldamage "0" -mp_flashlight "0" +sv_ag_gametype "llhl" +mp_teamplay "1" +mp_teamlist "" +mp_friendlyfire "1" +mp_forcerespawn "1" +mp_weaponstay "0" +mp_timelimit "20" +mp_fraglimit "0" +mp_falldamage "0" +mp_flashlight "0" -sv_ag_version "6.6" -sv_ag_start_minplayers "2" -sv_ag_vote_failed_time "30" -sv_ag_vote_setting "1" -sv_ag_max_spectators "32" -sv_ag_vote_kick "1" -sv_ag_allow_vote "1" -sv_ag_vote_map "1" -sv_ag_vote_start "1" +sv_ag_start_minplayers "2" +sv_ag_vote_failed_time "30" +sv_ag_vote_setting "1" +sv_ag_max_spectators "32" +sv_ag_vote_kick "1" +sv_ag_allow_vote "1" +sv_ag_vote_map "1" +sv_ag_vote_start "1" -sv_accelerate "10" +sv_accelerate "10" -ag_rpg_fix "1" -ag_gauss_fix "1" +ag_rpg_fix "1" +ag_gauss_fix "1" -sv_ag_lj_timer "0" -sv_ag_wallgauss "1" -sv_ag_headshot "3" -sv_ag_blastradius "1" -sv_ag_oldphysics "1" -sv_ag_spawn_volume "1" +sv_ag_lj_timer "0" +sv_ag_wallgauss "1" +sv_ag_headshot "3" +sv_ag_blastradius "1" +sv_ag_oldphysics "1" +sv_ag_spawn_volume "1" -sv_ag_ban_crowbar "0" -sv_ag_ban_glock "0" -sv_ag_ban_357 "0" -sv_ag_ban_mp5 "0" -sv_ag_ban_shotgun "0" -sv_ag_ban_crossbow "0" -sv_ag_ban_rpg "0" -sv_ag_ban_gauss "0" -sv_ag_ban_egon "0" -sv_ag_ban_hornet "0" -sv_ag_ban_hgrenade "0" -sv_ag_ban_satchel "0" -sv_ag_ban_tripmine "0" -sv_ag_ban_snark "0" -sv_ag_ban_m203 "0" -sv_ag_ban_longjump "0" -sv_ag_ban_9mmar "0" -sv_ag_ban_bockshot "0" -sv_ag_ban_uranium "0" -sv_ag_ban_bolts "0" -sv_ag_ban_rockets "0" -sv_ag_ban_357ammo "0" -sv_ag_ban_armour "0" -sv_ag_ban_health "0" -sv_ag_ban_recharg "0" +sv_ag_ban_crowbar "0" +sv_ag_ban_glock "0" +sv_ag_ban_357 "0" +sv_ag_ban_mp5 "0" +sv_ag_ban_shotgun "0" +sv_ag_ban_crossbow "0" +sv_ag_ban_rpg "0" +sv_ag_ban_gauss "0" +sv_ag_ban_egon "0" +sv_ag_ban_hornet "0" +sv_ag_ban_hgrenade "0" +sv_ag_ban_satchel "0" +sv_ag_ban_tripmine "0" +sv_ag_ban_snark "0" +sv_ag_ban_m203 "0" +sv_ag_ban_longjump "0" +sv_ag_ban_9mmar "0" +sv_ag_ban_bockshot "0" +sv_ag_ban_uranium "0" +sv_ag_ban_bolts "0" +sv_ag_ban_rockets "0" +sv_ag_ban_357ammo "0" +sv_ag_ban_armour "0" +sv_ag_ban_health "0" +sv_ag_ban_recharg "0" -sv_ag_start_crowbar "1" -sv_ag_start_glock "1" -sv_ag_start_357 "0" -sv_ag_start_mp5 "0" -sv_ag_start_shotgun "0" -sv_ag_start_crossbow "0" -sv_ag_start_rpg "0" -sv_ag_start_gauss "0" -sv_ag_start_egon "0" -sv_ag_start_hornet "0" -sv_ag_start_hgrenade "0" -sv_ag_start_satchel "0" -sv_ag_start_tripmine "0" -sv_ag_start_snark "0" -sv_ag_start_m203 "0" -sv_ag_start_longjump "0" -sv_ag_start_9mmar "68" -sv_ag_start_bockshot "0" -sv_ag_start_uranium "0" -sv_ag_start_bolts "0" -sv_ag_start_rockets "0" -sv_ag_start_357ammo "0" -sv_ag_start_armour "0" -sv_ag_start_health "100" +sv_ag_start_crowbar "1" +sv_ag_start_glock "1" +sv_ag_start_357 "0" +sv_ag_start_mp5 "0" +sv_ag_start_shotgun "0" +sv_ag_start_crossbow "0" +sv_ag_start_rpg "0" +sv_ag_start_gauss "0" +sv_ag_start_egon "0" +sv_ag_start_hornet "0" +sv_ag_start_hgrenade "0" +sv_ag_start_satchel "0" +sv_ag_start_tripmine "0" +sv_ag_start_snark "0" +sv_ag_start_m203 "0" +sv_ag_start_longjump "0" +sv_ag_start_9mmar "68" +sv_ag_start_bockshot "0" +sv_ag_start_uranium "0" +sv_ag_start_bolts "0" +sv_ag_start_rockets "0" +sv_ag_start_357ammo "0" +sv_ag_start_armour "0" +sv_ag_start_health "100" -sv_ag_dmg_crowbar "30" -sv_ag_dmg_glock "12" -sv_ag_dmg_357 "40" -sv_ag_dmg_mp5 "12" -sv_ag_dmg_shotgun "20" -sv_ag_dmg_crossbow "20" -sv_ag_dmg_bolts "50" -sv_ag_dmg_rpg "120" -sv_ag_dmg_gauss "20" -sv_ag_dmg_egon_wide "14" -sv_ag_dmg_egon_narrow "7" -sv_ag_dmg_hornet "16" -sv_ag_dmg_hgrenade "100" -sv_ag_dmg_satchel "120" -sv_ag_dmg_tripmine "150" -sv_ag_dmg_m203 "100" +sv_ag_dmg_crowbar "30" +sv_ag_dmg_glock "12" +sv_ag_dmg_357 "40" +sv_ag_dmg_mp5 "12" +sv_ag_dmg_shotgun "20" +sv_ag_dmg_crossbow "20" +sv_ag_dmg_bolts "50" +sv_ag_dmg_rpg "120" +sv_ag_dmg_gauss "20" +sv_ag_dmg_egon_wide "14" +sv_ag_dmg_egon_narrow "7" +sv_ag_dmg_hornet "16" +sv_ag_dmg_hgrenade "100" +sv_ag_dmg_satchel "120" +sv_ag_dmg_tripmine "150" +sv_ag_dmg_m203 "100" -sv_ag_fpslimit_max_fps "144" -sv_ag_fpslimit_max_detections "2" -sv_ag_min_default_fov_enabled "0" -sv_ag_min_default_fov "85" -sv_ag_cvar_check_interval "1.5" -sv_ag_unstuck_cooldown "10.0" -sv_ag_unstuck_start_distance "32" -sv_ag_unstuck_max_attempts "64" -sv_ag_destroyable_satchel "0" -sv_ag_destroyable_satchel_hp "1" -sv_ag_block_namechange_inmatch "1" -sv_ag_block_modelchange_inmatch "1" -sv_ag_num_hltv_allowed "2" -sv_ag_min_hltv_delay "30.0" -sv_ag_block_ghostmine "1" -sv_ag_cheat_cmd_check_interval "5.0" -sv_ag_cheat_cmd_max_detections "5" -sv_ag_change_model_penalization "1" -sv_ag_steam_api_key "" -sv_ag_block_family_sharing "0" -sv_ag_random_spawns "0" -sv_ag_block_cmd_enhancements "1" -sv_ag_check_updates "1" -sv_ag_check_updates_retrys "3" -sv_ag_check_updates_retry_delay "2.0" \ No newline at end of file +sv_ag_fps_limit_warnings "2" +sv_ag_fps_limit_check_interval "5.0" +sv_ag_fov_min_enabled "1" +sv_ag_fov_min_check_interval "1.5" +sv_ag_fov_min "85" +sv_ag_respawn_delay "0.75" +sv_ag_unstuck_cooldown "10.0" +sv_ag_unstuck_start_distance "32" +sv_ag_unstuck_max_attempts "64" +sv_ag_block_namechange_inmatch "1" +sv_ag_block_modelchange_inmatch "1" +sv_ag_num_hltv_allowed "2" +sv_ag_min_hltv_delay "30.0" +sv_ag_nuke_grenade "0" +sv_ag_nuke_crossbow "0" +sv_ag_nuke_rpg "0" +sv_ag_nuke_gauss "1" +sv_ag_nuke_egon "0" +sv_ag_nuke_tripmine "0" +sv_ag_nuke_satchel "0" +sv_ag_nuke_snark "0" +sv_ag_explosion_fix "0" +sv_ag_cheat_cmd_check "1" +sv_ag_cheat_cmd_check_interval "5.0" +sv_ag_cheat_cmd_max_detections "5" +sv_ag_change_model_penalization "1" +sv_ag_steam_api_key "" +sv_ag_block_family_sharing "0" +sv_ag_random_spawns "0" +sv_ag_block_cmd_enhancements "1" +sv_ag_block_vote_spectators "1" +sv_ag_check_updates "1" +sv_ag_check_updates_retrys "3" +sv_ag_check_updates_retry_delay "2.0" \ No newline at end of file diff --git a/assets/motd_llhl_en.txt b/assets/motd_llhl_en.txt index 3135d1f..1b2f200 100644 --- a/assets/motd_llhl_en.txt +++ b/assets/motd_llhl_en.txt @@ -1,25 +1,26 @@ -Welcome to the LLHL v2.0-stable game mode +Welcome to the LLHL v3.0-stable game mode This gamemode is currently used for the Liga Latinoamericana de Half-Life (LLHL). -- New features -- -# FPS Limiter +# FPS Limiter (Use the 'fpslimitmode' vote to toggle between 144 and 244 fps) # 'default_fov' Limiter # Records a demo automatically when a match is started # New commands: /unstuck, llhl_match_manager (For administrators only) # Sound verification -# Be able to destroy other players satchels # Block nickname and model changes when a game is in progress # New intermission mode # More than 1 HLTV allowed # Force connected HLTV to have a certain delay value as a minimum -# Wallhack Blocker -# Ghostmine Blocker +# Nuke blocking capabilities # Simple OpenGF32 and AGFix detection # Take screenshots at map end and occasionally when a player dies # Changing model during a match subtract 1 from the score # Block access to players who have the game via Family Sharing # Random spawns # Blocks location/HP/Weapon/etc messages for spectators +# Block spectators from voting +# Respawn time are now FPS-independent +# Fixes bodies frozen in the air when using high fps -- Configuracion del modo de juego -- # Forced Respawn Enabled @@ -33,7 +34,7 @@ Keep all your screenshots and demos generated with this gamemode. An administrator may ask you to upload them. -- Gamemode information -- -# Version: 2.0-stable -# Author: FlyingCat (Discord: Suisei#1966) +# Version: 3.0-stable +# Author: 7mochi (Discord: _7mochi) # Repository: https://git.io/jkttq -# Download: https://github.com/FlyingCat-X/llhl/releases/latest \ No newline at end of file +# Download: https://github.com/7mochi/llhl/releases/latest \ No newline at end of file diff --git a/assets/motd_llhl_es.txt b/assets/motd_llhl_es.txt index 57424dd..a3df85b 100644 --- a/assets/motd_llhl_es.txt +++ b/assets/motd_llhl_es.txt @@ -1,25 +1,26 @@ -Bienvenido al modo de juego LLHL v2.0-stable +Bienvenido al modo de juego LLHL v3.0-stable Este modo de juego se usa actualmente para la Liga Latinoamericana de Half-Life (LLHL) -- Nuevas caracteristicas -- -# Limitador de FPS -# Limitador de default_fov +# Limitador de FPS (Usa el voto 'fpslimitmode' para alternar entre 144 y 244 fps) +# Limitador de 'default_fov' # Graba demos automaticamente cuando se inicia una partida # Nuevo comandos: /unstuck, llhl_match_manager (Solo para administradores) # Verificacion de sonidos -# Posibilidad de destruir las satchels de otros players # No se permiten cambios de nombre y model cuando hay una partida en curso # Nuevo modo de espera al terminar un mapa # Permitidos mas de 1 HLTV # Forzar a los HLTV a tener una cantidad de delay como minimo -# Bloqueador de Wallhack -# Bloqueador de Ghostmine +# Capacidades de bloqueo de Nukes # Simple deteccion de los cheats OpenGF32 y AGFix # Se toman screenshots al terminar el mapa y ocasionalmente cuando un jugador muere # Cambiar de model durante una partida resta 1 de la puntuación # Bloquear el acceso a los jugadores que tengan el juego vía prestamo familiar # Spawns aleatorios # Bloquea mensajes de ubicación/HP/arma/etc para los espectadores +# Bloquear que los espectadores voten +# Los tiempos de respawn son ahora independientes de los FPS +# Arregla los cuerpos congelados en el aire cuando se utilizan altos fps -- Configuracion del modo de juego -- # Forzado de respawn activado @@ -33,7 +34,7 @@ Conserva todas tus capturas de pantalla y demos generadas con este modo de juego Un administrador podria pedirte que las subas. -- Informacion del modo de juego -- -# Version: 2.0-stable -# Autor: FlyingCat (Discord: Suisei#1966) +# Version: 3.0-stable +# Autor: 7mochi (Discord: _7mochi) # Repositorio: https://git.io/jkttq -# Descarga: https://github.com/FlyingCat-X/llhl/releases/latest \ No newline at end of file +# Descarga: https://github.com/7mochi/llhl/releases/latest \ No newline at end of file diff --git a/assets/motd_llhl_pt.txt b/assets/motd_llhl_pt.txt index bda19ef..e78d49b 100644 --- a/assets/motd_llhl_pt.txt +++ b/assets/motd_llhl_pt.txt @@ -1,25 +1,27 @@ -Bem-vindo ao modo de jogo LLHL v2.0-stable. +Bem-vindo ao modo de jogo LLHL v3.0-stable. Este modo de jogo é actualmente utilizado para a Liga Latinoamericana de Half-Life (LLHL). -- Novas Características -- -# Limitador de FPS +# Limitador de FPS (Use o voto 'fpslimitmode' para alternar entre 144 e 244 fps) # Limitador do 'default_fov' # Uma demonstração e gravada automaticamente quando uma partida começa # Novo comandos: /unstuck, llhl_match_manager (Apenas para administradores) # Verificação do som -# Possibilidade de destruir as satchels de outros jogadores # Não são permitidas mudanças de nome e model quando um jogo está em andamento # Novo modo de espera ao terminar um mapa # Mais de 1 HLTV permitido # Es forçado a ter HLTV conectado um certo valor de delay pelo mínimo # Bloqueador de Wallhack -# Bloqueador de Ghostmine +# Capacidades de bloqueio de nukes # Detecção simples de OpenGF32 e AGFix # Faça screenshots no final de um mapa e ocasionalmente quando um jogador morre # A mudança de model durante uma partida subtrai 1 da pontuação # Bloquear o acesso aos jogadores que têm o jogo através do compartilhamento de bibliotecas # Spawns aleatórias # Localização dos blocos/Mensagens de localização/HP/Weapon/etc para os espectadores +# Bloquear a votação dos espectadores +# Corrige corpos congelados em pleno ar quando se usa fps elevado +# Verifica se há novas actualizações e será notificado na consola do servidor -- Configurações do modo de jogo -- # Respawn forçado activado @@ -33,7 +35,7 @@ Mantenha todas as suas capturas de ecrã e demos geradas com este modo de jogo. Um administrador pode pedir-lhe que os carregue. -- Informação sobre o modo de jogo -- -# Versão: 2.0-stable -# Autor: FlyingCat (Discord: Suisei#1966) +# Versão: 3.0-stable +# Autor: 7mochi (Discord: _7mochi) # Repositório: https://git.io/jkttq -# Download: https://github.com/FlyingCat-X/llhl/releases/latest \ No newline at end of file +# Download: https://github.com/7mochi/llhl/releases/latest \ No newline at end of file diff --git a/package.json b/package.json index bfa717b..fc511c0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "llhl", - "version": "2.0", - "description": "LLHL Gamemode for Adrenaline Gamer 6.6 (And maybe AGMini)", + "version": "3.0.0", + "description": "LLHL Gamemode for Adrenaline Gamer", "scripts": { "install-linux": "amxxpack install --config .amxxpack.linux.json", "install-windows": "amxxpack install --config .amxxpack.windows.json", diff --git a/src/scripts/llhl.sma b/src/scripts/llhl.sma index 6cc1c6b..9758837 100644 --- a/src/scripts/llhl.sma +++ b/src/scripts/llhl.sma @@ -1,57 +1,67 @@ /* - LLHL Gamemode for AG 6.6 and AGMini - Version: 2.0-stable - Author: FlyingCat + LLHL Gamemode for AG 6.6 + Version: 3.0-stable + Author: 7mochi # Information: - This plugin is a port for Adrenaline Gamer 6.6 (And AGMini) from my LLHL gamemode that + This plugin is a port for Adrenaline Gamer 6.6 from my LLHL gamemode that was developed for rtxa's agmodx. Unlike my gamemode for agmodx, this one only supports protocol 48. # Features: - - FPS Limiter (Default value is 144) - - FOV Limiter (Minimum value is 85, disabled by default) + - FPS Limiter (Default value is 144, switchable from 144 to 240 and vice versa, you can toggle between them with the fpslimitmode vote) + - FOV Limiter (Minimum value is 85, enabled by default) - Records a demo automatically when a match is started (With agstart) - /unstuck command (10 seconds cooldown) - Check certain sound files, they're the same sounds that are verified in the EHLL gamemode - AG6.6 - - Be able to destroy other players satchels (Optional, disabled by default) - Block nickname changes when a game is in progress (Optional, enabled by default) - New intermission mode - More than 1 HLTV allowed - Force connected HLTV to have a certain delay value as a minimum (Minimum value is 30) - - Ghostmine Blocker - - Simple OpenGF32 and AGFix detection (Through cheat commands) + - Nuke blocking capabilities (Lampgauss, ghostmine, rocket, etc) + - Simple OpenGF32 and AGFix detection (Through cheat commands. Optional, enabled by default) - Take screenshots at map end and occasionally when a player dies - - Avoid abusing a ReHLDS bug (Server disappears from the masterlist when it's' paused) only when there's no game in progress. - Changing model during a match subtract 1 from the score. (Optional, enabled by default). - Block access to players who have the game via Family Sharing. (Optional, disabled by default). - Random spawns (Optional, disabled by default) - Blocks location/HP/Weapon/etc messages for spectators - - Check for new updates and it will download them automatically. + - Block spectators from voting (Optional, enabled by default) + - Respawn time are now FPS-independent + - Fixes bodies frozen in the air when using high fps + - Check for new updates and it will notify you in the server console - llhl_match_manager command (For administrators only) # New cvars: - - sv_ag_fpslimit_max_fps "144" - - sv_ag_fpslimit_max_detections "2" - - sv_ag_min_default_fov_enabled "0" - - sv_ag_min_default_fov "85" - - sv_ag_cvar_check_interval "1.5" + - sv_ag_fps_limit_warnings "2" + - sv_ag_fps_limit_check_interval "5.0" + - sv_ag_fov_min_enabled "1" + - sv_ag_fov_min_check_interval "1.5" + - sv_ag_fov_min "85" + - sv_ag_respawn_delay "0.75" - sv_ag_unstuck_cooldown "10.0" - sv_ag_unstuck_start_distance "32" - sv_ag_unstuck_max_attempts "64" - - sv_ag_destroyable_satchel "0" - - sv_ag_destroyable_satchel_hp "1" - sv_ag_block_namechange_inmatch "1" - sv_ag_block_modelchange_inmatch "1" - sv_ag_min_hltv_delay "30.0" - - sv_ag_block_ghostmine "1" + - sv_ag_nuke_grenade "0" + - sv_ag_nuke_crossbow "0" + - sv_ag_nuke_rpg "0" + - sv_ag_nuke_gauss "1" + - sv_ag_nuke_egon "0" + - sv_ag_nuke_tripmine "0" + - sv_ag_nuke_satchel "0" + - sv_ag_nuke_snark "0" + - sv_ag_explosion_fix "0" + - sv_ag_cheat_cmd_check "1" - sv_ag_cheat_cmd_check_interval "5.0" - sv_ag_cheat_cmd_max_detections "5" - sv_ag_change_model_penalization "1" - sv_ag_block_family_sharing "0" - sv_ag_random_spawns "0" - sv_ag_block_cmd_enhancements "1" + - sv_ag_block_vote_spectators "1" - sv_ag_steam_api_key "" - sv_ag_check_updates "1" - sv_ag_check_updates_retrys "3" @@ -66,7 +76,7 @@ - Dcarlox: Grammar corrections in the README - leynieR: Portuguese Translation. - Contact: alonso.caychop@tutamail.com or Suisei#1966 (Discord) + Contact: alonso.caychop@protonmail.com or _7mochi (Discord) */ #include @@ -83,9 +93,9 @@ #define PLUGIN "Liga Latinoamericana de Half Life" #define PLUGIN_ACRONYM "LLHL" #define PLUGIN_GAMEMODE "llhl" -#define VERSION "2.1-stable" -#define AUTHOR "FlyingCat" -#define GH_API_URL "https://api.github.com/repos/FlyingCat-X/llhl/tags?per_page=1" +#define VERSION "3.0-stable" +#define AUTHOR "7mochi" +#define GH_API_URL "https://api.github.com/repos/7mochi/llhl/tags?per_page=1" #define STEAM_API_URL "https://api.steampowered.com/IPlayerService/GetOwnedGames/v1/?key=%s&steamid=%s&format=json&appids_filter[0]=70" #pragma semicolon 1 @@ -105,11 +115,6 @@ #define GAME_STARTING 1 #define GAME_RUNNING 2 -// Is GhostMineBlock loaded? -#define GMB_NOTLOADED 0 -#define GMB_LOADED 1 // Reserved for future use -#define GMB_BLOCKED 2 // Reserved for future use - // MM: Match Manager #define MM_NO_TEAM "NO" #define MM_BLUE_TEAM "BLUE" @@ -118,7 +123,8 @@ enum (+=103) { TASK_CVARCHECKER = 72958, TASK_SHOWVENGINE, - TASK_CHEATCHECKER + TASK_CHEATCHECKER, + TASK_MM_START_MATCH }; enum _:LLHLFile { @@ -127,7 +133,6 @@ enum _:LLHLFile { } new gGameState; -new gGhostMineBlockState; new gNumDetections[MAX_PLAYERS + 1]; new gOldPlayerModel[MAX_PLAYERS + 1][HL_MAX_TEAMNAME_LENGTH]; new gDeathScreenshotTaken[MAX_PLAYERS + 1]; @@ -135,21 +140,14 @@ new gDetectionScreenshotTaken[MAX_PLAYERS + 1]; // Cvars pointers new gCvarAgStartMinPlayers; -new gCvarMaxFps; -new gCvarMaxDetections; -new gCvarMinFovEnabled; -new gCvarMinFov; -new gCvarCheckInterval; new gCvarUnstuckCooldown; new gCvarUnstuckStartDistance; new gCvarUnstuckMaxSearchAttempts; -new gCvarDestroyableSatchel; -new gCvarDestroyableSatchelHP; new gCvarBlockNameChangeInMatch; new gCvarBlockModelChangeInMatch; new gCvarNumHLTVAllowed; new gCvarMinHLTVDelay; -new gCvarBlockGhostmine; +new gCvarCheatCmdCheck; new gCvarCheatCmdCheckInterval; new gCvarCheatCmdMaxDetections; new gCvarChangeModelPenalization; @@ -219,58 +217,33 @@ public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); - new gamemode[32]; + new gamemode[32], serverAGVersion[32]; get_cvar_string("sv_ag_gamemode", gamemode, charsmax(gamemode)); - - // Check if GhostMineBlock is loaded even when the gamemode isn't LLHL - if (!cvar_exists("gm_block_on")) { - gGhostMineBlockState = GMB_NOTLOADED; - } else { - gGhostMineBlockState = GMB_LOADED; - } + get_cvar_string("sv_ag_version", serverAGVersion, charsmax(serverAGVersion)); if (!equali(gamemode, PLUGIN_GAMEMODE)) { server_print("%L", LANG_SERVER, "LLHL_CANT_RUN", PLUGIN_ACRONYM, PLUGIN, PLUGIN_GAMEMODE); - // If GhostMineBlock is loaded and the gamemode isn't LLHL, it'll be deactivated - if (gGhostMineBlockState == GMB_LOADED) { - gGhostMineBlockState = GMB_BLOCKED; - set_cvar_num("gm_block_on", 0); - server_print("%L", LANG_SERVER, "LLHL_GM_BLOCK_DEACTIVATED", PLUGIN_ACRONYM); - // Try to load the default motd - server_cmd("motdfile motd.txt", PLUGIN_GAMEMODE); - server_exec(); - } + // Try to load the default motd + server_cmd("motdfile motd.txt"); + server_exec(); + pause("ad"); + return; + } else if (equali(gamemode, PLUGIN_GAMEMODE) && !equali("6.6llhl", serverAGVersion)) { + server_print("%L", LANG_SERVER, "LLHL_CANT_RUN_2", PLUGIN_ACRONYM, PLUGIN, PLUGIN_GAMEMODE); + // Try to load the default motd + server_cmd("motdfile motd.txt"); + server_exec(); pause("ad"); return; - } - - // Only ReHLDS - if (cvar_exists("sv_rcon_condebug")) { - register_clcmd("agpause", "CmdAgpauseRehldsHook"); - server_print("%L", LANG_SERVER, "LLHL_REHLDS_DETECTED", PLUGIN_ACRONYM); } gCvarAgStartMinPlayers = get_cvar_pointer("sv_ag_start_minplayers"); - // FPS Limiter - gCvarMaxFps = create_cvar("sv_ag_fpslimit_max_fps", "144"); - gCvarMaxDetections = create_cvar("sv_ag_fpslimit_max_detections", "2"); - - // Mininum Default Fov Allowed (Disabled by default) - gCvarMinFovEnabled = create_cvar("sv_ag_min_default_fov_enabled", "0"); - gCvarMinFov = create_cvar("sv_ag_min_default_fov", "85"); - - // CVAR Checker Interval (FPS and Fov) - gCvarCheckInterval = create_cvar("sv_ag_cvar_check_interval", "1.5"); - // Unstuck command gCvarUnstuckCooldown = create_cvar("sv_ag_unstuck_cooldown", "10.0"); gCvarUnstuckStartDistance = create_cvar("sv_ag_unstuck_start_distance", "32"); gCvarUnstuckMaxSearchAttempts = create_cvar("sv_ag_unstuck_max_attempts", "64"); - // Destroyable Satchel - gCvarDestroyableSatchel = create_cvar("sv_ag_destroyable_satchel", "0"); - gCvarDestroyableSatchelHP = create_cvar("sv_ag_destroyable_satchel_hp", "1"); // Block name change (Only spectators) log in match gCvarBlockNameChangeInMatch = create_cvar("sv_ag_block_namechange_inmatch", "1"); @@ -283,6 +256,7 @@ public plugin_init() { gCvarMinHLTVDelay = create_cvar("sv_ag_min_hltv_delay", "30.0"); // Simple OpenGF32 and AGFix Detection + gCvarCheatCmdCheck = create_cvar("sv_ag_cheat_cmd_check", "1"); gCvarCheatCmdCheckInterval = create_cvar("sv_ag_cheat_cmd_check_interval", "5.0"); gCvarCheatCmdMaxDetections = create_cvar("sv_ag_cheat_cmd_max_detections", "5"); @@ -299,10 +273,6 @@ public plugin_init() { gGameState = GAME_IDLE; - if (gGhostMineBlockState == GMB_LOADED) { - gCvarBlockGhostmine = create_cvar("sv_ag_block_ghostmine", "1"); - } - // Check updates from Github Repo gCvarCheckUpdates = create_cvar("sv_ag_check_updates", "1"); gCvarCheckUpdatesRetrys = create_cvar("sv_ag_check_updates_retrys", "3"); @@ -316,13 +286,6 @@ public plugin_init() { set_cvar_num("sv_proxies", get_pcvar_num(gCvarNumHLTVAllowed)); hook_cvar_change(gCvarNumHLTVAllowed, "CvarHLTVAllowedHook"); hook_cvar_change(get_cvar_pointer("sv_proxies"), "CvarSVProxiesHook"); - - if (cvar_exists("sv_ag_block_ghostmine")) { - // Reload GhostMineBlock original cvar - set_cvar_num("gm_block_on", get_pcvar_num(gCvarBlockGhostmine)); - hook_cvar_change(gCvarBlockGhostmine, "CvarGhostMineHook"); - hook_cvar_change(get_cvar_pointer("gm_block_on"), "MetaCvarGhostMineHook"); - } gSpawnOrigins = ArrayCreate(3); gSpawnAngles = ArrayCreate(3); @@ -349,12 +312,14 @@ public plugin_init() { register_message(get_user_msgid("Countdown"), "FwMsgCountdown"); register_message(get_user_msgid("Settings"), "FwMsgSettings"); register_message(get_user_msgid("Vote"), "FwMsgVote"); + register_message(get_user_msgid("FpsWarning"), "FwFpsWarning"); + register_message(get_user_msgid("FpsKick"), "FwFpsKick"); + register_message(get_user_msgid("FovKick"), "FwFovKick"); register_message(SVC_INTERMISSION, "FwMsgIntermission"); register_event("DeathMsg", "EventDeathMsg", "ad"); - register_forward(FM_SetModel, "FwSetModel"); register_forward(FM_ClientUserInfoChanged, "FwClientUserInfoChangedPre", 0); register_forward(FM_StartFrame, "FwStartFrame"); register_forward(FM_GetGameDescription, "FwGameDescription"); @@ -363,8 +328,6 @@ public plugin_init() { force_unmodified(force_exactfile, {0,0,0}, {0,0,0}, gConsistencySoundFiles[i]); } - set_task(floatmax(1.0, get_pcvar_float(gCvarCheckInterval)), "CvarCheckRun"); - set_task(floatmax(1.0, get_pcvar_float(gCvarCheatCmdCheckInterval)), "CheatCommandRun", TASK_CHEATCHECKER); hook_cvar_change(gCvarCheatCmdCheckInterval, "CvarCheatCmdIntervalHook"); @@ -386,6 +349,8 @@ public plugin_init() { gCheckUpdatesNumRetrys = 0; ConnectGithubAPI(); } + + server_print("%L", LANG_SERVER, "LLHL_INITIALIZED", PLUGIN_ACRONYM); } public inconsistent_file(id, const filename[], reason[64]) { @@ -444,6 +409,7 @@ public client_putinserver(id) { } // Workaround for first spawn at join HamPlayerSpawnPost(id); + set_task(10.0, "ShowFpsVoteAdvertisement", id); } public client_authorized(id) { @@ -455,40 +421,43 @@ public client_authorized(id) { public client_command(id) { new command[64]; read_argv(0, command, charsmax(command)); - if (equali(command, "preCheck")) { - gFirstCheatValidation[id] = true; - gSecondCheatValidation[id] = false; - return PLUGIN_HANDLED; - } else if (IsCheatCommand(command)) { - if (gFirstCheatValidation[id]) { - gSecondCheatValidation[id] = true; - return PLUGIN_HANDLED; - } - } else if (equali(command, "postCheck")) { - if (gFirstCheatValidation[id] && !gSecondCheatValidation[id]) { - gCheatNumDetections[id]++; - gFirstCheatValidation[id] = false; + + if (get_pcvar_num(gCvarCheatCmdCheck)) { + if (equali(command, "preCheck")) { + gFirstCheatValidation[id] = true; gSecondCheatValidation[id] = false; - new name[32], authID[32], formatted[32], fileName[32]; - new timestamp = get_systime(); - format_time(formatted, charsmax(formatted), "%d%m%Y", timestamp); - formatex(fileName, charsmax(fileName), "llhl_detections_%s.log", formatted); - get_user_name(id, name, charsmax(name)); - get_user_authid(id, authID, charsmax(authID)); - log_to_file(fileName, "%L", LANG_SERVER, "LLHL_SCD_POSSIBLE_DETECTION", PLUGIN_ACRONYM, name, authID, gCommandSended, gCheatNumDetections[id], get_pcvar_num(gCvarCheatCmdMaxDetections)); - - if (gCheatNumDetections[id] >= get_pcvar_num(gCvarCheatCmdMaxDetections)) { - log_to_file(fileName, "%L", LANG_SERVER, "LLHL_SCD_DETECTION", PLUGIN_ACRONYM, name, authID, gCheatNumDetections[id]); - if (!gDetectionScreenshotTaken[id] && random_num(69, 70) == 69) { - if (gGameState == GAME_RUNNING) { - TakeScreenshot(id); - gDetectionScreenshotTaken[id] = 1; + return PLUGIN_HANDLED; + } else if (IsCheatCommand(command)) { + if (gFirstCheatValidation[id]) { + gSecondCheatValidation[id] = true; + return PLUGIN_HANDLED; + } + } else if (equali(command, "postCheck")) { + if (gFirstCheatValidation[id] && !gSecondCheatValidation[id]) { + gCheatNumDetections[id]++; + gFirstCheatValidation[id] = false; + gSecondCheatValidation[id] = false; + new name[32], authID[32], formatted[32], fileName[32]; + new timestamp = get_systime(); + format_time(formatted, charsmax(formatted), "%d%m%Y", timestamp); + formatex(fileName, charsmax(fileName), "llhl_detections_%s.log", formatted); + get_user_name(id, name, charsmax(name)); + get_user_authid(id, authID, charsmax(authID)); + log_to_file(fileName, "%L", LANG_SERVER, "LLHL_SCD_POSSIBLE_DETECTION", PLUGIN_ACRONYM, name, authID, gCommandSended, gCheatNumDetections[id], get_pcvar_num(gCvarCheatCmdMaxDetections)); + + if (gCheatNumDetections[id] >= get_pcvar_num(gCvarCheatCmdMaxDetections)) { + log_to_file(fileName, "%L", LANG_SERVER, "LLHL_SCD_DETECTION", PLUGIN_ACRONYM, name, authID, gCheatNumDetections[id]); + if (!gDetectionScreenshotTaken[id] && random_num(69, 70) == 69) { + if (gGameState == GAME_RUNNING) { + TakeScreenshot(id); + gDetectionScreenshotTaken[id] = 1; + } } + gCheatNumDetections[id] = 0; } - gCheatNumDetections[id] = 0; } + return PLUGIN_HANDLED; } - return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } @@ -519,6 +488,10 @@ public IsSpawnValid(id, Float:origin[3]) { return (trace_hull(origin, (get_user_flags(id) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN), id, DONT_IGNORE_MONSTERS) & 2) ? 0 : 1; } +public ShowFpsVoteAdvertisement(id) { + client_print(id, print_chat, "%l", "LLHL_FPS_LIMIT_MODE_AD", PLUGIN_ACRONYM); +} + // Called every second during the agstart countdown public FwMsgCountdown(id, dest, ent) { static count, sound; @@ -585,6 +558,51 @@ public FwMsgVote(id) { } } +public FwFpsWarning(id, dest, ent) { + static warnings, fpsLimit; + warnings = get_msg_arg_int(1); + fpsLimit = get_msg_arg_int(2); + + client_print(ent, print_chat, "%l", "FPSL_WARNING_MSG", warnings, fpsLimit); + return PLUGIN_HANDLED; +} + +public FwFpsKick(id, dest, ent) { + static player, username[MAX_NAME_LENGTH + 1], fpsLimit; + player = get_msg_arg_int(1); + fpsLimit = get_msg_arg_int(2); + + if (!is_user_connected(player)) + return PLUGIN_HANDLED; + + get_user_name(player, username, charsmax(username)); + // TODO: This message is sent twice, probably because the forward is being executed very quickly in player PostThink() + log_amx("%L", LANG_SERVER, "FPSL_KICK_MSG", username, fpsLimit); + client_print(0, print_chat, "%l", "FPSL_KICK_MSG", username, fpsLimit); + + server_cmd("kick #%d ^"%L^"", get_user_userid(player), player, "FPSL_KICK", fpsLimit); + + return PLUGIN_HANDLED; +} + +public FwFovKick(id, dest, ent) { + static player, username[MAX_NAME_LENGTH + 1], fovLimit; + player = get_msg_arg_int(1); + fovLimit = get_msg_arg_int(2); + + if (!is_user_connected(player)) + return PLUGIN_HANDLED; + + get_user_name(player, username, charsmax(username)); + // TODO: This message is sent twice, probably because the forward is being executed very quickly in player PostThink() + log_amx("%L", LANG_SERVER, "MINFOV_KICK_MSG", username, fovLimit); + client_print(0, print_chat, "%l", "MINFOV_KICK_MSG", username, fovLimit); + + server_cmd("kick #%d ^"%L^"", get_user_userid(player), player, "MINFOV_KICK", fovLimit); + + return PLUGIN_HANDLED; +} + public FwMsgIntermission(id) { gActualServerFPS = get_global_float(GL_frametime); client_cmd(0, "stop;wait;wait;+showscores"); @@ -598,7 +616,7 @@ public FwMsgIntermission(id) { public TaskPreIntermission() { // Show vEngine set_dhudmessage(0, 100, 200, -1.0, -0.125, 0, 0.0, 99.0); - show_dhudmessage(0, "%s v%s^n----------------------^nMax Player FPS Allowed: %i^nHLTV Allowed: %i^nServer fps: %.1f^nGhostmine Blocker: %s", PLUGIN_ACRONYM, VERSION, get_pcvar_num(gCvarMaxFps), get_pcvar_num(gCvarNumHLTVAllowed), (1.0 / gActualServerFPS), !cvar_exists("sv_ag_block_ghostmine") ? "Not available" : get_pcvar_num(gCvarBlockGhostmine) ? "On" : "Off"); + show_dhudmessage(0, "%s v%s^n----------------------^nHLTV Allowed: %i^nServer fps: %.1f^nCheat check: %s", PLUGIN_ACRONYM, VERSION, get_pcvar_num(gCvarNumHLTVAllowed), (1.0 / gActualServerFPS), get_pcvar_num(gCvarCheatCmdCheck) ? "On" : "Off"); client_cmd(0, "wait;wait;snapshot"); } @@ -705,74 +723,14 @@ public CheckHLTVDelay(id) { } } -public CvarCheckRun() { - static players[MAX_PLAYERS], pCount; - get_players(players, pCount, "c"); - for (new i = 0; i < pCount; i++) { - if (is_user_hltv(players[i])) { - CheckHLTVDelay(players[i]); - } else if (!hl_get_user_spectator(players[i])) { - query_client_cvar(players[i], "fps_max", "FpsCheckReturn"); - if (get_pcvar_num(gCvarMinFovEnabled)) { - query_client_cvar(players[i], "default_fov", "FovCheckReturn"); - } - } - } - set_task(floatmax(1.0, get_pcvar_float(gCvarCheckInterval)), "CvarCheckRun", TASK_CVARCHECKER); -} - -public FpsCheckReturn(id, const cvar[], const value[]) { - if (equali(value, "Bad CVAR request")) { - server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "CVAR_PROTECTOR_KICK"); - } else if (equali(cvar, "fps_max") && str_to_num(value) > max(100, get_pcvar_num(gCvarMaxFps))) { - console_cmd(id, "^"FpS_MaX^" %d", max(100, get_pcvar_num(gCvarMaxFps))); - if (++gNumDetections[id] < get_pcvar_num(gCvarMaxDetections)) { - client_print(id, print_chat, "%L", id, "FPSL_WARNING_MSG", max(100, get_pcvar_num(gCvarMaxFps))); - } else { - static name[MAX_NAME_LENGTH]; - get_user_name(id, name, charsmax(name)); - server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "FPSL_KICK", get_pcvar_num(gCvarMaxFps)); - log_amx("%L", LANG_SERVER, "FPSL_KICK_MSG", name, get_pcvar_num(gCvarMaxFps)); - client_print(0, print_chat, "%l", "FPSL_KICK_MSG", name, get_pcvar_num(gCvarMaxFps)); - } - } -} - -public FovCheckReturn(id, const cvar[], const value[]) { - if (equali(value, "Bad CVAR request")) { - server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "CVAR_PROTECTOR_KICK"); - } else if (equali(cvar, "default_fov") && str_to_num(value) < min(85, get_pcvar_num(gCvarMinFov))) { - static name[MAX_NAME_LENGTH]; - get_user_name(id, name, charsmax(name)); - console_cmd(id, "default_fov %d", 90); - server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "MINFOV_KICK", get_pcvar_num(gCvarMinFov)); - log_amx("%L", LANG_SERVER, "MINFOV_KICK_MSG", name, get_pcvar_num(gCvarMinFov)); - client_print(0, print_chat, "%l", "MINFOV_KICK_MSG", name, get_pcvar_num(gCvarMinFov)); - } -} - public CheatCommandRun() { - copy(gCommandSended, charsmax(gCommandSended), gCheatsCommands[random_num(0, charsmax(gCheatsCommands))]); - client_cmd(0, "preCheck;%s;postCheck", gCommandSended); + if (get_pcvar_num(gCvarCheatCmdCheck)) { + copy(gCommandSended, charsmax(gCommandSended), gCheatsCommands[random_num(0, charsmax(gCheatsCommands))]); + client_cmd(0, "preCheck;%s;postCheck", gCommandSended); + } set_task(floatmax(1.0, get_pcvar_float(gCvarCheatCmdCheckInterval)), "CheatCommandRun", TASK_CHEATCHECKER); } -public FwSetModel(entid, model[]) { - if (!get_pcvar_num(gCvarDestroyableSatchel) || !pev_valid(entid) || !equal(model, "models/w_satchel.mdl")) - return FMRES_IGNORED; - - static id; - id = pev(entid, pev_owner); - - if (!id || !is_user_connected(id) || !is_user_alive(id)) - return FMRES_IGNORED; - - new Float:health = get_pcvar_float(gCvarDestroyableSatchelHP); - set_pev(entid, pev_health, health); - set_pev(entid, pev_takedamage, DAMAGE_YES); - return FMRES_IGNORED; -} - public FwClientUserInfoChangedPre(id, info) { static cvarRunning; new stop, oldValue[32], newValue[32]; @@ -830,20 +788,6 @@ public FixTeamPlayModelLen(id, info, model[]) { return 0; } -public CmdAgpauseRehldsHook(id) { - if (get_playersnum() == 1 && gGameState == GAME_IDLE) { - new name[32], authID[32], formatted[32], fileName[32]; - new timestamp = get_systime(); - format_time(formatted, charsmax(formatted), "%d%m%Y", timestamp); - formatex(fileName, charsmax(fileName), "llhl_detections_%s.log", formatted); - get_user_name(id, name, charsmax(name)); - get_user_authid(id, authID, charsmax(authID)); - log_to_file(fileName, "%L", LANG_SERVER, "LLHL_REHLDS_XPLOIT", PLUGIN_ACRONYM, name, authID); - return PLUGIN_HANDLED; - } - return PLUGIN_CONTINUE; -} - public CvarHLTVAllowedHook(pcvar, const old_value[], const new_value[]) { set_cvar_string("sv_proxies", new_value); } @@ -852,14 +796,6 @@ public CvarSVProxiesHook(pcvar, const old_value[], const new_value[]) { set_pcvar_string(gCvarNumHLTVAllowed, new_value); } -public CvarGhostMineHook(pcvar, const old_value[], const new_value[]) { - set_cvar_string("gm_block_on", new_value); -} - -public MetaCvarGhostMineHook(pcvar, const old_value[], const new_value[]) { - set_pcvar_string(gCvarBlockGhostmine, new_value); -} - public CvarCheatCmdIntervalHook(pcvar, const old_value[], const new_value[]) { remove_task(TASK_CHEATCHECKER); set_task(floatmax(1.0, get_pcvar_float(gCvarCheatCmdCheckInterval)), "CheatCommandRun", TASK_CHEATCHECKER); @@ -1107,6 +1043,9 @@ public DisplayMatchManagerMenu(id) { formatex(multilangString, charsmax(multilangString), "%L", LANG_PLAYER, "LLHL_MM_ITEM_MAIN_4"); menu_additem(managerMenu, multilangString, "", ADMIN_BAN); + formatex(multilangString, charsmax(multilangString), "%L", LANG_PLAYER, "LLHL_MM_ITEM_MAIN_5"); + menu_additem(managerMenu, multilangString, "", ADMIN_BAN); + menu_display(id, managerMenu, 0); } else { client_print(id, print_chat, "%l", "LLHL_MM_MENU_IN_USE"); @@ -1121,13 +1060,17 @@ public MatchManagerHandler(id, menu, item) { return PLUGIN_HANDLED; } case 1: { - MatchManagerAssignPlayersMenu(id); + MatchManagerAssignPlayersMenu(id, 0); return PLUGIN_HANDLED; } case 2: { MatchManagerStartMatch(id); return PLUGIN_HANDLED; } + case 3: { + MatchManagerAbortMatch(id); + return PLUGIN_HANDLED; + } } CleanMenuData(); return PLUGIN_HANDLED; @@ -1165,7 +1108,7 @@ public MatchManagerVersusTypeHandler(id, menu, item) { return PLUGIN_HANDLED; } -public MatchManagerAssignPlayersMenu(id) { +public MatchManagerAssignPlayersMenu(id, page) { new multilangString[64]; formatex(multilangString, charsmax(multilangString), "%L", LANG_PLAYER, "LLHL_MM_OPT_3_TITLE"); @@ -1194,16 +1137,26 @@ public MatchManagerAssignPlayersMenu(id) { } TrieIterDestroy(iterator); - menu_display(id, playersMenu, 0); + menu_display(id, playersMenu, page); } public MatchManagerAssignPlayersHandler(id, menu, item) { - if (item == MENU_EXIT) { - menu_destroy(menu); - DisplayMatchManagerMenu(id); - return PLUGIN_HANDLED; - } + switch (item) { + case MENU_EXIT: { + menu_destroy(menu); + DisplayMatchManagerMenu(id); + } + default: { + MatchManagerHandlePlayerTeamChange(id, menu, item); + menu_destroy(menu); + MatchManagerAssignPlayersMenu(id, item / 7); // There are 7 items per page + } + } + + return PLUGIN_HANDLED; +} +public MatchManagerHandlePlayerTeamChange(id, menu, item) { new data[6], name[64]; new access, itemCallback; @@ -1219,18 +1172,14 @@ public MatchManagerAssignPlayersHandler(id, menu, item) { } else if (equali(team, MM_RED_TEAM)) { TrieSetString(gMMUserIDPlayers, data, MM_NO_TEAM); } - - menu_destroy(menu); - MatchManagerAssignPlayersMenu(id); - return PLUGIN_HANDLED; } public MatchManagerStartMatch(id) { if (!gMMVersusType[0]) { client_print(id, print_chat, "%l", "LLHL_MM_NO_MATCH_TYPE"); DisplayMatchManagerMenu(id); - } else if (gGameState == GAME_STARTING) { - client_print(id, print_chat, "%l", "LLHL_MM_MATCH_STARTING"); + } else if (gGameState == GAME_STARTING || gGameState == GAME_RUNNING) { + client_print(id, print_chat, "%l", "LLHL_MM_MATCH_IS_RUNNING"); DisplayMatchManagerMenu(id); } else { if (GetPlayersNumInTeam(MM_BLUE_TEAM) == str_to_num(gMMVersusType) && GetPlayersNumInTeam(MM_RED_TEAM) == str_to_num(gMMVersusType)) { @@ -1244,21 +1193,22 @@ public MatchManagerStartMatch(id) { if ((target = find_player("k", str_to_num(key)))) { TrieIterGetString(iterator, value, charsmax(value), valueLength); if (!equali(value, MM_NO_TEAM)) { - strtolower(value); - client_cmd(target, "model %s", value); - } else { - if (!hl_get_user_spectator(id)) { + if (hl_get_user_spectator(target)) { client_cmd(target, "spectate"); } + strtolower(value); + server_cmd("agforceteamup #%d %s", get_user_userid(target), value); + } else { + server_cmd("agforcespectator #%d", get_user_userid(target)); } } TrieIterNext(iterator); } } CleanMenuData(); - server_cmd("agstart"); - + client_print(id, print_chat, "%l", "LLHL_MM_MATCH_IS_STARTING"); TrieIterDestroy(iterator); + set_task(0.1, "TaskMatchManagerAgstart", TASK_MM_START_MATCH); } else { client_print(id, print_chat, "%l", "LLHL_MM_INVALID_PLAYER_COUNT"); DisplayMatchManagerMenu(id); @@ -1266,6 +1216,21 @@ public MatchManagerStartMatch(id) { } } +public TaskMatchManagerAgstart() { + server_cmd("agstart"); +} + +public MatchManagerAbortMatch(id) { + if (gGameState == GAME_IDLE) { + client_print(id, print_chat, "%l", "LLHL_MM_MATCH_IS_IDLE"); + DisplayMatchManagerMenu(id); + } else { + DisplayMatchManagerMenu(id); + server_cmd("agabort"); + client_print(id, print_chat, "%l", "LLHL_MM_MATCH_ABORTED"); + } +} + public GetPlayersNumInTeam(team[]) { new counter; new TrieIter:iterator = TrieIterCreate(gMMUserIDPlayers); {