Localization support (#93)

This commit is contained in:
Jonny_Bro (Nikita) 2023-10-12 22:59:36 +05:00 committed by GitHub
parent d8ac322ee3
commit e0b58041cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 1240 additions and 322 deletions

View file

@ -0,0 +1,29 @@
# ENGLISH
# Animations Installer Source Code
Here you can find source code of the animations installer.\
I don't know why you will ever need that but we put it here so you can be sure we don't supply malware with our fork.
## How To Use
Please refer to this [README](../beatrun/README.md).
## Credits
* [YuRaNnNzZZ](https://github.com/YuRaNnNzZZ) - Creator of this installer.
# RUSSIAN
# Исходный код установщика анимаций
Здесь находятся исходники нашего установщика анимаций.\
Я не знаю зачем это вам, но мы оставили их здесь чтобы вы могли убедиться что мы не распространяем вирусы в нашем форке.
## Как использовать
Прочитайте этот файл [README](../beatrun/README.md).
## Благодарность
* [YuRaNnNzZZ](https://github.com/YuRaNnNzZZ) - Создатель установщика.

View file

@ -1,80 +1,96 @@
# Beatrun | Community version # Beatrun | Community edition
Infamous parkour addon for Garry's Mod, fully open sourced and maintained by the community. * [Русский](./README_ru.md)
This version does not include malicious modules, code or networking. What it does contain is: Infamous parkour addon for Garry's Mod, fully open sourced and maintained by the community (me 😞).
* Lua modules for Discord Rich Presence
* Lua modules for Steam Presence
* Network connectivity for courses (activates only when you load or upload courses, and by default `courses.beatrun.ru` is used)
**All of this is optional and you may remove all of it.**\ > [!IMPORTANT]
Modules are located [here](/lua/bin/) and courses database functionality is [here](/beatrun/gamemodes/beatrun/gamemode/cl/CoursesDatabase.lua).<br><br> > You will not find here any malicious modules, code or networking! We have modules and networking for:
**PLEASE READ ALL BEFORE ASKING QUESTIONS ON OUR SERVER!** >
> * Discord Rich Presence.
> * Steam Presence.
> * Custom Courses Database.
>
> **All of this is optional and you can remove all of it.**\
> Modules are located [here](/lua/bin/) and courses database functionality is [here](/beatrun/gamemodes/beatrun/gamemode/cl/CoursesDatabase.lua).\
> You can find source code for modules in [Credits](#credits) section.
**PLEASE READ EVERYTHING BEFORE ASKING QUESTIONS ON OUR SERVER!**
## (Recommended) Automatic Installation (Windows only)
# (Prefered) Installation (Automatic | Windows only)
Run the command below in Powershell. Run the command below in Powershell.
> (Win + R > `powershell` > command in question) > [!NOTE]
> Win + R > `powershell`
```powershell ```powershell
iex (iwr "beatrun.ru/install.ps1" -UseBasicParsing) iex (iwr "beatrun.ru/install.ps1" -UseBasicParsing)
``` ```
## Installation (Manual) ## Manual Installation
1. Download this repository [here](https://github.com/JonnyBro/beatrun/archive/refs/heads/master.zip). 1. Download this repository [here](https://github.com/JonnyBro/beatrun/archive/refs/heads/master.zip).
2. Delete the `beatrun` folder in *addons* if you have one! 2. **Delete the `beatrun` folder in *your_game_folder/garrysmod/addons* if you have one.**
3. Extract the `beatrun` folder to *your_game_folder/garrysmod/addons*. 3. Extract the `beatrun` folder to *your_game_folder/garrysmod/addons*.
4. Extract the `lua` folder to *your_game_folder/garrysmod*. 4. Extract the `lua` folder to *your_game_folder/garrysmod*.
* `lua` folder contains modules for Discord Rich Presense and Steam Presence. They are optional. You can find their source code in the [credits](https://github.com/JonnyBro/beatrun?tab=readme-ov-file#credits-3) section<br><br>
## Animations ## Animations
You can use "**BeatrunAnimInstaller**" (located in `beatrun` [here](https://github.com/JonnyBro/beatrun/tree/master/beatrun)) for custom animations. Currently there's:
* Beatrun Reanimated project
* Original but fixed animations<br><br>
Start the executable and press a key on your keyboard with the number of the animation you want to install (if nothing's changed, close the game and run the program as admin).<br> Please refer to this [README](/beatrun/README.md).
Installer's source can be found [here](/BeatrunAnimInstaller).
## Changes and fixes done by the community ## Changes and fixes done by the community
> [!IMPORTANT]
> There are many undocumented changes and fixes in this version, you better look at the commits for more specific changes.
* Jonny_Bro is hosting [custom online courses database](https://courses.beatrun.ru), which is also free and [open source](https://github.com/relaxtakenotes/beatrun-courses-server/) 🤯! * Jonny_Bro is hosting [custom online courses database](https://courses.beatrun.ru), which is also free and [open source](https://github.com/relaxtakenotes/beatrun-courses-server/) 🤯!
* Added a new gamemode - *Deathmatch*, it's like Data Theft, but you collect kills not cubes! (it's way more fun I promise) * Implemented a new gamemode - **Deathmatch** (it's way more fun than Data Theft I promise).
* Added an in-game config menu - You can find it in the tool menu, in the *Beatrun* Category!\ * Implemented "Proper" Kick Glitch just like in [original ME](https://www.youtube.com/watch?v=zK5y3NBUStc).
* Added an in-game config menu - you can find it in the tool menu, in the *Beatrun* Category.\
**All** of the Beatrun settings can be changed in the configuration menu. **All** of the Beatrun settings can be changed in the configuration menu.
* Settings on the map selection screen.
* Localization support.\
For now Russian and English are supported.
* Added the ability to get off of ladders. * Added the ability to get off of ladders.
* Allowed jumping while slowwalking (🤷).
* Done various tweaks to the Time Trials Menu (F4).
* Added an arrow that shows the next checkpoint. * Added an arrow that shows the next checkpoint.
* Added a ConVar to allow Overdrive usage on the server - `Beatrun_AllowOverdriveInMultiplayer`. * Added a ConVar to allow Overdrive usage on the server - `Beatrun_AllowOverdriveInMultiplayer`.
* Added a ConVar to toggle between old and new (like in ME) Kick-Glitch - `Beatrun_OldKickGlitch`. * Added a ConVar to toggle between old and new Kick Glitch - `Beatrun_OldKickGlitch`.
* Added some ConVars to change HUD colors - `Beatrun_HUDTextColor`, `Beatrun_HUDCornerColor`, `Beatrun_HUDFloatingXPColor`. * Added some ConVars to change HUD colors - `Beatrun_HUDTextColor`, `Beatrun_HUDCornerColor`, `Beatrun_HUDFloatingXPColor`.
* Added a ConVar to allow players to spawn props without admin rights - `Beatrun_AllowPropSpawn`. * Added a ConVar to allow players to spawn props and weapons without admin rights - `Beatrun_AllowPropSpawn`.
* Added a ConVar to disable grapple ability - `Beatrun_DisableGrapple`. * Added a ConVar to disable grapple ability - `Beatrun_DisableGrapple`.
* Added a ConVar to allow QuickTurn with any weapon or only with *Runner Hands* - `Beatrun_QuickturnHandsOnly`. * Added a ConVar to allow QuickTurn with any weapon or only with *Runner Hands* - `Beatrun_QuickturnHandsOnly`.
* Implemented Discord Rich Presence using open source tools (See [credits](https://github.com/JonnyBro/beatrun?tab=readme-ov-file#credits-3)).
* Added small camera punch when diving. * Added small camera punch when diving.
* Added the ability to remove ziplines that created with *Zipline Gun* - `RMB`. * Added the ability to remove ziplines that created with *Zipline Gun* - `RMB`.
* Fixed some playermodels show up as ERROR. * Implemented Discord Rich Presence using [open source](#credits) module.
* SteamID in the right corner is no longer present.
## Notable changes and fixes done by the community ## Notable changes and fixes done by the community
* Your SteamID in the right corner is no longer present.
* Fixed some playermodels show up as ERROR.
* Done various tweaks to the Courses Menu (F4).
* Allowed jumping while walking (🤷).
* Fixed leaderboard sorting in gamemodes. * Fixed leaderboard sorting in gamemodes.
* Fixed grapple usage in courses and gamemodes. * Fixed grapple usage in courses and gamemodes.
* Fixed a crash in DataTheft when touching data bank. * Fixed a crash in Data Theft when touching Data Bank.
* Fixed an error on course load. * Fixed an error on course loading.
* Fixed collisions issues. (PvP damage not going through in gamemodes other than Data Theft) * Fixed collisions issues. (PvP damage not going through in gamemodes other than Data Theft)
* Added Proper Kick Glitch ([Like in original ME](https://www.youtube.com/watch?v=zK5y3NBUStc)). (cry about prediction errors l0l)
* Tweaked safety roll, now you can roll under things. * Tweaked safety roll, now you can roll under things.
* Tweaked some grapple related stuff. Now it moves with the entity it was attached to and other players can see the rope.
* Made it possible to dive to your death =). * Made it possible to dive to your death =).
* Added some grapple related stuff. Now it moves with the entity it was attached to and other players can see the rope.
## TODO ## TODO
- [ ] Gamemodes menu. (idk how to properly implement this for know)
# Related * [ ] Loadouts creation menu for Data Theft and Deathmatch. (idk how to properly implement this for know).
* [beatrun-anims](https://github.com/JonnyBro/beatrun-anims) - Decompiled and reworked Beatrun animations.
# Credits <3 ## Related
* All contributors.
* [Beatrun Reanimated Project](https://github.com/JonnyBro/beatrun-anims).
## Credits
* [All contributors](https://github.com/JonnyBro/beatrun/graphs/contributors) - <3.
* [EarthyKiller127](https://www.youtube.com/channel/UCiFqPwGo4x0J65xafIaECDQ) - He made that piece of shit. * [EarthyKiller127](https://www.youtube.com/channel/UCiFqPwGo4x0J65xafIaECDQ) - He made that piece of shit.
* [relaxtakenotes](https://github.com/relaxtakenotes) - Made all of this possible. * [relaxtakenotes](https://github.com/relaxtakenotes) - Made all of this possible.
* [MTB](https://www.youtube.com/@MTB396) - Beatrun Reanimated project. * [MTB](https://www.youtube.com/@MTB396) - Beatrun Reanimated Project.
* [Discord Rich Presence](https://github.com/fluffy-servers/gmod-discord-rpc) by Fluffy Servers. * [Discord Rich Presence](https://github.com/fluffy-servers/gmod-discord-rpc) by Fluffy Servers.
* [Steam Presence](https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer) by YuRaNnNzZZ. * [Steam Presence](https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer) by YuRaNnNzZZ.

96
README_ru.md Normal file
View file

@ -0,0 +1,96 @@
# Beatrun | Версия от сообщества
* [English](./README.md)
Печально известный паркур-аддон для Garry's Mod, с полностью открытым исходным кодом и поддерживаемый сообществом (мной 😞).
> [!IMPORTANT]
> У нас вы не найдёте вредоносного кода, модулей или сетевого кода! У нас есть модули и сетевой код, который используется для:
>
> * Discord Rich Presence.
> * Steam Presence.
> * Пользовательская онлайн база курсов.
>
> **Всё это необязательно и может быть удалено.**\
> Модули находятся [тут](/lua/bin/) и функционал онлайн базы курсов доступен [здесь](/beatrun/gamemodes/beatrun/gamemode/cl/CoursesDatabase.lua).\
> Исходный код модулей можно найти в [благодарностях](#благодарности).
**ПОЖАЛУЙСТА, ПРОЧТИТЕ ВЕСЬ ДОКУМЕНТ ПЕРЕД ТЕМ КАК ЗАДАВАТЬ ВОПРОСЫ НА НАШЕМ СЕРВЕРЕ!**
## (Рекомендуемое) Автоматическая установка (только для Windows)
Запустите команду ниже в Powershell.
> [!NOTE]
> Win + R > `powershell`
```powershell
iex (iwr "beatrun.ru/install.ps1" -UseBasicParsing)
```
## Ручная установка
1. Скачайте данный репозиторий по данной [ссылке](https://github.com/JonnyBro/beatrun/archive/refs/heads/master.zip).
2. **Удалите старую папку `beatrun` по пути *путь_к_игре/garrysmod/addons* если она у вас имеется.**
3. Извлеките папку `beatrun` по пути *путь_к_игре/garrysmod/addons*.
4. Извлеките папку `lua` по пути *путь_к_игре/garrysmod*.
## Анимации
Пожалуйста, обратитесь к данному [README](/beatrun/README.md).
## Изменений сделанные сообществом
> [!IMPORTANT]
> Множество изменений и исправлений не задокументированы, обратитесь к списку коммитов для более подробного списка изменений.
* Jonny_Bro держит [пользовательскую онлайн базу курсов](https://courses.beatrun.ru), которая так же бесплатна и имеет [открытый исходный код](https://github.com/relaxtakenotes/beatrun-courses-server/) 🤯!
* Реализован новый режим - **Deathmatch** (намного веселее чем Data Theft, честно).
* Реализован "правильный" Kick Glitch прямо как в [оригинальной ME](https://www.youtube.com/watch?v=zK5y3NBUStc).
* Добавлено меню настроек в игре - его можно найти в списке инструментов, в категории *Beatrun*.\
Вам доступны **все** настройки Beatrun из данного меню.
* Меню настроек при выборе карты.
* Поддержка локализации.\
На данный момент доступны Русский и Английский языки.
* Добавлена возможность слезания с лестниц.
* Добавлена стрелка указывающая на следующую контрольную точку.
* Добавлена переменная которая разрешает использование Overdrive на сервере - `Beatrun_AllowOverdriveInMultiplayer`.
* Добавлена переменная которая позволяет переключится между старым и новым Kick Glitch - `Beatrun_OldKickGlitch`.
* Добавлено несколько переменных позволяющих настроить цвета HUD - `Beatrun_HUDTextColor`, `Beatrun_HUDCornerColor`, `Beatrun_HUDFloatingXPColor`.
* Добавлена переменная которая разрешает игрокам без админ прав создавать пропы и оружие - `Beatrun_AllowPropSpawn`.
* Добавлена переменная которая позволяет переключить работу крюка-кошки - `Beatrun_DisableGrapple`.
* Добавлена переменная которая позволяет переключить использование Quickturn только с *Runner Hands* или с любым оружием - `Beatrun_QuickturnHandsOnly`.
* Добавлен небольшой толчёк камеры при нырянии.
* Добавлена возможность удаления зиплайнов созданных *Zipline Gun* - `ПКМ`.
* Реализована поддержка Discord Rich Presence используя модуль с [открытым исходным кодом](#благодарности).
## Другие изменения и исправления
* Ваш SteamID больше не показывается в углу экрана.
* Исправлено отображение некоторых моделей игрока как ERROR.
* Сделано несколько изменений в меню выбора курсов (F4).
* Разрешены прыжки во время ходьбы (🤷).
* Исправлена сортировка в таблице лидеров.
* Исправлено использование крюка-кошки в режимах и курсах.
* Исправлен краш при соприкосновении с Data Bank в Data Theft.
* Исправлена ошибка загрузки курсов.
* Исправлены ошибки коллизий. (PvP урон не проходил нигде, кроме Data Theft)
* Изменён кувырок, теперь можно кувыркаться под объектами.
* Изменена крюк-кошка. Теперь вы движетесь вместе с объектом к которому она прицеплена и её видят другие игроки.
* Теперь можно нырнуть и умереть =).
## TODO
* [ ] Меню выбора снаряжения для Data Theft и Deathmatch (не знаю пока как это реализовать).
## Может быть полезно
* [Beatrun Reanimated Project](https://github.com/JonnyBro/beatrun-anims).
## Благодарности
* [Все участники](https://github.com/JonnyBro/beatrun/graphs/contributors) - <3.
* [EarthyKiller127](https://www.youtube.com/channel/UCiFqPwGo4x0J65xafIaECDQ) - Создатель этого куска дерьма.
* [relaxtakenotes](https://github.com/relaxtakenotes) - Если бы не он, этого проекта бы не существовало.
* [MTB](https://www.youtube.com/@MTB396) - Создатель Beatrun Reanimated Project.
* [Discord Rich Presence](https://github.com/fluffy-servers/gmod-discord-rpc) от Fluffy Servers.
* [Steam Presence](https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer) от YuRaNnNzZZ.

37
beatrun/README.md Normal file
View file

@ -0,0 +1,37 @@
# ENGLISH
# Animations Installer
You can use **BeatrunAnimInstaller** (located literally here) to change animations. Currently we have:
1. `Beatrun Reanimated Project` animations.
2. Original but fixed animations.
## How To Use
1. Start the executable.
2. Press a key on your keyboard with the number of the animation you want to install.\
If nothing is changed, close the game and/or try run the program with admin priveleges.
## Source Code
Please refer to this [README](../BeatrunAnimInstaller_Source/README.md).
# RUSSIAN
# Установщик анимаций
Используйте **BeatrunAnimInstaller** (который расположен прямо тут) чтобы менять анимации. На данный момент у нас имеются:
1. Анимации из `Beatrun Reanimated Project`.
2. Оригинальные анимации с правками и фиксами.
## Как использовать
1. Запустите исполняемый файл.
2. Нажмите цифру желаемых анимаций на клавиатуре.\
Если ничего не изменилось, закройте игру и/или запустите файл от имени администратора.
## Исходный код
Прочитайте этот файл [README](../BeatrunAnimInstaller_Source/README.md).

View file

@ -3,5 +3,270 @@
"base" "base" "base" "base"
"title" "Beatrun" "title" "Beatrun"
"maps" "^br_" "maps" "^br_"
"category" "other"
"menusystem" "1" "menusystem" "1"
"settings"
{
1
{
"name" "physgun_limited"
"text" "limit_physgun"
"help" "If enabled, the Physics Gun will not be able to pick up certain map entities"
"type" "CheckBox"
"default" "0"
}
2
{
"name" "sbox_weapons"
"text" "enable_weapons"
"help" "If enabled, each player will receive default Half-Life 2 weapons on each spawn"
"type" "CheckBox"
"default" "1"
"singleplayer" "1"
}
3
{
"name" "sbox_godmode"
"text" "allow_god_mode"
"help" "If enabled, all players will be invincible"
"type" "CheckBox"
"default" "0"
"singleplayer" "1"
}
4
{
"name" "sbox_playershurtplayers"
"text" "players_damage_players"
"help" "If enabled, players will be able to hurt each other"
"type" "CheckBox"
"default" "1"
}
5
{
"name" "sbox_maxprops"
"text" "max_props"
"help" "Maximum props a single player can create"
"type" "Numeric"
"default" "200"
}
6
{
"name" "sbox_maxragdolls"
"text" "max_ragdolls"
"help" "Maximum ragdolls a single player can create"
"type" "Numeric"
"default" "10"
}
7
{
"name" "sbox_maxvehicles"
"text" "max_vehicles"
"help" "Maximum vehicles a single player can create"
"type" "Numeric"
"default" "4"
}
8
{
"name" "sbox_maxeffects"
"text" "max_effects"
"help" "Maximum effect props a single player can create"
"type" "Numeric"
"default" "200"
}
9
{
"name" "sbox_maxballoons"
"text" "max_balloons"
"help" "Maximum balloons a single player can create"
"type" "Numeric"
"default" "100"
}
10
{
"name" "sbox_maxcameras"
"text" "max_cameras"
"help" "Maximum cameras a single player can create"
"type" "Numeric"
"default" "10"
}
11
{
"name" "sbox_maxnpcs"
"text" "max_npcs"
"help" "Maximum NPCs a single player can create"
"type" "Numeric"
"default" "10"
}
12
{
"name" "sbox_maxsents"
"text" "max_entities"
"help" "Maximum entities a single player can create"
"type" "Numeric"
"default" "100"
}
13
{
"name" "sbox_maxdynamite"
"text" "max_dynamite"
"help" "Maximum dynamites a single player can create"
"type" "Numeric"
"default" "10"
}
14
{
"name" "sbox_maxlamps"
"text" "max_lamps"
"help" "Maximum lamps a single player can create"
"type" "Numeric"
"default" "3"
}
15
{
"name" "sbox_maxlights"
"text" "max_lights"
"help" "Maximum lights a single player can create"
"type" "Numeric"
"default" "5"
}
16
{
"name" "sbox_maxwheels"
"text" "max_wheels"
"help" "Maximum wheels a single player can create"
"type" "Numeric"
"default" "50"
}
17
{
"name" "sbox_maxthrusters"
"text" "max_thrusters"
"help" "Maximum thrusters a single player can create"
"type" "Numeric"
"default" "50"
}
18
{
"name" "sbox_maxhoverballs"
"text" "max_hoverballs"
"help" "Maximum hoverballs a single player can create"
"type" "Numeric"
"default" "50"
}
19
{
"name" "sbox_maxbuttons"
"text" "max_buttons"
"help" "Maximum buttons a single player can create"
"type" "Numeric"
"default" "50"
}
20
{
"name" "sbox_maxemitters"
"text" "max_emitters"
"help" "Maximum emitters a single player can create"
"type" "Numeric"
"default" "20"
}
21
{
"name" "gmod_maxammo"
"text" "gmod_maxammo"
"help" "Forces amount of maximum ammo reserves for all weapons of each player. Values 0 and below mean use weapon's ammo type maximum ammo setting instead."
"type" "Numeric"
"default" "9999"
"singleplayer" "1"
"dontcreate" "1"
}
22
{
"name" "gmod_suit"
"text" "gmod_suit"
"help" "Set to non zero to enable Half-Life 2 aux suit power stuff."
"type" "CheckBox"
"default" "0"
"singleplayer" "1"
"dontcreate" "1"
}
23
{
"name" "sbox_noclip"
"text" "allow_noclip"
"help" "If enabled, players will be able to use noclip"
"type" "CheckBox"
"default" "1"
}
24
{
"name" "mp_falldamage"
"text" "realistic_falldamage"
"help" "Enable realistic fall damage"
"type" "CheckBox"
"default" "0"
"singleplayer" "1"
"dontcreate" "1"
}
25
{
"name" "sbox_bonemanip_npc"
"text" "bone_manipulate_npcs"
"help" "If enabled then manipulating NPC bones will be allowed"
"type" "CheckBox"
"default" "1"
}
26
{
"name" "sbox_bonemanip_player"
"text" "bone_manipulate_players"
"help" "If enabled then manipulating Player bones will be allowed"
"type" "CheckBox"
"default" "0"
}
27
{
"name" "sbox_bonemanip_misc"
"text" "bone_manipulate_others"
"help" "If enabled then manipulating the bones of other entities will be allowed"
"type" "CheckBox"
"default" "0"
}
28
{
"name" "sbox_persist"
"text" "persistent_mode_menu"
"help" "If not empty, enables 'Make Persistent' option when you right click on props while holding C, allowing you to save them across sessions. Changing this convar will save existing persistent props, cleanup the whole map and load props from given file."
"type" "Text"
"default" ""
"singleplayer" "1"
}
}
} }

View file

@ -0,0 +1,233 @@
# Misc
beatrun.misc.ok=OK
beatrun.misc.noclipdetected=Noclip Detected! Respawn to restart the course
beatrun.misc.checkconsole=Check console!
# AddonWarning
beatrun.addonwarning.warntext=NOTICE\nPlease disable the following addons before playing\nor submitting any issues to GitHub:
beatrun.addonwarning.quitbutton=Quit to Main Menu
beatrun.addonwarning.play=Play
beatrun.addonwarning.conflictfound=CONFLICTING ADDONS FOUND
# BuildModeHUD
beatrun.buildmodehud.info=Index: %s\nSelected: %s\nAngle: %s
beatrun.buildmodehud.props=Menu / Props
beatrun.buildmodehud.entities=Menu / Entities
beatrun.buildmodehud.drag=Drag (G)
beatrun.buildmodehud.copy=Copy (SHIFT+D)
beatrun.buildmodehud.delete=Delete (DEL/BCKSPC)
beatrun.buildmodehud.highlight=Highlight (T)
beatrun.buildmodehud.select=Select
beatrun.buildmodehud.zipline=Zipline (SHIFT = 2-Way)
# All ConVars
beatrun.convars.hudxp=Show total XP near nickname
beatrun.convars.hudsway=Display HUD swaying
beatrun.convars.huddynamic=Hide HUD when moving
beatrun.convars.hudhidden=Hides most of the HUD
beatrun.convars.hudreticle=Display a reticle
beatrun.convars.hudtextcolor=HUD Text Color\nDefault: 255 255 255 255
beatrun.convars.hudcornercolor=HUD Corner Color\nDefault: 20 20 20 100
beatrun.convars.hudfloatxpcolor=HUD Floating XP Color\nDefault: 255 255 255 255
beatrun.convars.nametags=Display nametags above players
beatrun.convars.apikey=API key
beatrun.convars.domain=Domain of the courses database
beatrun.convars.viewbob=Viewbob Intensity
beatrun.convars.viewbobstabilization=Turn on to reduce motion sickness by making viewbobbing keep the player's look position centered
beatrun.convars.fov=Changes player's Field Of View
beatrun.convars.cpsave=Respawning during a course will go back to the last hit checkpoint
beatrun.convars.faststart=Faster start countdown
beatrun.convars.disablegrapple=Disables grapple ability
beatrun.convars.puristmode=Purist mode is a clientside preference that severely weakens the ability to strafe while in the air, which is how ME games handle this.\n0 = No restrictions\n1 = Reduced move speed in the air
beatrun.convars.quickturnground=Enables quickturning with secondary attack while on the ground
beatrun.convars.quickturnhandsonly=Enables quickturning with "Runner Hands" only
# HUD
beatrun.hud.course=Course: %s
beatrun.hud.freeplay=Freeplay
beatrun.hud.lvl=Lvl: %s
beatrun.hud.infector=Infector
# Menu_Course
beatrun.coursemenu.trials=Courses - %s
beatrun.coursemenu.buildmode=Toggle Build Mode
beatrun.coursemenu.freeplay=Return to Freeplay
# CoursesDatabase
beatrun.coursesdatabase.cantuploadfreeplay=Can't upload in Freeplay
beatrun.coursesdatabase.upload1=You're trying to upload a course with the name %s on map %s.
beatrun.coursesdatabase.upload2=Use Beatrun_Confirm to continue or Beatrun_Cancel to cancel.
beatrun.coursesdatabase.update1=You are trying to update a course with this code %s to course with name %s on map %s.
# Tools Menu
beatrun.toolsmenu.client=Client
beatrun.toolsmenu.server=Server
# Tools Menu Courses Section
beatrun.toolsmenu.courses.name=Courses
beatrun.toolsmenu.courses.desc=Courses Settings
beatrun.toolsmenu.courses.faststart=Fast Start
beatrun.toolsmenu.courses.faststartdesc=Faster countdown at the start of the course
beatrun.toolsmenu.courses.checkpointsave=Save at Checkpoint
beatrun.toolsmenu.courses.checkpointsavedesc=Respawn at last hit checkpoint in courses
beatrun.toolsmenu.courses.database=Database Domain
beatrun.toolsmenu.courses.databasedesc=Domain/IP of the database\nDefault: courses.beatrun.ru
beatrun.toolsmenu.courses.changeapikey=Change API Key
beatrun.toolsmenu.courses.enterapikey=Enter your API key
beatrun.toolsmenu.courses.savecourse=Save Currently Running Course to a File
beatrun.toolsmenu.courses.namesavecourse=Enter a name for your course
beatrun.toolsmenu.courses.loadcourse=Load a Course from the Online Database
beatrun.toolsmenu.courses.enterloadcourse=Enter course code
beatrun.toolsmenu.courses.uploadcourse=Upload Currently Running Course to the Database
beatrun.toolsmenu.courses.updatecourse=Update a Course on the Database
beatrun.toolsmenu.courses.updatecoursehelp=Updates a course on the database with the currently running one
# Tools Menu HUD Section
beatrun.toolsmenu.hud.name=HUD
beatrun.toolsmenu.hud.desc=HUD Settings
beatrun.toolsmenu.hud.dynamic=Dynamic HUD
beatrun.toolsmenu.hud.dynamicdesc=Hides HUD when moving
beatrun.toolsmenu.hud.sway=HUD Sway
beatrun.toolsmenu.hud.swaydesc=Toggles HUD swaying
beatrun.toolsmenu.hud.reticle=Show Reticle
beatrun.toolsmenu.hud.reticledesc=Shows a dot in the center of the screen
beatrun.toolsmenu.hud.nametags=Show Nametags
beatrun.toolsmenu.hud.nametagsdesc=Toggles nametags above players
beatrun.toolsmenu.hud.hudxp=Show HUD XP
beatrun.toolsmenu.hud.hudxpdesc=Show total XP near your nickname
beatrun.toolsmenu.hud.wind=Wind Effect
beatrun.toolsmenu.hud.winddesc=Wind noises when running
beatrun.toolsmenu.hud.fov=FOV
beatrun.toolsmenu.hud.fovdesc=You need to respawn after changing your FOV!
beatrun.toolsmenu.hud.hidden=Hide HUD
beatrun.toolsmenu.hud.hiddendesc=0 - Shown\n1 - Gamemode only\n2 - Hidden
beatrun.toolsmenu.hud.textcolor=HUD Text Color
beatrun.toolsmenu.hud.cornercolor=HUD Corner Color
beatrun.toolsmenu.hud.floatxpcolor=HUD Floating XP Color
# Tools Menu Viewbob Section
beatrun.toolsmenu.viewbob.name=Viewbob
beatrun.toolsmenu.viewbob.desc=Viewbob Settings
beatrun.toolsmenu.viewbob.stabilization=Viewbob Stabilization
beatrun.toolsmenu.viewbob.stabilizationdesc=Turn on to reduce motion sickness by making viewbobbing keep the player's look position centered
beatrun.toolsmenu.viewbob.intensity=Viewbob Intensity
# Tools Menu Gameplay Section
beatrun.toolsmenu.gameplay.name=Gameplay
beatrun.toolsmenu.gameplay.desc=Gameplay Settings
beatrun.toolsmenu.gameplay.quickturnground=Quickturn Ground
beatrun.toolsmenu.gameplay.quickturngrounddesc=Enables quickturning with secondary attack while on the ground
beatrun.toolsmenu.gameplay.quickturnhandsonly=Quickturn Hands Only
beatrun.toolsmenu.gameplay.quickturnhandsonlydesc=Enables quickturning with "Runner Hands" only
beatrun.toolsmenu.gameplay.puristmode=Purist Mode
beatrun.toolsmenu.gameplay.puristmodedesc=Purist mode is a clientside preference that severely weakens the ability to strafe while in the air, which is how Mirror's Edge games handle this.\nDisabled = No restrictions\nEnabled = Reduced move speed in the air
beatrun.toolsmenu.gameplay.disablegrapple=Disable Grapple Ability
beatrun.toolsmenu.gameplay.disablegrappledesc=Disables grapple ability
# Tools Menu Misc Section
beatrun.toolsmenu.misc.name=Misc
beatrun.toolsmenu.misc.desc=Misc Settings
beatrun.toolsmenu.misc.propspawn=Prop Spawning
beatrun.toolsmenu.misc.propspawndesc=Allows players without admin rights to spawn props, entities and weapons
beatrun.toolsmenu.misc.overdrivemp=Overdrive in Multiplayer
beatrun.toolsmenu.misc.overdrivempdesc=Allows Overdrive usage on the server
# Tools Menu Moves Section
beatrun.toolsmenu.moves.name=Moves
beatrun.toolsmenu.moves.desc=Moves Settings
beatrun.toolsmenu.moves.help=You Can Dive with Ctrl + RMB While Midair!\nOverdrive Toggles with E + LMB.
beatrun.toolsmenu.moves.speedlimit=Speed Limit
beatrun.toolsmenu.moves.speedlimitdesc=Changes player's speed limit\nDefault: 325
beatrun.toolsmenu.moves.forcepuristmode=Force Purist Mode
beatrun.toolsmenu.moves.forcepuristmodedesc=Forces Purist Mode to be enabled for all players
beatrun.toolsmenu.moves.realisticwallrunning="Realistic" wallrunning
beatrun.toolsmenu.moves.realisticwallrunningdesc=You don't lose speed when starting wallrunning when disabled
beatrun.toolsmenu.moves.kickglitch=Kick Glitch
beatrun.toolsmenu.moves.kickglitchdesc=Toggles Kick Glitch Move\nLMB when Wallrunning and Then Jumping Right After
beatrun.toolsmenu.moves.kickglitchversion=Kick Glitch Version
beatrun.toolsmenu.moves.kickglitchversiondesc=Enabled - Old version\nDisabled - New version\nNew version uses mechanic from ME that spawns a small platform under a player
beatrun.toolsmenu.moves.quakejump=Quake Jump
beatrun.toolsmenu.moves.quakejumpdesc=Toggles Quake Jump Move\nPress RMB Right After Side Step
beatrun.toolsmenu.moves.sidestep=Side Step
beatrun.toolsmenu.moves.sidestepdesc=Toggles Side Step Move\nA/D + RMB
beatrun.toolsmenu.moves.disarm=Disarm
beatrun.toolsmenu.moves.disarmdesc=Toggles Ability to Disarm NPC\nPress "%s" on an NPC
beatrun.toolsmenu.moves.divesettings=Dive Settings
beatrun.toolsmenu.moves.totsugeki=Totsugeki
beatrun.toolsmenu.moves.totsugekidesc=Toggles Totsugeki Move\nDive Right After Quake Jump
beatrun.toolsmenu.moves.totsugekispam=Totsugeki Spam
beatrun.toolsmenu.moves.totsugekispamdesc=Toggles Ability to Spam Totsugeki
beatrun.toolsmenu.moves.totsugekiheading=Totsugeki Heading
beatrun.toolsmenu.moves.totsugekiheadingdesc=Allows to Totsugeki on X axis (up/down)
beatrun.toolsmenu.moves.totsugekidirection=Totsugeki Direction
beatrun.toolsmenu.moves.totsugekidirectiondesc=Allows to Totsugeki into Another Direction\nCombined with Spam and Heading Allows You to Fly =)
# Tools Menu Gamemodes Section
beatrun.toolsmenu.gamemodes.name=Gamemodes
beatrun.toolsmenu.gamemodes.desc=Gamemodes Settings
beatrun.toolsmenu.gamemodes.error=Another gamemode is running!
beatrun.toolsmenu.gamemodesc.infection=Toggle Infection Gamemode
beatrun.toolsmenu.gamemodesc.datatheft=Toggle Data Theft Gamemode
beatrun.toolsmenu.gamemodesc.deathmatch=Toggle Deathmatch Gamemode
# Checkpoints
beatrun.checkpoints.countdown1=Ready
beatrun.checkpoints.countdown2=Steady
beatrun.checkpoints.countdown3=GO!
beatrun.checkpoints.speedometer= %s km/h
# DataTheft
beatrun.datatheft.name=Data Theft (%s)
beatrun.datatheft.start=Data Theft! Kill players to collect data, deposit data in banks
# Deathmatch
beatrun.deathmatch.name=Deathmatch
beatrun.deathmatch.start=Deathmatch! Kill players to get points!
# Infection
beatrun.infection.name=Infection
beatrun.infection.start=Infection! Touch other players to infect them\n%s player(s) will become infected in %ss
beatrun.infection.nosurvivors=None...
beatrun.infection.infected=was infected!
beatrun.infection.infectedby=has infected
beatrun.infection.award=You were awarded 200 XP for surviving!
beatrun.infection.awardinfected=You were awarded 100 XP for spawning as an infected!
beatrun.infection.end=The game has ended!\nSurvivors: %s\nRestarting in 15s

View file

@ -0,0 +1,233 @@
# Misc
beatrun.misc.ok=Ок
beatrun.misc.noclipdetected=Обнаружен NoClip! Нажмите R чтобы начать заного
beatrun.misc.checkconsole=Проверьте консоль!
# AddonWarning
beatrun.addonwarning.warntext=ВНИМАНИЕ\nПожалуйста, отключите данные аддоны перед игрой\nили созданием сообщений на GitHub:
beatrun.addonwarning.quitbutton=Выйти в меню
beatrun.addonwarning.play=Играть
beatrun.addonwarning.conflictfound=НЕСОВМЕСТИМЫЕ АДДОНЫ ОБНАРУЖЕНЫ
# BuildModeHUD
beatrun.buildmodehud.info=Указатель: %s\nВыбрано: %s\nУгол: %s
beatrun.buildmodehud.props=Меню / Пропы
beatrun.buildmodehud.entities=Меню / Энтити
beatrun.buildmodehud.drag=Переместить (G)
beatrun.buildmodehud.copy=Копировать (SHIFT+D)
beatrun.buildmodehud.delete=Удадлить (DEL/BCKSPC)
beatrun.buildmodehud.highlight=Подсветить (T)
beatrun.buildmodehud.select=Выбрать
beatrun.buildmodehud.zipline=Зиплайн (SHIFT = двухсторонний)
# All ConVars
beatrun.convars.hudxp=Показать весь опыт рядом с ником
beatrun.convars.hudsway=Отображать покачивание HUD
beatrun.convars.huddynamic=Скрыть HUD при движении
beatrun.convars.hudhidden=Скрыть HUD
beatrun.convars.hudreticle=Показать точку
beatrun.convars.hudtextcolor=Цвет текста в HUD\nDefault: 255 255 255 255
beatrun.convars.hudcornercolor=Цвет края в HUD\nDefault: 20 20 20 100
beatrun.convars.hudfloatxpcolor=Цвет всплывающего XP в HUD\nDefault: 255 255 255 255
beatrun.convars.nametags=Показать ники над игроками
beatrun.convars.apikey=API ключ
beatrun.convars.domain=Домен онлайн базы курсов
beatrun.convars.viewbob=Интенсивность покачивания камеры
beatrun.convars.viewbobstabilization=Включите чтобы снизить покачивание камеры центрируя её
beatrun.convars.fov=Угол обзора игрока
beatrun.convars.cpsave=Респавн в курсах отправляет на последнюю контрольную точку
beatrun.convars.faststart=Быстрый отчёт в начале курса
beatrun.convars.disablegrapple=Переключить крюк-кошку
beatrun.convars.puristmode=Режим Purist это клиентский параметр который сильно снижает движение игрока в стороны будучи в воздухе, прямо как в оригинальное ME.\n0 = Нет ограничений\n1 = Снижает движение игрока в воздухе в стороны
beatrun.convars.quickturnground=Переключить Quickturn будучи на земле
beatrun.convars.quickturnhandsonly=Переключить Quickturn только с "Runner Hands"
# HUD
beatrun.hud.course=Курс: %s
beatrun.hud.freeplay=Свободная игра
beatrun.hud.lvl=Лвл: %s
beatrun.hud.infector=Заражённый
# Menu_Course
beatrun.coursemenu.trials=Курсы - %s
beatrun.coursemenu.buildmode=Переключить режим строительства
beatrun.coursemenu.freeplay=Вернуться в свободную игру
# CoursesDatabase
beatrun.coursesdatabase.cantuploadfreeplay=Нельзя загружать во время свободной игры
beatrun.coursesdatabase.upload1=Вы пытаетесь загрузить курс с названием %s на карте %s.
beatrun.coursesdatabase.upload2=Используйте Beatrun_Confirm чтобы продолжить или Beatrun_Cancel чтобы отменить.
beatrun.coursesdatabase.update1=Вы пытаетесь обновить курс с кодом %s на курс с названием %s на карте %s.
# Tools Menu
beatrun.toolsmenu.client=Клиент
beatrun.toolsmenu.server=Сервер
# Tools Menu Courses Section
beatrun.toolsmenu.courses.name=Курсы
beatrun.toolsmenu.courses.desc=Настройки курсов
beatrun.toolsmenu.courses.faststart=Быстрый старт
beatrun.toolsmenu.courses.faststartdesc=Быстрый отчёт в начале курса
beatrun.toolsmenu.courses.checkpointsave=Сохранение на Контр. точках
beatrun.toolsmenu.courses.checkpointsavedesc=Респавн на последней контрольной точке
beatrun.toolsmenu.courses.database=Домен Базы
beatrun.toolsmenu.courses.databasedesc=Домен/IP онлайн базы курсов\nПо умолчанию: courses.beatrun.ru
beatrun.toolsmenu.courses.changeapikey=Изменить API Ключ
beatrun.toolsmenu.courses.enterapikey=Введите ваш API ключ
beatrun.toolsmenu.courses.savecourse=Сохранить Текущий Курс в Файл
beatrun.toolsmenu.courses.namesavecourse=Введите название для курса
beatrun.toolsmenu.courses.loadcourse=Загрузить Курс из Базы
beatrun.toolsmenu.courses.enterloadcourse=Введите код курса
beatrun.toolsmenu.courses.uploadcourse=Опубликовать Текущий Курс в Базу курсов
beatrun.toolsmenu.courses.updatecourse=Обновить курс в Базе
beatrun.toolsmenu.courses.updatecoursehelp=Обновляет курс в базе по коду на текущий
# Tools Menu HUD Section
beatrun.toolsmenu.hud.name=HUD
beatrun.toolsmenu.hud.desc=Настройки HUD
beatrun.toolsmenu.hud.dynamic=Динамический HUD
beatrun.toolsmenu.hud.dynamicdesc=Прячет HUD во время движения
beatrun.toolsmenu.hud.sway=Покачивание HUD
beatrun.toolsmenu.hud.swaydesc=Покачивает HUD при разнообразных действиях
beatrun.toolsmenu.hud.reticle=Показать Точку
beatrun.toolsmenu.hud.reticledesc=Показывает точку по середине экрана
beatrun.toolsmenu.hud.nametags=Показать Ники
beatrun.toolsmenu.hud.nametagsdesc=Показывает ники над игроками
beatrun.toolsmenu.hud.hudxp=Показать XP в HUD
beatrun.toolsmenu.hud.hudxpdesc=Показывает весь XP в HUD
beatrun.toolsmenu.hud.wind=Эффект Ветра
beatrun.toolsmenu.hud.winddesc=Шум ветра во время бега
beatrun.toolsmenu.hud.fov=Угол Обзора
beatrun.toolsmenu.hud.fovdesc=Вам нужно сделать респавн после изменения FOV!
beatrun.toolsmenu.hud.hidden=Скрыть HUD
beatrun.toolsmenu.hud.hiddendesc=0 - Показать\n1 - Только режим\n2 - Скрыть полностью
beatrun.toolsmenu.hud.textcolor=Цвет Текста в HUD
beatrun.toolsmenu.hud.cornercolor=Цвет Края в HUD
beatrun.toolsmenu.hud.floatxpcolor=Цвет Всплывающего XP в HUD
# Tools Menu Viewbob Section
beatrun.toolsmenu.viewbob.name=Покачивание Камеры
beatrun.toolsmenu.viewbob.desc=Настройки покачивания камеры
beatrun.toolsmenu.viewbob.stabilization=Стабилизация Покачивания
beatrun.toolsmenu.viewbob.stabilizationdesc=Включите чтобы снизить покачивание камеры центрируя её
beatrun.toolsmenu.viewbob.intensity=Интенсивность Покачивания Камеры
# Tools Menu Gameplay Section
beatrun.toolsmenu.gameplay.name=Геймплей
beatrun.toolsmenu.gameplay.desc=Настройки геймплея
beatrun.toolsmenu.gameplay.quickturnground=Quickturn на Земле
beatrun.toolsmenu.gameplay.quickturngrounddesc=Переключает Quickturn будучи на земле (быстрый разворот)
beatrun.toolsmenu.gameplay.quickturnhandsonly=Quickturn Только с Руками
beatrun.toolsmenu.gameplay.quickturnhandsonlydesc=Переключает Quickturn только с "Runner Hands"
beatrun.toolsmenu.gameplay.puristmode=Режим Purist
beatrun.toolsmenu.gameplay.puristmodedesc=Режим Purist это клиентский параметр который сильно снижает движение игрока в стороны будучи в воздухе, прямо как в оригинальное ME.\n0 = Нет ограничений\n1 = Снижает движение игрока в воздухе в стороны
beatrun.toolsmenu.gameplay.disablegrapple=Отключить Крюк-Кошку
beatrun.toolsmenu.gameplay.disablegrappledesc=Отключает использование крюка-кошки
# Tools Menu Misc Section
beatrun.toolsmenu.misc.name=Другое
beatrun.toolsmenu.misc.desc=Другие настройки
beatrun.toolsmenu.misc.propspawn=Создание Пропов/Оружия
beatrun.toolsmenu.misc.propspawndesc=Позволяет создавать игрокам без админ прав оружие, пропы и энтити
beatrun.toolsmenu.misc.overdrivemp=Overdrive в Мультиплеере
beatrun.toolsmenu.misc.overdrivempdesc=Разрешает использование Overdrive в мультиплеере
# Tools Menu Moves Section
beatrun.toolsmenu.moves.name=Движения
beatrun.toolsmenu.moves.desc=Настройки движений
beatrun.toolsmenu.moves.help=Нырнуть Можно с Помощью Ctrl + ПКМ Будучи в Воздухе!\nOverdrive Переключается с Помощью E + ЛКМ.
beatrun.toolsmenu.moves.speedlimit=Ограничение Скорости
beatrun.toolsmenu.moves.speedlimitdesc=Изменяет ограничение скорости передвижения\nПо умолчанию: 325
beatrun.toolsmenu.moves.forcepuristmode=Принудительный Режим Purist
beatrun.toolsmenu.moves.forcepuristmodedesc=Включает режим Purist для всех игроков
beatrun.toolsmenu.moves.realisticwallrunning="Реалистичный" Без по Стенам
beatrun.toolsmenu.moves.realisticwallrunningdesc=Нет потери в скорости если отключить
beatrun.toolsmenu.moves.kickglitch=Kick Glitch
beatrun.toolsmenu.moves.kickglitchdesc=Переключает Kick Glitch\nНажмите ЛКМ во время бега по стене и зажатии/нажатии на прыжок сразу после
beatrun.toolsmenu.moves.kickglitchversion=Версия Kick Glitch
beatrun.toolsmenu.moves.kickglitchversiondesc=Вкл - Старая версия\nDisabled - Новая версия\nНовая версия использует механику из ME которая создаёт небольшую платформу под игроком
beatrun.toolsmenu.moves.quakejump=Quake Jump
beatrun.toolsmenu.moves.quakejumpdesc=Переключает Quake Jump\nНажмите ПКМ сразу после Side Step
beatrun.toolsmenu.moves.sidestep=Side Step
beatrun.toolsmenu.moves.sidestepdesc=Переключает Side Step\nA/D + ПКМ
beatrun.toolsmenu.moves.disarm=Разоружение
beatrun.toolsmenu.moves.disarmdesc=Переключает возможность разоружить (убить) NPC\nНажмите "%s" на NPC
beatrun.toolsmenu.moves.divesettings=Настройки ныряния
beatrun.toolsmenu.moves.totsugeki=Totsugeki
beatrun.toolsmenu.moves.totsugekidesc=Переключает Totsugeki\nНырнуть сразу после Quake Jump
beatrun.toolsmenu.moves.totsugekispam=Спам Totsugeki
beatrun.toolsmenu.moves.totsugekispamdesc=Переключает возможность спамить Totsugeki
beatrun.toolsmenu.moves.totsugekiheading=Угол Totsugeki
beatrun.toolsmenu.moves.totsugekiheadingdesc=Позволяет делать Totsugeki по оси X (вверх/вниз)
beatrun.toolsmenu.moves.totsugekidirection=Направление Totsugeki
beatrun.toolsmenu.moves.totsugekidirectiondesc=Позволяет делать Totsugeki в направлении глаз\nCombined with Spam and Heading Allows You to Fly =)
# Tools Menu Gamemodes Section
beatrun.toolsmenu.gamemodes.name=Режимы
beatrun.toolsmenu.gamemodes.desc=Настройка режимов
beatrun.toolsmenu.gamemodes.error=Другой режим уже запущен!
beatrun.toolsmenu.gamemodesc.infection=Переключить Infection
beatrun.toolsmenu.gamemodesc.datatheft=Переключить Data Theft
beatrun.toolsmenu.gamemodesc.deathmatch=Переключить Deathmatch
# Checkpoints
beatrun.checkpoints.countdown1=Раз
beatrun.checkpoints.countdown2=Два
beatrun.checkpoints.countdown3=ПОШЁЛ!
beatrun.checkpoints.speedometer= %s км/ч
# DataTheft
beatrun.datatheft.name=Data Theft (%s)
beatrun.datatheft.start=Data Theft! Убивайте игроков, собирайте кубики и вкладывайте в банк и зарабатывайте очки
# Deathmatch
beatrun.deathmatch.name=Deathmatch
beatrun.deathmatch.start=Deathmatch! Убивайте игроков чтобы зарабатывать очки
# Infection
beatrun.infection.name=Infection
beatrun.infection.start=Infection! Дотрагивайтесь до других игроков чтобы заразить их\n%s игроков будет выбрано через %sс
beatrun.infection.nosurvivors=Никто...
beatrun.infection.infected=был заражён!
beatrun.infection.infectedby=заразил
beatrun.infection.award=Вы получили 200 XP за выживание!
beatrun.infection.awardinfected=Вы получили 100 XP за спавн заражённым!
beatrun.infection.end=Игра окончена!\nВыжившие: %s\nПерезапуск через %sс

View file

@ -203,13 +203,13 @@ end
local function AEUIDraw() local function AEUIDraw()
if AEUI.NoDraw then return end if AEUI.NoDraw then return end
for k, v in ipairs(AEUI.Panels) do for _, v in ipairs(AEUI.Panels) do
surface.SetAlphaMultiplier(v.alpha or 1) surface.SetAlphaMultiplier(v.alpha or 1)
AEUI:DrawPanel(v) AEUI:DrawPanel(v)
surface.SetAlphaMultiplier(1) surface.SetAlphaMultiplier(1)
if v.elements then if v.elements then
for l, b in ipairs(v.elements) do for _, b in ipairs(v.elements) do
AEUI:DrawElement(v, b) AEUI:DrawElement(v, b)
end end
end end
@ -288,7 +288,7 @@ hook.Add("StartCommand", "AEUI_StartCommand", function(ply, cmd)
local click = input.WasMousePressed(MOUSE_LEFT) local click = input.WasMousePressed(MOUSE_LEFT)
if hoveredpanel then if hoveredpanel then
for k, v in ipairs(hoveredpanel.elements) do for _, v in ipairs(hoveredpanel.elements) do
if (v.onclick or v.hover) and (not v.greyed or not v.greyed()) and v.w and v.h then if (v.onclick or v.hover) and (not v.greyed or not v.greyed()) and v.w and v.h then
local x = SScaleX(hoveredpanel.x) + SScaleX(v.x) local x = SScaleX(hoveredpanel.x) + SScaleX(v.x)
local y = SScaleY(hoveredpanel.y) + SScaleY(v.y) + (hoveredpanel.scroll or 0) local y = SScaleY(hoveredpanel.y) + SScaleY(v.y) + (hoveredpanel.scroll or 0)

View file

@ -46,7 +46,7 @@ local incompatible = {
["2635378860"] = true, -- MW/WZ Skydive/Parachute + Infil ["2635378860"] = true, -- MW/WZ Skydive/Parachute + Infil
["2919957168"] = true, -- Modern Warfare II - Takedowns & Revive System ["2919957168"] = true, -- Modern Warfare II - Takedowns & Revive System
["2600234804"] = true, -- ASTW2 - Base Weapons ["2600234804"] = true, -- ASTW2 - Base Weapons
["2824714462"] = true, -- TFA Camera Shake ["2824714462"] = true, -- [TFA] Screen Shake
["3037375111"] = true -- Quick Slide With Legs ["3037375111"] = true -- Quick Slide With Legs
} }
@ -80,7 +80,7 @@ local warntext = {
y = warnpanel.h * 0.125, y = warnpanel.h * 0.125,
centered = true, centered = true,
color = color_white, color = color_white,
string = "NOTICE\nPlease disable the following addons before playing\nor submitting any issues to GitHub:" string = language.GetPhrase("beatrun.addonwarning.warntext")
} }
table.insert(warnpanel.elements, warntext) table.insert(warnpanel.elements, warntext)
@ -92,21 +92,18 @@ local quitbutton = {
y = warnpanel.h * 0.85, y = warnpanel.h * 0.85,
centered = true, centered = true,
color = color_white, color = color_white,
string = "Return to Main Menu", string = "#beatrun.addonwarning.quitbutton",
onclick = function(self) onclick = function(self)
surface.PlaySound("garrysmod/ui_click.wav") surface.PlaySound("garrysmod/ui_click.wav")
MsgC(Color(255, 100, 100), "Quitting Beatrun due to conflicting addons!")
timer.Simple(0.5, function() timer.Simple(0.2, function()
RunConsoleCommand("killserver") RunConsoleCommand("disconnect")
end) end)
self.onclick = nil
end end
} }
table.insert(warnpanel.elements, quitbutton) table.insert(warnpanel.elements, quitbutton)
AEUI:AddButton(warnpanel, "Play", warnclosebutton, "AEUIDefault", warnpanel.w * 0.5, warnpanel.h * 0.93, true) AEUI:AddButton(warnpanel, "#beatrun.addonwarning.play", warnclosebutton, "AEUIDefault", warnpanel.w * 0.5, warnpanel.h * 0.93, true)
local conflictlist = { local conflictlist = {
type = "Text", type = "Text",
@ -133,8 +130,6 @@ local function CheckAddons()
end end
end end
print(conflictlist.string)
return addons return addons
end end
@ -143,7 +138,7 @@ local function WarningIcon()
surface.SetFont("BeatrunHUD") surface.SetFont("BeatrunHUD")
surface.SetTextPos(2, 0) surface.SetTextPos(2, 0)
surface.SetTextColor(220, 20, 20, math.abs(math.sin(CurTime() * 2) * 255)) surface.SetTextColor(220, 20, 20, math.abs(math.sin(CurTime() * 2) * 255))
surface.DrawText("CONFLICTING ADDONS FOUND") surface.DrawText("#beatrun.addonwarning.conflictfound")
return return
else else

View file

@ -57,9 +57,10 @@ local function infostring()
y = math.Round(y) y = math.Round(y)
p = math.Round(p) p = math.Round(p)
local a = "Index: " .. BuildModeIndex .. "\nSelected: " .. table.Count(buildmode_selected) .. "\nAngle: " .. p .. ", " .. y .. ", " .. r local angle = p .. ", " .. y .. ", " .. r
local str = language.GetPhrase("beatrun.buildmodehud.info"):format(BuildModeIndex, table.Count(buildmode_selected), angle)
return a return str
end end
AEUI:AddText(bminfo, infostring, "AEUIDefault", bminfo.w / 2, bminfo.h / 2 - 20, true) AEUI:AddText(bminfo, infostring, "AEUIDefault", bminfo.w / 2, bminfo.h / 2 - 20, true)
@ -75,25 +76,27 @@ end
local function PanelElementsToggle(e) local function PanelElementsToggle(e)
local showingents = propspanel.elements == EntitiesElements local showingents = propspanel.elements == EntitiesElements
propspanel.elements = showingents and propspanel_elements or EntitiesElements propspanel.elements = showingents and propspanel_elements or EntitiesElements
e.string = showingents and "Menu / Props" or "Menu / Entities"
e.string = showingents and "#beatrun.buildmodehud.props" or "#beatrun.buildmodehud.entities"
propspanel.maxscroll = nil propspanel.maxscroll = nil
propspanel.scroll = nil propspanel.scroll = nil
end end
local b = AEUI:AddButton(bmbuttons, "Drag (G)", BuildModeHUDButton, "AEUIDefault", 2, 0, false) local b = AEUI:AddButton(bmbuttons, "#beatrun.buildmodehud.drag", BuildModeHUDButton, "AEUIDefault", 2, 0, false)
b.key = KEY_G b.key = KEY_G
b.greyed = GreyButtons b.greyed = GreyButtons
local b = AEUI:AddButton(bmbuttons, "Copy (SHIFT+D)", BuildModeHUDButton, "AEUIDefault", 2, 25, false) local b = AEUI:AddButton(bmbuttons, "#beatrun.buildmodehud.copy", BuildModeHUDButton, "AEUIDefault", 2, 25, false)
b.key = KEY_D b.key = KEY_D
b.greyed = GreyButtons b.greyed = GreyButtons
local b = AEUI:AddButton(bmbuttons, "Delete (DEL/BCKSPC)", BuildModeHUDButton, "AEUIDefault", 2, 50, false) local b = AEUI:AddButton(bmbuttons, "#beatrun.buildmodehud.delete", BuildModeHUDButton, "AEUIDefault", 2, 50, false)
b.key = KEY_DELETE b.key = KEY_DELETE
b.greyed = GreyButtons b.greyed = GreyButtons
local b = AEUI:AddButton(bmbuttons, "Highlight (T)", BuildModeHUDButton, "AEUIDefault", 2, 75, false) local b = AEUI:AddButton(bmbuttons, "#beatrun.buildmodehud.highlight", BuildModeHUDButton, "AEUIDefault", 2, 75, false)
b.key = KEY_T b.key = KEY_T
b.greyed = GreyButtons b.greyed = GreyButtons
AEUI:AddButton(elementstogglepanel, "Menu / Props", PanelElementsToggle, "AEUILarge", 192, 20, true) AEUI:AddButton(elementstogglepanel, "#beatrun.buildmodehud.props", PanelElementsToggle, "AEUILarge", 192, 20, true)
local dummy = ClientsideModel("models/hunter/blocks/cube025x025x025.mdl") local dummy = ClientsideModel("models/hunter/blocks/cube025x025x025.mdl")
@ -150,7 +153,6 @@ end
local function BMPropClick(e) local function BMPropClick(e)
BuildModeIndex = e.prop or 0 BuildModeIndex = e.prop or 0
print(e.prop)
LocalPlayer():EmitSound("buttonclick.wav") LocalPlayer():EmitSound("buttonclick.wav")
if BuildModeIndex == 0 then if BuildModeIndex == 0 then
@ -168,7 +170,7 @@ end
local img = AEUI:AddImage(propspanel, Material("vgui/empty.png"), BMPropClick, 0, 0, 64, 64) local img = AEUI:AddImage(propspanel, Material("vgui/empty.png"), BMPropClick, 0, 0, 64, 64)
img.prop = 0 img.prop = 0
img.hover = "Select" img.hover = "#beatrun.buildmodehud.select"
local row = 1 local row = 1
local col = 0 local col = 0
@ -194,7 +196,7 @@ end
local img = AEUI:AddImage(propspanel, Material("vgui/empty.png"), BMPropClick, 64 * row, 64 * col, 64, 64) local img = AEUI:AddImage(propspanel, Material("vgui/empty.png"), BMPropClick, 64 * row, 64 * col, 64, 64)
img.prop = 0 img.prop = 0
img.hover = "Select" img.hover = "#beatrun.buildmodehud.select"
local function BuildModeElements() local function BuildModeElements()
propspanel.elements = EntitiesElements propspanel.elements = EntitiesElements
@ -206,7 +208,7 @@ local function BuildModeElements()
local img = AEUI:AddImage(propspanel, Material("vgui/empty.png"), BMPropClick, 0, 0, 64, 64) local img = AEUI:AddImage(propspanel, Material("vgui/empty.png"), BMPropClick, 0, 0, 64, 64)
img.prop = 0 img.prop = 0
img.hover = "Select" img.hover = "#beatrun.buildmodehud.select"
local buildmode_enticons = { local buildmode_enticons = {
br_swingbar = Material("vgui/editor/swingbar.png"), br_swingbar = Material("vgui/editor/swingbar.png"),
@ -221,7 +223,7 @@ local function BuildModeElements()
} }
local buildmode_entnames = { local buildmode_entnames = {
br_zipline = "Zipline (SHIFT = 2-Way)" br_zipline = "#beatrun.buildmodehud.zipline"
} }
local obsolete = Material("editor/obsolete") local obsolete = Material("editor/obsolete")

View file

@ -1,8 +1,9 @@
local apikey = CreateClientConVar("Beatrun_Apikey", "0", true, false, "API key") local apikey = CreateClientConVar("Beatrun_Apikey", "0", true, false, language.GetPhrase("beatrun.convars.apikey"))
local domain = CreateClientConVar("Beatrun_Domain", "courses.beatrun.ru", true, false, "Online courses domain") local domain = CreateClientConVar("Beatrun_Domain", "courses.beatrun.ru", true, false, language.GetPhrase("beatrun.convars.domain"))
local QueuedArgs = NULL local QueuedArgs = NULL
local QueuedFunction = NULL local QueuedFunction = NULL
local currentMap = game.GetMap()
concommand.Add("Beatrun_Confirm", function() concommand.Add("Beatrun_Confirm", function()
if QueuedArgs and QueuedFunction then if QueuedArgs and QueuedFunction then
@ -29,22 +30,22 @@ local function GetCurrentMapWorkshopID()
_, addon_folders = file.Find("*", addon.title) _, addon_folders = file.Find("*", addon.title)
if file.Exists("maps/" .. game.GetMap() .. ".bsp", addon.title) then return addon.wsid end if file.Exists("maps/" .. currentMap .. ".bsp", addon.title) then return addon.wsid end
end end
return 0 return 0
end end
function UploadCourse() function UploadCourse()
if Course_Name == "" or Course_ID == "" then return print("Can't upload in Freeplay") end if Course_Name == "" or Course_ID == "" then return print(language.GetPhrase("beatrun.coursesdatabase.cantuploadfreeplay")) end
local url = domain:GetString() .. "/upload.php" local url = domain:GetString() .. "/upload.php"
local data = file.Open("beatrun/courses/" .. game.GetMap() .. "/" .. Course_ID .. ".txt", "rb", "DATA") local data = file.Open("beatrun/courses/" .. currentMap .. "/" .. Course_ID .. ".txt", "rb", "DATA")
local filedata = util.Decompress(data:Read(data:Size())) local filedata = util.Decompress(data:Read(data:Size()))
http.Post(url, { http.Post(url, {
key = apikey:GetString(), key = apikey:GetString(),
map = string.Replace(game.GetMap(), " ", "-"), map = string.Replace(currentMap, " ", "-"),
course_data = util.Base64Encode(filedata, true), course_data = util.Base64Encode(filedata, true),
mapid = GetCurrentMapWorkshopID() mapid = GetCurrentMapWorkshopID()
}, function(body, length, headers, code) -- onSuccess function }, function(body, length, headers, code) -- onSuccess function
@ -61,24 +62,23 @@ end
concommand.Add("Beatrun_UploadCourse", function() concommand.Add("Beatrun_UploadCourse", function()
QueuedFunction = UploadCourse QueuedFunction = UploadCourse
print("You're trying to upload a course with the name " .. Course_Name .. " and on map " .. game.GetMap() .. ".") print(language.GetPhrase("beatrun.coursesdatabase.upload1"):format(Course_Name, currentMap))
print("Write Beatrun_Confirm to continue, or Beatrun_Cancel to cancel.") print(language.GetPhrase("beatrun.coursesdatabase.upload2"))
end) end)
function GetCourse(sharecode) function GetCourse(sharecode)
local url = domain:GetString() .. "/getcourse.php" local url = domain:GetString() .. "/getcourse.php"
.. "?sharecode=" .. sharecode .. "?sharecode=" .. sharecode
.. "&map=" .. string.gsub(game.GetMap(), " ", "-") .. "&map=" .. string.Replace(currentMap, " ", "-")
.. "&key=" .. apikey:GetString() .. "&key=" .. apikey:GetString()
http.Fetch(url, function(body, length, headers, code) http.Fetch(url, function(body, length, headers, code)
if code == 200 then if code == 200 then
print("Success! | Response: " .. code .. " | Length: " .. length) print("Success! | Response: " .. code .. " | Length: " .. length .. "\nLoading course...")
print("Loading course...")
PrintTable(headers) PrintTable(headers)
local dir = "beatrun/courses/" .. game.GetMap() .. "/" local dir = "beatrun/courses/" .. currentMap .. "/"
file.CreateDir(dir) file.CreateDir(dir)
local coursedata = util.Compress(body) local coursedata = util.Compress(body)
@ -110,15 +110,15 @@ concommand.Add("Beatrun_LoadCode", function(ply, cmd, args, argstr)
end) end)
function UpdateCourse(course_code) function UpdateCourse(course_code)
if Course_Name == "" or Course_ID == "" then return print("Can't upload in Freeplay") end if Course_Name == "" or Course_ID == "" then return print(language.GetPhrase("beatrun.coursesdatabase.cantuploadfreeplay")) end
local url = domain:GetString() .. "/updatecourse.php" local url = domain:GetString() .. "/updatecourse.php"
local data = file.Open("beatrun/courses/" .. game.GetMap() .. "/" .. Course_ID .. ".txt", "rb", "DATA") local data = file.Open("beatrun/courses/" .. currentMap .. "/" .. Course_ID .. ".txt", "rb", "DATA")
local filedata = util.Decompress(data:Read(data:Size())) local filedata = util.Decompress(data:Read(data:Size()))
http.Post(url, { http.Post(url, {
key = apikey:GetString(), key = apikey:GetString(),
map = string.Replace(game.GetMap(), " ", "-"), map = string.Replace(currentMap, " ", "-"),
course_data = util.Base64Encode(filedata, true), course_data = util.Base64Encode(filedata, true),
code = course_code code = course_code
}, function(body, length, headers, code) -- onSuccess function }, function(body, length, headers, code) -- onSuccess function
@ -136,6 +136,6 @@ concommand.Add("Beatrun_UpdateCode", function(ply, cmd, args, argstr)
QueuedFunction = UpdateCourse QueuedFunction = UpdateCourse
QueuedArgs = args[1] QueuedArgs = args[1]
print("You're trying to update a course with this code: " .. args[1] .. ", with a course on map " .. game.GetMap() .. " and name " .. Course_Name .. ".") print(language.GetPhrase("beatrun.coursesdatabase.update1"):format(QueuedArgs, Course_Name, currentMap))
print("Write Beatrun_Confirm to continue, or Beatrun_Cancel to cancel.") print(language.GetPhrase("beatrun.coursesdatabase.upload2"))
end) end)

View file

@ -1,16 +1,17 @@
local showtotalXP = CreateClientConVar("Beatrun_HUDXP", "1", true, false, "Show total XP near nickname", 0, 1) local showtotalXP = CreateClientConVar("Beatrun_HUDXP", "1", true, false, language.GetPhrase("beatrun.convars.hudxp"), 0, 1)
local sway = CreateClientConVar("Beatrun_HUDSway", "1", true, false, "Display HUD swaying", 0, 1) local sway = CreateClientConVar("Beatrun_HUDSway", "1", true, false, language.GetPhrase("beatrun.convars.hudsway"), 0, 1)
local dynamic = CreateClientConVar("Beatrun_HUDDynamic", "0", true, false, "Hide HUD when moving", 0, 1) local dynamic = CreateClientConVar("Beatrun_HUDDynamic", "0", true, false, language.GetPhrase("beatrun.convars.huddynamic"), 0, 1)
local hidden = CreateClientConVar("Beatrun_HUDHidden", "0", true, false, "Hides most of the XP HUD", 0, 2) local hidden = CreateClientConVar("Beatrun_HUDHidden", "0", true, false, language.GetPhrase("beatrun.convars.hudhidden"), 0, 2)
local reticle = CreateClientConVar("Beatrun_HUDReticle", "1", true, false, "Display a reticle", 0, 1) local reticle = CreateClientConVar("Beatrun_HUDReticle", "1", true, false, language.GetPhrase("beatrun.convars.hudreticle"), 0, 1)
CreateClientConVar("Beatrun_HUDTextColor", "255 255 255 255", true, true, language.GetPhrase("beatrun.convars.hudtextcolor"))
CreateClientConVar("Beatrun_HUDCornerColor", "20 20 20 100", true, true, language.GetPhrase("beatrun.convars.hudcornercolor"))
CreateClientConVar("Beatrun_HUDFloatingXPColor", "255 255 255 255", true, true, language.GetPhrase("beatrun.convars.hudfloatxpcolor"))
local packetloss = Material("vgui/packetloss.png") local packetloss = Material("vgui/packetloss.png")
local lastloss = 0 local lastloss = 0
local MELogo = Material("vgui/MELogo.png", "mips smooth") local MELogo = Material("vgui/MELogo.png", "mips smooth")
CreateClientConVar("Beatrun_HUDTextColor", "255 255 255 255", true, true, "HUD Text Color\nDefault: 255 255 255 255")
CreateClientConVar("Beatrun_HUDCornerColor", "20 20 20 100", true, true, "HUD Left Corner Color\nDefault: 20 20 20 100")
CreateClientConVar("Beatrun_HUDFloatingXPColor", "255 255 255 255", true, true, "HUD Floating XP Color\nDefault: 255 255 255 255")
local hide = { local hide = {
CHudBattery = true, CHudBattery = true,
CHudHealth = true, CHudHealth = true,
@ -129,12 +130,12 @@ local function BeatrunHUD()
surface.SetFont("DebugFixedSmall") surface.SetFont("DebugFixedSmall")
-- local vtext = (ply:SteamID() or "?") .. " | " .. VERSIONGLOBAL local vtext = VERSIONGLOBAL
-- local tw, th = surface.GetTextSize(vtext) local tw, _ = surface.GetTextSize(vtext)
-- surface.SetTextColor(255, 255, 255, 15) surface.SetTextColor(255, 255, 255, 15)
-- surface.SetTextPos(scrw - tw, 0) surface.SetTextPos(scrw - tw, 0)
-- surface.DrawText(vtext) surface.DrawText(vtext)
-- surface.SetFont("BeatrunHUD") surface.SetFont("BeatrunHUD")
local pl = ply:GetNW2Int("PLoss") local pl = ply:GetNW2Int("PLoss")
local CT = CurTime() local CT = CurTime()
@ -170,7 +171,7 @@ local function BeatrunHUD()
local coursename = nil local coursename = nil
local customname = hook.Run("BeatrunHUDCourse") local customname = hook.Run("BeatrunHUDCourse")
coursename = customname and customname or Course_Name ~= "" and "Course: " .. Course_Name or "Freeplay" coursename = customname and customname or Course_Name ~= "" and language.GetPhrase("beatrun.hud.course"):format(Course_Name) or "#beatrun.hud.freeplay"
-- local lastxp = ply.LastXP or 0 -- local lastxp = ply.LastXP or 0
local nicktext = nil local nicktext = nil
@ -223,7 +224,7 @@ local function BeatrunHUD()
surface.SetFont("BeatrunHUD") surface.SetFont("BeatrunHUD")
surface.SetTextColor(text_color) surface.SetTextColor(text_color)
surface.SetTextPos(scrw * 0.015 + vp.z, scrh * 0.9 + vp.x) surface.SetTextPos(scrw * 0.015 + vp.z, scrh * 0.9 + vp.x)
surface.DrawText("Lv." .. ply:GetLevel()) surface.DrawText(language.GetPhrase("beatrun.hud.lvl"):format(ply:GetLevel()))
if tobool(LocalPlayer():GetInfo("Beatrun_PuristMode")) then if tobool(LocalPlayer():GetInfo("Beatrun_PuristMode")) then
surface.SetDrawColor(230, 230, 230) surface.SetDrawColor(230, 230, 230)
@ -396,7 +397,7 @@ function BeatrunLeaderboard(forced)
if isinfection and pbtimenum == 0 and v:GetNW2Bool("Infected") then if isinfection and pbtimenum == 0 and v:GetNW2Bool("Infected") then
surface.SetTextColor(infectorcolor) surface.SetTextColor(infectorcolor)
surface.DrawText(" | Infector") surface.DrawText(" | " .. language.GetPhrase("beatrun.hud.infector"))
else else
surface.DrawText(" | " .. pbtime) surface.DrawText(" | " .. pbtime)
end end

View file

@ -16,11 +16,9 @@ local animtable = {
fbanims = { fbanims = {
ladderexittoplefthand = true, ladderexittoplefthand = true,
runfwdstart = true, runfwdstart = true,
vaultkong = true,
walktostandleft = true, walktostandleft = true,
wallrunverticalstart = true, wallrunverticalstart = true,
meleeair = true, meleeair = true,
vaultonto = true,
fallinguncontrolled = true, fallinguncontrolled = true,
stand = true, stand = true,
meslideend = true, meslideend = true,
@ -36,7 +34,6 @@ fbanims = {
hangheaveup = true, hangheaveup = true,
jumpwrright = true, jumpwrright = true,
meleeairhit = true, meleeairhit = true,
vaultover = true,
jumpstill = true, jumpstill = true,
dodgejumpright = true, dodgejumpright = true,
jumpturnflyidle = true, jumpturnflyidle = true,
@ -75,10 +72,8 @@ fbanims = {
diveslideidle = true, diveslideidle = true,
wallrunright = true, wallrunright = true,
diveslideend = true, diveslideend = true,
vaultontohigh = true,
divestart = true, divestart = true,
hangfoldedheaveup = true, hangfoldedheaveup = true,
vaultoverhigh = true,
ziplinestart = true, ziplinestart = true,
dodgejumpleft = true, dodgejumpleft = true,
evaderoll = true, evaderoll = true,
@ -107,6 +102,11 @@ fbanims = {
ladderclimbuprighthandstill = true, ladderclimbuprighthandstill = true,
jumpidle = true, jumpidle = true,
jumpair = true, jumpair = true,
vaultkong = true,
vaultonto = true,
vaultover = true,
vaultontohigh = true,
vaultoverhigh = true,
walkbalancefalloffright = true, walkbalancefalloffright = true,
meleeairstill = true, meleeairstill = true,
swingjumpoff = true, swingjumpoff = true,
@ -154,7 +154,6 @@ local events = {
fall = true, fall = true,
ladderclimbleft = true, ladderclimbleft = true,
jumpwallrun = true, jumpwallrun = true,
vaultonto = true,
ziplinestart = true, ziplinestart = true,
hangstrafeleft = true, hangstrafeleft = true,
hangstraferight = true, hangstraferight = true,
@ -170,7 +169,6 @@ local events = {
jumpslide = true, jumpslide = true,
swingpipeleft = true, swingpipeleft = true,
ladderenterhang = true, ladderenterhang = true,
vault = true,
disarmsniper = true, disarmsniper = true,
jumpstill = true, jumpstill = true,
climb = true, climb = true,
@ -204,10 +202,13 @@ local events = {
ladderexittoprighthand = true, ladderexittoprighthand = true,
hangend = true, hangend = true,
springboard = true, springboard = true,
vault = true,
vaultkong = true, vaultkong = true,
vaultonto = true,
vaultover = true,
vaultontohigh = true,
ladderclimbright = true, ladderclimbright = true,
meleeairstill = true, meleeairstill = true
vaultontohigh = true
} }
local eventslut = { local eventslut = {
@ -329,9 +330,9 @@ local stillanims = {
local arminterrupts = { local arminterrupts = {
punchright = true, punchright = true,
doorbash = true,
punchmid = true,
punchleft = true, punchleft = true,
punchmid = true,
doorbash = true,
jumpturnflypiecesign = true, jumpturnflypiecesign = true,
standhandwallright = true, standhandwallright = true,
standhandwallleft = true, standhandwallleft = true,
@ -344,8 +345,6 @@ local transitionanims = {
ladderexittoplefthand = "runfwd", ladderexittoplefthand = "runfwd",
walktostandleft = "stand", walktostandleft = "stand",
fallinguncontrolled = "runfwd", fallinguncontrolled = "runfwd",
vaultoverhigh = "runfwd",
vaultonto = "runfwd",
hangstrafeleft = "hang", hangstrafeleft = "hang",
ladderclimbhangstart = "ladderclimbuprighthandstill", ladderclimbhangstart = "ladderclimbuprighthandstill",
hanghardstart2 = "hang", hanghardstart2 = "hang",
@ -361,7 +360,6 @@ local transitionanims = {
hangheaveup = "runfwd", hangheaveup = "runfwd",
dodgejumpleft = "stand", dodgejumpleft = "stand",
walkbalancefalloffleft = "jumpair", walkbalancefalloffleft = "jumpair",
vaultover = "jumpair",
meleeairhit = "jumpair", meleeairhit = "jumpair",
dodgejumpright = "stand", dodgejumpright = "stand",
meleeair = "jumpair", meleeair = "jumpair",
@ -379,7 +377,6 @@ local transitionanims = {
ladderclimbuplefthand = "ladderclimbuplefthandstill", ladderclimbuplefthand = "ladderclimbuplefthandstill",
jumpturnfly = "jumpturnflyidle", jumpturnfly = "jumpturnflyidle",
meleewrleft = "jumpair", meleewrleft = "jumpair",
vaultkong = "runfwd",
meleeslide = "meslideloop", meleeslide = "meslideloop",
stepuprightleg = "runfwd", stepuprightleg = "runfwd",
snatchsniper = "stand", snatchsniper = "stand",
@ -388,6 +385,10 @@ local transitionanims = {
wallrunverticalturn = "jumpslow", wallrunverticalturn = "jumpslow",
ladderclimbuprighthand = "ladderclimbuprighthandstill", ladderclimbuprighthand = "ladderclimbuprighthandstill",
meleeairstill = "jumpair", meleeairstill = "jumpair",
vaultoverhigh = "runfwd",
vaultonto = "runfwd",
vaultover = "jumpair",
vaultkong = "runfwd",
vaultontohigh = "runfwd", vaultontohigh = "runfwd",
snatchscar = "stand", snatchscar = "stand",
water_swimfwd = "runfwd", water_swimfwd = "runfwd",
@ -464,7 +465,9 @@ local worldarm = {
jumpturnlandidle = true, jumpturnlandidle = true,
standhandwallright = true, standhandwallright = true,
standhandwallleft = true, standhandwallleft = true,
standhandwallboth = true standhandwallboth = true,
swing = true,
swingstraight = true
} }
local ignorezarm = { local ignorezarm = {
@ -775,7 +778,14 @@ local transitionchecks = {
fbfunctions = { fbfunctions = {
vaultontohigh = function(ply) return true end, vaultontohigh = function(ply) return true end,
swing = function(ply)
CamIgnoreAng = false
BodyLimitY = 180
end,
swingstraight = function(ply) swingstraight = function(ply)
CamIgnoreAng = false
BodyLimitY = 180
BodyAnim:SetPoseParameter("swing", (ply:GetSBOffset() / 45 - 1) * 100) BodyAnim:SetPoseParameter("swing", (ply:GetSBOffset() / 45 - 1) * 100)
end, end,
ziplinestart = function(ply) ziplinestart = function(ply)

View file

@ -25,12 +25,12 @@ local function buildmodebutton()
LocalPlayer():ConCommand("buildmode") LocalPlayer():ConCommand("buildmode")
end end
AEUI:AddText(coursepanel, "Time Trials - " .. game.GetMap(), "AEUIVeryLarge", 20, 30) AEUI:AddText(coursepanel, language.GetPhrase("beatrun.coursemenu.trials"):format(game.GetMap()), "AEUIVeryLarge", 20, 30)
local buildmodebutton = AEUI:AddButton(coursepanel, "Build Mode Toggle", buildmodebutton, "AEUILarge", coursepanel.w - 400, coursepanel.h - 50) local buildmodebutton = AEUI:AddButton(coursepanel, "#beatrun.coursemenu.buildmode", buildmodebutton, "AEUILarge", coursepanel.w - 400, coursepanel.h - 50)
buildmodebutton.greyed = sacheck buildmodebutton.greyed = sacheck
local stopbutton = AEUI:AddButton(coursepanel, "Return to Freeplay", stopbutton, "AEUILarge", coursepanel.w - 750, coursepanel.h - 50) local stopbutton = AEUI:AddButton(coursepanel, "#beatrun.coursemenu.freeplay", stopbutton, "AEUILarge", coursepanel.w - 750, coursepanel.h - 50)
stopbutton.greyed = sacheck stopbutton.greyed = sacheck
local courselist = { local courselist = {

View file

@ -1,4 +1,4 @@
local NametagsEnable = CreateClientConVar("Beatrun_Nametags", "1", true, false, "Toggles nametags above players", 0, 1) local NametagsEnable = CreateClientConVar("Beatrun_Nametags", "1", true, false, language.GetPhrase("beatrun.convars.nametags"), 0, 1)
local enemy = Color(255, 0, 0) local enemy = Color(255, 0, 0)

View file

@ -5,33 +5,33 @@ local function ToggleGamemode(gm)
end end
hook.Add("AddToolMenuCategories", "Beatrun_Category", function() hook.Add("AddToolMenuCategories", "Beatrun_Category", function()
spawnmenu.AddToolCategory("Beatrun", "Client", "Client") spawnmenu.AddToolCategory("Beatrun", "Client", language.GetPhrase("beatrun.toolsmenu.client"))
spawnmenu.AddToolCategory("Beatrun", "Server", "Server") spawnmenu.AddToolCategory("Beatrun", "Server", language.GetPhrase("beatrun.toolsmenu.server"))
end) end)
hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function() hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_courses", "Courses", "", "", function(panel) spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_courses", language.GetPhrase("beatrun.toolsmenu.courses.name"), "", "", function(panel)
panel:ClearControls() panel:ClearControls()
panel:SetName("Courses Setttings") panel:SetName("#beatrun.toolsmenu.courses.desc")
panel:CheckBox("Fast Start", "Beatrun_FastStart") panel:CheckBox("#beatrun.toolsmenu.courses.faststart", "Beatrun_FastStart")
panel:ControlHelp("Faster countdown in courses") panel:ControlHelp("#beatrun.toolsmenu.courses.faststartdesc")
panel:CheckBox("Save at Checkpoint", "Beatrun_CPSave") panel:CheckBox("#beatrun.toolsmenu.courses.checkpointsave", "Beatrun_CPSave")
panel:ControlHelp("Respawn at last hit checkpoint in courses") panel:ControlHelp("#beatrun.toolsmenu.courses.checkpointsavedesc")
local divider = vgui.Create("DHorizontalDivider") local divider = vgui.Create("DHorizontalDivider")
panel:AddItem(divider) panel:AddItem(divider)
panel:TextEntry("Courses server", "Beatrun_Domain") panel:TextEntry("#beatrun.toolsmenu.courses.database", "Beatrun_Domain")
panel:ControlHelp("Database domain\nDefault: courses.beatrun.ru") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.courses.databasedesc"))
local apiKeyButton = vgui.Create("DButton", panel) local apiKeyButton = vgui.Create("DButton", panel)
apiKeyButton:SetText("Change API Key") apiKeyButton:SetText("#beatrun.toolsmenu.courses.changeapikey")
apiKeyButton:SetSize(0, 20) apiKeyButton:SetSize(0, 20)
apiKeyButton.DoClick = function() apiKeyButton.DoClick = function()
local frame = vgui.Create("DFrame") local frame = vgui.Create("DFrame")
frame:SetTitle("Enter your API Key") frame:SetTitle("#beatrun.toolsmenu.courses.enterapikey")
frame:SetSize(300, 100) frame:SetSize(300, 100)
frame:SetDeleteOnClose(true) frame:SetDeleteOnClose(true)
frame:Center() frame:Center()
@ -41,11 +41,13 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
TextEntry:Dock(TOP) TextEntry:Dock(TOP)
local okButton = vgui.Create("DButton", frame) local okButton = vgui.Create("DButton", frame)
okButton:SetText("OK") okButton:SetText("#beatrun.misc.ok")
okButton:SetPos(25, 60) okButton:SetPos(25, 60)
okButton:SetSize(250, 30) okButton:SetSize(250, 30)
okButton.DoClick = function() okButton.DoClick = function()
RunConsoleCommand("Beatrun_Apikey", TextEntry:GetValue()) local key = string.Replace(TextEntry:GetValue(), " ", "")
RunConsoleCommand("Beatrun_Apikey", key)
frame:Close() frame:Close()
end end
end end
@ -55,11 +57,11 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
panel:AddItem(divider) panel:AddItem(divider)
local saveCourseButton = vgui.Create("DButton", panel) local saveCourseButton = vgui.Create("DButton", panel)
saveCourseButton:SetText("Save current course to a file") saveCourseButton:SetText("#beatrun.toolsmenu.courses.savecourse")
saveCourseButton:SetSize(0, 20) saveCourseButton:SetSize(0, 20)
saveCourseButton.DoClick = function() saveCourseButton.DoClick = function()
local frame = vgui.Create("DFrame") local frame = vgui.Create("DFrame")
frame:SetTitle("Enter a name for your course") frame:SetTitle("#beatrun.toolsmenu.courses.namesavecourse")
frame:SetSize(300, 100) frame:SetSize(300, 100)
frame:SetDeleteOnClose(true) frame:SetDeleteOnClose(true)
frame:Center() frame:Center()
@ -69,22 +71,24 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
TextEntry:Dock(TOP) TextEntry:Dock(TOP)
local okButton = vgui.Create("DButton", frame) local okButton = vgui.Create("DButton", frame)
okButton:SetText("OK") okButton:SetText("#beatrun.misc.ok")
okButton:SetPos(25, 60) okButton:SetPos(25, 60)
okButton:SetSize(250, 30) okButton:SetSize(250, 30)
okButton.DoClick = function() okButton.DoClick = function()
RunConsoleCommand("Beatrun_SaveCourse", TextEntry:GetValue()) local name = string.Replace(TextEntry:GetValue(), " ", "_")
RunConsoleCommand("Beatrun_SaveCourse", name)
frame:Close() frame:Close()
end end
end end
panel:AddItem(saveCourseButton) panel:AddItem(saveCourseButton)
local loadCodeButton = vgui.Create("DButton", panel) local loadCourseButton = vgui.Create("DButton", panel)
loadCodeButton:SetText("Load a course from the database") loadCourseButton:SetText("#beatrun.toolsmenu.courses.loadcourse")
loadCodeButton:SetSize(0, 20) loadCourseButton:SetSize(0, 20)
loadCodeButton.DoClick = function() loadCourseButton.DoClick = function()
local frame = vgui.Create("DFrame") local frame = vgui.Create("DFrame")
frame:SetTitle("Enter course code") frame:SetTitle("#beatrun.toolsmenu.courses.enterloadcourse")
frame:SetSize(300, 100) frame:SetSize(300, 100)
frame:SetDeleteOnClose(true) frame:SetDeleteOnClose(true)
frame:Center() frame:Center()
@ -94,31 +98,33 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
TextEntry:Dock(TOP) TextEntry:Dock(TOP)
local okButton = vgui.Create("DButton", frame) local okButton = vgui.Create("DButton", frame)
okButton:SetText("OK") okButton:SetText("#beatrun.misc.ok")
okButton:SetPos(25, 60) okButton:SetPos(25, 60)
okButton:SetSize(250, 30) okButton:SetSize(250, 30)
okButton.DoClick = function() okButton.DoClick = function()
RunConsoleCommand("Beatrun_LoadCode", TextEntry:GetValue()) local code = string.Replace(TextEntry:GetValue(), " ", "")
RunConsoleCommand("Beatrun_LoadCode", code)
frame:Close() frame:Close()
end end
end end
panel:AddItem(loadCodeButton) panel:AddItem(loadCourseButton)
local uploadCourseButton = vgui.Create("DButton", panel) local uploadCourseButton = vgui.Create("DButton", panel)
uploadCourseButton:SetText("Upload current course to the database") uploadCourseButton:SetText("#beatrun.toolsmenu.courses.uploadcourse")
uploadCourseButton:SetSize(0, 20) uploadCourseButton:SetSize(0, 20)
uploadCourseButton.DoClick = function() uploadCourseButton.DoClick = function()
RunConsoleCommand("Beatrun_UploadCourse") RunConsoleCommand("Beatrun_UploadCourse")
notification.AddLegacy("Open your console for the code!", NOTIFY_HINT, 5) notification.AddLegacy("#beatrun.misc.checkconsole", NOTIFY_HINT, 5)
end end
panel:AddItem(uploadCourseButton) panel:AddItem(uploadCourseButton)
local updateCodeButton = vgui.Create("DButton", panel) local updateCourseButton = vgui.Create("DButton", panel)
updateCodeButton:SetText("Update a course on the database") updateCourseButton:SetText("#beatrun.toolsmenu.courses.updatecourse")
updateCodeButton:SetSize(0, 20) updateCourseButton:SetSize(0, 20)
updateCodeButton.DoClick = function() updateCourseButton.DoClick = function()
local frame = vgui.Create("DFrame") local frame = vgui.Create("DFrame")
frame:SetTitle("Enter course code") frame:SetTitle("#beatrun.toolsmenu.courses.enterloadcourse")
frame:SetSize(300, 100) frame:SetSize(300, 100)
frame:SetDeleteOnClose(true) frame:SetDeleteOnClose(true)
frame:Center() frame:Center()
@ -128,50 +134,51 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
TextEntry:Dock(TOP) TextEntry:Dock(TOP)
local okButton = vgui.Create("DButton", frame) local okButton = vgui.Create("DButton", frame)
okButton:SetText("OK") okButton:SetText("#beatrun.misc.ok")
okButton:SetPos(25, 60) okButton:SetPos(25, 60)
okButton:SetSize(250, 30) okButton:SetSize(250, 30)
okButton.DoClick = function() okButton.DoClick = function()
RunConsoleCommand("Beatrun_UpdateCode", TextEntry:GetValue()) RunConsoleCommand("Beatrun_UpdateCode", TextEntry:GetValue())
notification.AddLegacy("Open your console for server's response!", NOTIFY_HINT, 5) notification.AddLegacy("#beatrun.misc.checkconsole", NOTIFY_HINT, 5)
frame:Close() frame:Close()
end end
end end
panel:AddItem(updateCodeButton) panel:AddItem(updateCourseButton)
panel:Help("#beatrun.toolsmenu.courses.updatecoursehelp")
end) end)
spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_hud", "HUD", "", "", function(panel) spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_hud", "#beatrun.toolsmenu.hud.name", "", "", function(panel)
panel:ClearControls() panel:ClearControls()
panel:SetName("HUD Setttings") panel:SetName("#beatrun.toolsmenu.hud.desc")
panel:CheckBox("Dynamic HUD", "Beatrun_HUDDynamic") panel:CheckBox("#beatrun.toolsmenu.hud.dynamic", "Beatrun_HUDDynamic")
panel:ControlHelp("Hides HUD when moving") panel:ControlHelp("#beatrun.toolsmenu.hud.dynamicdesc")
panel:CheckBox("HUD Sway", "Beatrun_HUDSway") panel:CheckBox("#beatrun.toolsmenu.hud.sway", "Beatrun_HUDSway")
panel:ControlHelp("Toggles HUD swaying") panel:ControlHelp("#beatrun.toolsmenu.hud.swaydesc")
panel:CheckBox("Dot", "Beatrun_HUDReticle") panel:CheckBox("#beatrun.toolsmenu.hud.reticle", "Beatrun_HUDReticle")
panel:ControlHelp("Shows a dot in the center of the screen") panel:ControlHelp("#beatrun.toolsmenu.hud.reticledesc")
panel:CheckBox("Nametags", "Beatrun_Nametags") panel:CheckBox("#beatrun.toolsmenu.hud.nametags", "Beatrun_Nametags")
panel:ControlHelp("Toggles nametags above players") panel:ControlHelp("#beatrun.toolsmenu.hud.nametagsdesc")
panel:CheckBox("Floating XP", "Beatrun_HUDXP") panel:CheckBox("#beatrun.toolsmenu.hud.hudxp", "Beatrun_HUDXP")
panel:ControlHelp("Show total XP near your nickname") panel:ControlHelp("#beatrun.toolsmenu.hud.hudxpdesc")
panel:CheckBox("Wind", "Beatrun_Wind") panel:CheckBox("#beatrun.toolsmenu.hud.wind", "Beatrun_Wind")
panel:ControlHelp("Wind noises when running") panel:ControlHelp("#beatrun.toolsmenu.hud.winddesc")
panel:NumSlider("FOV", "Beatrun_FOV", 90, 120, 0) panel:NumSlider("#beatrun.toolsmenu.hud.fov", "Beatrun_FOV", 90, 120, 0)
panel:ControlHelp("You need to respawn after changing the FOV!") panel:Help("#beatrun.toolsmenu.hud.fovdesc")
panel:NumSlider("Hide HUD", "Beatrun_HUDHidden", 0, 2, 0) panel:NumSlider("#beatrun.toolsmenu.hud.hidden", "Beatrun_HUDHidden", 0, 2, 0)
panel:ControlHelp("0 - Shown\n1 - Gamemode only\n2 - Hidden") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.hud.hiddendesc"))
local divider = vgui.Create("DHorizontalDivider") local divider = vgui.Create("DHorizontalDivider")
panel:AddItem(divider) panel:AddItem(divider)
panel:Help("HUD Text Color") panel:Help("#beatrun.toolsmenu.hud.textcolor")
local HudTextColor = vgui.Create("DColorMixer", panel) local HudTextColor = vgui.Create("DColorMixer", panel)
HudTextColor:Dock(FILL) HudTextColor:Dock(FILL)
HudTextColor:SetPalette(true) HudTextColor:SetPalette(true)
@ -183,7 +190,7 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
end end
panel:AddItem(HudTextColor) panel:AddItem(HudTextColor)
panel:Help("HUD Corners Color") panel:Help("#beatrun.toolsmenu.hud.cornercolor")
local HudCornerColor = vgui.Create("DColorMixer", panel) local HudCornerColor = vgui.Create("DColorMixer", panel)
HudCornerColor:Dock(FILL) HudCornerColor:Dock(FILL)
HudCornerColor:SetPalette(true) HudCornerColor:SetPalette(true)
@ -195,7 +202,7 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
end end
panel:AddItem(HudCornerColor) panel:AddItem(HudCornerColor)
panel:Help("HUD Floating XP Color") panel:Help("#beatrun.toolsmenu.hud.floatxpcolor")
local HudFXPColor = vgui.Create("DColorMixer", panel) local HudFXPColor = vgui.Create("DColorMixer", panel)
HudFXPColor:Dock(FILL) HudFXPColor:Dock(FILL)
HudFXPColor:SetPalette(true) HudFXPColor:SetPalette(true)
@ -208,106 +215,109 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
panel:AddItem(HudFXPColor) panel:AddItem(HudFXPColor)
end) end)
spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_viewbob", "Viewbob", "", "", function(panel) spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_viewbob", "#beatrun.toolsmenu.viewbob.name", "", "", function(panel)
panel:ClearControls() panel:ClearControls()
panel:SetName("Viewbob Settings") panel:SetName("#beatrun.toolsmenu.viewbob.desc")
panel:CheckBox("Viewbob Stabilization", "Beatrun_ViewbobStabilized") panel:CheckBox("#beatrun.toolsmenu.viewbob.stabilization", "Beatrun_ViewbobStabilized")
panel:ControlHelp("Turn on to reduce motion sickness by making viewbobbing keep the player's look position centered") panel:ControlHelp("#beatrun.toolsmenu.viewbob.stabilizationdesc")
panel:NumSlider("Viewbob Intensity", "Beatrun_ViewbobIntensity", -100, 100, 0)
panel:NumSlider("#beatrun.toolsmenu.viewbob.intensity", "Beatrun_ViewbobIntensity", -100, 100, 0)
end) end)
spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_gameplay", "Gameplay", "", "", function(panel) spawnmenu.AddToolMenuOption("Beatrun", "Client", "beatrun_gameplay", "#beatrun.toolsmenu.gameplay.name", "", "", function(panel)
panel:ClearControls() panel:ClearControls()
panel:SetName("Gameplay Settings") panel:SetName("#beatrun.toolsmenu.gameplay.desc")
panel:CheckBox("Quickturn", "Beatrun_QuickturnGround") panel:CheckBox("#beatrun.toolsmenu.gameplay.quickturnground", "Beatrun_QuickturnGround")
panel:ControlHelp("Enables quickturning with secondary attack while on the ground") panel:ControlHelp("#beatrun.toolsmenu.gameplay.quickturngrounddesc")
panel:CheckBox("Quickturn Hands Only", "Beatrun_QuickturnHandsOnly") panel:CheckBox("#beatrun.toolsmenu.gameplay.quickturnhandsonly", "Beatrun_QuickturnHandsOnly")
panel:ControlHelp("Enables quickturning with \"Runner Hands\" only") panel:ControlHelp("#beatrun.toolsmenu.gameplay.quickturnhandsonlydesc")
panel:CheckBox("Purist Mode", "Beatrun_PuristMode") panel:CheckBox("#beatrun.toolsmenu.gameplay.puristmode", "Beatrun_PuristMode")
panel:ControlHelp("Purist mode is a clientside preference that severely weakens the ability to strafe while in the air, which is how Mirror's Edge games handle this.\nDisabled = No restrictions\nEnabled = Reduced move speed in the air") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.gameplay.puristmodedesc"))
panel:CheckBox("Disable Grapple Ability", "Beatrun_DisableGrapple") panel:CheckBox("#beatrun.toolsmenu.gameplay.disablegrapple", "Beatrun_DisableGrapple")
panel:ControlHelp("Disables grapple ability") panel:ControlHelp("#beatrun.toolsmenu.gameplay.disablegrappledesc")
end) end)
spawnmenu.AddToolMenuOption("Beatrun", "Server", "beatrun_main", "Main", "", "", function(panel) spawnmenu.AddToolMenuOption("Beatrun", "Server", "beatrun_misc", "#beatrun.toolsmenu.misc.name", "", "", function(panel)
panel:ClearControls() panel:ClearControls()
panel:SetName("Misc Settings") panel:SetName("#beatrun.toolsmenu.misc.desc")
panel:CheckBox("Prop Spawning", "Beatrun_AllowPropSpawn") panel:CheckBox("#beatrun.toolsmenu.misc.propspawn", "Beatrun_AllowPropSpawn")
panel:ControlHelp("Allows players without admin rights to spawn props, entities and weapons") panel:ControlHelp("#beatrun.toolsmenu.misc.propspawndesc")
panel:CheckBox("Overdrive in Multiplayer", "Beatrun_AllowOverdriveInMultiplayer") panel:CheckBox("#beatrun.toolsmenu.misc.overdrivemp", "Beatrun_AllowOverdriveInMultiplayer")
panel:ControlHelp("Allows Overdrive usage on the server\nDoesn't affect singleplayer") panel:ControlHelp("#beatrun.toolsmenu.misc.overdrivempdesc")
end) end)
spawnmenu.AddToolMenuOption("Beatrun", "Server", "beatrun_moves", "Moves", "", "", function(panel) spawnmenu.AddToolMenuOption("Beatrun", "Server", "beatrun_moves", "#beatrun.toolsmenu.moves.name", "", "", function(panel)
panel:ClearControls() panel:ClearControls()
panel:SetName("Moves Settings") panel:SetName("#beatrun.toolsmenu.moves.desc")
panel:Help("You Can Dive with Ctrl + RMB While Midair!\nOverdrive Toggles with E + LMB.") panel:Help(language.GetPhrase("beatrun.toolsmenu.moves.help"))
panel:NumSlider("Speed Limit", "Beatrun_SpeedLimit", 325, 1000, 0) panel:NumSlider("#beatrun.toolsmenu.moves.speedlimit", "Beatrun_SpeedLimit", 325, 1000, 0)
panel:ControlHelp("Changes player's speed limit (325 is default)") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.speedlimitdesc"))
panel:CheckBox("Force Purist Mode", "Beatrun_PuristModeForce") panel:CheckBox("#beatrun.toolsmenu.moves.forcepuristmode", "Beatrun_PuristModeForce")
panel:ControlHelp("Forces Purist Mode for all players") panel:ControlHelp("#beatrun.toolsmenu.moves.forcepuristmodedesc")
panel:CheckBox("\"Realistic\" wallrunning", "Beatrun_PuristWallrun") panel:CheckBox("#beatrun.toolsmenu.moves.realisticwallrunning", "Beatrun_PuristWallrun")
panel:ControlHelp("You don't lose speed when starting wallrunning when disabled") panel:ControlHelp("#beatrun.toolsmenu.moves.realisticwallrunningdesc")
local divider = vgui.Create("DHorizontalDivider") local divider = vgui.Create("DHorizontalDivider")
panel:AddItem(divider) panel:AddItem(divider)
panel:CheckBox("Kick-Glitch", "Beatrun_KickGlitch") panel:CheckBox("#beatrun.toolsmenu.moves.kickglitch", "Beatrun_KickGlitch")
panel:ControlHelp("Toggles Kick-Glitch Move\nLMB when Wallrunning and Then Jumping Right After") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.kickglitchdesc"))
panel:CheckBox("Kick-Glitch Version", "Beatrun_OldKickGlitch") panel:CheckBox("#beatrun.toolsmenu.moves.kickglitchversion", "Beatrun_OldKickGlitch")
panel:ControlHelp("Enabled - Old Kick-Glitch\nDisabled - New Kick-Glitch\nNew version uses mechanic from Mirror's Edge that spawns a small platform under a player") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.kickglitchversiondesc"))
panel:CheckBox("Quake Jump", "Beatrun_QuakeJump") panel:CheckBox("#beatrun.toolsmenu.moves.quakejump", "Beatrun_QuakeJump")
panel:ControlHelp("Toggles Quake Jump Move\nPress RMB Right After Side Step") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.quakejumpdesc"))
panel:CheckBox("Side Step", "Beatrun_SideStep") panel:CheckBox("#beatrun.toolsmenu.moves.sidestep", "Beatrun_SideStep")
panel:ControlHelp("Toggles Side Step Move\nA/D + RMB") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.sidestepdesc"))
panel:CheckBox("Disarm", "Beatrun_Disarm") panel:CheckBox("#beatrun.toolsmenu.moves.disarm", "Beatrun_Disarm")
panel:ControlHelp("Toggles Ability to Disarm NPC\nInteract with NPC") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.disarmdesc"):format(IN_USE))
local divider = vgui.Create("DHorizontalDivider") local divider = vgui.Create("DHorizontalDivider")
panel:AddItem(divider) panel:AddItem(divider)
panel:Help("Dive Settings") panel:Help("#beatrun.toolsmenu.moves.divesettings")
panel:CheckBox("Totsugeki", "Beatrun_Totsugeki") panel:CheckBox("#beatrun.toolsmenu.moves.totsugeki", "Beatrun_Totsugeki")
panel:ControlHelp("Toggles Totsugeki Move\nDive After Quake Jump") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.totsugekidesc"))
panel:CheckBox("Totsugeki Spam", "Beatrun_TotsugekiSpam") panel:CheckBox("#beatrun.toolsmenu.moves.totsugekispam", "Beatrun_TotsugekiSpam")
panel:ControlHelp("Toggles Ability to Spam Totsugeki") panel:ControlHelp("#beatrun.toolsmenu.moves.totsugekispamdesc")
panel:CheckBox("Totsugeki Heading", "Beatrun_TotsugekiHeading") panel:CheckBox("#beatrun.toolsmenu.moves.totsugekiheading", "Beatrun_TotsugekiHeading")
panel:ControlHelp("Allows to Totsugeki on X axis (up/down)") panel:ControlHelp("#beatrun.toolsmenu.moves.totsugekiheadingdesc")
panel:CheckBox("Totsugeki Direction", "Beatrun_TotsugekiDir") panel:CheckBox("#beatrun.toolsmenu.moves.totsugekidirection", "Beatrun_TotsugekiDir")
panel:ControlHelp("Allows to Totsugeki into Another Direction\nCombined with Spam and Heading Allows You to Fly =)") panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.totsugekidirectiondesc"))
end) end)
spawnmenu.AddToolMenuOption("Beatrun", "Server", "beatrun_gamemodes", "Gamemodes", "", "", function(panel) spawnmenu.AddToolMenuOption("Beatrun", "Server", "beatrun_gamemodes", "#beatrun.toolsmenu.gamemodes.name", "", "", function(panel)
panel:ClearControls() panel:ClearControls()
panel:SetName("Gamemodes Settings") panel:SetName("#beatrun.toolsmenu.gamemodes.desc")
local InfectionButton = vgui.Create("DButton", panel) local InfectionButton = vgui.Create("DButton", panel)
InfectionButton:SetText("Toggle Infection Gamemode") InfectionButton:SetText("#beatrun.toolsmenu.gamemodesc.infection")
InfectionButton:SetSize(0, 20) InfectionButton:SetSize(0, 20)
InfectionButton.DoClick = function() InfectionButton.DoClick = function()
if GetGlobalBool("GM_DEATHMATCH") or GetGlobalBool("GM_DATATHEFT") then if GetGlobalBool("GM_DEATHMATCH") or GetGlobalBool("GM_DATATHEFT") then
InfectionButton:SetText("Another gamemode is running!") InfectionButton:SetText("#beatrun.toolsmenu.gamemodes.error")
timer.Simple(2, function() timer.Simple(2, function()
InfectionButton:SetText("Toggle Infection Gamemode") InfectionButton:SetText("#beatrun.toolsmenu.gamemodesc.infection")
end) end)
return return
end end
@ -316,14 +326,16 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
panel:AddItem(InfectionButton) panel:AddItem(InfectionButton)
local DatatheftButton = vgui.Create("DButton", panel) local DatatheftButton = vgui.Create("DButton", panel)
DatatheftButton:SetText("Toggle Data Theft Gamemode") DatatheftButton:SetText("#beatrun.toolsmenu.gamemodesc.datatheft")
DatatheftButton:SetSize(0, 20) DatatheftButton:SetSize(0, 20)
DatatheftButton.DoClick = function() DatatheftButton.DoClick = function()
if GetGlobalBool("GM_INFECTION") or GetGlobalBool("GM_DEATHMATCH") then if GetGlobalBool("GM_INFECTION") or GetGlobalBool("GM_DEATHMATCH") then
DatatheftButton:SetText("Another gamemode is running!") DatatheftButton:SetText("#beatrun.toolsmenu.gamemodes.error")
timer.Simple(2, function() timer.Simple(2, function()
DatatheftButton:SetText("Toggle Data Theft Gamemode") DatatheftButton:SetText("#beatrun.toolsmenu.gamemodesc.datatheft")
end) end)
return return
end end
@ -332,14 +344,16 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
panel:AddItem(DatatheftButton) panel:AddItem(DatatheftButton)
local DeathmatchButton = vgui.Create("DButton", panel) local DeathmatchButton = vgui.Create("DButton", panel)
DeathmatchButton:SetText("Toggle Deathmatch Gamemode") DeathmatchButton:SetText("#beatrun.toolsmenu.gamemodesc.deathmatch")
DeathmatchButton:SetSize(0, 20) DeathmatchButton:SetSize(0, 20)
DeathmatchButton.DoClick = function() DeathmatchButton.DoClick = function()
if GetGlobalBool("GM_INFECTION") or GetGlobalBool("GM_DATATHEFT") then if GetGlobalBool("GM_INFECTION") or GetGlobalBool("GM_DATATHEFT") then
DeathmatchButton:SetText("Another gamemode is running!") DeathmatchButton:SetText("#beatrun.toolsmenu.gamemodes.error")
timer.Simple(2, function() timer.Simple(2, function()
DeathmatchButton:SetText("Toggle Deathmatch Gamemode") DeathmatchButton:SetText("#beatrun.toolsmenu.gamemodesc.deathmatch")
end) end)
return return
end end

View file

@ -2,8 +2,8 @@ local meta = FindMetaTable("Player")
local metavec = FindMetaTable("Vector") local metavec = FindMetaTable("Vector")
local PUNCH_DAMPING = 9 local PUNCH_DAMPING = 9
local PUNCH_SPRING_CONSTANT = 120 local PUNCH_SPRING_CONSTANT = 120
local viewbob_intensity = CreateClientConVar("Beatrun_ViewbobIntensity", "20", true, true, "Viewbob Intensity", -100, 100) local viewbob_intensity = CreateClientConVar("Beatrun_ViewbobIntensity", "20", true, true, language.GetPhrase("beatrun.convars.viewbob"), -100, 100)
local viewbob_stabilized = CreateClientConVar("Beatrun_ViewbobStabilized", "0", true, true, "Turn on to reduce motion sickness by making viewbobbing keep the player's look position centered", 0, 1) local viewbob_stabilized = CreateClientConVar("Beatrun_ViewbobStabilized", "0", true, true, language.GetPhrase("beatrun.convars.viewbobstabilization"), 0, 1)
local function lensqr(ang) local function lensqr(ang)
return ang[1] ^ 2 + ang[2] ^ 2 + ang[3] ^ 2 return ang[1] ^ 2 + ang[2] ^ 2 + ang[3] ^ 2

View file

@ -1,5 +1,5 @@
if SERVER then if SERVER then
local allowPropSpawn = CreateConVar("Beatrun_AllowPropSpawn", "0", {FCVAR_ARCHIVE}, "Allow players to spawn props and entities") local allowPropSpawn = CreateConVar("Beatrun_AllowPropSpawn", "0", {FCVAR_ARCHIVE})
util.AddNetworkString("SPParkourEvent") util.AddNetworkString("SPParkourEvent")
@ -21,8 +21,8 @@ if SERVER then
end end
if CLIENT then if CLIENT then
CreateClientConVar("Beatrun_FOV", 100, true, true, "'Woah how are you moving this fast' and other hilarious jokes", 70, 120) CreateClientConVar("Beatrun_FOV", 100, true, true, language.GetPhrase("beatrun.convars.fov"), 70, 120)
CreateClientConVar("Beatrun_CPSave", 1, true, true, "Respawning during a course will go back to the last hit checkpoint", 0, 1) CreateClientConVar("Beatrun_CPSave", 1, true, true, language.GetPhrase("beatrun.convars.cpsave"), 0, 1)
end end
hook.Add("PlayerNoClip", "BlockNoClip", function(ply, enabled) hook.Add("PlayerNoClip", "BlockNoClip", function(ply, enabled)
@ -30,9 +30,9 @@ hook.Add("PlayerNoClip", "BlockNoClip", function(ply, enabled)
ply:SetNW2Int("CPNum", -1) ply:SetNW2Int("CPNum", -1)
if CLIENT and IsFirstTimePredicted() then if CLIENT and IsFirstTimePredicted() then
notification.AddLegacy("Noclip Detected! Respawn to restart the course", NOTIFY_ERROR, 4) notification.AddLegacy(language.GetPhrase("beatrun.misc.noclipdetected"), NOTIFY_ERROR, 4)
elseif SERVER and game.SinglePlayer() then elseif SERVER and game.SinglePlayer() then
ply:SendLua("notification.AddLegacy(\"Noclip Detected! Respawn to restart the course\", NOTIFY_ERROR, 4)") ply:SendLua("notification.AddLegacy(\"#beatrun.misc.noclipdetected\", NOTIFY_ERROR, 4)")
end end
end end
@ -111,12 +111,6 @@ hook.Add("CanDrive", "BlockDrive", function(ply)
if not ply:IsAdmin() then return false end if not ply:IsAdmin() then return false end
end) end)
hook.Add("SetupMove", "idkhowitworksbutitworks_DiveAnimsFix", function(ply, mv)
local weapon = ply:GetActiveWeapon()
if not IsValid(weapon) then return end
end)
if CLIENT and game.SinglePlayer() then if CLIENT and game.SinglePlayer() then
net.Receive("SPParkourEvent", function() net.Receive("SPParkourEvent", function()
local event = net.ReadString() local event = net.ReadString()

View file

@ -328,9 +328,6 @@ if SERVER then
util.AddNetworkString("BuildMode_Sync") util.AddNetworkString("BuildMode_Sync")
util.AddNetworkString("Course_Stop") util.AddNetworkString("Course_Stop")
buildmodelogs = {}
local buildmodelogs = buildmodelogs
function Course_Sync() function Course_Sync()
net.Start("BuildMode_Sync") net.Start("BuildMode_Sync")
net.WriteFloat(Course_StartPos.x) net.WriteFloat(Course_StartPos.x)
@ -428,10 +425,6 @@ if SERVER then
end end
table.insert(buildmode_placed, a) table.insert(buildmode_placed, a)
local bmlog = tostring(ply) .. " placed " .. tostring(a)
table.insert(buildmodelogs, bmlog)
end) end)
net.Receive("BuildMode_Duplicate", function(len, ply) net.Receive("BuildMode_Duplicate", function(len, ply)
@ -440,7 +433,7 @@ if SERVER then
local selected = net.ReadTable() local selected = net.ReadTable()
local selectedents = net.ReadTable() local selectedents = net.ReadTable()
for k, v in pairs(selected) do for _, v in pairs(selected) do
local a = ents.Create("prop_physics") local a = ents.Create("prop_physics")
a:SetModel(v:GetModel()) a:SetModel(v:GetModel())
@ -461,17 +454,13 @@ if SERVER then
a:SetHealth(inf) a:SetHealth(inf)
end end
for k, v in pairs(selectedents) do for _, v in pairs(selectedents) do
local a = ents.Create(v:GetClass()) local a = ents.Create(v:GetClass())
a:SetPos(v:GetPos()) a:SetPos(v:GetPos())
a:SetAngles(v:GetAngles()) a:SetAngles(v:GetAngles())
a:Spawn() a:Spawn()
end end
local bmlog = tostring(ply) .. " duped " .. tostring(table.Count(selected)) .. " props"
table.insert(buildmodelogs, bmlog)
end) end)
net.Receive("BuildMode_Delete", function(len, ply) net.Receive("BuildMode_Delete", function(len, ply)
@ -479,15 +468,11 @@ if SERVER then
local selected = net.ReadTable() local selected = net.ReadTable()
for k, v in pairs(selected) do for _, v in pairs(selected) do
if IsValid(v) then if IsValid(v) then
v:Remove() v:Remove()
end end
end end
local bmlog = tostring(ply) .. " deleted " .. tostring(table.Count(selected)) .. " entities"
table.insert(buildmodelogs, bmlog)
end) end)
net.Receive("BuildMode_Highlight", function(len, ply) net.Receive("BuildMode_Highlight", function(len, ply)
@ -495,7 +480,7 @@ if SERVER then
local selected = net.ReadTable() local selected = net.ReadTable()
for k, v in pairs(selected) do for _, v in pairs(selected) do
v.hr = not v.hr v.hr = not v.hr
CustomPropMat(v) CustomPropMat(v)
@ -516,7 +501,7 @@ if SERVER then
local a = util.Decompress(net.ReadData(len)) local a = util.Decompress(net.ReadData(len))
local props = util.JSONToTable(a) local props = util.JSONToTable(a)
for k, v in pairs(props) do for _, v in pairs(props) do
local a = ents.Create("prop_physics") local a = ents.Create("prop_physics")
a:SetModel(buildmode_props[v.model]) a:SetModel(buildmode_props[v.model])
@ -616,7 +601,7 @@ if SERVER then
local name = data[5] local name = data[5]
local entities = data[6] local entities = data[6]
for k, v in pairs(props) do for _, v in pairs(props) do
local a = ents.Create("prop_physics") local a = ents.Create("prop_physics")
a.hr = v.hr a.hr = v.hr
a:SetModel(buildmode_props[v.model]) a:SetModel(buildmode_props[v.model])
@ -634,7 +619,7 @@ if SERVER then
a:SetHealth(inf) a:SetHealth(inf)
end end
for k, v in ipairs(cp) do for _, v in ipairs(cp) do
LoadCheckpoints() LoadCheckpoints()
local a = ents.Create("tt_cp") local a = ents.Create("tt_cp")
@ -646,7 +631,7 @@ if SERVER then
end end
if entities then if entities then
for k, v in ipairs(entities) do for _, v in ipairs(entities) do
local a = ents.Create(v.ent) local a = ents.Create(v.ent)
local dontsetpos = nil local dontsetpos = nil
@ -671,7 +656,7 @@ if SERVER then
Course_Sync() Course_Sync()
for k, v in pairs(player.GetAll()) do for _, v in pairs(player.GetAll()) do
v:SetNW2Float("PBTime", 0) v:SetNW2Float("PBTime", 0)
v:SetNW2Int("CPNum", 1) v:SetNW2Int("CPNum", 1)
v:SetMoveType(MOVETYPE_WALK) v:SetMoveType(MOVETYPE_WALK)
@ -903,7 +888,7 @@ if CLIENT then
function CourseData(name) function CourseData(name)
local save = {{}, {}, Course_StartPos, Course_StartAng, name or "Unnamed", {}} local save = {{}, {}, Course_StartPos, Course_StartAng, name or "Unnamed", {}}
for k, v in pairs(buildmode_placed) do for _, v in pairs(buildmode_placed) do
if not IsValid(v) then -- Nothing if not IsValid(v) then -- Nothing
elseif v:GetNW2Bool("BRProtected") then elseif v:GetNW2Bool("BRProtected") then
print("ignoring protected ent") print("ignoring protected ent")
@ -935,7 +920,7 @@ if CLIENT then
end end
end end
for k, v in ipairs(Checkpoints) do for _, v in ipairs(Checkpoints) do
table.insert(save[2], v:GetPos()) table.insert(save[2], v:GetPos())
end end
@ -963,7 +948,6 @@ if CLIENT then
concommand.Add("Beatrun_SaveCourse", function(ply, cmd, args, argstr) concommand.Add("Beatrun_SaveCourse", function(ply, cmd, args, argstr)
local name = args[1] or "Unnamed" local name = args[1] or "Unnamed"
-- local compress = not args[2]
SaveCourse(name, args[2]) SaveCourse(name, args[2])
end) end)
@ -1458,7 +1442,7 @@ if CLIENT then
cam.Start3D() cam.Start3D()
for k, v in ipairs(buildmode_placed) do for _, v in ipairs(buildmode_placed) do
if IsValid(v) and not v:GetNW2Bool("BRProtected") then if IsValid(v) and not v:GetNW2Bool("BRProtected") then
local pos = v:GetRenderOrigin() or v:GetPos() local pos = v:GetRenderOrigin() or v:GetPos()
local w2s = pos:ToScreen() local w2s = pos:ToScreen()
@ -1551,7 +1535,7 @@ if CLIENT then
surface.SetFont("DebugFixed") surface.SetFont("DebugFixed")
surface.SetTextColor(255, 255, 255) surface.SetTextColor(255, 255, 255)
for k, v in pairs(Checkpoints) do for _, v in pairs(Checkpoints) do
if not IsValid(v) then if not IsValid(v) then
LoadCheckpoints() LoadCheckpoints()

View file

@ -44,28 +44,28 @@ function LoadCheckpoints()
table.Empty(Checkpoints) table.Empty(Checkpoints)
if SERVER then if SERVER then
for k, v in pairs(player.GetAll()) do for _, v in pairs(player.GetAll()) do
v:SetNW2Int("CPNum", 1) v:SetNW2Int("CPNum", 1)
end end
end end
if CLIENT then if CLIENT then
timer.Simple(1, function() timer.Simple(1, function()
for k, v in pairs(ents.FindByClass("tt_cp")) do for _, v in pairs(ents.FindByClass("tt_cp")) do
if IsValid(v) and v.GetCPNum then if IsValid(v) and v.GetCPNum then
Checkpoints[v:GetCPNum()] = v Checkpoints[v:GetCPNum()] = v
end end
end end
end) end)
else else
for k, v in pairs(ents.FindByClass("tt_cp")) do for _, v in pairs(ents.FindByClass("tt_cp")) do
Checkpoints[v:GetCPNum()] = v Checkpoints[v:GetCPNum()] = v
end end
end end
end end
if CLIENT then if CLIENT then
CreateClientConVar("Beatrun_FastStart", "0", true, true, "Faster start countdown", 0, 1) CreateClientConVar("Beatrun_FastStart", "0", true, true, language.GetPhrase("beatrun.convars.faststart"), 0, 1)
net.Receive("Checkpoint_Hit", function() net.Receive("Checkpoint_Hit", function()
local timetaken = CurTime() - lastcptime local timetaken = CurTime() - lastcptime
@ -181,7 +181,11 @@ end
local countdown = 0 local countdown = 0
local countdownalpha = 255 local countdownalpha = 255
local countdowntext = {"Ready", "Set", "Go!!"} local countdowntext = {
"#beatrun.checkpoints.countdown1",
"#beatrun.checkpoints.countdown2",
"#beatrun.checkpoints.countdown3"
}
local function StartCountdown() local function StartCountdown()
local CT = CurTime() local CT = CurTime()
@ -243,7 +247,8 @@ function CourseHUD()
speed = "0" .. speed speed = "0" .. speed
end end
text = speed .. " km/h" text = language.GetPhrase("beatrun.checkpoints.speedometer"):format(speed)
local w, _ = surface.GetTextSize(text) local w, _ = surface.GetTextSize(text)
w = w or 0 w = w or 0

View file

@ -4,7 +4,7 @@ local problematichooks = {
local function RemoveConflicting() local function RemoveConflicting()
for k, v in pairs(problematichooks) do for k, v in pairs(problematichooks) do
for l, b in ipairs(v) do for _, b in ipairs(v) do
hook.Remove(k, b) hook.Remove(k, b)
end end
end end

View file

@ -86,7 +86,7 @@ if CLIENT then
if GetGlobalBool("GM_DATATHEFT") then if GetGlobalBool("GM_DATATHEFT") then
local datacubes = LocalPlayer():GetNW2Int("DataCubes", 0) local datacubes = LocalPlayer():GetNW2Int("DataCubes", 0)
return "Data Theft (" .. datacubes .. ")" return language.GetPhrase("beatrun.datatheft.name"):format(datacubes)
else else
hook.Remove("BeatrunHUDCourse", "DataTheftHUDName") hook.Remove("BeatrunHUDCourse", "DataTheftHUDName")
end end
@ -98,6 +98,6 @@ if CLIENT then
net.Receive("DataTheft_Start", function() net.Receive("DataTheft_Start", function()
hook.Add("BeatrunHUDCourse", "DataTheftHUDName", DataTheftHUDName) hook.Add("BeatrunHUDCourse", "DataTheftHUDName", DataTheftHUDName)
chat.AddText(Color(200, 200, 200), "Data Theft! Kill players to collect data, deposit data in banks") chat.AddText(Color(200, 200, 200), "#beatrun.datatheft.start")
end) end)
end end

View file

@ -15,7 +15,8 @@ if SERVER then
else else
for _, b in ipairs(DATATHEFT_LOADOUTS[math.random(#DATATHEFT_LOADOUTS)]) do for _, b in ipairs(DATATHEFT_LOADOUTS[math.random(#DATATHEFT_LOADOUTS)]) do
local wep = v:Give(b) local wep = v:Give(b)
v:GiveAmmo(1000, wep:GetPrimaryAmmoType())
v:GiveAmmo(9999, wep:GetPrimaryAmmoType() or "Pistol", true)
end end
end end
end end
@ -64,7 +65,7 @@ end
if CLIENT then if CLIENT then
local function DeathmatchHUDName() local function DeathmatchHUDName()
if GetGlobalBool("GM_DEATHMATCH") then if GetGlobalBool("GM_DEATHMATCH") then
return "Deathmatch" return "#beatrun.deathmatch.name"
else else
hook.Remove("BeatrunHUDCourse", "DeathmatchHUDName") hook.Remove("BeatrunHUDCourse", "DeathmatchHUDName")
end end
@ -76,6 +77,6 @@ if CLIENT then
net.Receive("Deathmatch_Start", function() net.Receive("Deathmatch_Start", function()
hook.Add("BeatrunHUDCourse", "DeathmatchHUDName", DeathmatchHUDName) hook.Add("BeatrunHUDCourse", "DeathmatchHUDName", DeathmatchHUDName)
chat.AddText(Color(200, 200, 200), "Deathmatch! Kill players to get points!") chat.AddText(Color(200, 200, 200), "#beatrun.deathmatch.start")
end) end)
end end

View file

@ -1,7 +1,7 @@
local totsugeki = CreateConVar("Beatrun_Totsugeki", 1, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "Oh no...", 0, 1) local totsugeki = CreateConVar("Beatrun_Totsugeki", 1, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "", 0, 1)
local totsugekispam = CreateConVar("Beatrun_TotsugekiSpam", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "OH NO...", 0, 1) local totsugekispam = CreateConVar("Beatrun_TotsugekiSpam", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "", 0, 1)
local totsugekiheading = CreateConVar("Beatrun_TotsugekiHeading", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "Can we dive on the x axis?", 0, 1) local totsugekiheading = CreateConVar("Beatrun_TotsugekiHeading", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "", 0, 1)
local totsugekidir = CreateConVar("Beatrun_TotsugekiDir", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "Can we dive into another dir?", 0, 1) local totsugekidir = CreateConVar("Beatrun_TotsugekiDir", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "", 0, 1)
local function Dive(ply, mv, cmd) local function Dive(ply, mv, cmd)
if (not ply:GetDive() or ply:GetDive() and ply.QuakeJumping and totsugeki:GetBool() and totsugekispam:GetBool()) and ply:GetCrouchJump() and mv:KeyPressed(IN_ATTACK2) then if (not ply:GetDive() or ply:GetDive() and ply.QuakeJumping and totsugeki:GetBool() and totsugekispam:GetBool()) and ply:GetCrouchJump() and mv:KeyPressed(IN_ATTACK2) then

View file

@ -1,6 +1,6 @@
local disable_grapple = CreateClientConVar("Beatrun_DisableGrapple", 0, true, true, "Disables grapple ability", 0, 1)
if CLIENT then if CLIENT then
local disable_grapple = CreateClientConVar("Beatrun_DisableGrapple", 0, true, true, language.GetPhrase("beatrun.convars.disablegrapple"), 0, 1)
local circle = Material("circlesmooth.png", "nocull smooth") local circle = Material("circlesmooth.png", "nocull smooth")
hook.Add("HUDPaint", "grappleicon", function() hook.Add("HUDPaint", "grappleicon", function()

View file

@ -17,7 +17,7 @@ end
local function HumanCount() local function HumanCount()
local count = 0 local count = 0
for k, v in ipairs(player.GetAll()) do for _, v in ipairs(player.GetAll()) do
if IsValid(v) and not v:GetNW2Bool("Infected") then if IsValid(v) and not v:GetNW2Bool("Infected") then
count = count + 1 count = count + 1
end end
@ -376,7 +376,7 @@ if CLIENT then
hook.Add("BeatrunHUDCourse", "InfectionHUDName", InfectionHUDName) hook.Add("BeatrunHUDCourse", "InfectionHUDName", InfectionHUDName)
hook.Add("CalcView", "InfectionCalcView", InfectionCalcView) hook.Add("CalcView", "InfectionCalcView", InfectionCalcView)
chat.AddText(chatcolor, "Infection! Touch other players to infect them\n", math.max(math.floor(player.GetCount() / 4), 1) .. " player(s) will become infected in 10s") chat.AddText(chatcolor, language.GetPhrase("beatrun.infection.start"):format(math.max(math.floor(player.GetCount() / 4), 1), _time))
end) end)
local music = nil local music = nil
@ -399,12 +399,12 @@ if CLIENT then
survivors = survivors:sub(1, -3) survivors = survivors:sub(1, -3)
if survivors == "" then if survivors == "" then
survivors = "None..." survivors = "#beatrun.infection.nosurvivors"
LocalPlayer():EmitSound("death.wav") LocalPlayer():EmitSound("death.wav")
end end
chat.AddText(chatcolor, "The game has ended!\nSurvivors: " .. survivors .. "\nRestarting in 15s") chat.AddText(chatcolor, language.GetPhrase("beatrun.infection.end"):format(survivors, _time))
end) end)
if music and music.Stop then if music and music.Stop then
@ -432,9 +432,9 @@ if CLIENT then
if IsValid(attacker) and IsValid(victim) then if IsValid(attacker) and IsValid(victim) then
if attacker == victim then if attacker == victim then
chat.AddText(attacker, red, " died!") chat.AddText(attacker, red, " #beatrun.infection.infected")
else else
chat.AddText(attacker, red, " has infected ", yellow, victim, "!") chat.AddText(attacker, red, " #beatrun.infection.infectedby ", yellow, victim, "!")
end end
attacker.InfectionTouchDelay = CurTime() + 3 attacker.InfectionTouchDelay = CurTime() + 3
@ -497,10 +497,10 @@ if CLIENT then
if humanwin then if humanwin then
LocalPlayer():AddXP(200) LocalPlayer():AddXP(200)
chat.AddText(chatcolor, "You were awarded 200 XP for surviving") chat.AddText(chatcolor, "#beatrun.infection.award")
else else
LocalPlayer():AddXP(100) LocalPlayer():AddXP(100)
chat.AddText(chatcolor, "You were awarded 100 XP for spawning as an infected") chat.AddText(chatcolor, "#beatrun.infection.awardinfected")
end end
end) end)

View file

@ -1,8 +1,8 @@
if CLIENT then if CLIENT then
CreateClientConVar("Beatrun_PuristMode", "1", true, true, "Purist mode is a clientside preference that severely weakens the ability to strafe while in the air, which is how Mirror's Edge games handle this.\n0 = No restrictions\n1 = Reduced move speed in the air") CreateClientConVar("Beatrun_PuristMode", "1", true, true, language.GetPhrase("beatrun.convars.puristmode"))
end end
local PuristModeForce = CreateConVar("Beatrun_PuristModeForce", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "Force players to adhere to purist rules", 0, 1) local PuristModeForce = CreateConVar("Beatrun_PuristModeForce", 0, {FCVAR_REPLICATED, FCVAR_ARCHIVE}, "", 0, 1)
local function PuristMove(ply, mv, cmd) local function PuristMove(ply, mv, cmd)
if not ply:OnGround() and not ply:GetGrappling() then if not ply:OnGround() and not ply:GetGrappling() then

View file

@ -1,6 +1,6 @@
if CLIENT then if CLIENT then
QuickturnGround = CreateClientConVar("Beatrun_QuickturnGround", "0", true, true, "Enables quickturning with secondary attack while on the ground", 0, 1) QuickturnGround = CreateClientConVar("Beatrun_QuickturnGround", "0", true, true, language.GetPhrase("beatrun.convars.quickturnground"), 0, 1)
QuickturnHandsOnly = CreateClientConVar("Beatrun_QuickturnHandsOnly", "1", true, true, "Enables quickturning with \"Runner Hands\" only", 0, 1) QuickturnHandsOnly = CreateClientConVar("Beatrun_QuickturnHandsOnly", "1", true, true, language.GetPhrase("beatrun.convars.quickturnhandsonly"), 0, 1)
end end
function DoJumpTurn(lookbehind) function DoJumpTurn(lookbehind)

View file

@ -26,6 +26,7 @@ local function SwingbarCheck(ply, mv, cmd)
if math.abs(dot) < 0.7 then return end if math.abs(dot) < 0.7 then return end
if CLIENT then if CLIENT then
swingbar:SetPredictable(true) swingbar:SetPredictable(true)
end end
@ -162,7 +163,7 @@ local function SwingbarThink(ply, mv, cmd)
ply:EmitSound("Cloth.VaultSwish") ply:EmitSound("Cloth.VaultSwish")
end end
ply:SetMEMoveLimit(350) ply:SetMEMoveLimit(GetConVar("Beatrun_SpeedLimit"):GetInt())
ply:SetMESprintDelay(-1) ply:SetMESprintDelay(-1)
if CLIENT then if CLIENT then

View file

@ -45,7 +45,7 @@ net.Receive("SlowSounds", function()
end end
end) end)
concommand.Add("ToggleTimeSlow", function(ply) concommand.Add("Beatrun_ToggleTimeSlow", function(ply)
slow = not slow slow = not slow
net.Start("SlowSounds") net.Start("SlowSounds")

View file

@ -45,7 +45,7 @@ function meta:SetMantleEndPos(value)
return self:SetDTVector(14, value) return self:SetDTVector(14, value)
end end
local function PlayVaultAnim(ply, legs, ang) local function PlayVaultAnim(ply, ang)
local activewep = ply:GetActiveWeapon() local activewep = ply:GetActiveWeapon()
if ply:UsingRH() and activewep:GetSequence() == 17 then if ply:UsingRH() and activewep:GetSequence() == 17 then
@ -140,7 +140,7 @@ local function Vault1(ply, mv, ang, t, h)
ply:SetMantle(1) ply:SetMantle(1)
ply:SetWallrunTime(0) ply:SetWallrunTime(0)
PlayVaultAnim(ply) PlayVaultAnim(ply, ang)
ply:ViewPunch(vpunch1) ply:ViewPunch(vpunch1)
ply.MantleInitVel = mv:GetVelocity() ply.MantleInitVel = mv:GetVelocity()
@ -238,7 +238,7 @@ local function Vault2(ply, mv, ang, t, h)
ply:SetMantleData(mv:GetOrigin(), vaultpos, 0, 2) ply:SetMantleData(mv:GetOrigin(), vaultpos, 0, 2)
ply:SetWallrunTime(0) ply:SetWallrunTime(0)
PlayVaultAnim(ply, 1) PlayVaultAnim(ply, ang)
ply:ViewPunch(vpunch2) ply:ViewPunch(vpunch2)
ply.MantleInitVel = mv:GetVelocity() ply.MantleInitVel = mv:GetVelocity()
@ -338,7 +338,7 @@ local function Vault3(ply, mv, ang, t, h)
ply:SetMantleData(mv:GetOrigin(), vaultpos, 0, 3) ply:SetMantleData(mv:GetOrigin(), vaultpos, 0, 3)
ply:SetWallrunTime(0) ply:SetWallrunTime(0)
PlayVaultAnim(ply, 2) PlayVaultAnim(ply, ang)
ply:ViewPunch(vpunch3) ply:ViewPunch(vpunch3)
ply.MantleInitVel = mv:GetVelocity() ply.MantleInitVel = mv:GetVelocity()
@ -389,6 +389,7 @@ function Vault4(ply, mv, ang, t, h)
local tsafetyout = util.TraceLine(tsafety) local tsafetyout = util.TraceLine(tsafety)
if tsafetyout.Hit then return false end if tsafetyout.Hit then return false end
tsafety.start = mv:GetOrigin() + chestvec tsafety.start = mv:GetOrigin() + chestvec
tsafety.endpos = tsafety.start + ang:Forward() * 150 tsafety.endpos = tsafety.start + ang:Forward() * 150
@ -414,7 +415,7 @@ function Vault4(ply, mv, ang, t, h)
ply:SetMantleData(startpos, vaultpos, 0, 4) ply:SetMantleData(startpos, vaultpos, 0, 4)
ply:SetWallrunTime(0) ply:SetWallrunTime(0)
PlayVaultAnim(ply, 1) PlayVaultAnim(ply, ang)
ply:ViewPunch(Angle(2.5, 0, 0)) ply:ViewPunch(Angle(2.5, 0, 0))
ply.MantleInitVel = mv:GetVelocity() ply.MantleInitVel = mv:GetVelocity()
@ -471,6 +472,7 @@ function Vault5(ply, mv, ang, t, h)
t = util.TraceLine(t) t = util.TraceLine(t)
if not t.Hit then return false end if not t.Hit then return false end
if t.Entity and t.Entity.NoPlayerCollisions then return false end if t.Entity and t.Entity.NoPlayerCollisions then return false end
local vaultend = t.HitPos + mantlevec local vaultend = t.HitPos + mantlevec
@ -514,7 +516,7 @@ function Vault5(ply, mv, ang, t, h)
ply:SetMantle(5) ply:SetMantle(5)
ply:SetWallrunTime(0) ply:SetWallrunTime(0)
PlayVaultAnim(ply, false, ang) PlayVaultAnim(ply, ang)
ply:ViewPunch(vpunch1) ply:ViewPunch(vpunch1)
ply.MantleInitVel = mv:GetVelocity() ply.MantleInitVel = mv:GetVelocity()

View file

@ -1,5 +1,5 @@
util.AddNetworkString("DisarmStart") util.AddNetworkString("DisarmStart")
local cvardisarm = CreateConVar("Beatrun_Disarm", 1, FCVAR_ARCHIVE, "Whether 'using' NPCs triggers a disarm", 0, 1) local cvardisarm = CreateConVar("Beatrun_Disarm", 1, FCVAR_ARCHIVE, "", 0, 1)
local function Disarm_Init(ply, victim) local function Disarm_Init(ply, victim)
victim:NextThink(CurTime() + 100) victim:NextThink(CurTime() + 100)

View file

@ -1,7 +1,7 @@
if game.SinglePlayer() then return end if game.SinglePlayer() then return end
local maxmsgcount = 100 local maxmsgcount = 100
local netIncoming_old = net.Receive -- local netIncoming_old = net.Incoming
local netIncoming_detour = function(length, ply) local netIncoming_detour = function(length, ply)
local tickcount = engine.TickCount() local tickcount = engine.TickCount()

View file

@ -4,7 +4,7 @@ hook.Add("EntityTakeDamage", "MEHitSounds", function(ply, dmginfo)
if not ply:IsPlayer() then return end if not ply:IsPlayer() then return end
if dmginfo:IsBulletDamage() then if dmginfo:IsBulletDamage() then
--[[Block damage if they're going very fast]] -- Block damage if they're going very fast
if ply:GetVelocity():Length() > 400 then return true end if ply:GetVelocity():Length() > 400 then return true end
ply:EmitSound("mirrorsedge/Flesh_0" .. tostring(math.random(1, 9)) .. ".wav") ply:EmitSound("mirrorsedge/Flesh_0" .. tostring(math.random(1, 9)) .. ".wav")