diff --git a/LICENSE b/LICENSE index fdddb29..5c93f45 100644 --- a/LICENSE +++ b/LICENSE @@ -1,24 +1,13 @@ -This is free and unencumbered software released into the public domain. + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. + Copyright (C) 2004 Sam Hocevar -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -For more information, please refer to + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md index db8cc7c..67d4057 100644 --- a/README.md +++ b/README.md @@ -1,110 +1,125 @@ -# Beatrun | Community edition +# Beatrun | Community Edition -[![forthebadge](https://forthebadge.com/images/featured/featured-powered-by-electricity.svg)](https://forthebadge.com) -[![forthebadge](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://forthebadge.com) +[![Powered by Electricity](https://forthebadge.com/images/featured/featured-powered-by-electricity.svg)](https://forthebadge.com) +[![Powered by Black Magic](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://forthebadge.com) -[Click to join our Discord!](https://discord.gg/93Psubbgsg) +[**Join our Discord Community!**](https://discord.gg/93Psubbgsg) -* [Русский](./README.ru.md) +> *[Русский | Russian](./README.ru.md)* -**PLEASE READ EVERYTHING BEFORE ASKING QUESTIONS!** +--- -Infamous parkour addon for Garry's Mod. Fully open sourced and maintained by the community (me 😞). +## 🚨 Important Notice -> [!IMPORTANT] -> This repository doesn't contain any malicious modules. However, we have some modules for additional functionality: -> -> * Discord Rich Presence. -> * Steam Presence. -> -> **They are completely optional and can be removed at any time.**\ -> You can find all modules **[here](https://github.com/JonnyBro/beatrun/tree/main/lua/bin)**.\ -> Check **[Credits](#credits)** section for their source code. +### Please read this README thoroughly before asking questions -## Automatic Installation (Recommended | Windows 10/11) +### The **only official source** for this fork is this GitHub repository. Workshop versions are outdated and unsupported + +--- + +## About + +Beatrun is an **infamous parkour addon for Garry's Mod**, now fully open-sourced and maintained by the community. +It includes various improvements, new features, and enhanced functionality. > [!WARNING] -> Windows 7 and old versions of Windows 10 are not supported.\ -> Please update. +> **This repository contains no malicious modules.** However, optional modules such as Discord Rich Presence and Steam Presence are available for additional features. +> These are **completely optional** and can be removed at any time. +> +> - Modules are located **[here](https://github.com/JonnyBro/beatrun/tree/main/lua/bin)**. +> - Refer to the **[Credits](#credits)** section for their source code. + +--- + +## Installation + +### 🔧 Automatic Installation (Recommended for Windows 10/11) -Run the command below in Powershell (run as admin if your Steam or game located in a C: drive). > [!NOTE] -> Win + R > `powershell` > *Enter* +> Windows 7 and old versions of Windows 10 are not supported. Please update your OS. + +Run the following command in PowerShell (Run as Administrator if Steam and/or the game is installed on the system (C:) drive): ```powershell irm https://beatrun.jonnybro.ru/install | iex ``` -* Start the game. -* Select the `Beatrun` gamemode in right lower corner. - -## Manual Installation - -1. **[Download this repository](https://github.com/JonnyBro/beatrun/archive/refs/heads/master.zip)**. -1. **Delete the `beatrun` folder in *your_game_folder/garrysmod/addons* if you have one.** -1. Extract the `beatrun-main/beatrun` folder to *your_game_folder/garrysmod/addons*. -1. If you want to have Discord and Steam Presence: - * Extract the `beatrun-main/lua` folder to *your_game_folder/garrysmod*. 1. Start the game. -1. Select the `Beatrun` gamemode in right lower corner. +2. Select the `Beatrun` gamemode in the bottom-right corner. + +### 🛠️ Manual Installation + +1. **[Download this repository](https://github.com/JonnyBro/beatrun/archive/refs/heads/master.zip).** +2. Delete the `beatrun` folder in `your_game_folder/garrysmod/addons`, if it exists. +3. Extract `beatrun-main/beatrun` into `your_game_folder/garrysmod/addons`. +4. (Optional) For Discord and Steam Presence, extract `beatrun-main/lua` to `your_game_folder/garrysmod`. +5. Start the game. +6. Select the `Beatrun` gamemode in the bottom-right corner. + +--- + +## Features and Updates + +### New Features + +- **Custom Courses Database** hosted by Jonny_Bro: **[Access Here](https://courses.jonnybro.ru)** (free and **[open source](https://git.jonnybro.ru/jonny_bro/beatrun-courses-server)**). +- **New Gamemode:** Deathmatch. +- "Proper" Kick Glitch similar to the **[original game](https://www.youtube.com/watch?v=zK5y3NBUStc)**. +- In-game configuration menu in the Tools menu under **Beatrun**. All settings can be modified here. +- Localization support in **7 languages**. +- Enhanced Build Mode: spawn props from the Spawn Menu, and they will save in your course. +- Various new abilities: + - **Roll after ziplines:** Press `+duck` (CTRL by default). + - **Dismount ladders:** Press `+duck` (CTRL by default). + - **Remove ziplines created with Zipline Gun:** Press `+attack2` (RMB by default). + - **Next checkpoint arrow** for easier navigation. +- New server and client configuration variables: + - Server: + - `Beatrun_AllowOverdriveInMultiplayer`: Allows Overdrive in multiplayer. + - `Beatrun_AllowPropSpawn`: Lets players spawn props and weapons without admin rights. + - `Beatrun_HealthRegen`: Toggles health regeneration. + - Client: + - `Beatrun_HUDTextColor`, `Beatrun_HUDCornerColor`, `Beatrun_HUDFloatingXPColor`: Customize HUD colors. + - `Beatrun_DisableGrapple`: Toggle the grapple ability. + - `Beatrun_OldKickGlitch`: Switch between old and new Kick Glitch. + - `Beatrun_QuickturnHandsOnly`: Restrict QuickTurn to the Runner Hands weapon. +- Other improvements: + - Small camera punch effect when diving. + - SteamID no longer displayed on screen. + +### Fixes + +- Fixed playermodels showing as `ERROR` in first person. +- Improved leaderboard sorting in gamemodes. +- Fixed crashes and issues with Data Theft gamemode. +- Enabled jumping while walking. +- Grapples now follow moving entities and are visible to other players. + +--- ## Animations -Animations installer was removed, now you can switch between animations in Tools menu in Beatrun category. +The animations installer has been removed. You can now switch animations directly in the **Tools menu** under the Beatrun category. -## What's new +--- -> [!IMPORTANT] -> There are many undocumented changes and fixes in this version, you better look at the commits for more specific changes. +## Known Issues -* Jonny_Bro is hosting **[custom courses database](https://courses.jonnybro.ru)**, which is also **free** to use and **[open sourced](https://git.jonnybro.ru/jonny_bro/beatrun-courses-server-docker)**! -* New gamemode - **Deathmatch** (it's way more fun than Data Theft I promise). -* "Proper" Kick Glitch just like in **[original game](https://www.youtube.com/watch?v=zK5y3NBUStc)**. -* In-game configuration menu - you can find it in the Tools menu, in the **Beatrun** category.\ - **All** of the Beatrun settings can be changed in the configuration menu! -* Discord and Steam Presence. -* Localization support.\ - Available in 7 languages! -* Build Mode Tweaks.\ - You can now spawn any prop from Spawn Menu and they will save in your course. -* Ability to roll after ziplines with CTRL (thanks c4nk <3). -* Ability to get off of ladders - Press CTRL. -* Ability to remove ziplines that created with *Zipline Gun* - Press RMB. -* Arrow that shows the next checkpoint. -* Server ConVar to allow Overdrive usage in multiplayer - `Beatrun_AllowOverdriveInMultiplayer`. -* Server ConVar to allow players to spawn props and weapons without admin rights - `Beatrun_AllowPropSpawn`. -* Server ConVar to toggle the health regeneration - `Beatrun_HealthRegen`. -* Client ConVars to change HUD colors - `Beatrun_HUDTextColor`, `Beatrun_HUDCornerColor`, `Beatrun_HUDFloatingXPColor`. -* Client ConVar to toggle the grapple ability - `Beatrun_DisableGrapple`. -* Client ConVar to toggle between old and new Kick Glitch - `Beatrun_OldKickGlitch`. -* Client ConVar to allow QuickTurn with any weapon or only with *Runner Hands* - `Beatrun_QuickturnHandsOnly`. -* Small camera punch when diving. -* SteamID is no longer shown on screen. +- See the full list of issues **[here](https://github.com/JonnyBro/beatrun/issues)**. -## Fixes +--- -* Some playermodels show up as ERROR in first person. -* Leaderboard sorting in gamemodes. -* Grapple usage in courses and gamemodes. -* Crash in Data Theft when touching Data Bank. -* PvP damage not going through in gamemodes other than Data Theft. -* Allowed jumping while walking. -* You can now roll under things using safety roll. -* Now grapple moves with the entity it was attached to and other players can see the rope. +## Related Projects -## Known issues +- **[Beatrun Reanimated Project](https://github.com/JonnyBro/beatrun-anims)** -* [Issues](https://github.com/JonnyBro/beatrun/issues). - -## Related projects - -* [Beatrun Reanimated Project](https://github.com/JonnyBro/beatrun-anims). +--- ## Credits -* [All contributors](https://github.com/JonnyBro/beatrun/graphs/contributors) - <3. -* [EarthyKiller127/datae](https://www.youtube.com/channel/UCiFqPwGo4x0J65xafIaECDQ) - Original creator of Beatrun. -* [relaxtakenotes](https://github.com/relaxtakenotes) - Made all of this possible. -* [MTB](https://www.youtube.com/@MTB396) - Beatrun Reanimated Project. -* [Fluffy Servers](https://github.com/fluffy-servers/gmod-discord-rpc) - Discord Rich Presence. -* [YuRaNnNzZZ](https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer) - Steam Presence (TFA Base creator!). +- **[All contributors](https://github.com/JonnyBro/beatrun/graphs/contributors)** ❤️ +- [EarthyKiller127/datae](https://www.youtube.com/channel/UCiFqPwGo4x0J65xafIaECDQ) - Original creator of Beatrun. +- [relaxtakenotes](https://github.com/relaxtakenotes) - Made this project possible. +- [MTB](https://www.youtube.com/@MTB396) - Beatrun Reanimated Project. +- [Fluffy Servers](https://github.com/fluffy-servers/gmod-discord-rpc) - Discord Rich Presence. +- [YuRaNnNzZZ](https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer) - Steam Presence (TFA Base creator). diff --git a/README.ru.md b/README.ru.md index 118c69d..199a92a 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,110 +1,127 @@ -# Beatrun | Community edition +# Beatrun | Community Edition -[![forthebadge](https://forthebadge.com/images/featured/featured-powered-by-electricity.svg)](https://forthebadge.com) -[![forthebadge](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://forthebadge.com) +[![Powered by Electricity](https://forthebadge.com/images/featured/featured-powered-by-electricity.svg)](https://forthebadge.com) +[![Powered by Black Magic](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://forthebadge.com) -[Нажмите чтобы присоедениться к нашему Discord серверу!](https://discord.gg/93Psubbgsg) +[**Присоединяйтесь к нашему сообществу в Discord!**](https://discord.gg/93Psubbgsg) -* [English](./README.md) +> *[English | Английский](./README.md)* -**ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ВЕСЬ ДОКУМЕНТ ПЕРЕД ТЕМ КАК ЗАДАВАТЬ ВОПРОСЫ!** +--- -Печально известный паркур аддон для Garry's Mod. Теперь, с полностью открытым исходным кодом и поддерживаемый сообществом (мной 😞). +## 🚨 Важное уведомление -> [!IMPORTANT] -> Данный репозиторий не содержит вредоносных модулей. Однако, мы имеем несколько модулей для дополнительного функционала: -> -> * Модуль для показа статуса в Discord. -> * Модуль для показа статуса в Steam. -> -> **Они не обязательны и могут быть удалены в любой момент.**\ -> Список всех модуйлей находится **[здесь](https://github.com/JonnyBro/beatrun/tree/main/lua/bin)**.\ -> Проверьте **[Благодарности](#благодарности)** чтобы найти их исходный код. +### Пожалуйста, прочитайте этот README полностью перед тем, как задавать вопросы -## Автоматическая установка (Рекомендуется | Windows 10/11) +### **Единственный официальный источник** этого форка — этот репозиторий на GitHub. Версии в Workshop устарели и не поддерживаются + +--- + +## О проекте + +Beatrun — это **знаменитый паркур-аддон для Garry's Mod**, теперь с полностью открытым исходным кодом и поддерживаемый сообществом. +Включает различные улучшения, новые функции и расширенную функциональность. > [!WARNING] -> Windows 7 и старые сборки Windows 10 не поддерживаются. -> Обновитесь, пожалуйста. +> **В этом репозитории нет вредоносных модулей.** Однако доступны опциональные модули, такие как показ статусов в Discord и Steam, для дополнительного функционала. +> Эти модули **абсолютно опциональны** и могут быть удалены в любое время. +> +> - Модули находятся **[здесь](https://github.com/JonnyBro/beatrun/tree/main/lua/bin)**. +> - Ознакомьтесь с разделом **[Благодарности](#благодарности)** для их исходного кода. + +--- + +## Установка + +### 🔧 Автоматическая установка (Рекомендуется для Windows 10/11) -Запустите команду ниже в Powershell (запустите от администратора если Steam или игра расположены на диске C:). > [!NOTE] -> Win + R > `powershell` > *Enter* +> Windows 7 и старые версии Windows 10 не поддерживаются. Обновите свою ОС. + +Запустите данную команду в PowerShell (Запустите от админа если Steam и/или игра установлены на системный (C:) диск): ```powershell irm https://beatrun.jonnybro.ru/install | iex ``` -* Запустить игру. -* Выбрать режим `Beatrun` в правом нижнем углу. +1. Запустите игру. +2. Выберите режим `Beatrun` в правом нижнем углу. -## Ручная установка +### 🛠️ Ручная установка 1. **[Скачать репозиторий](https://github.com/JonnyBro/beatrun/archive/refs/heads/master.zip)**. -1. **Удалить папку `beatrun` в *путь_к_игре/garrysmod/addons*, если у вас такова имеется.** -1. Извлечь папку `beatrun-main/beatrun` в *путь_к_игре/garrysmod/addons*. -1. Если вы хотите показ статуса в Discord и Steam: - * Извлечь папку `beatrun-main/lua` в *путь_к_игре/garrysmod*. -1. Запустить игру. -1. Выбрать режим `Beatrun` в правом нижнем углу. +2. Удалите папку `beatrun` в `путь_к_игре/garrysmod/addons`, если она существует. +3. Извлеките `beatrun-main/beatrun` в `путь_к_игре/garrysmod/addons`. +4. *(Опционально)* Для показа статусов в Discord и Steam извлеките `beatrun-main/lua` в `путь_к_игре/garrysmod`. +5. Запустите игру. +6. Выберите режим `Beatrun` в правом нижнем углу. + +--- + +## Особенности и обновления + +### Новые возможности + +- **База курсов** от Jonny_Bro: **[Доступна здесь](https://courses.jonnybro.ru)** (бесплатна и имеет **[открытый исходный код](https://git.jonnybro.ru/jonny_bro/beatrun-courses-server)**). +- **Новый режим:** Deathmatch. +- Полностью исправленный Kick Glitch, как в **[оригинальной игре](https://www.youtube.com/watch?v=zK5y3NBUStc)**. +- Меню настроек в игре в категории **Beatrun** в меню Инструментов. + Здесь можно настроить **все** параметры Beatrun. +- Поддержка локализации на **7 языках**. +- Улучшенный режим строительства курсов: + Пропы из меню спавна сохраняются в вашем курсе. +- Новые способности: + - **Перекат после зиплайнов:** Нажмите `CTRL`. + - **Слезание с лестниц:** Нажмите `CTRL`. + - **Удаление зиплайнов:** Нажмите ПКМ (`RMB`). + - **Указатель следующего чекпоинта** для облегчения навигации. +- Новые серверные и клиентские переменные: + - Серверные: + - `Beatrun_AllowOverdriveInMultiplayer` — разрешает Overdrive в мультиплеере. + - `Beatrun_AllowPropSpawn` — разрешает спавн пропов и оружия без прав администратора. + - `Beatrun_HealthRegen` — переключает регенерацию здоровья. + - Клиентские: + - `Beatrun_HUDTextColor`, `Beatrun_HUDCornerColor`, `Beatrun_HUDFloatingXPColor` — настройка цветов интерфейса. + - `Beatrun_DisableGrapple` — включение/выключение крюка-кошки. + - `Beatrun_OldKickGlitch` — переключение между старым и новым Kick Glitch. + - `Beatrun_QuickturnHandsOnly` — ограничение QuickTurn только для оружия Runner Hands. +- Прочие улучшения: + - Лёгкий толчок камеры при нырянии. + - SteamID больше не отображается на экране. + +### Исправления + +- Исправлено отображение моделей игроков как `ERROR` от первого лица. +- Улучшена сортировка таблиц лидеров в режимах. +- Исправлены краши и баги в режиме Data Theft. +- Включены прыжки при ходьбе. +- Крюк-кошка теперь следует за перемещаемыми объектами и видна другим игрокам. + +--- ## Анимации -Установщик анимаций был удалён, теперь анимации можно переключить в меню Инструментов в категории Beatrun. +Установщик анимаций удалён. Теперь их можно переключать в **меню Инструментов** в категории Beatrun. -## Отличия от оригинала - -> [!IMPORTANT] -> Множество изменений не задокументированы, проверьте коммиты для полного списка изменений. - -* Jonny_Bro поддерживает свою **[базу курсов](https://courses.jonnybro.ru)**, которая так же **бесплатна** для использования и имеет **[открытый исходный код](https://git.jonnybro.ru/jonny_bro/beatrun-courses-server-docker)**! -* Новый режим - **Deathmatch** (намного интереснее Data Theft, честно). -* Оригинальный Kick Glitch как в **[оригинальной игре](https://www.youtube.com/watch?v=zK5y3NBUStc)**. -* Внутриигровое меню настроек - оно находится в меню Инструментов в категории **Beatrun**.\ - Там можно найти **все** настройки Beatrun! -* Показ статуса в Discord и Steam. -* Поддержка локализации.\ - Доступно на 7 языках! -* Изменения в режиме строительства курсов.\ - Любой проп из меню спавна теперь сохраняется в курсе. -* Возможность переката на кнопку приседания (CTRL) после зиплайнов (спасибо c4nk <3). -* Возможность спрыгивать с лестниц на кнопку приседания (CTRL). -* Возможность удалять зиплайны, созданные *Zipline Gun* по нажатию на второстепенный огонь (ПКМ). -* Стрелка, указывающая на следующий чекпоинт. -* Серверная переменная которая разрешает использование Overdrive в мультиплеере - `Beatrun_AllowOverdriveInMultiplayer`. -* Серверная переменная которая разрешает создание оружия и объектов из меню спавна без прав администратора - `Beatrun_AllowPropSpawn`. -* Серверная переменная которая переключает регенерацию здоровья - `Beatrun_HealthRegen`. -* Клиентские переменные для изменения цвета интерфейса - `Beatrun_HUDTextColor`, `Beatrun_HUDCornerColor`, `Beatrun_HUDFloatingXPColor`. -* Клиентская переменная которая переключает использование крюка-кошки - `Beatrun_DisableGrapple`. -* Клиентская переменная которая переключает использование старого и нового Kick Glitch - `Beatrun_OldKickGlitch`. -* Клиентская переменная которая переключает быстрый разворот с оружием или только с *Runner Hands* - `Beatrun_QuickturnHandsOnly`. -* Небольшой толчок камеры при нырянии. -* SteamID больше не видно на экране. - -## Исправления - -* Некоторые модельки игрока отображались как ERROR от первого лица. -* Сортировка таблиц лидеров в режимах. -* Использование крюка-кошки в режимах и курсах. -* Краш игры в режиме Data Theft при использовании Data Bank. -* Урон между игроками проходил только в Data Theft. -* Разрешены прыжки при ходьбе. -* Возможность переката **под** объектами. -* Крюк-кошка теперь следует за объектом к которому она присоединена, так же её видят другие игроки. +--- ## Известные проблемы -* [Проблемы](https://github.com/JonnyBro/beatrun/issues). +- Полный список доступен **[здесь](https://github.com/JonnyBro/beatrun/issues)**. + +--- ## Связанные проекты -* [Проект Beatrun Reanimated](https://github.com/JonnyBro/beatrun-anims). +- **[Beatrun Reanimated Project](https://github.com/JonnyBro/beatrun-anims)** + +--- ## Благодарности -* [Все участники](https://github.com/JonnyBro/beatrun/graphs/contributors) - <3. -* [EarthyKiller127/datae](https://www.youtube.com/channel/UCiFqPwGo4x0J65xafIaECDQ) - Создатель оригинального Beatrun. -* [relaxtakenotes](https://github.com/relaxtakenotes) - Без него этот проект не существовал бы. -* [MTB](https://www.youtube.com/@MTB396) - Проект Beatrun Reanimated. -* [Fluffy Servers](https://github.com/fluffy-servers/gmod-discord-rpc) - Модуль показа статусов в Discord. -* [YuRaNnNzZZ](https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer) - Модуль показа статусов в Steam (создатель TFA Base!). +- **[Все участники](https://github.com/JonnyBro/beatrun/graphs/contributors)** ❤️ +- [EarthyKiller127/datae](https://www.youtube.com/channel/UCiFqPwGo4x0J65xafIaECDQ) — создатель оригинального Beatrun. +- [relaxtakenotes](https://github.com/relaxtakenotes) — этот проект стал возможен благодаря ему. +- [MTB](https://www.youtube.com/@MTB396) — проект Beatrun Reanimated. +- [Fluffy Servers](https://github.com/fluffy-servers/gmod-discord-rpc) — модуль показа статусов в Discord. +- [YuRaNnNzZZ](https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer) — модуль показа статусов в Steam (создатель TFA Base). diff --git a/beatrun/gamemodes/beatrun/content/models/meclimbanim.dx80.vtx b/beatrun/gamemodes/beatrun/content/models/meclimbanim.dx80.vtx new file mode 100644 index 0000000..4da0dc9 Binary files /dev/null and b/beatrun/gamemodes/beatrun/content/models/meclimbanim.dx80.vtx differ diff --git a/beatrun/gamemodes/beatrun/content/models/meclimbanim.dx90.vtx b/beatrun/gamemodes/beatrun/content/models/meclimbanim.dx90.vtx new file mode 100644 index 0000000..6431460 Binary files /dev/null and b/beatrun/gamemodes/beatrun/content/models/meclimbanim.dx90.vtx differ diff --git a/beatrun/gamemodes/beatrun/content/models/meclimbanim.mdl b/beatrun/gamemodes/beatrun/content/models/meclimbanim.mdl new file mode 100644 index 0000000..943da61 Binary files /dev/null and b/beatrun/gamemodes/beatrun/content/models/meclimbanim.mdl differ diff --git a/beatrun/gamemodes/beatrun/content/models/meclimbanim.sw.vtx b/beatrun/gamemodes/beatrun/content/models/meclimbanim.sw.vtx new file mode 100644 index 0000000..e0f9202 Binary files /dev/null and b/beatrun/gamemodes/beatrun/content/models/meclimbanim.sw.vtx differ diff --git a/beatrun/gamemodes/beatrun/content/models/meclimbanim.vvd b/beatrun/gamemodes/beatrun/content/models/meclimbanim.vvd new file mode 100644 index 0000000..4da6509 Binary files /dev/null and b/beatrun/gamemodes/beatrun/content/models/meclimbanim.vvd differ diff --git a/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx80.vtx b/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx80.vtx index 0e9b04b..c71e2d8 100644 Binary files a/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx80.vtx and b/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx80.vtx differ diff --git a/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx90.vtx b/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx90.vtx index 3054c31..abc1f2d 100644 Binary files a/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx90.vtx and b/beatrun/gamemodes/beatrun/content/models/new_climbanim.dx90.vtx differ diff --git a/beatrun/gamemodes/beatrun/content/models/new_climbanim.mdl b/beatrun/gamemodes/beatrun/content/models/new_climbanim.mdl index cf69f2d..48676f9 100644 Binary files a/beatrun/gamemodes/beatrun/content/models/new_climbanim.mdl and b/beatrun/gamemodes/beatrun/content/models/new_climbanim.mdl differ diff --git a/beatrun/gamemodes/beatrun/content/models/new_climbanim.vvd b/beatrun/gamemodes/beatrun/content/models/new_climbanim.vvd index 91c0e30..9f53647 100644 Binary files a/beatrun/gamemodes/beatrun/content/models/new_climbanim.vvd and b/beatrun/gamemodes/beatrun/content/models/new_climbanim.vvd differ diff --git a/beatrun/gamemodes/beatrun/content/resource/localization/en/beatrun.properties b/beatrun/gamemodes/beatrun/content/resource/localization/en/beatrun.properties index 8f2aa14..a5035b9 100644 --- a/beatrun/gamemodes/beatrun/content/resource/localization/en/beatrun.properties +++ b/beatrun/gamemodes/beatrun/content/resource/localization/en/beatrun.properties @@ -50,7 +50,7 @@ beatrun.hud.lvl=Lvl: %s beatrun.hud.infector=Infector # Menu_Course -beatrun.coursemenu.trials=Courses - %s +beatrun.coursemenu.trials=Courses - Folder: %s beatrun.coursemenu.buildmode=Toggle Build Mode beatrun.coursemenu.freeplay=Return to Freeplay @@ -272,6 +272,8 @@ beatrun.infection.end=The game has ended!\nSurvivors: %s\nRestarting in 15s # Server ConVars beatrun.randommwloadouts=Random MW Base Loadouts beatrun.randommwloadoutsdesc=Toggles random MW Base loadouts in Deathmatch and DataTheft +beatrun.randoarc9loadouts=Random ARC9 MW Loadouts +beatrun.randoarc9loadoutsdesc=Toggles random ARC9 MW 2019 loadouts in Deathmatch and DataTheft # Button hints thingy beatrun.buttonhints.hold=(Hold) diff --git a/beatrun/gamemodes/beatrun/content/resource/localization/pl/beatrun.properties b/beatrun/gamemodes/beatrun/content/resource/localization/pl/beatrun.properties index 8ce4142..f9b94e7 100644 --- a/beatrun/gamemodes/beatrun/content/resource/localization/pl/beatrun.properties +++ b/beatrun/gamemodes/beatrun/content/resource/localization/pl/beatrun.properties @@ -41,6 +41,7 @@ beatrun.convars.disablegrapple=Wyłącz zdolność używania tyrolki beatrun.convars.puristmode=Tryb purystyczny to opcja po stronie klienta, która poważnie ogranicza zdolność do strafe'owania w powietrzu, tak jak w grach z serii ME.\n0 = Brak ograniczeń\n1 = Zmniejszona prędkość ruchu w powietrzu. beatrun.convars.quickturnground=Umożliwia szybki obrót za pomocą ataku drugorzędnego na ziemi beatrun.convars.quickturnhandsonly=Umożliwia szybki obrót tylko w trybie "Rąk biegacza" +beatrun.convars.showspeedometer=Przełącz widoczność prędkościomierza # HUD beatrun.hud.course=Bieg: %s @@ -53,7 +54,7 @@ beatrun.coursemenu.trials=Biegi - %s beatrun.coursemenu.buildmode=Przełącz tryb budowania beatrun.coursemenu.freeplay=Wróć do rozgrywki swobodnej -# CoursesDatabase +# Courses Database beatrun.coursesdatabase.cantuploadfreeplay=Nie można przesyłać biegów w trybie rozgrywki swobodnej beatrun.coursesdatabase.upload1=Próbujesz przesłać kurs o nazwie %s na mapie %s. beatrun.coursesdatabase.upload2=Użyj Beatrun_Confirm, aby kontynuować lub Beatrun_Cancel, aby anulować. @@ -62,6 +63,7 @@ beatrun.coursesdatabase.update1=Próbujesz zaktualizować bieg oznaczony kodem % # Tools Menu beatrun.toolsmenu.client=Klient beatrun.toolsmenu.server=Serwer +beatrun.toolsmenu.extra=Ekstra # Tools Menu Courses Section beatrun.toolsmenu.courses.name=Biegi @@ -106,8 +108,14 @@ beatrun.toolsmenu.hud.nametagsdesc=Włącz/Wyłącz wyświetlanie identyfikator beatrun.toolsmenu.hud.hudxp=Wyświetl PD na interfejsie beatrun.toolsmenu.hud.hudxpdesc=Pokaż całkowitą liczbę PD w pobliżu swojego nicku -beatrun.toolsmenu.hud.keystrokes=Show Keystrokes -beatrun.toolsmenu.hud.keystrokesdesc=Shows keys that you press +beatrun.toolsmenu.hud.showspeedometer=Pokaż prędkościomierz +beatrun.toolsmenu.hud.showspeedometerdesc=Pokazuje prędkościomierz na interfejsie + +beatrun.toolsmenu.hud.showSpeedometer=Pokaż prędkościomierz +beatrun.toolsmenu.hud.showSpeedometerDesc=Pokazuje prędkościomierz na interfejsie (ukrycie interfejsu nie wpływa na to ustawienie) + +beatrun.toolsmenu.hud.keystrokes=Pokaż naciśnięte klawisze +beatrun.toolsmenu.hud.keystrokesdesc=Pokazuje na interfejsie klawisze, które wciskasz podczas gry beatrun.toolsmenu.hud.hidden=Ukryj interfejs beatrun.toolsmenu.hud.hiddendesc=0 - Pokazany\n1 - Tylko poza rozgrywką swobodną\n2 - Ukryty @@ -124,7 +132,7 @@ beatrun.toolsmenu.camera.name=Kołysanie kamery w ruchu beatrun.toolsmenu.camera.desc=Ustawienia kołysania kamery w ruchu beatrun.toolsmenu.camera.stabilization=Stabilizacja kołysania kamery w ruchu -beatrun.toolsmenu.camera.stabilizationdesc=Włącz, aby zmniejszyć chorobę lokomocyjną za pomocą utrzymywania stabilności kamery w ruchu +beatrun.toolsmenu.camera.stabilizationdesc=Włącz, aby zmniejszyć efekt powodujący chorobę lokomocyjną za pomocą utrzymywania stabilności kamery w ruchu beatrun.toolsmenu.camera.intensity=Intensywność kołysania kamery w ruchu beatrun.toolsmenu.camera.fov=Pole widzenia beatrun.toolsmenu.camera.fovdesc=Zmienia pole widzenia diff --git a/beatrun/gamemodes/beatrun/content/resource/localization/ru/beatrun.properties b/beatrun/gamemodes/beatrun/content/resource/localization/ru/beatrun.properties index 04e218a..7d7d122 100644 --- a/beatrun/gamemodes/beatrun/content/resource/localization/ru/beatrun.properties +++ b/beatrun/gamemodes/beatrun/content/resource/localization/ru/beatrun.properties @@ -50,7 +50,7 @@ beatrun.hud.lvl=Лвл: %s beatrun.hud.infector=Заражённый # Menu_Course -beatrun.coursemenu.trials=Курсы - %s +beatrun.coursemenu.trials=Курсы - Папка: %s beatrun.coursemenu.buildmode=Режим строительства beatrun.coursemenu.freeplay=Свободная игра @@ -269,6 +269,8 @@ beatrun.infection.end=Игра окончена!\nВыжившие: %s\nПере # Server ConVars beatrun.randommwloadouts=Случайные наборы оружия MW Base beatrun.randommwloadoutsdesc=Переключает случайные наборы оружия MW Base в Deathmatch и DataTheft +beatrun.randoarc9loadouts=Случайные наборы оружия ARC9 MW +beatrun.randoarc9loadoutsdesc=Переключает случайные наборы оружия ARC9 MW 2019 в Deathmatch и DataTheft # Button Hints beatrun.buttonhints.hold=(держать) diff --git a/beatrun/gamemodes/beatrun/content/resource/localization/uk/beatrun.properties b/beatrun/gamemodes/beatrun/content/resource/localization/uk/beatrun.properties index dea972d..ac7f189 100644 --- a/beatrun/gamemodes/beatrun/content/resource/localization/uk/beatrun.properties +++ b/beatrun/gamemodes/beatrun/content/resource/localization/uk/beatrun.properties @@ -50,7 +50,7 @@ beatrun.hud.lvl=Лвл: %s beatrun.hud.infector=Заражений # Menu_Course -beatrun.coursemenu.trials=Курси - %s +beatrun.coursemenu.trials=Курси - Папка: %s beatrun.coursemenu.buildmode=Режим будівництва beatrun.coursemenu.freeplay=Вільна гра diff --git a/beatrun/gamemodes/beatrun/entities/entities/br_anticampbox/shared.lua b/beatrun/gamemodes/beatrun/entities/entities/br_anticampbox/shared.lua index 919b893..6115cce 100644 --- a/beatrun/gamemodes/beatrun/entities/entities/br_anticampbox/shared.lua +++ b/beatrun/gamemodes/beatrun/entities/entities/br_anticampbox/shared.lua @@ -37,7 +37,7 @@ function ENT:StartTouch(ent) end function ENT:Touch(ent) - if ent:IsPlayer() then + if ent:IsPlayer() and GetGlobalBool("GM_INFECTION") then if CurTime() > ent.MemeTime then if not ent.MemeMessage then ent:ChatPrint("Are you having fun standing still in a parkour game? Let's spice things up a bit!") diff --git a/beatrun/gamemodes/beatrun/entities/entities/br_laser/shared.lua b/beatrun/gamemodes/beatrun/entities/entities/br_laser/shared.lua index aaf6f40..58a71c9 100644 --- a/beatrun/gamemodes/beatrun/entities/entities/br_laser/shared.lua +++ b/beatrun/gamemodes/beatrun/entities/entities/br_laser/shared.lua @@ -64,7 +64,7 @@ function ENT:BRCollisionFunc(ent) local dmginfo = DamageInfo() dmginfo:SetAttacker(self) - dmginfo:SetDamage(1000) + dmginfo:SetDamage(math.huge) dmginfo:SetDamageType(DMG_DISSOLVE) ent:TakeDamageInfo(dmginfo) ent:EmitSound("bigspark" .. math.random(1, 2) .. ".wav") diff --git a/beatrun/gamemodes/beatrun/entities/entities/tt_cp/shared.lua b/beatrun/gamemodes/beatrun/entities/entities/tt_cp/shared.lua index d65bb30..3ef0b30 100644 --- a/beatrun/gamemodes/beatrun/entities/entities/tt_cp/shared.lua +++ b/beatrun/gamemodes/beatrun/entities/entities/tt_cp/shared.lua @@ -44,7 +44,7 @@ function ENT:StartTouch(ent) ent:SetNW2Int("CPNum", ent:GetNW2Int("CPNum", 1) + 1) if ent:GetNW2Int("CPNum", 1) > table.Count(Checkpoints) then - -- ReplayStop(ent) + ReplayStop(ent, false) FinishCourse(ent) else ent.CPSavePos = ent:GetPos() diff --git a/beatrun/gamemodes/beatrun/entities/weapons/runnerhands/shared.lua b/beatrun/gamemodes/beatrun/entities/weapons/runnerhands/shared.lua index a7d88f6..6b0369c 100644 --- a/beatrun/gamemodes/beatrun/entities/weapons/runnerhands/shared.lua +++ b/beatrun/gamemodes/beatrun/entities/weapons/runnerhands/shared.lua @@ -99,8 +99,6 @@ function SWEP:Deploy() self:SetWasOnGround(false) self:SetBlockAnims(false) self:SetPunch(1) - - return true end function SWEP:Initialize() @@ -223,14 +221,16 @@ function SWEP:Think() local eyeang = ply:EyeAngles() eyeang.x = 0 - if insidestep and viewmodel:GetCycle() <= 0.1 and GetConVar("Beatrun_QuakeJump"):GetBool() then - if SERVER then - ply:EmitSound("quakejump.mp3", 100, 100, 0.2) + if insidestep and GetConVar("Beatrun_QuakeJump"):GetBool() then + if (!GetConVar("Beatrun_QuakeJump_Timing"):GetBool() and viewmodel:GetCycle() <= 0.1) or ply:GetNWBool("Beatrun_ExtraQuakeJumpTiming") then + if SERVER then + ply:EmitSound("quakejump.mp3", 100, 100, 0.2) + end + + ply.QuakeJumping = true + + self:SetQuakeJumping(true) end - - ply.QuakeJumping = true - - self:SetQuakeJumping(true) end if not ismoving and not ply:Crouching() then diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/AddonWarning.lua b/beatrun/gamemodes/beatrun/gamemode/cl/AddonWarning.lua index e774848..ea80f4a 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl/AddonWarning.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl/AddonWarning.lua @@ -23,6 +23,9 @@ end local addons = 0 local incompatible = { + ["2155366756"] = true, -- VManip (Base) + ["2364206712"] = true, -- [VManip] Vaulting + ["2416989205"] = true, -- [VManip] Quick Slide ["1581533176"] = true, -- The Aperture [Reupload] ["2675972006"] = true, -- Custom Loadout ["378401390"] = true, -- Quake/Half-Life View bobbing @@ -49,9 +52,10 @@ local incompatible = { ["2824714462"] = true, -- [TFA] Screen Shake ["3037375111"] = true, -- Quick Slide With Legs ["748422181"] = true, -- FOV Changer - ["2930331275"] = true, -- Realistic Fragmentation System + ["2919970981"] = true, -- Realistic Fragmentation System [OLD] ["112806637"] = true, -- Gmod Legs 3 - ["678037029"] = true -- Enhanced Camera + ["678037029"] = true, -- Enhanced Camera + ["2497150824"] = true -- Smooth Camera } local warnpanel = { diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/BodyAnim.lua b/beatrun/gamemodes/beatrun/gamemode/cl/BodyAnim.lua index c3eb69b..cb4da69 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl/BodyAnim.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl/BodyAnim.lua @@ -448,6 +448,7 @@ hook.Add("Think", "BodyAnimThink", function() if not IsValid(BodyAnim) then return end local ply = LocalPlayer() + SlowmoMultiplier = ply:GetLaggedMovementValue() if not ply:Alive() and not deathanim then RemoveBodyAnim() @@ -455,7 +456,7 @@ hook.Add("Think", "BodyAnimThink", function() return end - BodyAnimCycle = BodyAnimCycle + FrameTime() / BodyAnim:SequenceDuration() * BodyAnimSpeed + BodyAnimCycle = BodyAnimCycle + FrameTime() / BodyAnim:SequenceDuration() * BodyAnimSpeed * SlowmoMultiplier if not customcycle then BodyAnim:SetCycle(BodyAnimCycle) diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/HUD.lua b/beatrun/gamemodes/beatrun/gamemode/cl/HUD.lua index a5b4fc7..3701961 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl/HUD.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl/HUD.lua @@ -51,7 +51,7 @@ hook.Add("RenderScreenspaceEffects", "BeatrunNoclipBW", function() end if noclipping then - color = math.Approach(color, 0.5, RealFrameTime()) + --color = math.Approach(color, 0.5, RealFrameTime()) elseif inp then color = math.Approach(color, 1, RealFrameTime() * 2) end diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/JumpAnim.lua b/beatrun/gamemodes/beatrun/gamemode/cl/JumpAnim.lua index 688563a..92a0900 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl/JumpAnim.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl/JumpAnim.lua @@ -1,5 +1,3 @@ -local OldAnims = CreateClientConVar("Beatrun_OldAnims", "0", true, false, "") - local animtable = { lockang = false, allowmove = true, @@ -10,11 +8,17 @@ local animtable = { BodyLimitX = 90, AnimString = "jumpslow", CamIgnoreAng = true, - animmodelstring = "new_climbanim", + animmodelstring = "climbanim", BodyLimitY = 180, usefullbody = 2 } +changedanimset = false + +if UseOldAnims:GetBool() then + animtable.animmodelstring = "meclimbanim" +end + fbanims = { ladderexittoplefthand = true, runfwdstart = true, @@ -1342,11 +1346,51 @@ hook.Add("CalcViewModelView", "lol", function(wep, vm, oldpos, oldang, pos, ang) end) local function JumpAnim(event, ply) + if !animsetchange then animsetchange = false end + --print("-------------") + --print("JumpAnim called -- " .. engine.TickCount()) + if animsetchange != UseOldAnims:GetBool() then + --print("---- BodyAnim removed -- " .. engine.TickCount()) + RemoveBodyAnim() + end + if animsetchange != UseOldAnims:GetBool() then + if UseOldAnims:GetBool() then + animtable.animmodelstring = "meclimbanim" + else + animtable.animmodelstring = "climbanim" + end + StartBodyAnim(animtable) + --print("---- BodyAnim recreated -- " .. engine.TickCount()) + + if not IsValid(BodyAnim) then return end + + CreateBodyAnimArmCopy() + + if not ply:ShouldDrawLocalPlayer() or CurTime() < 10 then + for k, v in ipairs(playermodelbones) do + local b = BodyAnim:LookupBone(v) + + if b then + BodyAnim:ManipulateBonePosition(b, Vector(0, 0, 100 * (k == 1 and -1 or 1))) + end + end + end + + hook.Add("BodyAnimCalcView", "JumpCalcView", JumpCalcView) + hook.Add("BodyAnimDrawArm", "JumpArmThink", JumpArmThink) + hook.Add("PostDrawOpaqueRenderables", "JumpArmDraw", JumpArmDraw) + end if events[event] then + --print("-- JumpAnim in event -- " .. engine.TickCount()) local wasjumpanim = fbanims[BodyAnimString] and IsValid(BodyAnim) + if changedanimset then + wasjumpanim = false + end + if not wasjumpanim then - RemoveBodyAnim() + --print("---- BodyAnim removed -- " .. engine.TickCount()) + --RemoveBodyAnim() end if event == "jump" or event == "jumpfar" or event:Left(11) == "jumpwallrun" and ply:GetWallrunDir():Dot(ply:EyeAngles():Forward()) < 0.75 then @@ -1377,6 +1421,7 @@ local function JumpAnim(event, ply) CheckAnims() StartBodyAnim(animtable) + --print("---- BodyAnim recreated -- " .. engine.TickCount()) if not IsValid(BodyAnim) then return end @@ -1399,39 +1444,9 @@ local function JumpAnim(event, ply) BodyAnim:ResetSequence(BodyAnim:LookupSequence(BodyAnimString)) end end + animsetchange = UseOldAnims:GetBool() end -function CheckAnims() - RemoveBodyAnim() - - if OldAnims:GetBool() then - animtable.animmodelstring = "old_climbanim" - else - animtable.animmodelstring = "new_climbanim" - end - - StartBodyAnim(animtable) - - if not IsValid(BodyAnim) then return end - - CreateBodyAnimArmCopy() - - if not LocalPlayer():ShouldDrawLocalPlayer() or CurTime() < 10 then - for k, v in ipairs(playermodelbones) do - local b = BodyAnim:LookupBone(v) - - if b then - BodyAnim:ManipulateBonePosition(b, Vector(0, 0, 100 * (k == 1 and -1 or 1))) - end - end - end -end - -cvars.AddChangeCallback("Beatrun_OldAnims", function(cvar, vOld, vNew) - CheckAnims() -end) - -hook.Add("PlayerInitialSpawn", "CheckAnims", CheckAnims) hook.Add("OnParkour", "JumpAnim", JumpAnim) function ArmInterrupt(anim) @@ -1825,4 +1840,4 @@ local function JumpThink() end end -hook.Add("Think", "JumpThink", JumpThink) +hook.Add("Think", "JumpThink", JumpThink) \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/Keystrokes.lua b/beatrun/gamemodes/beatrun/gamemode/cl/Keystrokes.lua index cd36921..a3c0053 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl/Keystrokes.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl/Keystrokes.lua @@ -6,24 +6,34 @@ local color_black = Color(0, 0, 0) local color_black_t = Color(0, 0, 0, 100) local size = 35 +local function GetFormattedKey(bind) + local keyBind = input.LookupBinding(bind) + + if keyBind == "MOUSE1" then keyBind = "LMB" + elseif keyBind == "MOUSE2" then keyBind = "RMB" + elseif keyBind == "MOUSE3" then keyBind = "MMB" end + + if keyBind then + return string.upper(keyBind) + else + return "?" + end +end + local function ShowKeyStrokes() if showKeystrokes:GetBool() and GetConVar("Beatrun_HUDHidden"):GetInt() == 0 then - local forward = string.upper(input.LookupBinding("+forward")) - local back = string.upper(input.LookupBinding("+back")) - local moveleft = string.upper(input.LookupBinding("+moveleft")) - local moveright = string.upper(input.LookupBinding("+moveright")) - local use = string.upper(input.LookupBinding("+use")) - local reload = string.upper(input.LookupBinding("+reload")) - local jump = string.upper(input.LookupBinding("+jump")) - local speed = string.upper(input.LookupBinding("+speed")) - local duck = string.upper(input.LookupBinding("+duck")) - local attack = string.upper(input.LookupBinding("+attack")) - local attack2 = string.upper(input.LookupBinding("+attack2")) + local forward = GetFormattedKey("+forward") + local back = GetFormattedKey("+back") + local moveleft = GetFormattedKey("+moveleft") + local moveright = GetFormattedKey("+moveright") + local use = GetFormattedKey("+use") + local reload = GetFormattedKey("+reload") + local jump = GetFormattedKey("+jump") + local speed = GetFormattedKey("+speed") + local duck = GetFormattedKey("+duck") + local attack = GetFormattedKey("+attack") + local attack2 = GetFormattedKey("+attack2") - if attack == "MOUSE1" then attack = "LMB" end - if attack2 == "MOUSE2" then attack2 = "RMB" end - - -- Key W if LocalPlayer():KeyDown(IN_FORWARD) then surface.SetDrawColor(color_white_t) surface.DrawRect(size, 0, size, size) @@ -34,7 +44,6 @@ local function ShowKeyStrokes() draw.SimpleText(forward, "BeatrunHUD", size + 10, size - 30, color_white) end - -- Key E if LocalPlayer():KeyDown(IN_USE) then surface.SetDrawColor(color_white_t) surface.DrawRect(size * 2, 0, size, size) @@ -45,7 +54,6 @@ local function ShowKeyStrokes() draw.SimpleText(use, "BeatrunHUD", size + 48, size - 30, color_white) end - -- Key R if LocalPlayer():KeyDown(IN_RELOAD) then surface.SetDrawColor(color_white_t) surface.DrawRect(size * 3, 0, size, size) @@ -56,7 +64,6 @@ local function ShowKeyStrokes() draw.SimpleText(reload, "BeatrunHUD", size * 3 + 12, size - 30, color_white) end - -- Key A if LocalPlayer():KeyDown(IN_MOVELEFT) then surface.SetDrawColor(color_white_t) surface.DrawRect(0, size, size, size) @@ -67,7 +74,6 @@ local function ShowKeyStrokes() draw.SimpleText(moveleft, "BeatrunHUD", size - 23, size + 8, color_white) end - -- Key S if LocalPlayer():KeyDown(IN_BACK) then surface.SetDrawColor(color_white_t) surface.DrawRect(size, size, size, size) @@ -78,7 +84,6 @@ local function ShowKeyStrokes() draw.SimpleText(back, "BeatrunHUD", size + 12, size + 8, color_white) end - -- Key D if LocalPlayer():KeyDown(IN_MOVERIGHT) then surface.SetDrawColor(color_white_t) surface.DrawRect(size * 2, size, size, size) @@ -89,7 +94,6 @@ local function ShowKeyStrokes() draw.SimpleText(moveright, "BeatrunHUD", size + 48, size + 8, color_white) end - -- Space if LocalPlayer():KeyDown(IN_JUMP) then surface.SetDrawColor(color_white_t) surface.DrawRect(0, size * 2, size * 3, size) @@ -100,7 +104,6 @@ local function ShowKeyStrokes() draw.SimpleText(jump, "BeatrunHUD", 28, size * 2 + 8, color_white) end - -- Shift if LocalPlayer():KeyDown(IN_SPEED) then surface.SetDrawColor(color_white_t) surface.DrawRect(0, size * 3, size * 3, size) @@ -111,7 +114,6 @@ local function ShowKeyStrokes() draw.SimpleText(speed, "BeatrunHUD", 28, size * 3 + 8, color_white) end - -- Ctrl if LocalPlayer():KeyDown(IN_DUCK) then surface.SetDrawColor(color_white_t) surface.DrawRect(0, size * 4, size * 3, size) @@ -122,7 +124,6 @@ local function ShowKeyStrokes() draw.SimpleText(duck, "BeatrunHUD", 32, size * 4 + 8, color_white) end - -- Left Mouse if LocalPlayer():KeyDown(IN_ATTACK) then surface.SetDrawColor(color_white_t) surface.DrawRect(size * 3, size, size * 2, size) @@ -133,7 +134,6 @@ local function ShowKeyStrokes() draw.SimpleText(attack, "BeatrunHUD", size + 87, size + 8, color_white) end - -- Right Mouse if LocalPlayer():KeyDown(IN_ATTACK2) then surface.SetDrawColor(color_white_t) surface.DrawRect(size * 3, size * 2, size * 2, size) @@ -146,4 +146,4 @@ local function ShowKeyStrokes() end end -hook.Add("HUDPaint", "KeyStrokes", ShowKeyStrokes) \ No newline at end of file +hook.Add("HUDPaint", "KeyStrokes", ShowKeyStrokes) diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/Menu_Course.lua b/beatrun/gamemodes/beatrun/gamemode/cl/Menu_Course.lua index 9b6f455..9080937 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl/Menu_Course.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl/Menu_Course.lua @@ -25,7 +25,7 @@ local function buildmodebutton() LocalPlayer():ConCommand("buildmode") end -AEUI:Text(coursepanel, language.GetPhrase("beatrun.coursemenu.trials"):format(game.GetMap()), "AEUIVeryLarge", 20, 30) +AEUI:Text(coursepanel, language.GetPhrase("beatrun.coursemenu.trials"):format(string.Replace(game.GetMap(), " ", "-")), "AEUIVeryLarge", 20, 30) local buildmodebutton = AEUI:AddButton(coursepanel, "#beatrun.coursemenu.buildmode", buildmodebutton, "AEUILarge", coursepanel.w - 400, coursepanel.h - 50) buildmodebutton.greyed = sacheck @@ -55,7 +55,7 @@ function OpenCourseMenu() AEUI:AddPanel(coursepanel) AEUI:AddPanel(courselist) - local dir = "beatrun/courses/" .. game.GetMap() .. "/" + local dir = "beatrun/courses/" .. string.Replace(game.GetMap(), " ", "-") .. "/" local dirsearch = dir .. "*.txt" local files = file.Find(dirsearch, "DATA", "datedesc") diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/PostprocessEffects.lua b/beatrun/gamemodes/beatrun/gamemode/cl/PostprocessEffects.lua new file mode 100644 index 0000000..e472797 --- /dev/null +++ b/beatrun/gamemodes/beatrun/gamemode/cl/PostprocessEffects.lua @@ -0,0 +1,69 @@ +local function MyNeedsDepthPass() + return true +end + +doffocus = CreateClientConVar("doftest_focus", 0, true, false, "", 0, 1) +doffocus2 = CreateClientConVar("doftest_focus2", 0, true, false, "", 0, 1) +local postprocessenable = CreateClientConVar("Beatrun_PostprocessEffects", 0, true, false, "Enables silly ahh post-processing effects. EXPERIMENTAL.", 0, 1) + +-- Add hook so that the _rt_ResolvedFullFrameDepth texture is updated +hook.Add( "NeedsDepthPass", "MyNeedsDepthPass", MyNeedsDepthPass ) + +local blur_mat = Material('pp/bokehblur') +local BOKEN_FOCUS = 0 +local BOKEN_FORCE = 0 + +cyclestate = false + +hook.Add("RenderScreenspaceEffects", "funnybrdof", function() + if !postprocessenable:GetBool() then return end + local ply = LocalPlayer() + + render.UpdateScreenEffectTexture(1) + + local trace = {} + if not ply:ShouldDrawLocalPlayer() then + eye = ply:EyePos() + langles = ply:EyeAngles() + + if ply:InVehicle() then + langles = ply:GetVehicle():GetAngles() + langles + end + else + eye = EyePos() + langles = EyeAngles() + ignoreEnts = true + end + trace.start = ply:EyePos() + trace.endpos = langles:Forward() * 300 + eye + trace.filter = function(ent) + return true + end + + local tr = util.TraceLine(trace) + local dist = tr.HitPos:Distance(ply:GetPos()) + + if ply:GetSliding() or ply:GetClimbing() != 0 or ply:GetWallrun() == 1 or IsValid(ply:GetLadder()) then + BOKEN_FORCE = math.Clamp(BOKEN_FORCE + 0.03 * (FrameTime() * 66), 0,1) + else + BOKEN_FORCE = math.Clamp(BOKEN_FORCE - 0.03 * (FrameTime() * 66), 0,1) + end + + blur_mat:SetTexture("$BASETEXTURE", render.GetScreenEffectTexture(1)) + blur_mat:SetTexture("$DEPTHTEXTURE", render.GetResolvedFullFrameDepth()) + + blur_mat:SetFloat("$size", BOKEN_FORCE * 8) + blur_mat:SetFloat("$focus", 0) + blur_mat:SetFloat("$focusradius", 2 - 0.25 * 2) + + --blur_mat:SetFloat("$size", BOKEN_FORCE * 3) + --blur_mat:SetFloat("$focus", 0) + --blur_mat:SetFloat("$focusradius", 2 - 0.5 * 3) + --print(BOKEN_FOCUS) + + --render.SetMaterial(fbtexture) + --render.DrawScreenQuadEx(0,0,960,540) + render.SetMaterial(blur_mat) + render.DrawScreenQuad() + --render.DrawTextureToScreenRect(render.GetResolvedFullFrameDepth(),960,0,960,540) +end) \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/cl/ToolMenuSettings.lua b/beatrun/gamemodes/beatrun/gamemode/cl/ToolMenuSettings.lua index aaa7867..c06443a 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl/ToolMenuSettings.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl/ToolMenuSettings.lua @@ -233,7 +233,7 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function() panel:ClearControls() panel:SetName("#beatrun.toolsmenu.gameplay.desc") - panel:CheckBox("#beatrun.toolsmenu.gameplay.oldanims", "Beatrun_OldAnims") + panel:CheckBox("#beatrun.toolsmenu.gameplay.oldanims", "Beatrun_UseOldAnims") panel:ControlHelp("#beatrun.toolsmenu.gameplay.oldanimsdesc") panel:CheckBox("#beatrun.toolsmenu.gameplay.quickturnground", "Beatrun_QuickturnGround") @@ -353,6 +353,9 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function() panel:CheckBox("#beatrun.randommwloadouts", "Beatrun_RandomMWLoadouts") panel:ControlHelp("#beatrun.randommwloadoutsdesc") + panel:CheckBox("#beatrun.randoarc9loadouts", "Beatrun_RandomARC9Loadouts") + panel:ControlHelp("#beatrun.randoarc9loadoutsdesc") + local DatatheftButton = vgui.Create("DButton", panel) DatatheftButton:SetText("#beatrun.toolsmenu.gamemodes.datatheft") DatatheftButton:SetSize(0, 20) @@ -418,6 +421,28 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function() -- panel:AddItem(LoadoutMenuButton) end) + spawnmenu.AddToolMenuOption("Beatrun", "Server", "beatrun_serverfun", "Fun", "", "", function(panel) + local funoptions = vgui.Create("DForm") + local experimentals = vgui.Create("DForm") + panel:ClearControls() + panel:SetName("Fun/Experimental Settings") + + panel:Help("Some settings that may not be very practical, are very hacky or are just for fun.") + panel:ControlHelp("Note: For checkboxes, ticked is ON and unticked/empty box is OFF.") + + panel:AddItem(funoptions) + panel:AddItem(experimentals) + + funoptions:SetName("The Fun Options™") + + funoptions:CheckBox("Cruelty Parkour (?)", "Beatrun_CrueltyParkour") + funoptions:ControlHelp("\"Funny\" optional feature that blocks some parkour moves and changes some moves\' behavior with a different weapon out.") + + experimentals:SetName("Experimental Things™") + experimentals:CheckBox("\"Slippy Wallruns\"", "Beatrun_Experimentals_SlippyWallrun") + experimentals:ControlHelp("You randomly drop from wallruns with a different weapon out. Requires Cruelty Parkour to be ON.") + end) + spawnmenu.AddToolMenuOption("Beatrun", "Extra", "beatrun_extra", "#beatrun.toolsmenu.extra.name", "", "", function(panel) panel:ClearControls() panel:SetName("#beatrun.toolsmenu.extra.desc") diff --git a/beatrun/gamemodes/beatrun/gamemode/cl_init.lua b/beatrun/gamemodes/beatrun/gamemode/cl_init.lua index 7b719c4..c1a2762 100644 --- a/beatrun/gamemodes/beatrun/gamemode/cl_init.lua +++ b/beatrun/gamemodes/beatrun/gamemode/cl_init.lua @@ -1,3 +1,4 @@ +--include("preexecute/client.lua") include("shared.lua") for _, v in ipairs(file.Find("gamemodes/beatrun/gamemode/cl/*.lua", "GAME")) do diff --git a/beatrun/gamemodes/beatrun/gamemode/init.lua b/beatrun/gamemodes/beatrun/gamemode/init.lua index f28854c..17576c2 100644 --- a/beatrun/gamemodes/beatrun/gamemode/init.lua +++ b/beatrun/gamemodes/beatrun/gamemode/init.lua @@ -6,6 +6,10 @@ for _, v in ipairs(file.Find("gamemodes/beatrun/gamemode/cl/*.lua", "GAME")) do AddCSLuaFile("cl/" .. v) end +if SERVER then + include("preexecute/server.lua") +end + for _, v in ipairs(file.Find("gamemodes/beatrun/gamemode/sh/*.lua", "GAME")) do AddCSLuaFile("sh/" .. v) include("sh/" .. v) diff --git a/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua b/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua index 8ab55f9..25a0b10 100644 --- a/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua +++ b/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua @@ -11,6 +11,10 @@ if CLIENT then local lframeswepclass = lframeswepclass or "" end +if SERVER then + util.AddNetworkString("Beatrun_ClientFOVChange") +end + local PLAYER = {} PLAYER.DuckSpeed = 0.01 -- How fast to go from not ducking, to ducking @@ -21,6 +25,8 @@ PLAYER.TauntCam = TauntCamera() PLAYER.WalkSpeed = 200 PLAYER.RunSpeed = 400 +local FOVModifierBlock = false -- trust me this is important -losttrackpad + function PLAYER:SetupDataTables() BaseClass.SetupDataTables(self) self.Player:NetworkVar("Float", 0, "MEMoveLimit") @@ -124,26 +130,7 @@ end function PLAYER:Loadout() if GetGlobalBool("GM_DATATHEFT") or GetGlobalBool("GM_DEATHMATCH") then - if GetConVar("Beatrun_RandomMWLoadouts"):GetBool() then - for i = 0, 1 do - local randomSWEP = getRandomMGBaseWeapon() - local w = self.Player:Give(randomSWEP.ClassName) - - timer.Simple(1, function() - if w:GetPrimaryAmmoType() ~= -1 then self.Player:GiveAmmo(10000, w:GetPrimaryAmmoType(), true) end - if w:GetSecondaryAmmoType() ~= -1 then self.Player:GiveAmmo(5, w:GetSecondaryAmmoType(), true) end - end) - end - else - for _, v in ipairs(BEATRUN_GAMEMODES_LOADOUTS[math.random(#BEATRUN_GAMEMODES_LOADOUTS)]) do - local w = self.Player:Give(v) - - timer.Simple(1, function() - if w:GetPrimaryAmmoType() ~= -1 then self.Player:GiveAmmo(10000, w:GetPrimaryAmmoType(), true) end - if w:GetSecondaryAmmoType() ~= -1 then self.Player:GiveAmmo(5, w:GetSecondaryAmmoType(), true) end - end) - end - end + Beatrun_GiveGMWeapon(self.Player) else self.Player:RemoveAllAmmo() end @@ -223,8 +210,8 @@ function PLAYER:Spawn() ply:SetPos(Course_StartPos) end) - -- ReplayStop(ply) - -- ReplayStart(ply) + ReplayStop(ply, true) + ReplayStart(ply) end end @@ -369,9 +356,34 @@ end function PLAYER:CalcView(view) local mult = (self.Player:InOverdrive() and 1.1) or 1 - local fov = GetConVar("Beatrun_FOV"):GetInt() + local fixfovmult = 1 - view.fov = fov * mult + if CLIENT then + -- VERY hacky and dirty code and I apologize in advance + local fov = GetConVar("Beatrun_FOV"):GetInt() + + if IsValid(LocalPlayer():GetActiveWeapon()) then + if lframeswepclass ~= LocalPlayer():GetActiveWeapon():GetClass() then + -- SP clientside weapon swap detection + FOVModifierBlock = true + + timer.Simple(1, function() + FOVModifierBlock = false + end) + end + + if not FOVModifierBlock and not LocalPlayer():GetActiveWeapon().ARC9 then + fixfovmult = view.fov / fov + else + fixfovmult = 1 + end + + view.fov = fov * mult * fixfovmult + lframeswepclass = LocalPlayer():GetActiveWeapon():GetClass() + else + view.fov = fov * mult + end + end if self.TauntCam:CalcView(view, self.Player, self.Player:IsPlayingTaunt()) then return true end end @@ -531,11 +543,38 @@ end) hook.Add("PlayerSwitchWeapon", "BeatrunSwitchARC9FOVFix", function(ply) -- This ENTIRE hook is for dealing with ARC9's stupid FOV reset -- behavior after switching away from an ARC9 SWEP. - ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 100)) - + ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 120)) timer.Simple(0, function() ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 100)) end) end) -player_manager.RegisterClass("player_beatrun", PLAYER, "player_default") +hook.Add("InitPostEntity", "FOVChangeFix", function() + -- FOV change fix, don't tinker with this unless you know what you're doing... + cvars.AddChangeCallback("Beatrun_FOV", function(convar, oldval, newval) + if CLIENT and game.SinglePlayer() then + LocalPlayer():SetFOV(newval) + elseif CLIENT then + FOVModifierBlock = true + + timer.Simple(0.16, function() + FOVModifierBlock = false + + if not FOVModifierBlock then + net.Start("Beatrun_ClientFOVChange") + net.WriteInt(newval, 16) + net.SendToServer() + FOVModifierBlock = true + end + end) + end + end) +end) + +if SERVER then + net.Receive("Beatrun_ClientFOVChange", function(len, ply) + ply:SetFOV(net.ReadInt(16)) + end) +end + +player_manager.RegisterClass("player_beatrun", PLAYER, "player_default") \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/preexecute/client.lua b/beatrun/gamemodes/beatrun/gamemode/preexecute/client.lua new file mode 100644 index 0000000..e69de29 diff --git a/beatrun/gamemodes/beatrun/gamemode/preexecute/server.lua b/beatrun/gamemodes/beatrun/gamemode/preexecute/server.lua new file mode 100644 index 0000000..0ac2392 --- /dev/null +++ b/beatrun/gamemodes/beatrun/gamemode/preexecute/server.lua @@ -0,0 +1 @@ +-- This file does nothing for now. \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/preexecute/shared.lua b/beatrun/gamemodes/beatrun/gamemode/preexecute/shared.lua new file mode 100644 index 0000000..335c031 --- /dev/null +++ b/beatrun/gamemodes/beatrun/gamemode/preexecute/shared.lua @@ -0,0 +1,5 @@ +CrueltyParkour = CreateConVar("Beatrun_CrueltyParkour", 0, {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Also known as \"Cruelty Mode\".\nDisables some Beatrun parkour abilities using anything but the Beatrun hands when enabled.", 0, 1) + +SlippyWallrun = CreateConVar("Beatrun_Experimentals_SlippyWallrun", 0, {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Makes your wallrun slippy. Only usable with Cruelty Parkour on.", 0, 1) + +UseOldAnims = CreateConVar("Beatrun_UseOldAnims", 0, {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Use Mirror's Edge animations instead of the reanimated ones.", 0, 1) \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/!Helpers.lua b/beatrun/gamemodes/beatrun/gamemode/sh/!Helpers.lua index 1da2a05..a46d66f 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/!Helpers.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/!Helpers.lua @@ -1,6 +1,9 @@ local vmatrixmeta = FindMetaTable("VMatrix") local playermeta = FindMetaTable("Player") +CreateConVar("Beatrun_RandomMWLoadouts", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) +CreateConVar("Beatrun_RandomARC9Loadouts", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) + BEATRUN_GAMEMODES_LOADOUTS = { {"weapon_357", "weapon_ar2"} } @@ -86,4 +89,61 @@ function playermeta:notUsingRH(wep) else return false end -end \ No newline at end of file +end + +function Beatrun_GiveAmmo(weapon, ply) + if weapon:GetPrimaryAmmoType() ~= -1 then ply:GiveAmmo(10000, weapon:GetPrimaryAmmoType(), true) end + if weapon:GetSecondaryAmmoType() ~= -1 then ply:GiveAmmo(5, weapon:GetSecondaryAmmoType(), true) end +end + +function Beatrun_getRandomMWBaseSWEP() + local allWep = weapons.GetList() + local wepIndex = math.random(#allWep) + local wep = allWep[wepIndex] + + if wep.Base == "mg_base" and not wep.AdminOnly then + return wep + else + return Beatrun_getRandomMWBaseSWEP() + end +end + +function Beatrun_getRandomARC9SWEP() + local allWep = weapons.GetList() + local wepIndex = math.random(#allWep) + local wep = allWep[wepIndex] + + if wep.Base == "arc9_cod2019_base" and not wep.AdminOnly then + return wep + else + return Beatrun_getRandomARC9SWEP() + end +end + +function Beatrun_GiveGMWeapon(ply) + if GetConVar("Beatrun_RandomMWLoadouts"):GetBool() and not GetConVar("Beatrun_RandomARC9Loadouts"):GetBool() then + for i = 0, 1 do + local swep = Beatrun_getRandomMWBaseSWEP() + local w = ply:Give(swep.ClassName) + + timer.Simple(1, function() + Beatrun_GiveAmmo(w, ply) + end) + end + elseif GetConVar("Beatrun_RandomARC9Loadouts"):GetBool() and not GetConVar("Beatrun_RandomMWLoadouts"):GetBool() then + for i = 0, 1 do + -- We don't need ammo because ARC9 got the infinite ammo option! + + local swep = Beatrun_getRandomARC9SWEP() + ply:Give(swep.ClassName) + end + elseif not GetConVar("Beatrun_RandomARC9Loadouts"):GetBool() and not GetConVar("Beatrun_RandomMWLoadouts"):GetBool() then + for _, b in ipairs(BEATRUN_GAMEMODES_LOADOUTS[math.random(#BEATRUN_GAMEMODES_LOADOUTS)]) do + local w = v:Give(b) + + timer.Simple(1, function() + Beatrun_GiveAmmo(w, ply) + end) + end + end +end diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/BuildMode.lua b/beatrun/gamemodes/beatrun/gamemode/sh/BuildMode.lua index 9591127..5a5c7ea 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/BuildMode.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/BuildMode.lua @@ -576,7 +576,7 @@ if SERVER then end function Beatrun_ReadCourseLocal(id) - local dir = "beatrun/courses/" .. game.GetMap() .. "/" + local dir = "beatrun/courses/" .. string.Replace(game.GetMap(), " ", "-") .. "/" local save = file.Read(dir .. id .. ".txt", "DATA") if not save then @@ -943,7 +943,7 @@ if CLIENT then local save = CourseData(name) local jsonsave = util.TableToJSON(save) local id = util.CRC(jsonsave) - local dir = "beatrun/courses/" .. game.GetMap() .. "/" + local dir = "beatrun/courses/" .. string.Replace(game.GetMap(), " ", "-") .. "/" if compress == nil then compress = true end @@ -1011,7 +1011,7 @@ if CLIENT then --[[ concommand.Add("Beatrun_PrintCourse", function(ply, cmd, args, argstr) - local dir = "beatrun/courses/" .. game.GetMap() .. "/" + local dir = "beatrun/courses/" .. string.Replace(game.GetMap(), " ", "-") .. "/" local save = file.Read(dir .. args[1] .. ".txt", "DATA") if not save then diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Checkpoints.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Checkpoints.lua index e02fcb2..4897512 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Checkpoints.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Checkpoints.lua @@ -134,7 +134,7 @@ if CLIENT then LocalPlayer():EmitSound("A_TT_Finish_Positive.wav") SaveCheckpointTime() - -- SaveReplayData() + SaveReplayData() else timetext = "+" .. string.FormattedTime(math.abs(timestr), "%02i:%02i:%02i") timecolor = color_negative @@ -144,6 +144,9 @@ if CLIENT then net.Start("Checkpoint_Finish") net.WriteFloat(totaltime) + if !LocalPlayer().InReplay then + notification.AddLegacy("Replay saved as ".."beatrun/replays/" .. game.GetMap() .. "/"..Course_Name .. os.date("%H-%M-%S_%d-%m-%Y", os.time()) .. ".txt", 0, 3) + end net.SendToServer() timealpha = 1000 @@ -169,7 +172,7 @@ local finishcolor = Color(45, 45, 175, 100) function FinishCourse(ply) ply:ScreenFade(SCREENFADE.IN, finishcolor, 0, 4) - -- ply:SetLaggedMovementValue(0.1) + ply:SetLaggedMovementValue(0.1) ply:DrawViewModel(false) net.Start("Checkpoint_Finish") @@ -178,7 +181,7 @@ function FinishCourse(ply) ply:SetNW2Int("CPNum", -1) timer.Simple(4, function() - -- ply:SetLaggedMovementValue(1) + ply:SetLaggedMovementValue(1) ply:DrawViewModel(true) end) end @@ -305,13 +308,42 @@ function CourseHUD() end end - if incourse and pbtimes then + if incourse and !ply.InReplay then + local text = string.FormattedTime(totaltime, "%02i:%02i:%02i") + local w, _ = surface.GetTextSize(text) + surface.SetFont("BeatrunHUD") + surface.SetTextColor(text_color) + surface.SetTextPos(ScrW() * 0.87 - w + vpx, ScrH() * 0.075 + vpz) + surface.DrawText(text) + end + + if incourse and pbtimes and !ply.InReplay then local text = string.FormattedTime(pbtotal, "%02i:%02i:%02i") local w, h = surface.GetTextSize(text) + pbcolor = text_color + pbcolor.r = text_color.r * 0.6 + pbcolor.g = text_color.g * 0.6 + pbcolor.b = text_color.b * 0.6 + surface.SetFont("BeatrunHUD") - surface.SetTextPos(ScrW() * 0.85 - w * 0.5 + vpx, ScrH() * 0.075 + h + vpz) - surface.SetTextColor(255, 255, 255, 125) + surface.SetTextPos(ScrW() * 0.87 - w + vpx, ScrH() * 0.075 + h + vpz) + surface.SetTextColor(pbcolor) + surface.DrawText(text) + end + + if incourse and ply.InReplay then + local text = string.FormattedTime(tickcount * engine.TickInterval(), "%02i:%02i:%02i") .. " / " .. string.FormattedTime(#ply.ReplayTicks * engine.TickInterval(), "%02i:%02i:%02i") + local w, _ = surface.GetTextSize(text) + surface.SetFont("BeatrunHUD") + surface.SetTextColor(text_color) + surface.SetTextPos(ScrW() * 0.87 - w + vpx, ScrH() * 0.075 + vpz) + surface.DrawText(text) + + local text = "REPLAY MODE - MAY BE INACCURATE" + local w, h = surface.GetTextSize(text) + surface.SetTextColor(text_color) + surface.SetTextPos(ScrW() * 0.87 - w + vpx, ScrH() * 0.075 + vpz + h) surface.DrawText(text) end @@ -354,23 +386,19 @@ function LoadCheckpointTime() return times or nil end --- function SaveReplayData() --- local replay = util.Compress(util.TableToJSON(LocalPlayer().ReplayTicks)) --- local dir = "beatrun/replays/" .. game.GetMap() .. "/" - --- if not replay then return end - --- file.CreateDir(dir) --- file.Write(dir .. Course_ID .. ".txt", replay) --- end - --- function LoadReplayData() --- local dir = "beatrun/replays/" .. game.GetMap() .. "/" --- local replay = file.Read(dir .. Course_ID .. ".txt") --- replay = replay and util.JSONToTable(util.Decompress(replay)) - --- return replay or nil --- end +function SaveReplayData() + local replay = util.Compress(util.TableToJSON(LocalPlayer().ReplayTicks)) + local dir = "beatrun/replays/" .. game.GetMap() .. "/" + if not replay then return end + file.CreateDir(dir) + file.Write(dir .. Course_ID .. ".txt", replay) +end +function LoadReplayData() + local dir = "beatrun/replays/" .. game.GetMap() .. "/" + local replay = file.Read(dir .. Course_ID .. ".txt") + replay = replay and util.JSONToTable(util.Decompress(replay)) + return replay or nil +end function StartCourse(spawntime) local faststartmult = LocalPlayer():GetInfoNum("Beatrun_FastStart", 0) > 0 and 0.5 or 1 diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Climb.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Climb.lua index 0d70075..30c5cb7 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Climb.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Climb.lua @@ -784,4 +784,10 @@ hook.Add("SetupMove", "Climbing", function(ply, mv, cmd) if ply:GetClimbing() ~= 0 then ClimbingThink(ply, mv, cmd) end +end) + +hook.Add("PlayerSwitchWeapon", "NoSwitchForClimbers", function(ply) + if ply:GetClimbing() != 0 then + return true + end end) \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Damage.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Damage.lua index 4fd44d0..683ef1a 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Damage.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Damage.lua @@ -6,8 +6,95 @@ else end) end +local momentumshield = CreateConVar("Beatrun_MomentumShield", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) + +if SERVER then + local healthRegen = CreateConVar("Beatrun_HealthRegen", 1, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) + + hook.Add("PlayerPostThink", "HealthRegen", function(ply) + if not healthRegen:GetBool() then return end + + if not ply.LastHP then + ply.LastHP = ply:Health() + ply.RegenTime = 0 + + return + end + + if ply:Health() < ply.LastHP then + ply.RegenTime = CurTime() + 5 + end + + if ply:Alive() and ply.RegenTime < CurTime() and ply:Health() < ply:GetMaxHealth() then + ply:SetHealth(math.Approach(ply:Health(), ply:GetMaxHealth(), 1)) + ply.RegenTime = CurTime() + 0.05 + end + + ply.LastHP = ply:Health() + end) + + for _,v in ipairs(player.GetAll()) do + v:SetNWFloat("MomentumShieldPer", 0) + end + + hook.Add("Move", "MomentumShieldRegen", function(ply, mv) + -- I use the move hook because I need momentum data...blame Garry + --if !momentumshield:GetBool() then return end + + local shieldpercent = ply:GetNWFloat("MomentumShieldPer", 0) + + if !ply.shielddecaytime then + ply.shielddecaytime = 0 + + return + end + + if ply:GetVelocity():Length2D() > (GetConVar("Beatrun_SpeedLimit"):GetInt() * 0.8181818181818182) then + ply:SetNWFloat("MomentumShieldPer", math.Approach(shieldpercent, 300, FrameTime() * 30)) + ply.shielddecaytime = CurTime() + 3 + elseif ply.shielddecaytime < CurTime() then + ply:SetNWFloat("MomentumShieldPer", math.Approach(shieldpercent, 0, FrameTime() * 250)) + end + + --print(shieldpercent) + end) +end + +if CLIENT then + local lastmomshield = -1 + local shieldlerptime = 0.16 + local start, oldshield, newshield = 0, -1, -1 + local hudscale = ScrH() / 1080 + hook.Add("HUDPaint", "MomentumShieldHUD", function() + local ply = LocalPlayer() + + if !IsValid(ply) then return end + + local shieldpercent = ply:GetNWFloat("MomentumShieldPer", 0) + + if oldshield == -1 and newshield == -1 then + oldshield = shieldpercent + newshield = shieldpercent + end + + local shieldsmooth = Lerp((CurTime() - start) / shieldlerptime, oldshield, newshield) + + if newshield != shieldpercent then + if shieldsmooth != shieldpercent then + newshield = shieldsmooth + end + oldshield = newshield + start = CurTime() + newshield = shieldpercent + end + + surface.SetDrawColor(255,255,255) + surface.DrawRect(ScrW() * 0.5 - 75,ScrH() * 0.6,150 * (math.max(0, shieldsmooth) / 300) * hudscale, 3 * hudscale) + end) +end + hook.Add("ScalePlayerDamage", "MissedMe", function(ply, hitgroup, dmginfo) - if IsValid(dmginfo:GetAttacker()) and dmginfo:GetAttacker():IsPlayer() then return end + if IsValid(dmginfo:GetAttacker()) and dmginfo:GetAttacker():IsPlayer() or momentumshield:GetBool() then return end local vel = ply:GetVelocity() local vel_len = vel:Length() @@ -16,13 +103,27 @@ hook.Add("ScalePlayerDamage", "MissedMe", function(ply, hitgroup, dmginfo) end) hook.Add("EntityTakeDamage", "MissedMe", function(victim, dmginfo) - if not victim:IsPlayer() then return end + if not victim:IsPlayer() or momentumshield:GetBool() then return end local dmgtype = dmginfo:GetDamageType() if victim:GetSliding() and (dmgtype == DMG_SLASH or dmgtype == DMG_CLUB) then return true end end) +hook.Add("EntityTakeDamage", "ShieldProtectPlayer", function(ent, dmg) + if !ent:IsPlayer() or !momentumshield:GetBool() then return end + shieldper = ent:GetNWFloat("MomentumShieldPer", 0) + local dmgamount = dmg:GetDamage() + + if shieldper > 0 and (shieldper - dmgamount) > 0 then + ent:SetNWFloat("MomentumShieldPer", math.Clamp(shieldper - dmgamount, 0, 300)) + dmg:ScaleDamage(0) + elseif shieldper > 0 then + ent:SetNWFloat("MomentumShieldPer", math.Clamp(shieldper - dmgamount, 0, 300)) + dmg:SetDamage(shieldper - dmgamount) + end +end) + hook.Add("PlayerShouldTakeDamage", "DBNO", function(ply, attacker) if not IsValid(attacker) then return end @@ -57,47 +158,28 @@ if CLIENT then local radial = Material("radial.png") local dmgalpha = 0 - hook.Add("HUDPaint", "NTScreenEffects", function() - local ply = LocalPlayer() + hook.Add("PreDrawHUD", "NTScreenEffects", function() + -- Draw the overlay this way or we (sort of) break other HUDs. + cam.Start2D() + local ply = LocalPlayer() - if not ply:Alive() then return end + if not ply:Alive() then + cam.End2D() + return + end - local w = ScrW() - local h = ScrH() + local w = ScrW() + local h = ScrH() - dmgalpha = math.min(300 * math.abs(ply:Health() / ply:GetMaxHealth() - 1), 255) + curhealth = math.Clamp(ply:Health(), 0, ply:GetMaxHealth()) + dmgalpha = math.min(300 * math.abs(curhealth / ply:GetMaxHealth() - 1), 255) - surface.SetMaterial(radial) - surface.SetDrawColor(0, 0, 0, dmgalpha * 0.85) - surface.DrawTexturedRect(0, 0, ScrW(), ScrH()) - surface.DrawTexturedRectRotated(ScrW() * 0.5, ScrH() * 0.5, ScrW(), ScrH(), 180) - surface.SetDrawColor(255, 25, 25, dmgalpha * math.max(0, math.sin(CurTime() * 6) * 0.045)) - surface.DrawTexturedRect(0, 0, w, h) + surface.SetMaterial(radial) + surface.SetDrawColor(0, 0, 0, dmgalpha * 0.58) + surface.DrawTexturedRect(0, 0, ScrW(), ScrH()) + surface.DrawTexturedRectRotated(ScrW() * 0.5, ScrH() * 0.5, ScrW(), ScrH(), 180) + surface.SetDrawColor(255, 25, 25, dmgalpha * math.max(0, math.sin(CurTime() * 6) * 0.09)) + surface.DrawTexturedRect(0, 0, w, h) + cam.End2D() end) end - -if SERVER then - local healthRegen = CreateConVar("Beatrun_HealthRegen", 1, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) - - hook.Add("PlayerPostThink", "HealthRegen", function(ply) - if not healthRegen:GetBool() then return end - - if not ply.LastHP then - ply.LastHP = ply:Health() - ply.RegenTime = 0 - - return - end - - if ply:Health() < ply.LastHP then - ply.RegenTime = CurTime() + 5 - end - - if ply:Alive() and ply.RegenTime < CurTime() and ply:Health() < ply:GetMaxHealth() then - ply:SetHealth(math.Approach(ply:Health(), ply:GetMaxHealth(), 1)) - ply.RegenTime = CurTime() + 0.05 - end - - ply.LastHP = ply:Health() - end) -end \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/DataTheft.lua b/beatrun/gamemodes/beatrun/gamemode/sh/DataTheft.lua index 717bb0f..1ab2fb5 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/DataTheft.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/DataTheft.lua @@ -22,26 +22,7 @@ if SERVER then v:Spawn() end - if GetConVar("Beatrun_RandomMWLoadouts"):GetBool() then - for i = 0, 1 do - local randomSWEP = getRandomMGBaseWeapon() - local w = v:Give(randomSWEP.ClassName) - - timer.Simple(1, function() - if w:GetPrimaryAmmoType() ~= -1 then v:GiveAmmo(10000, w:GetPrimaryAmmoType(), true) end - if w:GetSecondaryAmmoType() ~= -1 then v:GiveAmmo(5, w:GetSecondaryAmmoType(), true) end - end) - end - else - for _, b in ipairs(BEATRUN_GAMEMODES_LOADOUTS[math.random(#BEATRUN_GAMEMODES_LOADOUTS)]) do - local w = v:Give(b) - - timer.Simple(1, function() - if w:GetPrimaryAmmoType() ~= -1 then v:GiveAmmo(10000, w:GetPrimaryAmmoType(), true) end - if w:GetSecondaryAmmoType() ~= -1 then v:GiveAmmo(5, w:GetSecondaryAmmoType(), true) end - end) - end - end + Beatrun_GiveGMWeapon(v) end end diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Deathmatch.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Deathmatch.lua index a2a9401..881ae3d 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Deathmatch.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Deathmatch.lua @@ -2,20 +2,6 @@ if SERVER then util.AddNetworkString("Deathmatch_Start") util.AddNetworkString("Deathmatch_Sync") - CreateConVar("Beatrun_RandomMWLoadouts", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) - - function getRandomMGBaseWeapon() - local allWep = weapons.GetList() - local wepIndex = math.random(#allWep) - local wep = allWep[wepIndex] - - if wep.Base == "mg_base" and not wep.AdminOnly then - return wep - else - return getRandomMGBaseWeapon() - end - end - function Beatrun_StartDeathmatch() if GetGlobalBool("GM_DEATHMATCH") then return end if Course_Name ~= "" then return end @@ -31,26 +17,7 @@ if SERVER then v:Spawn() end - if GetConVar("Beatrun_RandomMWLoadouts"):GetBool() then - for i = 0, 1 do - local randomSWEP = getRandomMGBaseWeapon() - local w = v:Give(randomSWEP.ClassName) - - timer.Simple(1, function() - if w:GetPrimaryAmmoType() ~= -1 then v:GiveAmmo(10000, w:GetPrimaryAmmoType(), true) end - if w:GetSecondaryAmmoType() ~= -1 then v:GiveAmmo(5, w:GetSecondaryAmmoType(), true) end - end) - end - else - for _, b in ipairs(BEATRUN_GAMEMODES_LOADOUTS[math.random(#BEATRUN_GAMEMODES_LOADOUTS)]) do - local w = v:Give(b) - - timer.Simple(1, function() - if w:GetPrimaryAmmoType() ~= -1 then v:GiveAmmo(10000, w:GetPrimaryAmmoType(), true) end - if w:GetSecondaryAmmoType() ~= -1 then v:GiveAmmo(5, w:GetSecondaryAmmoType(), true) end - end) - end - end + Beatrun_GiveGMWeapon(v) end end diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/FreerunSysAll.lua b/beatrun/gamemodes/beatrun/gamemode/sh/FreerunSysAll.lua index e43c732..f0117ae 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/FreerunSysAll.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/FreerunSysAll.lua @@ -1,6 +1,8 @@ local quakejump = CreateConVar("Beatrun_QuakeJump", 1, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) local sidestep = CreateConVar("Beatrun_SideStep", 1, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) local speed_limit = CreateConVar("Beatrun_SpeedLimit", 325, {FCVAR_REPLICATED, FCVAR_ARCHIVE}) +beatrunquakejumptiming = CreateConVar("Beatrun_QuakeJump_Timing", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "Quakejump extra timing window in engine ticks (default 66).") +-- This NEEDS to be accessible from runnerhands' code. local function Hardland(jt) local ply = LocalPlayer() @@ -308,6 +310,14 @@ hook.Add("SetupMove", "MESetupMove", function(ply, mv, cmd) activewep:SetSideStep(true) mv:SetVelocity(cmd:GetViewAngles():Right() * -(speed_limit:GetInt() * 1.8)) + if beatrunquakejumptiming:GetInt() != 0 then + ply:SetNWBool("Beatrun_ExtraQuakeJumpTiming", true) + ply:SetFriction(ply:GetFriction() * 0.01) + timer.Simple((engine.TickInterval() * beatrunquakejumptiming:GetInt()), function() + ply:SetFriction(ply:GetFriction() / 0.01) + ply:SetNWBool("Beatrun_ExtraQuakeJumpTiming", false) + end) + end ply:ViewPunch(Angle(-3, 0, -4.5)) @@ -323,6 +333,14 @@ hook.Add("SetupMove", "MESetupMove", function(ply, mv, cmd) activewep:SetSideStep(true) mv:SetVelocity(cmd:GetViewAngles():Right() * (speed_limit:GetInt() * 1.8)) + if beatrunquakejumptiming:GetInt() != 0 then + ply:SetNWBool("Beatrun_ExtraQuakeJumpTiming", true) + ply:SetFriction(ply:GetFriction() * 0.01) + timer.Simple((engine.TickInterval() * beatrunquakejumptiming:GetInt()), function() + ply:SetFriction(ply:GetFriction() / 0.01) + ply:SetNWBool("Beatrun_ExtraQuakeJumpTiming", false) + end) + end ply:ViewPunch(Angle(-3, 0, 4.5)) @@ -423,4 +441,15 @@ if CLIENT then ArmInterrupt("doorbash") LocalPlayer():CLViewPunch(Angle(1.5, -0.75, 0)) end) +end + +if SERVER then + concommand.Add( + "Beatrun_ResetFriction", + function() + for _, ply in ipairs(player.GetAll()) do + ply:SetFriction(1) + end + end + ) end \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Ladder.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Ladder.lua index 9b4eff4..49aa050 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Ladder.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Ladder.lua @@ -17,7 +17,10 @@ end local function LadderCheck(ply, mv, cmd, ladder) local ladderang = ladder:GetAngles() - if math.abs(math.AngleDifference(cmd:GetViewAngles().y, ladderang.y - 180)) > 30 then return false end + if math.abs(math.AngleDifference(cmd:GetViewAngles().y, ladderang.y - 180)) > 30 then + print("kill me already") + return false + end local zlevel = mv:GetOrigin().z local newpos = ladder:GetPos() + ladderang:Forward() * 19 @@ -83,6 +86,18 @@ local function LadderThink(ply, mv, cmd, ladder) cmd:ClearMovement() + local tr = ply.LadderTrace + tr.output = ply.LadderTraceOut + tr.start = mv:GetOrigin() + Vector(0, 0, 64) + tr.endpos = tr.start + cmd:GetViewAngles():Forward() * 100 + tr.filter = ply + + util.TraceLine(tr) + + local eyetr = ply.LadderTraceOut + local eyetrentity = eyetr.Entity + local fraction = eyetr.Fraction + if ply:GetLadderEntering() then local lerprate = 2 @@ -103,7 +118,7 @@ local function LadderThink(ply, mv, cmd, ladder) return end - if mv:KeyDown(IN_FORWARD) and ply:GetLadderDelay() < CurTime() and ply:GetLadderHeight() < ladder:GetLadderHeight() then + if mv:KeyDown(IN_FORWARD) and ply:GetLadderDelay() < CurTime() and ply:GetLadderHeight() < ladder:GetLadderHeight() and (fraction or 1) <= 0.35 then local pos = mv:GetOrigin() ply:SetLadderDelay(CurTime() + 0.35) @@ -245,6 +260,43 @@ local function LadderThink(ply, mv, cmd, ladder) return end + if mv:KeyDown(IN_JUMP) and mv:KeyDown(IN_FORWARD) and !((fraction or 1) <= 0.35) then + local ladderangf = ladder:GetAngles():Forward() + local newpos = mv:GetOrigin() + local facing = { + pos = math.Round(ladderangf.x) == 1 and "x" or math.Round(ladderangf.x) == -1 and "x" or math.Round(ladderangf.y) == 1 and "y" or math.Round(ladderangf.y) == -1 and "y", + num = math.Round(ladderangf.x) == 1 and 40 or math.Round(ladderangf.x) == -1 and -40 or math.Round(ladderangf.y) == 1 and 40 or math.Round(ladderangf.y) == -1 and -40, + } + + local forward = ply:EyeAngles() + forward.p = 0 + forward = forward:Forward() + + newpos[facing.pos] = mv:GetOrigin()[facing.pos] + facing.num + + vel = vector_origin + vel = vel + forward * (6 / 0.06858125) + --print("--") + --print(vel) + vel.z = 300 + mv:SetOrigin(newpos) + mv:SetVelocity(vel) + print(CurTime()) + + if CLIENT and IsFirstTimePredicted() then + BodyAnim:SetSequence("jumpfast") + elseif game.SinglePlayer() then + ply:SendLua("BodyAnim:SetSequence('jumpfast')") + end + + ply:SetMoveType(MOVETYPE_WALK) + ply:SetLadder(nil) + + --mv:SetVelocity(vector_origin + forward * (6 / 0.06858125)) + + return + end + mv:SetVelocity(vector_origin) mv:SetButtons(0) end @@ -310,4 +362,15 @@ function CreateLadder(pos, angy, mul) return ladder end +end + +if CLIENT then + preladderwep = "" + hook.Add("HUDPaint", "NoGunsOnLadders", function() + if !LocalPlayer():Alive() then return end + if LocalPlayer():GetActiveWeapon():GetClass() != "runnerhands" and IsValid(LocalPlayer():GetLadder()) then -- :troll: + preladderwep = LocalPlayer():GetActiveWeapon():GetClass() + input.SelectWeapon(LocalPlayer():GetWeapon("runnerhands")) + end + end) end \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Melee.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Melee.lua index e1d109a..952cad3 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Melee.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Melee.lua @@ -279,6 +279,9 @@ hook.Add("SetupMove", "Melee", function(ply, mv, cmd) mv:SetVelocity(vel) elseif kickglitch:GetBool() and not old_kickglitch:GetBool() then if SERVER then + local oldfriction = ply:GetFriction() + ply:SetFriction(0) + local platform = ents.Create("prop_physics") local pos = ply:GetPos() @@ -293,7 +296,12 @@ hook.Add("SetupMove", "Melee", function(ply, mv, cmd) local phys = platform:GetPhysicsObject() phys:EnableMotion(false) - timer.Simple(0.3, function() SafeRemoveEntity(platform) end) + ply:SetNWBool("KickglitchWindowActive", true) + timer.Simple(0.3, function() + ply:SetNWBool("KickglitchWindowActive", false) + ply:SetFriction(oldfriction) + SafeRemoveEntity(platform) + end) end ParkourEvent("jumpslow", ply) @@ -312,4 +320,30 @@ hook.Add("SetupMove", "Melee", function(ply, mv, cmd) if ply:GetMeleeTime() ~= 0 then MeleeThink(ply, mv, cmd) end -end) \ No newline at end of file +end) + +hook.Add("Move", "KickglitchApply", function(ply,mv,cmd) + if mv:KeyPressed(IN_JUMP) and ply:GetNWBool("KickglitchWindowActive", false) and !GetConVar("Beatrun_OldKickGlitch"):GetBool() then + if !ply:Alive() then + else + local forward = ply:EyeAngles() + forward.p = 0 + forward = forward:Forward() + local speedboost = forward * (4 / 0.06858125) + --print(speedboost) + + --print("--") + + --print(mv:GetVelocity()) + local vel = mv:GetVelocity() + vel = vel + speedboost + --print("--") + --print(vel) + vel.z = 300 + mv:SetVelocity(vel) + end + ply:SetNWBool("KickglitchWindowActive", false) + end +end) + +hook.Remove("SetupMove", "ProperKickglitch") \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/SafetyRoll.lua b/beatrun/gamemodes/beatrun/gamemode/sh/SafetyRoll.lua index 5e19aca..fca3e09 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/SafetyRoll.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/SafetyRoll.lua @@ -94,10 +94,10 @@ net.Receive("RollAnimSP", function() roll.BodyAnimSpeed = 1.15 end - if GetConVar("Beatrun_OldAnims"):GetBool() then - roll.animmodelstring = "old_climbanim" + if UseOldAnims:GetBool() then + roll.animmodelstring = "meclimbanim" else - roll.animmodelstring = "new_climbanim" + roll.animmodelstring = "climbanim" end CacheBodyAnim() @@ -138,10 +138,10 @@ hook.Add("SetupMove", "EvadeRoll", function(ply, mv, cmd) end if CLIENT and IsFirstTimePredicted() then - if GetConVar("Beatrun_OldAnims"):GetBool() then - roll.animmodelstring = "old_climbanim" + if UseOldAnims:GetBool() then + roll.animmodelstring = "meclimbanim" else - roll.animmodelstring = "new_climbanim" + roll.animmodelstring = "climbanim" end CacheBodyAnim() @@ -214,12 +214,11 @@ hook.Add("OnPlayerHitGround", "SafetyRoll", function(ply, water, floater, speed) end if CLIENT and IsFirstTimePredicted() then - if GetConVar("Beatrun_OldAnims"):GetBool() then - roll.animmodelstring = "old_climbanim" + if UseOldAnims:GetBool() then + roll.animmodelstring = "meclimbanim" else - roll.animmodelstring = "new_climbanim" + roll.animmodelstring = "climbanim" end - CacheBodyAnim() RemoveBodyAnim() StartBodyAnim(roll) @@ -250,7 +249,7 @@ if SERVER then if speed < 800 and CurTime() < ply:GetSafetyRollKeyTime() and not ply:GetCrouchJump() and not ply:Crouching() then return 0 else - return 1000 + return math.huge end end diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Sliding.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Sliding.lua index 03e8bf2..4959f53 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Sliding.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Sliding.lua @@ -246,6 +246,7 @@ end hook.Add("SetupMove", "qslide", function(ply, mv, cmd) if not ply:Alive() then return end + if ply:GetSafetyRollKeyTime() > CurTime() then return end if not ply.OldDuckSpeed then ply.OldDuckSpeed = ply:GetDuckSpeed() diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Swingbar.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Swingbar.lua index 814d10f..b921fec 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Swingbar.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Swingbar.lua @@ -20,39 +20,42 @@ local function SwingbarCheck(ply, mv, cmd) util.TraceHull(tr) if IsValid(trout.Entity) and trout.Entity:GetClass() == "br_swingbar" and (ply:GetSwingbarLast() ~= trout.Entity or ply:GetSBDelay() < CurTime()) then - local swingbar = trout.Entity - local dot = cmd:GetViewAngles():Forward():Dot(swingbar:GetAngles():Forward()) - local dir = dot > 0 and true or false - - if math.abs(dot) < 0.7 then return end - - - if CLIENT then - swingbar:SetPredictable(true) - end - - ply:SetSwingbar(swingbar) - ply:SetWallrunTime(0) - ply:SetWallrunCount(0) - ply:SetSBDir(dir) - ply:SetSBStartLerp(0) - ply:SetSBOffset(30) - ply:SetSBPeak(0) - ply:SetDive(false) - ply:SetCrouchJump(false) - - ParkourEvent("swingbar", ply) - - mv:SetVelocity(vector_origin) - - if mv:KeyDown(IN_FORWARD) or mv:GetVelocity():Length() > 150 then - ply:SetSBOffsetSpeed(2) + if CrueltyParkour:GetBool() and !ply:UsingRH() then else - ply:SetSBOffsetSpeed(0) - end + local swingbar = trout.Entity + local dot = cmd:GetViewAngles():Forward():Dot(swingbar:GetAngles():Forward()) + local dir = dot > 0 and true or false - if CLIENT and IsFirstTimePredicted() or game.SinglePlayer() then - ply:EmitSound("Handsteps.ConcreteHard") + if math.abs(dot) < 0.7 then return end + + + if CLIENT then + swingbar:SetPredictable(true) + end + + ply:SetSwingbar(swingbar) + ply:SetWallrunTime(0) + ply:SetWallrunCount(0) + ply:SetSBDir(dir) + ply:SetSBStartLerp(0) + ply:SetSBOffset(30) + ply:SetSBPeak(0) + ply:SetDive(false) + ply:SetCrouchJump(false) + + ParkourEvent("swingbar", ply) + + mv:SetVelocity(vector_origin) + + if mv:KeyDown(IN_FORWARD) or mv:GetVelocity():Length() > 150 then + ply:SetSBOffsetSpeed(2) + else + ply:SetSBOffsetSpeed(0) + end + + if CLIENT and IsFirstTimePredicted() or game.SinglePlayer() then + ply:EmitSound("Handsteps.ConcreteHard") + end end end end @@ -137,7 +140,7 @@ local function SwingbarThink(ply, mv, cmd) offset = ply:GetSBOffset() - if mv:KeyPressed(IN_JUMP) or mv:KeyDown(IN_JUMP) and offset > 90 then + if mv:KeyPressed(IN_JUMP) or mv:KeyDown(IN_JUMP) and offset > 90 or (CrueltyParkour:GetBool() and !ply:UsingRH()) then ParkourEvent("swingjump", ply) if mv:KeyPressed(IN_JUMP) and offset > 90 then diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Vaulting.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Vaulting.lua index 6bc0162..fc1287a 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Vaulting.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Vaulting.lua @@ -774,4 +774,12 @@ hook.Add("SetupMove", "BeatrunVaulting", function(ply, mv, cmd) mv:SetButtons(0) end end +end) + +hook.Add("PlayerSwitchWeapon", "NoWeaponWhileMantling", function(ply) + if ply:GetMantle() == 5 then + -- You are still mantling at this state, don't pull an SMG + -- out of your back pocket + return true + end end) \ No newline at end of file diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Wallrun.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Wallrun.lua index b956f17..567db71 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Wallrun.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Wallrun.lua @@ -78,6 +78,10 @@ local function WallrunningThink(ply, mv, cmd) mv:SetButtons(mv:GetButtons() - IN_DUCK) end + if math.Round(math.Rand(0, 1.1), 1) > 1 and SlippyWallrun:GetBool() and !ply:UsingRH() then + timer.Simple(math.Rand(0, (ply:GetWallrunTime() - CurTime())), function() ply:SetWallrunTime(0) end) + end + local wrtimeremains = CurTime() < ply:GetWallrunTime() if PuristWallrun:GetBool() then @@ -522,12 +526,15 @@ end local vecdir = Vector(1000, 1000, 1000) hook.Add("SetupMove", "Wallrunning", function(ply, mv, cmd) - if ply:GetWallrun() == nil or not ply:Alive() then + if ply:GetWallrun() == nil or not ply:Alive() or (CrueltyParkour:GetBool() and !ply:UsingRH() and !SlippyWallrun:GetBool()) then ply:SetWallrun(0) end if ply:GetWallrun() == 0 and mv:GetVelocity().z > -450 and not ply:OnGround() and mv:KeyDown(IN_FORWARD) and not ply:Crouching() and not mv:KeyDown(IN_DUCK) and ply:GetMoveType() ~= MOVETYPE_NOCLIP and ply:WaterLevel() < 1 then - WallrunningCheck(ply, mv, cmd) + if (CrueltyParkour:GetBool() and !ply:UsingRH() and !SlippyWallrun:GetBool()) then + else + WallrunningCheck(ply, mv, cmd) + end end if ply:GetWallrun() ~= 0 then diff --git a/beatrun/gamemodes/beatrun/gamemode/sh/Zipline.lua b/beatrun/gamemodes/beatrun/gamemode/sh/Zipline.lua index 73764cc..35080f8 100644 --- a/beatrun/gamemodes/beatrun/gamemode/sh/Zipline.lua +++ b/beatrun/gamemodes/beatrun/gamemode/sh/Zipline.lua @@ -138,7 +138,7 @@ local function ZiplineThink(ply, mv, cmd, zipline) dir:Mul(-1) end - if fraction >= 1 or cmd:KeyDown(IN_DUCK) then + if fraction >= 1 or cmd:KeyDown(IN_DUCK) or (CrueltyParkour:GetBool() and !ply:UsingRH()) then ply:SetZipline(nil) ply:SetMoveType(MOVETYPE_WALK) diff --git a/beatrun/gamemodes/beatrun/gamemode/shared.lua b/beatrun/gamemodes/beatrun/gamemode/shared.lua index d9ccf2d..55e10cd 100644 --- a/beatrun/gamemodes/beatrun/gamemode/shared.lua +++ b/beatrun/gamemodes/beatrun/gamemode/shared.lua @@ -1,4 +1,4 @@ -VERSION_GLOBAL = "1.0.14" +VERSION_GLOBAL = "1.0.22" VERSION_LATEST = "" VERSION_CHECKED = false @@ -11,6 +11,8 @@ GM.Website = "github.com/JonnyBro/beatrun" include("player_class/player_beatrun.lua") +include("preexecute/shared.lua") + for _, v in ipairs(file.Find("gamemodes/beatrun/gamemode/sh/*.lua", "GAME", "nameasc")) do AddCSLuaFile("sh/" .. v) include("sh/" .. v) diff --git a/repocontent/WindowsGitInstallGuide.md b/repocontent/WindowsGitInstallGuide.md new file mode 100644 index 0000000..82a90fc --- /dev/null +++ b/repocontent/WindowsGitInstallGuide.md @@ -0,0 +1 @@ +This guide is currently a work in progress. Check back later. Use [Method 1](../README.md#method-1-repository-download-and-extract-easy) for now. \ No newline at end of file diff --git a/version.txt b/version.txt index 97bceaa..2fa3901 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.0.14 \ No newline at end of file +1.0.22 \ No newline at end of file