v1.2.2.b2
## GENERAL - Updated CSS to version 1.0.369. - Upgraded the project from .NET 8.0 to .NET 10.0. - Updated Turkish language translation by @ByDexterTR. - Added Russian language translation by @213sdfsdgf. - Fixed an issue with incorrect display of Arabic nicknames. - Used ForceFullUpdate to resolve the "FATAL ERROR: CopyExistingEntity" crash. - Disabled stale HandleCommandDrop hook to avoid crashes when a player joins a team (thanks to @vladimir214sd). - Added new signatures to gamedata. - Added the ability to configure the number of grenades for every skill that uses grenades as part of its ability (e.g., Miner, AntyFlash, MagneticDecoy, etc.). ## SKILL IMPROVEMENTS - Re-Zombie: -- Fixed weapon switching issues when a player is holding a Zeus and a knife. -- Weapons are now removed for bots in zombie mode. - Ghost: -- Blocked the ability to use the Zeus. - Thorns: -- Added a configurable maximum health limit (37 HP) for the damage that can be reflected. - Second Life / Phoenix / Re-Zombie: -- Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly. - Ghost / Chicken: -- Blocked the ability to use the SG556 (`weapon_sg556`). - Wallhack: -- Fixed a bug that caused temporary enemy highlighting right after death. - Cypher: -- Added camera position persistence. - God Mode: -- Fixed an issue with permanent immortality triggering after reaching exactly 0 HP. - Weapons Swap: -- The ammo count is now also transferred when weapons are swapped. - Muhammed: -- Renamed the skill to "DeathBomb". - Spectator: -- Fixed a bug where a player with the Chicken skill would still display as a ragdoll after death when spectated. - Friendly Fire: -- The skill now works even when the server's mp_friendlyfire setting is set to 0. - Baseball: -- Disabled teammate killing.
This commit is contained in:
parent
cba834e8f0
commit
91761f7376
84 changed files with 6894 additions and 1689 deletions
39
.github/workflows/update_thanks.yml
vendored
Normal file
39
.github/workflows/update_thanks.yml
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
name: Update Contributors & Thanks
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [closed]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update:
|
||||||
|
if: github.event.pull_request.merged == true
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.12"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install requests python-dotenv
|
||||||
|
|
||||||
|
- name: Run update script
|
||||||
|
env:
|
||||||
|
DISCORD_USER_IDS: ${{ vars.DISCORD_USER_IDS }}
|
||||||
|
EXTRA_USERS_GITHUB: ${{ vars.EXTRA_USERS_GITHUB }}
|
||||||
|
run: python .github/update_thanks.py
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
run: |
|
||||||
|
git config user.name "github-actions[bot]"
|
||||||
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git add README.md README-PL.md .github/avatars/
|
||||||
|
git diff --cached --quiet || git commit -m "chore: update contributors and thanks"
|
||||||
|
git push
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -37,4 +37,5 @@ project.fragment.lock.json
|
||||||
|
|
||||||
# Other common ignores
|
# Other common ignores
|
||||||
node_modules/
|
node_modules/
|
||||||
dist/
|
dist/
|
||||||
|
.env
|
||||||
|
|
|
||||||
|
|
@ -162,32 +162,67 @@ public class WasdMenuPlayer
|
||||||
color = parts[0].StartsWith("#") && parts[0].Length == 7 ? parts[0] : string.Empty;
|
color = parts[0].StartsWith("#") && parts[0].Length == 7 ? parts[0] : string.Empty;
|
||||||
text = parts.Length > 1 ? parts[1] : "";
|
text = parts.Length > 1 ? parts[1] : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string cleanText = text.Replace("\u200B", "")
|
||||||
|
.Replace("\u200C", "")
|
||||||
|
.Replace("\u202A", "")
|
||||||
|
.Replace("\u202C", "");
|
||||||
|
|
||||||
|
int sepIndex = cleanText.IndexOf(" : ");
|
||||||
|
string namePart = sepIndex != -1 ? cleanText.Substring(0, sepIndex) : cleanText;
|
||||||
|
string statsPart = sepIndex != -1 ? cleanText.Substring(sepIndex) : "";
|
||||||
|
|
||||||
|
int start = 0;
|
||||||
|
int length = cleanText.Length;
|
||||||
|
|
||||||
if (option == CurrentChoice)
|
if (option == CurrentChoice)
|
||||||
{
|
{
|
||||||
if (text.Length > maxLength)
|
if (cleanText.Length > maxLength)
|
||||||
{
|
{
|
||||||
int remaining = text.Length - scrollIndex;
|
int remaining = cleanText.Length - scrollIndex;
|
||||||
if (remaining <= maxLength)
|
if (remaining <= maxLength)
|
||||||
{
|
{
|
||||||
text = SafeSubstring(text, scrollIndex, remaining);
|
start = scrollIndex;
|
||||||
if (Server.TickCount % 32 == 0)
|
length = remaining;
|
||||||
scrollIndex = 0;
|
if (Server.TickCount % 32 == 0) scrollIndex = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
text = SafeSubstring(text, scrollIndex, maxLength);
|
start = scrollIndex;
|
||||||
if (Server.TickCount % 32 == 0)
|
length = maxLength;
|
||||||
scrollIndex += scrollJump;
|
if (Server.TickCount % 32 == 0) scrollIndex += scrollJump;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
text = SafeSubstring(text, 0, maxLength);
|
{
|
||||||
|
start = 0;
|
||||||
builder.AppendLine(string.Format(itemHoverText, text));
|
length = Math.Min(cleanText.Length, maxLength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
builder.AppendLine(string.Format(itemText, $"<font {(string.IsNullOrEmpty(color) ? "" : $"color='{color}'")}'>{SafeSubstring(text, 0, maxLength)}</font>"));
|
{
|
||||||
|
start = 0;
|
||||||
|
length = Math.Min(cleanText.Length, maxLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
int nameLength = namePart.Length;
|
||||||
|
|
||||||
|
int nameSliceStart = Math.Max(start, 0);
|
||||||
|
int nameSliceEnd = Math.Min(start + length, nameLength);
|
||||||
|
int nameSliceLength = Math.Max(0, nameSliceEnd - nameSliceStart);
|
||||||
|
string visibleName = nameSliceLength > 0 ? cleanText.Substring(nameSliceStart, nameSliceLength) : "";
|
||||||
|
|
||||||
|
int statsSliceStart = Math.Max(start, nameLength);
|
||||||
|
int statsSliceEnd = Math.Min(start + length, cleanText.Length);
|
||||||
|
int statsSliceLength = Math.Max(0, statsSliceEnd - statsSliceStart);
|
||||||
|
|
||||||
|
string visibleStats = statsSliceLength > 0 ? cleanText.Substring(statsSliceStart, statsSliceLength) : "";
|
||||||
|
string finalOptionText = (visibleName.Length > 0 ? $"\u202A{visibleName}\u202C" : "") + visibleStats;
|
||||||
|
|
||||||
|
if (option == CurrentChoice)
|
||||||
|
builder.AppendLine(string.Format(itemHoverText, finalOptionText));
|
||||||
|
else
|
||||||
|
builder.AppendLine(string.Format(itemText, $"<font {(string.IsNullOrEmpty(color) ? "" : $"color='{color}'")}'>{finalOptionText}</font>"));
|
||||||
|
|
||||||
option = option.Next;
|
option = option.Next;
|
||||||
shown++;
|
shown++;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
||||||
BIN
github/avatars/discord_20f902436962.png
Normal file
BIN
github/avatars/discord_20f902436962.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
BIN
github/avatars/discord_7ee4547c02f2.png
Normal file
BIN
github/avatars/discord_7ee4547c02f2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
BIN
github/avatars/discord_a3b321b84dc6.png
Normal file
BIN
github/avatars/discord_a3b321b84dc6.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
BIN
github/avatars/discord_f7017ab921b5.png
Normal file
BIN
github/avatars/discord_f7017ab921b5.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
1311
github/readme-pl.md
Normal file
1311
github/readme-pl.md
Normal file
File diff suppressed because it is too large
Load diff
1321
github/readme.md
Normal file
1321
github/readme.md
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,57 +1,220 @@
|
||||||
import requests
|
|
||||||
import os
|
import os
|
||||||
|
import hashlib
|
||||||
|
import requests
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Konfiguracja
|
load_dotenv()
|
||||||
USER_IDS = ["284780352042434570"]
|
|
||||||
MARKER = "[THANKS]"
|
|
||||||
|
|
||||||
def get_html_for_user(user_id):
|
def _env_list(key):
|
||||||
|
value = os.getenv(key, "")
|
||||||
|
return [item.strip() for item in value.split(",") if item.strip()]
|
||||||
|
|
||||||
|
REPOSITORY = "Juzlus/jRandomSkills"
|
||||||
|
DISCORD_USER_IDS = _env_list("DISCORD_USER_IDS")
|
||||||
|
EXTRA_USERS_GITHUB = _env_list("EXTRA_USERS_GITHUB")
|
||||||
|
|
||||||
|
CONTRIBUTORS_URL = "https://github.com/Juzlus/jRandomSkills/graphs/contributors"
|
||||||
|
AVATARS_DIR = "./avatars"
|
||||||
|
AVATARS_RAW_URL = "https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars"
|
||||||
|
|
||||||
|
MARKER_GITHUB = "[CONTRIBUTORS]"
|
||||||
|
MARKER_DISCORD = "[THANKS]"
|
||||||
|
|
||||||
|
|
||||||
|
def build_table(cells, max_per_row=6):
|
||||||
|
rows = []
|
||||||
|
for i in range(0, len(cells), max_per_row):
|
||||||
|
row_cells = "".join(cells[i:i + max_per_row])
|
||||||
|
rows.append(f" <tr>{row_cells}</tr>")
|
||||||
|
return "<table>\n" + "\n".join(rows) + "\n</table>"
|
||||||
|
|
||||||
|
|
||||||
|
def make_cell(avatar_url, name, profile_url=None):
|
||||||
|
if profile_url:
|
||||||
|
return (
|
||||||
|
f'<td align="center">'
|
||||||
|
f'<a href="{profile_url}">'
|
||||||
|
f'<img src="{avatar_url}" width="75" height="75" style="border-radius:50%" alt="{name}"/>'
|
||||||
|
f'<br/><sub><b>{name}</b></sub>'
|
||||||
|
f'</a>'
|
||||||
|
f'</td>'
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
f'<td align="center">'
|
||||||
|
f'<img src="{avatar_url}" width="75" height="75" style="border-radius:50%" alt="{name}"/>'
|
||||||
|
f'<br/><sub><b>{name}</b></sub>'
|
||||||
|
f'</td>'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def save_avatar(source_url, filename):
|
||||||
|
os.makedirs(AVATARS_DIR, exist_ok=True)
|
||||||
|
filepath = os.path.join(AVATARS_DIR, filename)
|
||||||
|
response = requests.get(source_url, timeout=10)
|
||||||
|
if response.status_code != 200:
|
||||||
|
print(f"Failed to download avatar: {source_url}")
|
||||||
|
return None
|
||||||
|
with open(filepath, "wb") as f:
|
||||||
|
f.write(response.content)
|
||||||
|
return f"{AVATARS_RAW_URL}/{filename}"
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_github_user(login):
|
||||||
|
response = requests.get(f"https://api.github.com/users/{login}", timeout=10)
|
||||||
|
if response.status_code != 200:
|
||||||
|
print(f"GitHub API Error for user '{login}': Status {response.status_code}")
|
||||||
|
return None
|
||||||
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
|
def get_github_contributors(repo, extra_logins):
|
||||||
try:
|
try:
|
||||||
url = f"https://pfpfinder.com/api/discord/user/{user_id}"
|
url = f"https://api.github.com/repos/{repo}/contributors"
|
||||||
response = requests.get(url, timeout=10)
|
response = requests.get(url, timeout=10)
|
||||||
data = response.json()
|
if response.status_code != 200:
|
||||||
|
print(f"GitHub API Error: Status {response.status_code}")
|
||||||
|
return ""
|
||||||
|
|
||||||
name = data.get("global_name") or data.get("username")
|
seen = set()
|
||||||
avatar = data.get("avatar")
|
cells = []
|
||||||
github_user = data.get("username")
|
|
||||||
|
for user in response.json():
|
||||||
|
name = user.get("login")
|
||||||
|
if not name or name == "web-flow":
|
||||||
|
continue
|
||||||
|
seen.add(name.lower())
|
||||||
|
cells.append(make_cell(
|
||||||
|
avatar_url=f"{user['avatar_url']}&s=75",
|
||||||
|
name=name,
|
||||||
|
profile_url=user["html_url"],
|
||||||
|
))
|
||||||
|
|
||||||
|
for login in extra_logins:
|
||||||
|
if login.lower() in seen:
|
||||||
|
print(f"Skipping duplicate extra user: {login}")
|
||||||
|
continue
|
||||||
|
user = fetch_github_user(login)
|
||||||
|
if not user:
|
||||||
|
continue
|
||||||
|
seen.add(login.lower())
|
||||||
|
cells.append(make_cell(
|
||||||
|
avatar_url=f"{user['avatar_url']}&s=75",
|
||||||
|
name=user["login"],
|
||||||
|
profile_url=user["html_url"],
|
||||||
|
))
|
||||||
|
|
||||||
|
return build_table(cells) if cells else ""
|
||||||
|
|
||||||
return f"""
|
|
||||||
<a href="https://github.com/{github_user}" title="{name}">
|
|
||||||
<img src="{avatar}" alt="{name}" width="75" height="75" style="border-radius:50%">
|
|
||||||
</a>
|
|
||||||
"""
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Błąd API: {e}")
|
print(f"GitHub Fetch Error: {e}")
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
def update_file(file_path, html_content):
|
|
||||||
if not os.path.exists(file_path):
|
def get_discord_users(user_ids):
|
||||||
print(f"❌ Plik {file_path} nie istnieje!")
|
cells = []
|
||||||
|
for uid in user_ids:
|
||||||
|
try:
|
||||||
|
response = requests.get(
|
||||||
|
f"https://pfpfinder.com/api/discord/user/{uid}", timeout=10
|
||||||
|
)
|
||||||
|
if response.status_code != 200:
|
||||||
|
print(f"Discord API: Status {response.status_code} for {uid}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
data = response.json()
|
||||||
|
global_name = data.get("global_name")
|
||||||
|
username = data.get("username")
|
||||||
|
if global_name:
|
||||||
|
name = global_name
|
||||||
|
else:
|
||||||
|
print(f"Warning: {uid} has no global_name, falling back to username '{username}' (can be used for invites)")
|
||||||
|
name = username or f"User {uid}"
|
||||||
|
|
||||||
|
source_url = (data.get("avatar") or "").replace(".gif", ".png")
|
||||||
|
if not source_url:
|
||||||
|
default_index = (int(uid) >> 22) % 6
|
||||||
|
source_url = f"https://cdn.discordapp.com/embed/avatars/{default_index}.png"
|
||||||
|
|
||||||
|
uid_hash = hashlib.sha1(uid.encode()).hexdigest()[:12]
|
||||||
|
filename = f"discord_{uid_hash}.png"
|
||||||
|
avatar_url = save_avatar(source_url, filename)
|
||||||
|
if not avatar_url:
|
||||||
|
continue
|
||||||
|
|
||||||
|
cells.append(make_cell(avatar_url=avatar_url, name=name))
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Discord API Error for {uid}: {e}")
|
||||||
|
|
||||||
|
return build_table(cells) if cells else ""
|
||||||
|
|
||||||
|
|
||||||
|
def process_file(filename, github_elements, discord_elements, is_pl):
|
||||||
|
input_path = f"./{filename}"
|
||||||
|
output_path = f"../{filename}"
|
||||||
|
|
||||||
|
if not os.path.exists(input_path):
|
||||||
|
print(f"Error: File {input_path} does not exist")
|
||||||
return
|
return
|
||||||
|
|
||||||
with open(file_path, "r", encoding="utf-8") as f:
|
with open(input_path, "r", encoding="utf-8") as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
|
|
||||||
if MARKER not in content:
|
if is_pl:
|
||||||
print(f"⚠️ Marker {MARKER} nie został znaleziony w {file_path}")
|
info_github = (
|
||||||
return
|
f'Jeśli jesteś <a href="{CONTRIBUTORS_URL}">współtwórcą</a> i chcesz, '
|
||||||
|
f'aby Twój profil został usunięty z tej listy, skontaktuj się ze mną.'
|
||||||
|
)
|
||||||
|
info_discord = (
|
||||||
|
"Jeśli jesteś na tej liście i chcesz usunąć swój profil, skontaktuj się ze mną."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
info_github = (
|
||||||
|
f'If you are a <a href="{CONTRIBUTORS_URL}">contributor</a> and want your profile '
|
||||||
|
f'removed from this list, please contact me.'
|
||||||
|
)
|
||||||
|
info_discord = (
|
||||||
|
"If you are on this list and want your profile removed, please contact me."
|
||||||
|
)
|
||||||
|
|
||||||
# Zamiana markera na HTML
|
if MARKER_GITHUB in content and github_elements:
|
||||||
new_content = content.replace(MARKER, html_content)
|
content = content.replace(MARKER_GITHUB, (
|
||||||
|
f'<div align="center">\n\n'
|
||||||
|
f'{github_elements}\n\n'
|
||||||
|
f'<sub>{info_github}</sub>\n\n'
|
||||||
|
f'</div>'
|
||||||
|
))
|
||||||
|
elif MARKER_GITHUB in content:
|
||||||
|
print(f"Warning: No GitHub data to replace marker in {input_path}")
|
||||||
|
|
||||||
with open(file_path, "w", encoding="utf-8") as f:
|
if MARKER_DISCORD in content and discord_elements:
|
||||||
f.write(new_content)
|
content = content.replace(MARKER_DISCORD, (
|
||||||
|
f'<div align="center">\n\n'
|
||||||
|
f'{discord_elements}\n\n'
|
||||||
|
f'<sub>{info_discord}</sub>\n\n'
|
||||||
|
f'</div>'
|
||||||
|
))
|
||||||
|
elif MARKER_DISCORD in content:
|
||||||
|
print(f"Warning: No Discord data to replace marker in {input_path}")
|
||||||
|
|
||||||
|
with open(output_path, "w", encoding="utf-8") as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
print(f"Success: Created {output_path}")
|
||||||
|
|
||||||
print(f"✅ Zaktualizowano: {file_path}")
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
elements = "".join([get_html_for_user(uid) for uid in USER_IDS])
|
print("Fetching GitHub contributors...")
|
||||||
full_html = f'<div align="center">\n{elements}\n</div>'
|
github_elements = get_github_contributors(REPOSITORY, EXTRA_USERS_GITHUB)
|
||||||
|
|
||||||
files = ["../README.md", "../README-PL.md"]
|
print("Fetching Discord users...")
|
||||||
|
discord_elements = get_discord_users(DISCORD_USER_IDS)
|
||||||
|
|
||||||
|
files = [("README.md", False), ("README-PL.md", True)]
|
||||||
|
|
||||||
|
for filename, is_pl in files:
|
||||||
|
process_file(filename, github_elements, discord_elements, is_pl)
|
||||||
|
|
||||||
for file in files:
|
|
||||||
update_file(file, full_html)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.368" />
|
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.369" />
|
||||||
<PackageReference Include="MaxMind.Db" Version="5.1.0">
|
<PackageReference Include="MaxMind.Db" Version="5.1.0">
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SourceLangDir>$(MSBuildProjectDirectory)\src\lang</SourceLangDir>
|
<SourceLangDir>$(MSBuildProjectDirectory)\src\lang</SourceLangDir>
|
||||||
<ServerLangDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills\languages</ServerLangDir>
|
<ServerLangDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills\languages</ServerLangDir>
|
||||||
<SourceDLL>$(MSBuildProjectDirectory)\bin\Debug\net8.0</SourceDLL>
|
<SourceDLL>$(MSBuildProjectDirectory)\bin\Debug\net10.0</SourceDLL>
|
||||||
<ServerDLL>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills</ServerDLL>
|
<ServerDLL>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills</ServerDLL>
|
||||||
<SourceGamedataDir>$(MSBuildProjectDirectory)\src\gamedata</SourceGamedataDir>
|
<SourceGamedataDir>$(MSBuildProjectDirectory)\src\gamedata</SourceGamedataDir>
|
||||||
<ServerGamedataDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\gamedata</ServerGamedataDir>
|
<ServerGamedataDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\gamedata</ServerGamedataDir>
|
||||||
|
|
|
||||||
|
|
@ -158,7 +158,7 @@ namespace src.command
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}{targetPlayer.PlayerName}");
|
SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}\u202A{targetPlayer.PlayerName}\u202C");
|
||||||
|
|
||||||
if (skill.Display)
|
if (skill.Display)
|
||||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(skill.Skill)}", border: "b");
|
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(skill.Skill)}", border: "b");
|
||||||
|
|
@ -518,7 +518,7 @@ namespace src.command
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}{targetPlayer.PlayerName}");
|
SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}\u202A{targetPlayer.PlayerName}\u202C");
|
||||||
|
|
||||||
if (skill.Display)
|
if (skill.Display)
|
||||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(skill.Skill)}", border: "b");
|
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(skill.Skill)}", border: "b");
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,22 @@
|
||||||
"linux": "55 48 89 E5 41 57 49 89 FF 48 89 F7 41 56 41 55 41 54 53 48 81 EC"
|
"linux": "55 48 89 E5 41 57 49 89 FF 48 89 F7 41 56 41 55 41 54 53 48 81 EC"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CCSPlayerController_HandleCommandDrop": {
|
"CServerSideClient_m_nDeltaTick": {
|
||||||
"signatures": {
|
"offsets": {
|
||||||
"library": "server",
|
"windows": 348,
|
||||||
"windows": "48 89 5C 24 ? 57 48 83 EC ? 48 8B FA E8 ? ? ? ? 48 8B D8",
|
"linux": 348
|
||||||
"linux": "55 48 89 E5 41 54 49 89 F4 53 E8 ? ? ? ? 48 85 C0 74 ? 48 89 C3"
|
}
|
||||||
|
},
|
||||||
|
"INetworkGameServer_Slots": {
|
||||||
|
"offsets": {
|
||||||
|
"windows": 592,
|
||||||
|
"linux": 592
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"INetworkServerService_GetIGameServer": {
|
||||||
|
"offsets": {
|
||||||
|
"windows": 23,
|
||||||
|
"linux": 24
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -28,7 +28,7 @@ namespace src
|
||||||
public override string ModuleName => "[CS2] [ jRandomSkills ]";
|
public override string ModuleName => "[CS2] [ jRandomSkills ]";
|
||||||
public override string ModuleAuthor => "D3X, Juzlus";
|
public override string ModuleAuthor => "D3X, Juzlus";
|
||||||
public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus.";
|
public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus.";
|
||||||
public override string ModuleVersion => "1.2.2.b1";
|
public override string ModuleVersion => "1.2.2.b2";
|
||||||
|
|
||||||
public override void Load(bool hotReload)
|
public override void Load(bool hotReload)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,519 +1,519 @@
|
||||||
{
|
{
|
||||||
"none": "Keine",
|
"none": "Keine",
|
||||||
"none_desc": "Du hast keine Fertigkeit",
|
"none_desc": "Du hast keine Fertigkeit",
|
||||||
|
|
||||||
"aimbot": "Aimbot",
|
"aimbot": "Aimbot",
|
||||||
"aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
|
"aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
|
||||||
|
|
||||||
"aimlock": "Aim-Lock",
|
"aimlock": "Aim-Lock",
|
||||||
"aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
|
"aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
|
||||||
|
|
||||||
"anomaly": "Anomalie",
|
"anomaly": "Anomalie",
|
||||||
"anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
|
"anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
|
||||||
|
|
||||||
"antyflash": "Anti-Flash",
|
"antyflash": "Anti-Flash",
|
||||||
"antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
|
"antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
|
||||||
|
|
||||||
"antyhead": "Eiserner Kopf",
|
"antyhead": "Eiserner Kopf",
|
||||||
"antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
|
"antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
|
||||||
|
|
||||||
"areareaper": "Zone Reaper",
|
"areareaper": "Zone Reaper",
|
||||||
"areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
|
"areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
|
||||||
"areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
|
"areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
|
||||||
"areareaper_no_site": "Keine Bombenstandorte gefunden.",
|
"areareaper_no_site": "Keine Bombenstandorte gefunden.",
|
||||||
"areareaper_select_info": "Standort zum Deaktivieren auswählen:",
|
"areareaper_select_info": "Standort zum Deaktivieren auswählen:",
|
||||||
"areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
|
"areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
|
||||||
"areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
|
"areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
|
||||||
"areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
|
"areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
|
||||||
|
|
||||||
"armored": "Gepanzert",
|
"armored": "Gepanzert",
|
||||||
"armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
"armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
||||||
"armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
"armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"assassin": "Attentäter",
|
"assassin": "Attentäter",
|
||||||
"assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
|
"assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
|
||||||
|
|
||||||
"astronaut": "Astronaut",
|
"astronaut": "Astronaut",
|
||||||
"astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
|
"astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
|
||||||
"astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
|
"astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
|
||||||
|
|
||||||
"moneyswap": "Steuerbeamter",
|
"moneyswap": "Steuerbeamter",
|
||||||
"moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
|
"moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
|
||||||
"moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
|
"moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
|
||||||
"moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
|
"moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
|
||||||
"moneyswap_select_info": "Geld mit Spieler tauschen:",
|
"moneyswap_select_info": "Geld mit Spieler tauschen:",
|
||||||
|
|
||||||
"baseball": "Baseballspieler",
|
"baseball": "Baseballspieler",
|
||||||
"baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
|
"baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
|
||||||
|
|
||||||
"behind": "Feind drehen",
|
"behind": "Feind drehen",
|
||||||
"behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
|
"behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
|
||||||
"behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
|
"behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
|
||||||
|
|
||||||
"blademaster": "Schwertmeister",
|
"blademaster": "Schwertmeister",
|
||||||
"blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
|
"blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
|
||||||
|
|
||||||
"bunnyhop": "Hase",
|
"bunnyhop": "Hase",
|
||||||
"bunnyhop_desc": "Du erhältst automatisch bunnyhop",
|
"bunnyhop_desc": "Du erhältst automatisch bunnyhop",
|
||||||
|
|
||||||
"c4camouflage": "C4-Tarnung",
|
"c4camouflage": "C4-Tarnung",
|
||||||
"c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
|
"c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
|
||||||
|
|
||||||
"carefulbullets": "Vorsichtige Kugeln",
|
"carefulbullets": "Vorsichtige Kugeln",
|
||||||
"carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
|
"carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
|
||||||
"carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
|
"carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
|
||||||
"carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
|
"carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
|
||||||
"carefulbullets_select_info": "Fehler schaden dem Spieler:",
|
"carefulbullets_select_info": "Fehler schaden dem Spieler:",
|
||||||
|
|
||||||
"catapult": "Katapult",
|
"catapult": "Katapult",
|
||||||
"catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
|
"catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
|
||||||
"catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
|
"catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
|
||||||
|
|
||||||
"chicken": "Huhn",
|
"chicken": "Huhn",
|
||||||
"chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
|
"chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
|
||||||
|
|
||||||
"chillout": "Chillout",
|
"chillout": "Chillout",
|
||||||
"chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
|
"chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
|
||||||
|
|
||||||
"cutter": "Cutter",
|
"cutter": "Cutter",
|
||||||
"cutter_desc": "Sofortiger Tod mit einem Messer",
|
"cutter_desc": "Sofortiger Tod mit einem Messer",
|
||||||
|
|
||||||
"cypher": "Kamera",
|
"cypher": "Kamera",
|
||||||
"cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
|
"cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
|
||||||
"cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
|
"cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
|
||||||
|
|
||||||
"darkness": "Dunkelheit",
|
"darkness": "Dunkelheit",
|
||||||
"darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
|
"darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
|
||||||
"darkness_enemy_info": "Lass die Lichter ausgehen",
|
"darkness_enemy_info": "Lass die Lichter ausgehen",
|
||||||
"darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
|
"darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
|
||||||
"darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
|
"darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
|
||||||
|
|
||||||
"deactivator": "Deaktivator",
|
"deactivator": "Deaktivator",
|
||||||
"deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
|
"deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
|
||||||
"deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
|
"deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
|
||||||
"deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
|
"deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
|
||||||
"deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
|
"deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
|
||||||
|
|
||||||
"deaf": "Taub",
|
"deaf": "Taub",
|
||||||
"deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
|
"deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
|
||||||
"deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
|
"deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
|
||||||
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
|
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
|
||||||
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
|
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
|
||||||
|
|
||||||
"disarmament": "Entwaffnung",
|
"disarmament": "Entwaffnung",
|
||||||
"disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
|
"disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
|
||||||
"disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
|
"disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
|
||||||
|
|
||||||
"distancer": "Entfernungsmesser",
|
"distancer": "Entfernungsmesser",
|
||||||
"distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
|
"distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
|
||||||
|
|
||||||
"dash": "Sprinten",
|
"dash": "Sprinten",
|
||||||
"dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
|
"dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
|
||||||
|
|
||||||
"dracula": "Dracula",
|
"dracula": "Dracula",
|
||||||
"dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
|
"dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
|
||||||
|
|
||||||
"duplicator": "Duplikator",
|
"duplicator": "Duplikator",
|
||||||
"duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
|
"duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
|
||||||
"duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
|
"duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
|
||||||
"duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
|
"duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
|
||||||
|
|
||||||
"dwarf": "Zwerg",
|
"dwarf": "Zwerg",
|
||||||
"dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
|
"dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
|
||||||
"dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
|
"dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"enemyspawn": "Feindes-Spawn",
|
"enemyspawn": "Feindes-Spawn",
|
||||||
"enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
|
"enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
|
||||||
|
|
||||||
"explosiveshot": "Explosiver Schuss",
|
"explosiveshot": "Explosiver Schuss",
|
||||||
"explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
|
"explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
|
||||||
"explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
|
"explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
|
||||||
|
|
||||||
"falconeye": "Falkenauge",
|
"falconeye": "Falkenauge",
|
||||||
"falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
|
"falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
|
||||||
|
|
||||||
"fastreload": "Schnellnachladen",
|
"fastreload": "Schnellnachladen",
|
||||||
"fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
|
"fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
|
||||||
|
|
||||||
"flash": "Blitz",
|
"flash": "Blitz",
|
||||||
"flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
|
"flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
|
||||||
"flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
|
"flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"fortnite": "Fortnite",
|
"fortnite": "Fortnite",
|
||||||
"fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
|
"fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
|
||||||
|
|
||||||
"fragilebomb": "Fragile Bombe",
|
"fragilebomb": "Fragile Bombe",
|
||||||
"fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
|
"fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
|
||||||
"fragilebomb_bomb_health": "Bombengesundheit",
|
"fragilebomb_bomb_health": "Bombengesundheit",
|
||||||
|
|
||||||
"friendlyfire": "Friendly Fire",
|
"friendlyfire": "Friendly Fire",
|
||||||
"friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
|
"friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
|
||||||
|
|
||||||
"frozendecoy": "Eisige Attrappe",
|
"frozendecoy": "Eisige Attrappe",
|
||||||
"frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
|
"frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
|
||||||
|
|
||||||
"gambler": "Zocker",
|
"gambler": "Zocker",
|
||||||
"gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
|
"gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
|
||||||
"gambler_select_info": "Wähle deine Fähigkeit aus:",
|
"gambler_select_info": "Wähle deine Fähigkeit aus:",
|
||||||
"gambler_more": "#00FF00|Aktualisieren für ${0}",
|
"gambler_more": "#00FF00|Aktualisieren für ${0}",
|
||||||
"gambler_no_money": "Nicht genug Geld.",
|
"gambler_no_money": "Nicht genug Geld.",
|
||||||
|
|
||||||
"ghost": "Geist",
|
"ghost": "Geist",
|
||||||
"ghost_desc": "Du bist vollständig unsichtbar",
|
"ghost_desc": "Du bist vollständig unsichtbar",
|
||||||
|
|
||||||
"glaz": "Glaz",
|
"glaz": "Glaz",
|
||||||
"glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
|
"glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
|
||||||
|
|
||||||
"glitch": "Glitch",
|
"glitch": "Glitch",
|
||||||
"glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
|
"glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
|
||||||
"glitch_enemy_info": "Dein Radar wurde deaktiviert",
|
"glitch_enemy_info": "Dein Radar wurde deaktiviert",
|
||||||
"glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
|
"glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
|
||||||
"glitch_select_info": "Radar des Spielers ausschalten:",
|
"glitch_select_info": "Radar des Spielers ausschalten:",
|
||||||
|
|
||||||
"glue": "Glue",
|
"glue": "Glue",
|
||||||
"glue_desc": "Deine Granaten haften an Wänden",
|
"glue_desc": "Deine Granaten haften an Wänden",
|
||||||
|
|
||||||
"godmode": "Gott-Modus",
|
"godmode": "Gott-Modus",
|
||||||
"godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
|
"godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
|
||||||
"godmode_off": "Unsterblichkeit deaktiviert",
|
"godmode_off": "Unsterblichkeit deaktiviert",
|
||||||
"godmode_on": "Unsterblichkeit aktiviert",
|
"godmode_on": "Unsterblichkeit aktiviert",
|
||||||
|
|
||||||
"grenadier": "Grenadier",
|
"grenadier": "Grenadier",
|
||||||
"grenadier_desc": "Du hast unendlich viele Granaten",
|
"grenadier_desc": "Du hast unendlich viele Granaten",
|
||||||
|
|
||||||
"healingsmoke": "Heilender Rauch",
|
"healingsmoke": "Heilender Rauch",
|
||||||
"healingsmoke_desc": "Deine Rauchgranaten heilen",
|
"healingsmoke_desc": "Deine Rauchgranaten heilen",
|
||||||
|
|
||||||
"hermit": "Einsiedler",
|
"hermit": "Einsiedler",
|
||||||
"hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
|
"hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
|
||||||
|
|
||||||
"holyhandgrenade": "Heilige Handgranate",
|
"holyhandgrenade": "Heilige Handgranate",
|
||||||
"holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
|
"holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
|
||||||
|
|
||||||
"homingnades": "Zielsuchende Granaten",
|
"homingnades": "Zielsuchende Granaten",
|
||||||
"homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
|
"homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
|
||||||
|
|
||||||
"hotbomb": "Heiße Bombe",
|
"hotbomb": "Heiße Bombe",
|
||||||
"hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
|
"hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
|
||||||
"hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
|
"hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
|
||||||
|
|
||||||
"iana": "Hologramm",
|
"iana": "Hologramm",
|
||||||
"iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
|
"iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
|
||||||
|
|
||||||
"illiterate": "Analphabet",
|
"illiterate": "Analphabet",
|
||||||
"illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
|
"illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
|
||||||
|
|
||||||
"illusionist": "Illusionist",
|
"illusionist": "Illusionist",
|
||||||
"illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
|
"illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
|
||||||
|
|
||||||
"impostor": "Betrüger",
|
"impostor": "Betrüger",
|
||||||
"impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
|
"impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
|
||||||
|
|
||||||
"infiniteammo": "Unendliche Munition",
|
"infiniteammo": "Unendliche Munition",
|
||||||
"infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
|
"infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
|
||||||
|
|
||||||
"jackal": "Spürhund",
|
"jackal": "Spürhund",
|
||||||
"jackal_desc": "Jeder Gegner hinterlässt eine Spur",
|
"jackal_desc": "Jeder Gegner hinterlässt eine Spur",
|
||||||
|
|
||||||
"jammer": "Störsender",
|
"jammer": "Störsender",
|
||||||
"jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
|
"jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
|
||||||
"jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
|
"jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
|
||||||
"jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
|
"jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
|
||||||
"jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
|
"jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
|
||||||
|
|
||||||
"jester": "Narr",
|
"jester": "Narr",
|
||||||
"jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
|
"jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
|
||||||
"jester_mode": "Jester-Modus",
|
"jester_mode": "Jester-Modus",
|
||||||
"jester_on": "EIN",
|
"jester_on": "EIN",
|
||||||
"jester_off": "AUS",
|
"jester_off": "AUS",
|
||||||
|
|
||||||
"jumpban": "Beinlos",
|
"jumpban": "Beinlos",
|
||||||
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
|
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
|
||||||
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
|
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
|
||||||
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
|
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
|
||||||
"jumpban_select_info": "Spieler vom Springen ausschließen:",
|
"jumpban_select_info": "Spieler vom Springen ausschließen:",
|
||||||
|
|
||||||
"jumpingjack": "Jumping Jack",
|
"jumpingjack": "Jumping Jack",
|
||||||
"jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
|
"jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
|
||||||
|
|
||||||
"killerflash": "Killer Flash",
|
"killerflash": "Killer Flash",
|
||||||
"killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
|
"killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
|
||||||
|
|
||||||
"lifeswap": "Lebensaustausch",
|
"lifeswap": "Lebensaustausch",
|
||||||
"lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
|
"lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
|
||||||
"lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
|
"lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
|
||||||
"lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
|
"lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
|
||||||
"lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
|
"lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
|
||||||
|
|
||||||
"longknife": "Langes Messer",
|
"longknife": "Langes Messer",
|
||||||
"longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
|
"longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
|
||||||
|
|
||||||
"longzeus": "Langer Zeus",
|
"longzeus": "Langer Zeus",
|
||||||
"longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
|
"longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
|
||||||
|
|
||||||
"magneticdecoy": "Magnetischer Köder",
|
"magneticdecoy": "Magnetischer Köder",
|
||||||
"magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
|
"magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
|
||||||
|
|
||||||
"magneto": "Magneto",
|
"magneto": "Magneto",
|
||||||
"magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
|
"magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
|
||||||
|
|
||||||
"magnifier": "Lupe",
|
"magnifier": "Lupe",
|
||||||
"magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
|
"magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
|
||||||
"magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
|
"magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
|
||||||
"magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
|
"magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
|
||||||
"magnifier_select_info": "Bildschirm des Spielers vergrößern:",
|
"magnifier_select_info": "Bildschirm des Spielers vergrößern:",
|
||||||
|
|
||||||
"medic": "Sanitäter",
|
"medic": "Sanitäter",
|
||||||
"medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
|
"medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
|
||||||
|
|
||||||
"miner": "Bomben-Miner",
|
"miner": "Bomben-Miner",
|
||||||
"miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
|
"miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
|
||||||
|
|
||||||
"bankrupt": "Bankrott",
|
"bankrupt": "Bankrott",
|
||||||
"bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
|
"bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
|
||||||
"bankrupt_enemy_info": "Du bist bankrott.",
|
"bankrupt_enemy_info": "Du bist bankrott.",
|
||||||
"bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
|
"bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
|
||||||
"bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
|
"bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Todesbombe",
|
||||||
"muhammed_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
"deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
|
"ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
|
||||||
|
|
||||||
"nonades": "No-Nades",
|
"nonades": "No-Nades",
|
||||||
"nonades_desc": "Granaten fügen dir keinen Schaden zu",
|
"nonades_desc": "Granaten fügen dir keinen Schaden zu",
|
||||||
|
|
||||||
"norecoil": "Fokus",
|
|
||||||
"norecoil_desc": "Kein Rückstoß beim Schießen",
|
|
||||||
|
|
||||||
"noclip": "NoClip",
|
"norecoil": "Fokus",
|
||||||
"noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
|
"norecoil_desc": "Kein Rückstoß beim Schießen",
|
||||||
|
|
||||||
"oneshot": "One-Shot",
|
"noclip": "NoClip",
|
||||||
"oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
|
"noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
|
||||||
|
|
||||||
"onlyhead": "Nur Kopf",
|
"oneshot": "One-Shot",
|
||||||
"onlyhead_desc": "Du erleidest nur Schaden am Kopf",
|
"oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
|
||||||
|
|
||||||
"paweljumper": "Pawel Jumper",
|
"onlyhead": "Nur Kopf",
|
||||||
"paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
|
"onlyhead_desc": "Du erleidest nur Schaden am Kopf",
|
||||||
"paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
|
|
||||||
|
|
||||||
"phoenix": "Phönix",
|
"paweljumper": "Pawel Jumper",
|
||||||
"phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
|
"paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
|
||||||
"phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
|
"paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
|
||||||
"phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
|
|
||||||
|
|
||||||
"psychicdefusing": "Psychic Defusing",
|
"phoenix": "Phönix",
|
||||||
"psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
|
"phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
|
||||||
"psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
|
"phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
|
||||||
|
"phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
|
||||||
|
|
||||||
"pilot": "Pilot",
|
"psychicdefusing": "Psychic Defusing",
|
||||||
"pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
|
"psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
|
||||||
"pilot_hud_info": "Treibstoff",
|
"psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
|
||||||
|
|
||||||
"planter": "Freier Planter",
|
"pilot": "Pilot",
|
||||||
"planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
|
"pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
|
||||||
"planter_planting": "Bombe wird gelegt ({0})...",
|
"pilot_hud_info": "Treibstoff",
|
||||||
|
|
||||||
"poison": "Gift",
|
"planter": "Freier Planter",
|
||||||
"poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
|
"planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
|
||||||
"poison_enemy_info": "Du wurdest vergiftet",
|
"planter_planting": "Bombe wird gelegt ({0})...",
|
||||||
"poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
|
|
||||||
"poison_select_info": "Einen Spieler vergiften:",
|
|
||||||
|
|
||||||
"primaryban": "Keine Gewehre",
|
"poison": "Gift",
|
||||||
"primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
|
"poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
|
||||||
"primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
|
"poison_enemy_info": "Du wurdest vergiftet",
|
||||||
"primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
|
"poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
|
||||||
"primaryban_select_info": "Gewehre für Spieler verbieten:",
|
"poison_select_info": "Einen Spieler vergiften:",
|
||||||
|
|
||||||
"prosthesis": "Prothese",
|
"primaryban": "Keine Gewehre",
|
||||||
"prosthesis_desc": "Arme und Beine sind kugelsicher",
|
"primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
|
||||||
|
"primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
|
||||||
|
"primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
|
||||||
|
"primaryban_select_info": "Gewehre für Spieler verbieten:",
|
||||||
|
|
||||||
"push": "Pusher",
|
"prosthesis": "Prothese",
|
||||||
"push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
|
"prosthesis_desc": "Arme und Beine sind kugelsicher",
|
||||||
"push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
|
|
||||||
|
|
||||||
"pyro": "Pyro",
|
"push": "Pusher",
|
||||||
"pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
|
"push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
|
||||||
|
"push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
|
||||||
|
|
||||||
"quickshot": "Schnellfeuer",
|
"pyro": "Pyro",
|
||||||
"quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
|
"pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
|
||||||
|
|
||||||
"radarhack": "Radar-Hack",
|
"quickshot": "Schnellfeuer",
|
||||||
"radarhack_desc": "Gegner sind auf dem Radar sichtbar",
|
"quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
|
||||||
|
|
||||||
"rambo": "Rambo",
|
"radarhack": "Radar-Hack",
|
||||||
"rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
|
"radarhack_desc": "Gegner sind auf dem Radar sichtbar",
|
||||||
|
|
||||||
"randomweapon": "Zufällige Waffe",
|
"rambo": "Rambo",
|
||||||
"randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
|
"rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
|
||||||
|
|
||||||
"rezombie": "Re-Zombie",
|
"randomweapon": "Zufällige Waffe",
|
||||||
"rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
|
"randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
|
||||||
|
|
||||||
"reactivearmor": "Reaktive Rüstung",
|
"rezombie": "Re-Zombie",
|
||||||
"reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
|
"rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
|
||||||
|
|
||||||
"regeneration": "Regeneration",
|
"reactivearmor": "Reaktive Rüstung",
|
||||||
"regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
|
"reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
|
||||||
|
|
||||||
"replicator": "Replikator",
|
"regeneration": "Regeneration",
|
||||||
"replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
|
"regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
|
||||||
|
|
||||||
"retreat": "Rückzug",
|
"replicator": "Replikator",
|
||||||
"retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
|
"replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
|
||||||
|
|
||||||
"returntosender": "Zurück zum Absender",
|
"retreat": "Rückzug",
|
||||||
"returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
|
"retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
|
||||||
|
|
||||||
"richboy": "Rich Boy",
|
"returntosender": "Zurück zum Absender",
|
||||||
"richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
|
"returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
|
||||||
|
|
||||||
"robinhood": "Robin Hood",
|
"richboy": "Rich Boy",
|
||||||
"robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
|
"richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
|
||||||
|
|
||||||
"rubber": "Gummigeschosse",
|
"robinhood": "Robin Hood",
|
||||||
"rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
|
"robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
|
||||||
|
|
||||||
"saper": "Sapper",
|
"rubber": "Gummigeschosse",
|
||||||
"saper_desc": "Du kannst Bomben schneller legen und entschärfen",
|
"rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
|
||||||
|
|
||||||
"secondlife": "Zweite Chance",
|
"saper": "Sapper",
|
||||||
"secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
|
"saper_desc": "Du kannst Bomben schneller legen und entschärfen",
|
||||||
|
|
||||||
"shade": "Schatten",
|
"secondlife": "Zweite Chance",
|
||||||
"shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
|
"secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
|
||||||
"shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
|
|
||||||
"shade_nospace": "Kein Platz verfügbar",
|
|
||||||
|
|
||||||
"shortbomb": "Kurze Zündschnur",
|
"shade": "Schatten",
|
||||||
"shortbomb_desc": "Die Bombe explodiert viel schneller",
|
"shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
|
||||||
|
"shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
|
||||||
|
"shade_nospace": "Kein Platz verfügbar",
|
||||||
|
|
||||||
"silent": "Leise",
|
"shortbomb": "Kurze Zündschnur",
|
||||||
"silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
|
"shortbomb_desc": "Die Bombe explodiert viel schneller",
|
||||||
|
|
||||||
"smoker": "Smoker",
|
"silent": "Leise",
|
||||||
"smoker_desc": "Deine Rauchgranaten gehen nie aus",
|
"silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
|
||||||
|
|
||||||
"sniperelite": "Sniper Elite",
|
"smoker": "Smoker",
|
||||||
"sniperelite_customname": "Sniper-Elite-Skill",
|
"smoker_desc": "Deine Rauchgranaten gehen nie aus",
|
||||||
"sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
|
|
||||||
|
|
||||||
"soldier": "Soldat",
|
"sniperelite": "Sniper Elite",
|
||||||
"soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
"sniperelite_customname": "Sniper-Elite-Skill",
|
||||||
"soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
"sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
|
||||||
|
|
||||||
"soundmaker": "Soundmaker",
|
"soldier": "Soldat",
|
||||||
"soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
|
"soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
||||||
|
"soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"spectator": "Zuschauer",
|
"soundmaker": "Soundmaker",
|
||||||
"spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
|
"soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
|
||||||
|
|
||||||
"swapposition": "Positionstausch",
|
"spectator": "Zuschauer",
|
||||||
"swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
|
"spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
|
||||||
|
|
||||||
"teleporter": "Teleporter",
|
"swapposition": "Positionstausch",
|
||||||
"teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
|
"swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
|
||||||
"teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
|
|
||||||
|
|
||||||
"thief": "Dieb",
|
"teleporter": "Teleporter",
|
||||||
"thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
|
"teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
|
||||||
"thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
|
"teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
|
||||||
"thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
|
|
||||||
"thief_select_info": "Fähigkeit eines Spielers stehlen:",
|
|
||||||
"thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
|
|
||||||
|
|
||||||
"thirdeye": "Drittes Auge",
|
"thief": "Dieb",
|
||||||
"thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
|
"thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
|
||||||
|
"thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
|
||||||
|
"thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
|
||||||
|
"thief_select_info": "Fähigkeit eines Spielers stehlen:",
|
||||||
|
"thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
|
||||||
|
|
||||||
"thorns": "Dornen",
|
"thirdeye": "Drittes Auge",
|
||||||
"thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
|
"thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
|
||||||
|
|
||||||
"throwingknife": "Wurfmesser",
|
"thorns": "Dornen",
|
||||||
"throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
|
"thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
|
||||||
|
|
||||||
"toxicsmoke": "Giftiger Rauch",
|
"throwingknife": "Wurfmesser",
|
||||||
"toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
|
"throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
|
||||||
|
|
||||||
"wallhack": "Wallhack",
|
"toxicsmoke": "Giftiger Rauch",
|
||||||
"wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
|
"toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
|
||||||
|
|
||||||
"watchmaker": "Uhrmacher",
|
"wallhack": "Wallhack",
|
||||||
"watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
|
"wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
|
||||||
"watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
|
|
||||||
"watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
|
|
||||||
|
|
||||||
"weaponsswap": "Waffenwechsel",
|
"watchmaker": "Uhrmacher",
|
||||||
"weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
|
"watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
|
||||||
"weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
|
"watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
|
||||||
|
"watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
|
||||||
|
|
||||||
"weightless": "Schwerelosigkeit",
|
"weaponsswap": "Waffenwechsel",
|
||||||
"weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
|
"weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
|
||||||
|
"weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
|
||||||
|
|
||||||
"wildthrow": "Wilder Wurf",
|
"weightless": "Schwerelosigkeit",
|
||||||
"wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
|
"weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
|
||||||
"wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
|
|
||||||
"wildthrow_select_info": "Wähle einen Spieler aus:",
|
"wildthrow": "Wilder Wurf",
|
||||||
|
"wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
|
||||||
"zeus": "Zeus",
|
"wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
|
||||||
"zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
|
"wildthrow_select_info": "Wähle einen Spieler aus:",
|
||||||
|
|
||||||
"your_skill": "Deine aktuelle Fertigkeit",
|
"zeus": "Zeus",
|
||||||
"enemy_skill": "Fähigkeit des Gegners",
|
"zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
|
||||||
"observer_skill": "Fähigkeit des Spielers",
|
|
||||||
"welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
|
"your_skill": "Deine aktuelle Fertigkeit",
|
||||||
"drawing_skill": "Eine Fertigkeit zeichnen",
|
"enemy_skill": "Fähigkeit des Gegners",
|
||||||
"disabled_weapon": "Du kannst diese Waffe nicht verwenden",
|
"observer_skill": "Fähigkeit des Spielers",
|
||||||
|
"welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
|
||||||
"hud_info": "Warte weitere {0} Sekunden",
|
"drawing_skill": "Eine Fertigkeit zeichnen",
|
||||||
"hud_info_no_enemy": "Kein Feind gefunden",
|
"disabled_weapon": "Du kannst diese Waffe nicht verwenden",
|
||||||
"active_hud_info": "Noch {0} Millisekunden aktiv",
|
|
||||||
|
"hud_info": "Warte weitere {0} Sekunden",
|
||||||
"skills_menu": "Fähigkeitenliste",
|
"hud_info_no_enemy": "Kein Feind gefunden",
|
||||||
"no_player": "Kein passender Spieler gefunden.",
|
"active_hud_info": "Noch {0} Millisekunden aktiv",
|
||||||
"duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
|
|
||||||
"selectplayerskill_command": "Gib /t ein",
|
"skills_menu": "Fähigkeitenliste",
|
||||||
"selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
|
"no_player": "Kein passender Spieler gefunden.",
|
||||||
|
"duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
|
||||||
"skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
|
"selectplayerskill_command": "Gib /t ein",
|
||||||
"player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
|
"selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
|
||||||
"correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill <Fähigkeit>",
|
|
||||||
"correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
|
"skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
|
||||||
"done_setskill": "Fähigkeit festgelegt",
|
"player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
|
||||||
"error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
|
"correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill <Fähigkeit>",
|
||||||
"for_setskill": "für",
|
"correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
|
||||||
|
"done_setskill": "Fähigkeit festgelegt",
|
||||||
"invalid_map": "Kartenname falsch eingegeben!",
|
"error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
|
||||||
"loading_map": "Neue Karte wird geladen",
|
"for_setskill": "für",
|
||||||
|
|
||||||
"pause": "Spiel wurde unterbrochen",
|
"invalid_map": "Kartenname falsch eingegeben!",
|
||||||
"unpause": "Spiel wurde fortgesetzt",
|
"loading_map": "Neue Karte wird geladen",
|
||||||
"healed": "Du wurdest geheilt.",
|
|
||||||
"game_start": "Spiel gestartet!",
|
"pause": "Spiel wurde unterbrochen",
|
||||||
"reload": "Sprachen und Konfigurationen wurden neu geladen.",
|
"unpause": "Spiel wurde fortgesetzt",
|
||||||
"hud_on": "HUD wurde aktiviert.",
|
"healed": "Du wurdest geheilt.",
|
||||||
"hud_off": "HUD wurde deaktiviert.",
|
"game_start": "Spiel gestartet!",
|
||||||
|
"reload": "Sprachen und Konfigurationen wurden neu geladen.",
|
||||||
"vote_started": "Abstimmung gestartet: ‚{0}‘",
|
"hud_on": "HUD wurde aktiviert.",
|
||||||
"vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
|
"hud_off": "HUD wurde deaktiviert.",
|
||||||
"vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
|
|
||||||
"vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
|
"vote_started": "Abstimmung gestartet: ‚{0}‘",
|
||||||
"vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
|
"vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
|
||||||
"vote_alredy_voted": "Du hast bereits abgestimmt!",
|
"vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
|
||||||
"vote_vote": "Abstimmen",
|
"vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
|
||||||
|
"vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
|
||||||
"bombsite_a": "Bombenplatz A",
|
"vote_alredy_voted": "Du hast bereits abgestimmt!",
|
||||||
"bombsite_b": "Bombenplatz B",
|
"vote_vote": "Abstimmen",
|
||||||
"bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
|
|
||||||
|
"bombsite_a": "Bombenplatz A",
|
||||||
"teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
|
"bombsite_b": "Bombenplatz B",
|
||||||
"summary": "Zusammenfassung der letzten runde",
|
"bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S – Scrollen",
|
"teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
|
||||||
"menu_controlls_padding": " | ",
|
"summary": "Zusammenfassung der letzten runde",
|
||||||
"menu_controlls_select": "E – Auswählen"
|
|
||||||
|
"menu_controlls_scroll": "W/S – Scrollen",
|
||||||
|
"menu_controlls_padding": " | ",
|
||||||
|
"menu_controlls_select": "E – Auswählen"
|
||||||
}
|
}
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"bankrupt_player_info": "Player '{0}' has gone bankrupt.",
|
"bankrupt_player_info": "Player '{0}' has gone bankrupt.",
|
||||||
"bankrupt_select_info": "Pick a player to go bankrupt:",
|
"bankrupt_select_info": "Pick a player to go bankrupt:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Death Bomb",
|
||||||
"muhammed_desc": "You explode upon death, killing nearby players",
|
"deathbomb_desc": "You explode upon death, killing nearby players",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
|
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
|
||||||
|
|
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
|
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
|
||||||
"bankrupt_select_info": "Mettre un joueur en faillite :",
|
"bankrupt_select_info": "Mettre un joueur en faillite :",
|
||||||
|
|
||||||
"muhammed": "Bombe",
|
"deathbomb": "Bombe",
|
||||||
"muhammed_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
"deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
|
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
|
||||||
|
|
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
|
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
|
||||||
"moneyswap_select_info": "Zamień się kasą z graczem:",
|
"moneyswap_select_info": "Zamień się kasą z graczem:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Ludzka bomba",
|
||||||
"muhammed_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
"deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
|
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
|
||||||
|
|
|
||||||
|
|
@ -52,10 +52,10 @@
|
||||||
|
|
||||||
"blademaster": "Mestre das Lâminas",
|
"blademaster": "Mestre das Lâminas",
|
||||||
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
|
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
|
||||||
|
|
||||||
"bunnyhop": "Coelho",
|
"bunnyhop": "Coelho",
|
||||||
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
||||||
|
|
||||||
"c4camouflage": "Camuflagem C4",
|
"c4camouflage": "Camuflagem C4",
|
||||||
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
|
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
|
||||||
|
|
||||||
|
|
@ -68,122 +68,122 @@
|
||||||
"catapult": "Catapulta",
|
"catapult": "Catapulta",
|
||||||
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
|
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
|
||||||
"catapult_desc2": "Sua chance de lançar um inimigo ao acertá-lo é: {0}%",
|
"catapult_desc2": "Sua chance de lançar um inimigo ao acertá-lo é: {0}%",
|
||||||
|
|
||||||
"chicken": "Galinha",
|
"chicken": "Galinha",
|
||||||
"chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
|
"chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
|
||||||
|
|
||||||
"chillout": "Esqueci a Senha",
|
"chillout": "Esqueci a Senha",
|
||||||
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
|
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
|
||||||
|
|
||||||
"cutter": "Corte Rápido",
|
"cutter": "Corte Rápido",
|
||||||
"cutter_desc": "Você mata instantaneamente com a faca",
|
"cutter_desc": "Você mata instantaneamente com a faca",
|
||||||
|
|
||||||
"cypher": "CFTV",
|
"cypher": "CFTV",
|
||||||
"cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
|
"cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
|
||||||
"cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
|
"cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
|
||||||
|
|
||||||
"darkness": "Escuridão",
|
"darkness": "Escuridão",
|
||||||
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
||||||
"darkness_enemy_info": "Que as luzes se apaguem.",
|
"darkness_enemy_info": "Que as luzes se apaguem.",
|
||||||
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
|
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
|
||||||
"darkness_select_info": "Escolha jogador: escuridão:",
|
"darkness_select_info": "Escolha jogador: escuridão:",
|
||||||
|
|
||||||
"deactivator": "Desativador",
|
"deactivator": "Desativador",
|
||||||
"deactivator_desc": "Escolha um jogador para desativar a habilidade",
|
"deactivator_desc": "Escolha um jogador para desativar a habilidade",
|
||||||
"deactivator_enemy_info": "Sua habilidade foi desativada.",
|
"deactivator_enemy_info": "Sua habilidade foi desativada.",
|
||||||
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
|
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
|
||||||
"deactivator_select_info": "Desativar skill do jogador:",
|
"deactivator_select_info": "Desativar skill do jogador:",
|
||||||
|
|
||||||
"deaf": "Surdo",
|
"deaf": "Surdo",
|
||||||
"deaf_desc": "Escolha um jogador para desativar todos os sons",
|
"deaf_desc": "Escolha um jogador para desativar todos os sons",
|
||||||
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
|
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
|
||||||
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
||||||
"deaf_select_info": "Silenciar jogador:",
|
"deaf_select_info": "Silenciar jogador:",
|
||||||
|
|
||||||
"disarmament": "Desarmamento",
|
"disarmament": "Desarmamento",
|
||||||
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
|
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
|
||||||
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
|
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
|
||||||
|
|
||||||
"distancer": "Medidor de Distância",
|
"distancer": "Medidor de Distância",
|
||||||
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
|
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
|
||||||
|
|
||||||
"dash": "Impulso",
|
"dash": "Impulso",
|
||||||
"dash_desc": "Pule novamente para receber um impulso",
|
"dash_desc": "Pule novamente para receber um impulso",
|
||||||
|
|
||||||
"dracula": "Drácula",
|
"dracula": "Drácula",
|
||||||
"dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
|
"dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
|
||||||
|
|
||||||
"duplicator": "ctrl+c ctrl+v",
|
"duplicator": "ctrl+c ctrl+v",
|
||||||
"duplicator_desc": "Escolha um jogador para copiar a habilidade",
|
"duplicator_desc": "Escolha um jogador para copiar a habilidade",
|
||||||
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
|
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
|
||||||
"duplicator_select_info": "Copiar skill do jogador:",
|
"duplicator_select_info": "Copiar skill do jogador:",
|
||||||
|
|
||||||
"dwarf": "Anão",
|
"dwarf": "Anão",
|
||||||
"dwarf_desc": "Sua altura agora é aleatória",
|
"dwarf_desc": "Sua altura agora é aleatória",
|
||||||
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
|
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
|
||||||
|
|
||||||
"enemyspawn": "Spawn Inimigo",
|
"enemyspawn": "Spawn Inimigo",
|
||||||
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
|
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
|
||||||
|
|
||||||
"explosiveshot": "Tiro Explosivo",
|
"explosiveshot": "Tiro Explosivo",
|
||||||
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
|
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
|
||||||
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
|
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
|
||||||
|
|
||||||
"falconeye": "Olho de Águia",
|
"falconeye": "Olho de Águia",
|
||||||
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
|
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
|
||||||
|
|
||||||
"fastreload": "Recarga Rápida",
|
"fastreload": "Recarga Rápida",
|
||||||
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
|
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
|
||||||
|
|
||||||
"flash": "Ligeirinho",
|
"flash": "Ligeirinho",
|
||||||
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
|
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
|
||||||
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
|
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
|
||||||
|
|
||||||
"fortnite": "Fortnite",
|
"fortnite": "Fortnite",
|
||||||
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
|
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
|
||||||
|
|
||||||
"fragilebomb": "Bomba Frágil",
|
"fragilebomb": "Bomba Frágil",
|
||||||
"fragilebomb_desc": "Atirar na bomba a danifica",
|
"fragilebomb_desc": "Atirar na bomba a danifica",
|
||||||
"fragilebomb_bomb_health": "Vida da bomba",
|
"fragilebomb_bomb_health": "Vida da bomba",
|
||||||
|
|
||||||
"friendlyfire": "Fogo Amigo",
|
"friendlyfire": "Fogo Amigo",
|
||||||
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
|
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
|
||||||
|
|
||||||
"frozendecoy": "Decoy Congelante",
|
"frozendecoy": "Decoy Congelante",
|
||||||
"frozendecoy_desc": "Sua decoy congela os players próximos",
|
"frozendecoy_desc": "Sua decoy congela os players próximos",
|
||||||
|
|
||||||
"gambler": "Tigrinho",
|
"gambler": "Tigrinho",
|
||||||
"gambler_desc": "Selecione uma habilidade da lista.",
|
"gambler_desc": "Selecione uma habilidade da lista.",
|
||||||
"gambler_select_info": "Escolha sua habilidade:",
|
"gambler_select_info": "Escolha sua habilidade:",
|
||||||
"gambler_more": "#00FF00|Atualizar por ${0}",
|
"gambler_more": "#00FF00|Atualizar por ${0}",
|
||||||
"gambler_no_money": "Yetersiz bakiye.",
|
"gambler_no_money": "Yetersiz bakiye.",
|
||||||
|
|
||||||
"ghost": "Fantasma",
|
"ghost": "Fantasma",
|
||||||
"ghost_desc": "Você é completamente invisível",
|
"ghost_desc": "Você é completamente invisível",
|
||||||
|
|
||||||
"glaz": "Smoke Transparente",
|
"glaz": "Smoke Transparente",
|
||||||
"glaz_desc": "Smokes tornam-se transparentes para você",
|
"glaz_desc": "Smokes tornam-se transparentes para você",
|
||||||
|
|
||||||
"glitch": "Sem Mapa",
|
"glitch": "Sem Mapa",
|
||||||
"glitch_desc": "Desativa o radar de um inimigo escolhido",
|
"glitch_desc": "Desativa o radar de um inimigo escolhido",
|
||||||
"glitch_enemy_info": "Seu radar foi desativado.",
|
"glitch_enemy_info": "Seu radar foi desativado.",
|
||||||
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
|
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
|
||||||
"glitch_select_info": "Desativar radar do jogador:",
|
"glitch_select_info": "Desativar radar do jogador:",
|
||||||
|
|
||||||
"glue": "Semtex",
|
"glue": "Semtex",
|
||||||
"glue_desc": "Suas granadas grudam nas paredes",
|
"glue_desc": "Suas granadas grudam nas paredes",
|
||||||
|
|
||||||
"godmode": "Modo Deus",
|
"godmode": "Modo Deus",
|
||||||
"godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos",
|
"godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos",
|
||||||
"godmode_off": "Imortalidade desativada",
|
"godmode_off": "Imortalidade desativada",
|
||||||
"godmode_on": "Imortalidade ativada",
|
"godmode_on": "Imortalidade ativada",
|
||||||
|
|
||||||
"grenadier": "Bomberman",
|
"grenadier": "Bomberman",
|
||||||
"grenadier_desc": "Você tem HEs infinitas",
|
"grenadier_desc": "Você tem HEs infinitas",
|
||||||
|
|
||||||
"healingsmoke": "Smoke Amiga",
|
"healingsmoke": "Smoke Amiga",
|
||||||
"healingsmoke_desc": "Suas smokes curam",
|
"healingsmoke_desc": "Suas smokes curam",
|
||||||
|
|
||||||
"hermit": "Sanguessuga",
|
"hermit": "Sanguessuga",
|
||||||
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
|
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
|
||||||
|
|
||||||
|
|
@ -199,7 +199,7 @@
|
||||||
|
|
||||||
"iana": "Holograma",
|
"iana": "Holograma",
|
||||||
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
|
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
|
||||||
|
|
||||||
"illiterate": "Analfabeto",
|
"illiterate": "Analfabeto",
|
||||||
"illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler",
|
"illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler",
|
||||||
|
|
||||||
|
|
@ -208,10 +208,10 @@
|
||||||
|
|
||||||
"impostor": "Impostor",
|
"impostor": "Impostor",
|
||||||
"impostor_desc": "Você começa a rodada vestido do time inimigo",
|
"impostor_desc": "Você começa a rodada vestido do time inimigo",
|
||||||
|
|
||||||
"infiniteammo": "Munição Infinita",
|
"infiniteammo": "Munição Infinita",
|
||||||
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
|
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
|
||||||
|
|
||||||
"jackal": "Lesma",
|
"jackal": "Lesma",
|
||||||
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
|
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
|
||||||
|
|
||||||
|
|
@ -220,37 +220,37 @@
|
||||||
"jammer_enemy_info": "Sua mira foi desativada.",
|
"jammer_enemy_info": "Sua mira foi desativada.",
|
||||||
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
|
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
|
||||||
"jammer_select_info": "Desativar mira do jogador:",
|
"jammer_select_info": "Desativar mira do jogador:",
|
||||||
|
|
||||||
"jester": "Palhaço",
|
"jester": "Palhaço",
|
||||||
"jester_desc": "No modo bobo você não pode causar nem receber dano. Esse modo muda a cada poucos segundos.",
|
"jester_desc": "No modo bobo você não pode causar nem receber dano. Esse modo muda a cada poucos segundos.",
|
||||||
"jester_mode": "Modo Palhaço",
|
"jester_mode": "Modo Palhaço",
|
||||||
"jester_on": "LIG.",
|
"jester_on": "LIG.",
|
||||||
"jester_off": "DESL.",
|
"jester_off": "DESL.",
|
||||||
|
|
||||||
"jumpban": "Perneta",
|
"jumpban": "Perneta",
|
||||||
"jumpban_desc": "Escolha um jogador que não poderá pular",
|
"jumpban_desc": "Escolha um jogador que não poderá pular",
|
||||||
"jumpban_enemy_info": "Cortaram as suas pernas.",
|
"jumpban_enemy_info": "Cortaram as suas pernas.",
|
||||||
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
|
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
|
||||||
"jumpban_select_info": "Banir pulo do jogador:",
|
"jumpban_select_info": "Banir pulo do jogador:",
|
||||||
|
|
||||||
"jumpingjack": "Pula-Pula",
|
"jumpingjack": "Pula-Pula",
|
||||||
"jumpingjack_desc": "Pular restaura vida",
|
"jumpingjack_desc": "Pular restaura vida",
|
||||||
|
|
||||||
"killerflash": "Flash Mortal",
|
"killerflash": "Flash Mortal",
|
||||||
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
|
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
|
||||||
|
|
||||||
"lifeswap": "Troca de Vida",
|
"lifeswap": "Troca de Vida",
|
||||||
"lifeswap_desc": "Escolha um jogador para trocar de vida",
|
"lifeswap_desc": "Escolha um jogador para trocar de vida",
|
||||||
"lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
|
"lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
|
||||||
"lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
|
"lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
|
||||||
"lifeswap_select_info": "Trocar de vida com jogador:",
|
"lifeswap_select_info": "Trocar de vida com jogador:",
|
||||||
|
|
||||||
"longknife": "Espada",
|
"longknife": "Espada",
|
||||||
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
|
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
|
||||||
|
|
||||||
"longzeus": "Zeus Longo",
|
"longzeus": "Zeus Longo",
|
||||||
"longzeus_desc": "Zeus causa dano independentemente da distância",
|
"longzeus_desc": "Zeus causa dano independentemente da distância",
|
||||||
|
|
||||||
"magneticdecoy": "Decoy Magnético",
|
"magneticdecoy": "Decoy Magnético",
|
||||||
"magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo",
|
"magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo",
|
||||||
|
|
||||||
|
|
@ -262,10 +262,10 @@
|
||||||
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
|
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
|
||||||
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
|
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
|
||||||
"magnifier_select_info": "Ampliar tela do jogador:",
|
"magnifier_select_info": "Ampliar tela do jogador:",
|
||||||
|
|
||||||
"medic": "Médico",
|
"medic": "Médico",
|
||||||
"medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
|
"medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
|
||||||
|
|
||||||
"miner": "Mineiro de Bombas",
|
"miner": "Mineiro de Bombas",
|
||||||
"miner_desc": "Sua granada HE só explode quando há um inimigo por perto",
|
"miner_desc": "Sua granada HE só explode quando há um inimigo por perto",
|
||||||
|
|
||||||
|
|
@ -274,131 +274,131 @@
|
||||||
"moneyswap_enemy_info": "Você provavelmente virou classe B",
|
"moneyswap_enemy_info": "Você provavelmente virou classe B",
|
||||||
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
||||||
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Bomba mortal",
|
||||||
"muhammed_desc": "Você explode ao morrer, matando os jogadores próximos",
|
"deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
|
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
|
||||||
|
|
||||||
"nonades": "Imune a Granadas",
|
"nonades": "Imune a Granadas",
|
||||||
"nonades_desc": "Granadas não causam dano a você",
|
"nonades_desc": "Granadas não causam dano a você",
|
||||||
|
|
||||||
"norecoil": "Sem Recoil",
|
"norecoil": "Sem Recoil",
|
||||||
"norecoil_desc": "Sem recoil ao atirar",
|
"norecoil_desc": "Sem recoil ao atirar",
|
||||||
|
|
||||||
"noclip": "NoClip",
|
"noclip": "NoClip",
|
||||||
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
|
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
|
||||||
|
|
||||||
"oneshot": "Ignorante",
|
"oneshot": "Ignorante",
|
||||||
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
|
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
|
||||||
|
|
||||||
"onlyhead": "Só na Cabeçinha",
|
"onlyhead": "Só na Cabeçinha",
|
||||||
"onlyhead_desc": "Você só recebe headshot",
|
"onlyhead_desc": "Você só recebe headshot",
|
||||||
|
|
||||||
"paweljumper": "Parkourista",
|
"paweljumper": "Parkourista",
|
||||||
"paweljumper_desc": "Você recebe um número aleatório de pulos extras",
|
"paweljumper_desc": "Você recebe um número aleatório de pulos extras",
|
||||||
"paweljumper_desc2": "Você ganha {0} pulos extras",
|
"paweljumper_desc2": "Você ganha {0} pulos extras",
|
||||||
|
|
||||||
"phoenix": "Fênix",
|
"phoenix": "Fênix",
|
||||||
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
|
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
|
||||||
"phoenix_desc2": "Sua chance de renascer após a morte: {0}%",
|
"phoenix_desc2": "Sua chance de renascer após a morte: {0}%",
|
||||||
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
|
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
|
||||||
|
|
||||||
"psychicdefusing": "Desarme Psíquico",
|
"psychicdefusing": "Desarme Psíquico",
|
||||||
"psychicdefusing_desc": "Quando você está proximo da bomba, começa a desarmá-la automaticamente",
|
"psychicdefusing_desc": "Quando você está proximo da bomba, começa a desarmá-la automaticamente",
|
||||||
"psychicdefusing_hud_info": "{0} segundos restantes para desarmar",
|
"psychicdefusing_hud_info": "{0} segundos restantes para desarmar",
|
||||||
|
|
||||||
"pilot": "Jetpack",
|
"pilot": "Jetpack",
|
||||||
"pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar",
|
"pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar",
|
||||||
"pilot_hud_info": "Combustível",
|
"pilot_hud_info": "Combustível",
|
||||||
|
|
||||||
"planter": "Meu Bombsite Minha Vida",
|
"planter": "Meu Bombsite Minha Vida",
|
||||||
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
|
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
|
||||||
"planter_planting": "Plantando ({0})...",
|
"planter_planting": "Plantando ({0})...",
|
||||||
|
|
||||||
"poison": "Veneno",
|
"poison": "Veneno",
|
||||||
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
|
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
|
||||||
"poison_enemy_info": "Você foi envenenado.",
|
"poison_enemy_info": "Você foi envenenado.",
|
||||||
"poison_player_info": "O jogador '{0}' foi envenenado.",
|
"poison_player_info": "O jogador '{0}' foi envenenado.",
|
||||||
"poison_select_info": "Envenenar jogador:",
|
"poison_select_info": "Envenenar jogador:",
|
||||||
|
|
||||||
"primaryban": "Sem Rifle",
|
"primaryban": "Sem Rifle",
|
||||||
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
|
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
|
||||||
"primaryban_enemy_info": "Você não pode mais usar rifles.",
|
"primaryban_enemy_info": "Você não pode mais usar rifles.",
|
||||||
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
|
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
|
||||||
"primaryban_select_info": "Banir rifles do jogador:",
|
"primaryban_select_info": "Banir rifles do jogador:",
|
||||||
|
|
||||||
"prosthesis": "Prótese",
|
"prosthesis": "Prótese",
|
||||||
"prosthesis_desc": "Braços e pernas são à prova de balas",
|
"prosthesis_desc": "Braços e pernas são à prova de balas",
|
||||||
|
|
||||||
"push": "Empurrão",
|
"push": "Empurrão",
|
||||||
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
|
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
|
||||||
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
|
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
|
||||||
|
|
||||||
"pyro": "Pirotecnia",
|
"pyro": "Pirotecnia",
|
||||||
"pyro_desc": "Molotov recupera vida",
|
"pyro_desc": "Molotov recupera vida",
|
||||||
|
|
||||||
"quickshot": "Tiro Rápido",
|
"quickshot": "Tiro Rápido",
|
||||||
"quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
|
"quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
|
||||||
|
|
||||||
"radarhack": "Hack de Mapa",
|
"radarhack": "Hack de Mapa",
|
||||||
"radarhack_desc": "Inimigos são visíveis no mapa",
|
"radarhack_desc": "Inimigos são visíveis no mapa",
|
||||||
|
|
||||||
"rambo": "Rambo",
|
"rambo": "Rambo",
|
||||||
"rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada",
|
"rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada",
|
||||||
|
|
||||||
"randomweapon": "Arma Aleatória",
|
"randomweapon": "Arma Aleatória",
|
||||||
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
|
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
|
||||||
|
|
||||||
"rezombie": "Walking Dead",
|
"rezombie": "Walking Dead",
|
||||||
"rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
|
"rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
|
||||||
|
|
||||||
"reactivearmor": "Armadura Reativa",
|
"reactivearmor": "Armadura Reativa",
|
||||||
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
|
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
|
||||||
|
|
||||||
"regeneration": "Regeneração",
|
"regeneration": "Regeneração",
|
||||||
"regeneration_desc": "Você restaura vida a cada poucos segundos",
|
"regeneration_desc": "Você restaura vida a cada poucos segundos",
|
||||||
|
|
||||||
"replicator": "Clone",
|
"replicator": "Clone",
|
||||||
"replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
|
"replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
|
||||||
|
|
||||||
"retreat": "De Volta as Origens",
|
"retreat": "De Volta as Origens",
|
||||||
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
|
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
|
||||||
|
|
||||||
"returntosender": "Devolução ao Remetente",
|
"returntosender": "Devolução ao Remetente",
|
||||||
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
|
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
|
||||||
|
|
||||||
"richboy": "Filhinho de Papai",
|
"richboy": "Filhinho de Papai",
|
||||||
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
|
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
|
||||||
|
|
||||||
"robinhood": "Robin Hood",
|
"robinhood": "Robin Hood",
|
||||||
"robinhood_desc": "Atirar em um inimigo rouba seu dinheiro",
|
"robinhood_desc": "Atirar em um inimigo rouba seu dinheiro",
|
||||||
|
|
||||||
"rubber": "Balas de Borracha",
|
"rubber": "Balas de Borracha",
|
||||||
"rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
|
"rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
|
||||||
|
|
||||||
"saper": "Especialista",
|
"saper": "Especialista",
|
||||||
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
|
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
|
||||||
|
|
||||||
"secondlife": "Segunda Chance",
|
"secondlife": "Segunda Chance",
|
||||||
"secondlife_desc": "Após morrer, você renasce com a mesma quantidade de vida",
|
"secondlife_desc": "Após morrer, você renasce com a mesma quantidade de vida",
|
||||||
|
|
||||||
"shade": "Sombra",
|
"shade": "Sombra",
|
||||||
"shade_desc": "Você tem uma chance aleatória de teletransportar para trás de um inimigo ao atingi-lo",
|
"shade_desc": "Você tem uma chance aleatória de teletransportar para trás de um inimigo ao atingi-lo",
|
||||||
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
|
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
|
||||||
"shade_nospace": "Sem espaço disponível",
|
"shade_nospace": "Sem espaço disponível",
|
||||||
|
|
||||||
"shortbomb": "Pavio Longo",
|
"shortbomb": "Pavio Longo",
|
||||||
"shortbomb_desc": "A bomba demora muito mais para explodir",
|
"shortbomb_desc": "A bomba demora muito mais para explodir",
|
||||||
|
|
||||||
"silent": "Shhhiu!",
|
"silent": "Shhhiu!",
|
||||||
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
|
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
|
||||||
|
|
||||||
"smoker": "Tiryaki",
|
"smoker": "Tiryaki",
|
||||||
"smoker_desc": "Sis bombalarınız asla bitmez",
|
"smoker_desc": "Sis bombalarınız asla bitmez",
|
||||||
|
|
||||||
"sniperelite": "Sniper do BOPE",
|
"sniperelite": "Sniper do BOPE",
|
||||||
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
|
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
|
||||||
"sniperelite_customname": "Keskin Nişancı Elit Yeteneği",
|
"sniperelite_customname": "Keskin Nişancı Elit Yeteneği",
|
||||||
|
|
@ -406,51 +406,51 @@
|
||||||
"soldier": "Soldado",
|
"soldier": "Soldado",
|
||||||
"soldier_desc": "Seus tiros causam mais dano",
|
"soldier_desc": "Seus tiros causam mais dano",
|
||||||
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
|
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
|
||||||
|
|
||||||
"soundmaker": "Criador de Som",
|
"soundmaker": "Criador de Som",
|
||||||
"soundmaker_desc": "Clique em [css_useSkill] para tocar um som para cada inimigo",
|
"soundmaker_desc": "Clique em [css_useSkill] para tocar um som para cada inimigo",
|
||||||
|
|
||||||
"spectator": "Espectador",
|
"spectator": "Espectador",
|
||||||
"spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório",
|
"spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório",
|
||||||
|
|
||||||
"swapposition": "Troca de Posição",
|
"swapposition": "Troca de Posição",
|
||||||
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
|
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
|
||||||
|
|
||||||
"teleporter": "Teletransportador",
|
"teleporter": "Teletransportador",
|
||||||
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
|
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
|
||||||
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
|
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
|
||||||
|
|
||||||
"thief": "Lula",
|
"thief": "Lula",
|
||||||
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
|
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
|
||||||
"thief_enemy_info": "Sua habilidade foi roubada.",
|
"thief_enemy_info": "Sua habilidade foi roubada.",
|
||||||
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
|
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
|
||||||
"thief_select_info": "Roubar skill do jogador:",
|
"thief_select_info": "Roubar skill do jogador:",
|
||||||
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
|
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
|
||||||
|
|
||||||
"thirdeye": "Terceiro Olho",
|
"thirdeye": "Terceiro Olho",
|
||||||
"thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
|
"thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
|
||||||
|
|
||||||
"thorns": "Porco Espinho",
|
"thorns": "Porco Espinho",
|
||||||
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
|
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
|
||||||
|
|
||||||
"throwingknife": "Faca de Arremesso",
|
"throwingknife": "Faca de Arremesso",
|
||||||
"throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros",
|
"throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros",
|
||||||
|
|
||||||
"toxicsmoke": "Smoke Tóxica",
|
"toxicsmoke": "Smoke Tóxica",
|
||||||
"toxicsmoke_desc": "Suas smokes causam dano",
|
"toxicsmoke_desc": "Suas smokes causam dano",
|
||||||
|
|
||||||
"wallhack": "Wallhack",
|
"wallhack": "Wallhack",
|
||||||
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
||||||
|
|
||||||
"watchmaker": "Relojoeiro",
|
"watchmaker": "Relojoeiro",
|
||||||
"watchmaker_desc": "Cada arremesso de granada altera o tempo da rodada",
|
"watchmaker_desc": "Cada arremesso de granada altera o tempo da rodada",
|
||||||
"watchmaker_ct": "Tempo da rodada reduzido em {0} segundos.",
|
"watchmaker_ct": "Tempo da rodada reduzido em {0} segundos.",
|
||||||
"watchmaker_tt": "Tempo da rodada estendido em {0} segundos.",
|
"watchmaker_tt": "Tempo da rodada estendido em {0} segundos.",
|
||||||
|
|
||||||
"weaponsswap": "Troca de Armas",
|
"weaponsswap": "Troca de Armas",
|
||||||
"weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório",
|
"weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório",
|
||||||
"weaponsswap_hud_info2": "Você não tem arma para trocar",
|
"weaponsswap_hud_info2": "Você não tem arma para trocar",
|
||||||
|
|
||||||
"weightless": "Gravidade Zero",
|
"weightless": "Gravidade Zero",
|
||||||
"weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido",
|
"weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido",
|
||||||
|
|
||||||
|
|
@ -461,24 +461,24 @@
|
||||||
|
|
||||||
"zeus": "Zeus",
|
"zeus": "Zeus",
|
||||||
"zeus_desc": "Zeus x27 recarrega instantaneamente",
|
"zeus_desc": "Zeus x27 recarrega instantaneamente",
|
||||||
|
|
||||||
"your_skill": "Sua habilidade atual",
|
"your_skill": "Sua habilidade atual",
|
||||||
"enemy_skill": "Habilidade do inimigo",
|
"enemy_skill": "Habilidade do inimigo",
|
||||||
"observer_skill": "Habilidade do jogador",
|
"observer_skill": "Habilidade do jogador",
|
||||||
"welcome_message": "Bem-vindo {PLAYER} ao {SERVER_NAME}!\nVersão atual do jRandomSkills: {VERSION} ({SKILLS_COUNT} habilidades).\n\nCriado originalmente por:\n{AUTHOR1}\nModificado e aprimorado por:\n{AUTHOR2}\nDiscord oficial: https://discord.gg/9H8EZYBpPF",
|
"welcome_message": "Bem-vindo {PLAYER} ao {SERVER_NAME}!\nVersão atual do jRandomSkills: {VERSION} ({SKILLS_COUNT} habilidades).\n\nCriado originalmente por:\n{AUTHOR1}\nModificado e aprimorado por:\n{AUTHOR2}\nDiscord oficial: https://discord.gg/9H8EZYBpPF",
|
||||||
"drawing_skill": "Sorteando uma habilidade",
|
"drawing_skill": "Sorteando uma habilidade",
|
||||||
"disabled_weapon": "Você não pode usar esta arma",
|
"disabled_weapon": "Você não pode usar esta arma",
|
||||||
|
|
||||||
"hud_info": "Espere mais {0} segundos",
|
"hud_info": "Espere mais {0} segundos",
|
||||||
"hud_info_no_enemy": "Nenhum inimigo encontrado",
|
"hud_info_no_enemy": "Nenhum inimigo encontrado",
|
||||||
"active_hud_info": "Ativo por mais {0} milissegundos",
|
"active_hud_info": "Ativo por mais {0} milissegundos",
|
||||||
|
|
||||||
"skills_menu": "Lista de Habilidades",
|
"skills_menu": "Lista de Habilidades",
|
||||||
"no_player": "Nenhum jogador correspondente encontrado.",
|
"no_player": "Nenhum jogador correspondente encontrado.",
|
||||||
"duplicate_player": "Mais de um jogador encontrado com o mesmo nome.",
|
"duplicate_player": "Mais de um jogador encontrado com o mesmo nome.",
|
||||||
"selectplayerskill_command": "Digite /t",
|
"selectplayerskill_command": "Digite /t",
|
||||||
"selectplayerskill_incorrect_enemy_index": "Não foram encontrados jogadores para selecionar.",
|
"selectplayerskill_incorrect_enemy_index": "Não foram encontrados jogadores para selecionar.",
|
||||||
|
|
||||||
"skill_not_found_setskill": "Nenhuma habilidade CHATCOLORS.RED encontrada",
|
"skill_not_found_setskill": "Nenhuma habilidade CHATCOLORS.RED encontrada",
|
||||||
"player_not_found_setskill": "Nenhum jogador CHATCOLORS.RED encontrado",
|
"player_not_found_setskill": "Nenhum jogador CHATCOLORS.RED encontrado",
|
||||||
"correct_form_setskill": "Uso correto: CHATCOLORS.RED!setskill <apelido> <habilidade>",
|
"correct_form_setskill": "Uso correto: CHATCOLORS.RED!setskill <apelido> <habilidade>",
|
||||||
|
|
@ -486,10 +486,10 @@
|
||||||
"done_setskill": "Habilidade definida",
|
"done_setskill": "Habilidade definida",
|
||||||
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
|
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
|
||||||
"for_setskill": "para",
|
"for_setskill": "para",
|
||||||
|
|
||||||
"invalid_map": "Nome do mapa inválido!",
|
"invalid_map": "Nome do mapa inválido!",
|
||||||
"loading_map": "Carregando um novo mapa",
|
"loading_map": "Carregando um novo mapa",
|
||||||
|
|
||||||
"pause": "Partida pausada.",
|
"pause": "Partida pausada.",
|
||||||
"unpause": "Partida retomada.",
|
"unpause": "Partida retomada.",
|
||||||
"healed": "Você foi curado.",
|
"healed": "Você foi curado.",
|
||||||
|
|
@ -497,7 +497,7 @@
|
||||||
"reload": "Os idiomas e as configurações foram recarregados.",
|
"reload": "Os idiomas e as configurações foram recarregados.",
|
||||||
"hud_on": "O HUD foi ativado.",
|
"hud_on": "O HUD foi ativado.",
|
||||||
"hud_off": "O HUD foi desativado.",
|
"hud_off": "O HUD foi desativado.",
|
||||||
|
|
||||||
"vote_started": "Votação iniciada: '{0}'",
|
"vote_started": "Votação iniciada: '{0}'",
|
||||||
"vote_timeout": "Votação '{0}' expirou!",
|
"vote_timeout": "Votação '{0}' expirou!",
|
||||||
"vote_wait": "Você precisa esperar antes de iniciar outra votação!",
|
"vote_wait": "Você precisa esperar antes de iniciar outra votação!",
|
||||||
|
|
@ -505,14 +505,14 @@
|
||||||
"vote_not_enough_players": "Não há jogadores suficientes para iniciar uma votação!",
|
"vote_not_enough_players": "Não há jogadores suficientes para iniciar uma votação!",
|
||||||
"vote_alredy_voted": "Você já votou!",
|
"vote_alredy_voted": "Você já votou!",
|
||||||
"vote_vote": "Votar",
|
"vote_vote": "Votar",
|
||||||
|
|
||||||
"bombsite_a": "Bombsite A",
|
"bombsite_a": "Bombsite A",
|
||||||
"bombsite_b": "Bombsite B",
|
"bombsite_b": "Bombsite B",
|
||||||
"bombplanted": "A bomba foi plantada\n{0} segundos até a detonação",
|
"bombplanted": "A bomba foi plantada\n{0} segundos até a detonação",
|
||||||
|
|
||||||
"teammate_skills": "Habilidades dos seus companheiros de equipe",
|
"teammate_skills": "Habilidades dos seus companheiros de equipe",
|
||||||
"summary": "Resumo da última rodada",
|
"summary": "Resumo da última rodada",
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Rolar",
|
"menu_controlls_scroll": "W/S - Rolar",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
"menu_controlls_select": "E - Selecionar"
|
"menu_controlls_select": "E - Selecionar"
|
||||||
|
|
|
||||||
519
jRandomSkills - SRC Files/src/lang/ru.json
Normal file
519
jRandomSkills - SRC Files/src/lang/ru.json
Normal file
|
|
@ -0,0 +1,519 @@
|
||||||
|
{
|
||||||
|
"none": "Нет навыка",
|
||||||
|
"none_desc": "У вас нет навыка",
|
||||||
|
|
||||||
|
"aimbot": "Аимбот",
|
||||||
|
"aimbot_desc": "Каждое ваше попадание считается хедшотом",
|
||||||
|
|
||||||
|
"aimlock": "Захват прицела",
|
||||||
|
"aimlock_desc": "Нажмите [css_useSkill], чтобы зафиксировать прицел на ближайшем враге",
|
||||||
|
|
||||||
|
"anomaly": "Аномалия",
|
||||||
|
"anomaly_desc": "Вы отматываете время на несколько секунд назад",
|
||||||
|
|
||||||
|
"antyflash": "Антифлеш",
|
||||||
|
"antyflash_desc": "Вы невосприимчивы к флешкам, а ваши флешки действуют 7 секунд",
|
||||||
|
|
||||||
|
"antyhead": "Железная голова",
|
||||||
|
"antyhead_desc": "Вы не получаете урон от выстрелов в голову",
|
||||||
|
|
||||||
|
"areareaper": "Жнец зоны",
|
||||||
|
"areareaper_desc": "Вы можете выбрать бомб-сайт для деактивации",
|
||||||
|
"areareaper_incorrect_site": "Такой бомб-сайт не найден.",
|
||||||
|
"areareaper_no_site": "Бомб-сайты не найдены.",
|
||||||
|
"areareaper_select_info": "Выберите сайт для деактивации:",
|
||||||
|
"areareaper_site_disabled": "Бомб-сайт {0} деактивирован — бомбу нельзя установить там!",
|
||||||
|
"areareaper_used_info": "Ваш навык уже был использован.",
|
||||||
|
"areareaper_bombsite_disabled": "Этот бомб-сайт отключён!",
|
||||||
|
|
||||||
|
"armored": "Бронированный",
|
||||||
|
"armored_desc": "У вас случайный множитель получаемого урона",
|
||||||
|
"armored_desc2": "Ваш множитель получаемого урона: {0}x",
|
||||||
|
|
||||||
|
"assassin": "Ассасин",
|
||||||
|
"assassin_desc": "Вы наносите увеличенный урон врагам со спины",
|
||||||
|
|
||||||
|
"astronaut": "Астронавт",
|
||||||
|
"astronaut_desc": "В начале раунда вам выдаётся случайное значение гравитации",
|
||||||
|
"astronaut_desc2": "Ваша случайная гравитация: {0}x",
|
||||||
|
|
||||||
|
"moneyswap": "Налоговик",
|
||||||
|
"moneyswap_desc": "Выберите игрока для обмена деньгами",
|
||||||
|
"moneyswap_enemy_info": "Налоговая служба добралась до вас.",
|
||||||
|
"moneyswap_player_info": "Вы обменялись деньгами с игроком '{0}'.",
|
||||||
|
"moneyswap_select_info": "Обменять деньги с игроком:",
|
||||||
|
|
||||||
|
"baseball": "Бейсболист",
|
||||||
|
"baseball_desc": "Ваша ложная граната отскакивает от стен и мгновенно убивает врага при попадании",
|
||||||
|
|
||||||
|
"behind": "Разворот врага",
|
||||||
|
"behind_desc": "Есть шанс развернуть врага на 180° при попадании",
|
||||||
|
"behind_desc2": "Ваш шанс развернуть врага при попадании: {0}%",
|
||||||
|
|
||||||
|
"blademaster": "Мастер клинка",
|
||||||
|
"blademaster_desc": "С ножом в руках у вас высокий шанс отразить выстрел",
|
||||||
|
|
||||||
|
"bunnyhop": "Заяц",
|
||||||
|
"bunnyhop_desc": "Вы получаете автоматический «БанниХоп»",
|
||||||
|
|
||||||
|
"c4camouflage": "Маскировка бомбы",
|
||||||
|
"c4camouflage_desc": "Вы невидимы, пока несёте бомбу",
|
||||||
|
|
||||||
|
"carefulbullets": "Осторожные пули",
|
||||||
|
"carefulbullets_desc": "Выберите игрока, который будет получать урон за каждое ваше промахивание",
|
||||||
|
"carefulbullets_enemy_info": "Точность теперь буквально имеет значение.",
|
||||||
|
"carefulbullets_player_info": "'{0}' теперь должен быть осторожнее.",
|
||||||
|
"carefulbullets_select_info": "Промахи ранят игрока:",
|
||||||
|
|
||||||
|
"catapult": "Катапульта",
|
||||||
|
"catapult_desc": "Есть шанс подбросить врага вверх при попадании",
|
||||||
|
"catapult_desc2": "Ваш шанс подбросить врага при попадании: {0}%",
|
||||||
|
|
||||||
|
"chicken": "Курица",
|
||||||
|
"chicken_desc": "Вы получаете модель курицы + 10% к скорости передвижения - 50 HP",
|
||||||
|
|
||||||
|
"chillout": "Чилл",
|
||||||
|
"chillout_desc": "Установка бомбы занимает значительно больше времени",
|
||||||
|
|
||||||
|
"cutter": "Резак",
|
||||||
|
"cutter_desc": "Мгновенное убийство ножом",
|
||||||
|
|
||||||
|
"cypher": "Шифровальщик",
|
||||||
|
"cypher_desc": "Нажмите [css_useSkill], чтобы создать/переключиться на камеру",
|
||||||
|
"cypher_nospace": "Камера должна быть расположена под прямым углом к стене",
|
||||||
|
|
||||||
|
"darkness": "Тьма",
|
||||||
|
"darkness_desc": "Накладывает эффекть тьмы на выбранного врага",
|
||||||
|
"darkness_enemy_info": "Пусть свет погаснет.",
|
||||||
|
"darkness_player_info": "Тьма охватила игрока '{0}'.",
|
||||||
|
"darkness_select_info": "Выберите игрока для тьмы:",
|
||||||
|
|
||||||
|
"deactivator": "Деактиватор",
|
||||||
|
"deactivator_desc": "Выберите игрока, чей навык вы хотите отключить",
|
||||||
|
"deactivator_enemy_info": "Ваш навык был отключён.",
|
||||||
|
"deactivator_player_info": "Навык игрока '{0}' был отключён.",
|
||||||
|
"deactivator_select_info": "Отключить навык игрока:",
|
||||||
|
|
||||||
|
"deaf": "Глухой",
|
||||||
|
"deaf_desc": "Выберите игрока, у которого будет отключён весь звук",
|
||||||
|
"deaf_enemy_info": "Ваши наушники покинули игру.",
|
||||||
|
"deaf_player_info": "Звук отключён для игрока '{0}'.",
|
||||||
|
"deaf_select_info": "Отключить звук для игрока:",
|
||||||
|
|
||||||
|
"disarmament": "Разоружение",
|
||||||
|
"disarmament_desc": "Есть шанс заставить врага выронить оружие при попадании",
|
||||||
|
"disarmament_desc2": "Ваш шанс разоружить врага: {0}%",
|
||||||
|
|
||||||
|
"distancer": "Дальномер",
|
||||||
|
"distancer_desc": "Вы можете видеть расстояние до ближайшего врага",
|
||||||
|
|
||||||
|
"dash": "Рывок",
|
||||||
|
"dash_desc": "Выполните второй прыжок для рывка",
|
||||||
|
|
||||||
|
"dracula": "Дракула",
|
||||||
|
"dracula_desc": "Попадание по врагу восстанавливает здоровье в размере процента от нанесённого урона",
|
||||||
|
|
||||||
|
"duplicator": "Дупликатор",
|
||||||
|
"duplicator_desc": "Выберите игрока, чтобы скопировать его навык",
|
||||||
|
"duplicator_player_info": "Навык игрока '{0}' был скопирован.",
|
||||||
|
"duplicator_select_info": "Скопировать навык игрока:",
|
||||||
|
|
||||||
|
"dwarf": "Гном",
|
||||||
|
"dwarf_desc": "Случайный размер персонажа в начале раунда",
|
||||||
|
"dwarf_desc2": "Ваш множитель размера: {0}x",
|
||||||
|
|
||||||
|
"enemyspawn": "Спавн врагов",
|
||||||
|
"enemyspawn_desc": "Нажмите [css_useSkill], чтобы телепортироваться на спавн врагов",
|
||||||
|
|
||||||
|
"explosiveshot": "Взрывной выстрел",
|
||||||
|
"explosiveshot_desc": "Случайный шанс выстрелить взрывной пулей при стрельбе",
|
||||||
|
"explosiveshot_desc2": "Ваш шанс выстрелить взрывной пулей: {0}%",
|
||||||
|
|
||||||
|
"falconeye": "Глаз сокола",
|
||||||
|
"falconeye_desc": "Нажмите [css_useSkill], чтобы активировать камеру с высоты птичьего полёта",
|
||||||
|
|
||||||
|
"fastreload": "Быстрая перезарядка",
|
||||||
|
"fastreload_desc": "Нажмите [css_useSkill], чтобы перезарядить текущее оружие",
|
||||||
|
|
||||||
|
"flash": "Флеш",
|
||||||
|
"flash_desc": "Случайная скорость игрока в начале раунда",
|
||||||
|
"flash_desc2": "Ваш множитель скорости: {0}x",
|
||||||
|
|
||||||
|
"fortnite": "Фортнайт",
|
||||||
|
"fortnite_desc": "Нажмите [css_useSkill], чтобы создать разрушаемую баррикаду",
|
||||||
|
|
||||||
|
"fragilebomb": "Хрупкая бомба",
|
||||||
|
"fragilebomb_desc": "Стрельба по бомбе повреждает её",
|
||||||
|
"fragilebomb_bomb_health": "Здоровье бомбы",
|
||||||
|
|
||||||
|
"friendlyfire": "Дружественный огонь",
|
||||||
|
"friendlyfire_desc": "Стрельба по союзникам лечит их",
|
||||||
|
|
||||||
|
"frozendecoy": "Замораживающая ловушка",
|
||||||
|
"frozendecoy_desc": "Ваша ложная граната замораживает всех ближайших игроков",
|
||||||
|
|
||||||
|
"gambler": "Азартный игрок",
|
||||||
|
"gambler_desc": "Выберите навык из предложенного списка.",
|
||||||
|
"gambler_select_info": "Выберите ваш навык:",
|
||||||
|
"gambler_more": "#00FF00|Обновить за ${0}",
|
||||||
|
"gambler_no_money": "Недостаточно денег.",
|
||||||
|
|
||||||
|
"ghost": "Призрак",
|
||||||
|
"ghost_desc": "Вы полностью невидимы",
|
||||||
|
|
||||||
|
"glaz": "Глаз",
|
||||||
|
"glaz_desc": "Вы видите сквозь дымовые гранаты",
|
||||||
|
|
||||||
|
"glitch": "Глитч",
|
||||||
|
"glitch_desc": "Отключает радар выбранному врагу",
|
||||||
|
"glitch_enemy_info": "Ваш радар был отключён.",
|
||||||
|
"glitch_player_info": "Радар игрока '{0}' был отключён.",
|
||||||
|
"glitch_select_info": "Отключить радар игроку:",
|
||||||
|
|
||||||
|
"glue": "Клей",
|
||||||
|
"glue_desc": "Ваши гранаты прилипают к стенам",
|
||||||
|
|
||||||
|
"godmode": "Режим бога",
|
||||||
|
"godmode_desc": "Нажмите [css_useSkill], чтобы стать неуязвимым на короткое время",
|
||||||
|
"godmode_off": "Неуязвимость отключена",
|
||||||
|
"godmode_on": "Неуязвимость включена",
|
||||||
|
|
||||||
|
"grenadier": "Гренадёр",
|
||||||
|
"grenadier_desc": "У вас бесконечные осколочные гранаты",
|
||||||
|
|
||||||
|
"healingsmoke": "Лечащий дым",
|
||||||
|
"healingsmoke_desc": "Ваши дымовые гранаты лечат",
|
||||||
|
|
||||||
|
"hermit": "Отшельник",
|
||||||
|
"hermit_desc": "Убийства восстанавливают боеприпасы и часть здоровья",
|
||||||
|
|
||||||
|
"holyhandgrenade": "Святая граната",
|
||||||
|
"holyhandgrenade_desc": "Ваши осколочные гранаты наносят двойной урон и имеют двойную дальность",
|
||||||
|
|
||||||
|
"homingnades": "Самонаводящиеся гранаты",
|
||||||
|
"homingnades_desc": "Ваши гранаты (кроме дымовых) притягиваются к врагам",
|
||||||
|
|
||||||
|
"hotbomb": "Горячая бомба",
|
||||||
|
"hotbomb_desc": "Пока вы живы, бомба наносит урон её носителю",
|
||||||
|
"hotbomb_hint": "Осторожно, бомба горячая!",
|
||||||
|
|
||||||
|
"iana": "Голограмма",
|
||||||
|
"iana_desc": "Нажмите [css_useSkill], чтобы управлять своей голограммой несколько секунд",
|
||||||
|
|
||||||
|
"illiterate": "Неграмотный",
|
||||||
|
"illiterate_desc": "Пока вы живы, ваши враги не могут читать (чат)",
|
||||||
|
|
||||||
|
"illusionist": "Иллюзионист",
|
||||||
|
"illusionist_desc": "Нажмите [css_useSkill], чтобы создать копию, идущую вперёд",
|
||||||
|
|
||||||
|
"impostor": "Импостер",
|
||||||
|
"impostor_desc": "Вы начинаете раунд с моделью игрока вражеской команды",
|
||||||
|
|
||||||
|
"infiniteammo": "Бесконечные патроны",
|
||||||
|
"infiniteammo_desc": "Вы получаете бесконечные патроны для всего оружия",
|
||||||
|
|
||||||
|
"jackal": "Трекер",
|
||||||
|
"jackal_desc": "Каждый противник оставляет за собой след",
|
||||||
|
|
||||||
|
"jammer": "Глушилка",
|
||||||
|
"jammer_desc": "Выберите игрока, чтобы отключить его прицел",
|
||||||
|
"jammer_enemy_info": "Ваш прицел был отключён.",
|
||||||
|
"jammer_player_info": "Прицел игрока '{0}' был отключён.",
|
||||||
|
"jammer_select_info": "Отключить прицел игроку:",
|
||||||
|
|
||||||
|
"jester": "Шут",
|
||||||
|
"jester_desc": "В режиме шута вы не можете получать или наносить урон. Режим переключается каждые несколько секунд.",
|
||||||
|
"jester_mode": "Режим шута",
|
||||||
|
"jester_on": "ВКЛ",
|
||||||
|
"jester_off": "ВЫКЛ",
|
||||||
|
|
||||||
|
"jumpban": "Безногий",
|
||||||
|
"jumpban_desc": "Выберите игрока, который не сможет прыгать",
|
||||||
|
"jumpban_enemy_info": "Кто-то отрезал вам ноги.",
|
||||||
|
"jumpban_player_info": "Игрок '{0}' больше не может прыгать.",
|
||||||
|
"jumpban_select_info": "Запретить прыжки игроку:",
|
||||||
|
|
||||||
|
"jumpingjack": "Прыгающий Джек",
|
||||||
|
"jumpingjack_desc": "Прыжки восстанавливают здоровье",
|
||||||
|
|
||||||
|
"killerflash": "Смертельная флешка",
|
||||||
|
"killerflash_desc": "Любой, полностью ослеплённый вашей флешкой, погибает (включая вас)",
|
||||||
|
|
||||||
|
"lifeswap": "Обмен жизнями",
|
||||||
|
"lifeswap_desc": "Выберите игрока для обмена здоровьем",
|
||||||
|
"lifeswap_enemy_info": "Кто-то занял ваше здоровье.",
|
||||||
|
"lifeswap_player_info": "Вы обменялись здоровьем с игроком '{0}'.",
|
||||||
|
"lifeswap_select_info": "Обменять здоровье с игроком:",
|
||||||
|
|
||||||
|
"longknife": "Длинный нож",
|
||||||
|
"longknife_desc": "Удар ножом наносит урон независимо от расстояния",
|
||||||
|
|
||||||
|
"longzeus": "Длинный Зевс",
|
||||||
|
"longzeus_desc": "Зевс наносит урон независимо от расстояния",
|
||||||
|
|
||||||
|
"magneticdecoy": "Магнитная ловушка",
|
||||||
|
"magneticdecoy_desc": "Ваша ложная граната притягивает ближайших игроков к себе",
|
||||||
|
|
||||||
|
"magneto": "Магнето",
|
||||||
|
"magneto_desc": "Все вражеские гранаты отталкиваются от вас",
|
||||||
|
|
||||||
|
"magnifier": "Лупа",
|
||||||
|
"magnifier_desc": "Приближает экран врага, уменьшая его поле зрения",
|
||||||
|
"magnifier_enemy_info": "Ваше поле зрения было искажено!",
|
||||||
|
"magnifier_player_info": "Игрок '{0}' принудительно переведён в режим увеличения.",
|
||||||
|
"magnifier_select_info": "Увеличить экран игрока:",
|
||||||
|
|
||||||
|
"medic": "Медик",
|
||||||
|
"medic_desc": "Нажмите [css_useSkill], чтобы использовать заряд лечения, восстанавливающий 50 HP",
|
||||||
|
|
||||||
|
"miner": "Минёр",
|
||||||
|
"miner_desc": "Ваша осколочная граната взрывается только когда рядом есть враг",
|
||||||
|
|
||||||
|
"bankrupt": "Банкрот",
|
||||||
|
"bankrupt_desc": "Выберите игрока, который потеряет все свои деньги",
|
||||||
|
"bankrupt_enemy_info": "Вы обанкротились.",
|
||||||
|
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
|
||||||
|
"bankrupt_select_info": "Выберите игрока для банкротства:",
|
||||||
|
|
||||||
|
"deathbomb": "Смертельная бомба",
|
||||||
|
"deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
|
||||||
|
"deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
|
||||||
|
|
||||||
|
"ninja": "Ниндзя",
|
||||||
|
"ninja_desc": "Стоя на месте, ваша невидимость увеличивается на 33%, в приседе на 33%, с ножом на 33%",
|
||||||
|
|
||||||
|
"nonades": "Антигранаты",
|
||||||
|
"nonades_desc": "Гранаты не наносят вам урон",
|
||||||
|
|
||||||
|
"norecoil": "Фокус",
|
||||||
|
"norecoil_desc": "Нет отдачи при стрельбе",
|
||||||
|
|
||||||
|
"noclip": "Ноклип",
|
||||||
|
"noclip_desc": "Нажмите [css_useSkill], чтобы включить ноклип на короткое время",
|
||||||
|
|
||||||
|
"oneshot": "Один выстрел",
|
||||||
|
"oneshot_desc": "Попадание по врагу мгновенно убивает его",
|
||||||
|
|
||||||
|
"onlyhead": "Только голова",
|
||||||
|
"onlyhead_desc": "Вы получаете урон только в голову",
|
||||||
|
|
||||||
|
"paweljumper": "Павел-прыгун",
|
||||||
|
"paweljumper_desc": "Вы получаете случайное количество дополнительных прыжков",
|
||||||
|
"paweljumper_desc2": "Вы получаете {0} дополнительных прыжков",
|
||||||
|
|
||||||
|
"phoenix": "Феникс",
|
||||||
|
"phoenix_desc": "Есть шанс возродиться после смерти",
|
||||||
|
"phoenix_desc2": "Ваш шанс возродиться после смерти: {0}%",
|
||||||
|
"phoenix_respawn": "Вы были воскрешены из пепла благодаря силе CHATCOLORS.REDФеникса",
|
||||||
|
|
||||||
|
"psychicdefusing": "Психическое разминирование",
|
||||||
|
"psychicdefusing_desc": "Когда вы рядом с бомбой, вы начинаете её разминировать",
|
||||||
|
"psychicdefusing_hud_info": "{0} секунд осталось до разминирования",
|
||||||
|
|
||||||
|
"pilot": "Пилот",
|
||||||
|
"pilot_desc": "Летайте ограниченное время. Двойной прыжок для полёта",
|
||||||
|
"pilot_hud_info": "Топливо",
|
||||||
|
|
||||||
|
"planter": "Свободная установка",
|
||||||
|
"planter_desc": "Вы можете установить бомбу где угодно, с таймером взрыва 60 секунд.",
|
||||||
|
"planter_planting": "Установка ({0})...",
|
||||||
|
|
||||||
|
"poison": "Яд",
|
||||||
|
"poison_desc": "Выберите игрока, который будет получать урон каждые несколько секунд",
|
||||||
|
"poison_enemy_info": "Вы были отравлены.",
|
||||||
|
"poison_player_info": "Игрок '{0}' был отравлен.",
|
||||||
|
"poison_select_info": "Отравить игрока:",
|
||||||
|
|
||||||
|
"primaryban": "Без винтовок",
|
||||||
|
"primaryban_desc": "Выберите игрока, который не сможет использовать винтовки",
|
||||||
|
"primaryban_enemy_info": "Вы больше не можете использовать винтовки.",
|
||||||
|
"primaryban_player_info": "Игрок '{0}' больше не может использовать винтовки.",
|
||||||
|
"primaryban_select_info": "Запретить винтовки игроку:",
|
||||||
|
|
||||||
|
"prosthesis": "Протез",
|
||||||
|
"prosthesis_desc": "Руки и ноги защищены от пуль",
|
||||||
|
|
||||||
|
"push": "Толкач",
|
||||||
|
"push_desc": "Есть шанс оттолкнуть врага назад при попадании",
|
||||||
|
"push_desc2": "Ваш шанс оттолкнуть врага: {0}%",
|
||||||
|
|
||||||
|
"pyro": "Пироман",
|
||||||
|
"pyro_desc": "Молотов восстанавливает здоровье",
|
||||||
|
|
||||||
|
"quickshot": "Скорострельность",
|
||||||
|
"quickshot_desc": "Все пули выпускаются очень быстро",
|
||||||
|
|
||||||
|
"radarhack": "Взлом радара",
|
||||||
|
"radarhack_desc": "Враги видны на радаре",
|
||||||
|
|
||||||
|
"rambo": "Рэмбо",
|
||||||
|
"rambo_desc": "Вы получаете случайное количество здоровья в начале раунда",
|
||||||
|
|
||||||
|
"randomweapon": "Случайное оружие",
|
||||||
|
"randomweapon_desc": "Нажмите [css_useSkill], чтобы получить случайное оружие",
|
||||||
|
|
||||||
|
"rezombie": "Ре-зомби",
|
||||||
|
"rezombie_desc": "После смерти вы возрождаетесь как зомби с увеличенным здоровьем и без оружия",
|
||||||
|
|
||||||
|
"reactivearmor": "Реактивная броня",
|
||||||
|
"reactivearmor_desc": "Броня поглощает первый полученный урон",
|
||||||
|
|
||||||
|
"regeneration": "Регенерация",
|
||||||
|
"regeneration_desc": "Вы восстанавливаете здоровье каждые несколько секунд",
|
||||||
|
|
||||||
|
"replicator": "Репликатор",
|
||||||
|
"replicator_desc": "Нажмите [css_useSkill], чтобы создать копию, наносящую урон при попадании",
|
||||||
|
|
||||||
|
"retreat": "Отступление",
|
||||||
|
"retreat_desc": "Нажмите [css_useSkill], чтобы вернуться на спавн",
|
||||||
|
|
||||||
|
"returntosender": "Вернуть отправителю",
|
||||||
|
"returntosender_desc": "Первое попадание по врагу отправляет его обратно на спавн",
|
||||||
|
|
||||||
|
"richboy": "Богач",
|
||||||
|
"richboy_desc": "Вы получаете случайную сумму денег в начале раунда",
|
||||||
|
|
||||||
|
"robinhood": "Робин Гуд",
|
||||||
|
"robinhood_desc": "Нанесение урона врагу крадёт его деньги",
|
||||||
|
|
||||||
|
"rubber": "Резиновые пули",
|
||||||
|
"rubber_desc": "Ваши пули значительно замедляют игроков",
|
||||||
|
|
||||||
|
"saper": "Сапёр",
|
||||||
|
"saper_desc": "Вы можете устанавливать и обезвреживать бомбы быстрее",
|
||||||
|
|
||||||
|
"secondlife": "Второй шанс",
|
||||||
|
"secondlife_desc": "После смерти вы возрождаетесь с тем же количеством здоровья",
|
||||||
|
|
||||||
|
"shade": "Тень",
|
||||||
|
"shade_desc": "Есть шанс телепортироваться за спину врагу при попадании",
|
||||||
|
"shade_desc2": "Ваш шанс телепортироваться за спину врагу: {0}%",
|
||||||
|
"shade_nospace": "Нет места",
|
||||||
|
|
||||||
|
"shortbomb": "Короткий фитиль",
|
||||||
|
"shortbomb_desc": "Бомба взрывается гораздо быстрее",
|
||||||
|
|
||||||
|
"silent": "Тишина",
|
||||||
|
"silent_desc": "Ваши шаги и прыжки не слышны ДРУГИМ игрокам",
|
||||||
|
|
||||||
|
"smoker": "Курильщик",
|
||||||
|
"smoker_desc": "Ваши дымовые гранаты никогда не заканчиваются",
|
||||||
|
|
||||||
|
"sniperelite": "Снайпер-элита",
|
||||||
|
"sniperelite_customname": "Навык снайпера-элиты",
|
||||||
|
"sniperelite_desc": "Нажмите [css_useSkill], чтобы заменить текущее оружие на AWP",
|
||||||
|
|
||||||
|
"soldier": "Солдат",
|
||||||
|
"soldier_desc": "У вас случайный множитель урона",
|
||||||
|
"soldier_desc2": "Ваш множитель урона: {0}x",
|
||||||
|
|
||||||
|
"soundmaker": "Звуковик",
|
||||||
|
"soundmaker_desc": "Время от времени вы слышите крики игроков",
|
||||||
|
|
||||||
|
"spectator": "Наблюдатель",
|
||||||
|
"spectator_desc": "Нажмите [css_useSkill], чтобы наблюдать за случайным врагом",
|
||||||
|
|
||||||
|
"swapposition": "Обмен позициями",
|
||||||
|
"swapposition_desc": "Нажмите [css_useSkill], чтобы поменяться местами со случайным врагом",
|
||||||
|
|
||||||
|
"teleporter": "Телепортер",
|
||||||
|
"teleporter_desc": "Есть шанс поменяться местами с врагом при попадании",
|
||||||
|
"teleporter_desc2": "Ваш шанс обмена местами после попадания: {0}%",
|
||||||
|
|
||||||
|
"thief": "Вор",
|
||||||
|
"thief_desc": "Вы можете украсть навык у выбранного игрока",
|
||||||
|
"thief_enemy_info": "Ваш навык был украден.",
|
||||||
|
"thief_player_info": "Навык игрока '{0}' был украден.",
|
||||||
|
"thief_select_info": "Украсть навык у игрока:",
|
||||||
|
"thief_incorrect_skill": "Этот навык нельзя выбрать!",
|
||||||
|
|
||||||
|
"thirdeye": "Третий глаз",
|
||||||
|
"thirdeye_desc": "Нажмите [css_useSkill], чтобы активировать вид от третьего лица",
|
||||||
|
|
||||||
|
"thorns": "Шипы",
|
||||||
|
"thorns_desc": "Противник получает часть урона, который нанёс вам",
|
||||||
|
|
||||||
|
"throwingknife": "Метательный нож",
|
||||||
|
"throwingknife_desc": "Нажмите [css_useSkill], чтобы метнуть нож. Но остерегайтесь других",
|
||||||
|
|
||||||
|
"toxicsmoke": "Токсичный дым",
|
||||||
|
"toxicsmoke_desc": "Ваши дымовые гранаты наносят урон",
|
||||||
|
|
||||||
|
"wallhack": "Воллхак",
|
||||||
|
"wallhack_desc": "Вы видите врагов сквозь стены",
|
||||||
|
|
||||||
|
"watchmaker": "Часовщик",
|
||||||
|
"watchmaker_desc": "Каждый бросок гранаты изменяет время раунда",
|
||||||
|
"watchmaker_ct": "Время раунда сокращено на {0} секунд.",
|
||||||
|
"watchmaker_tt": "Время раунда увеличено на {0} секунд.",
|
||||||
|
|
||||||
|
"weaponsswap": "Обмен оружием",
|
||||||
|
"weaponsswap_desc": "Нажмите [css_useSkill], чтобы обменяться оружием со случайным врагом",
|
||||||
|
"weaponsswap_hud_info2": "У вас нет оружия для обмена",
|
||||||
|
|
||||||
|
"weightless": "Невесомость",
|
||||||
|
"weightless_desc": "Ваши гранаты не подвержены гравитации и летают быстрее",
|
||||||
|
|
||||||
|
"wildthrow": "Дикие броски",
|
||||||
|
"wildthrow_desc": "Выберите игрока, у которого будут проблемы с бросанием гранат",
|
||||||
|
"wildthrow_player_info": "Игрок '{0}' забыл все свои гранатлайны",
|
||||||
|
"wildthrow_select_info": "Выберите игрока:",
|
||||||
|
|
||||||
|
"zeus": "Зевс",
|
||||||
|
"zeus_desc": "Зевс x27 мгновенно перезаряжается",
|
||||||
|
|
||||||
|
"your_skill": "Ваш текущий навык",
|
||||||
|
"enemy_skill": "Навык врага",
|
||||||
|
"observer_skill": "Навык игрока",
|
||||||
|
"welcome_message": "Добро пожаловать {PLAYER} на {SERVER_NAME}!\nТекущая версия jRandomSkills: {VERSION} ({SKILLS_COUNT} навыков).\n\nОригинал создан:\n{AUTHOR1}\nМодифицирован и улучшен:\n{AUTHOR2}\nОфициальный Discord: https://discord.gg/9H8EZYBpPF",
|
||||||
|
"drawing_skill": "Получение навыка",
|
||||||
|
"disabled_weapon": "Вы не можете использовать это оружие",
|
||||||
|
|
||||||
|
"hud_info": "Подождите ещё {0} секунд",
|
||||||
|
"hud_info_no_enemy": "Враг не найден",
|
||||||
|
"active_hud_info": "Активно ещё {0} миллисекунд",
|
||||||
|
|
||||||
|
"skills_menu": "Список навыков",
|
||||||
|
"no_player": "Подходящий игрок не найден.",
|
||||||
|
"duplicate_player": "Найдено несколько игроков с таким именем.",
|
||||||
|
"selectplayerskill_command": "Введите /t",
|
||||||
|
"selectplayerskill_incorrect_enemy_index": "Игроки для выбора не найдены.",
|
||||||
|
|
||||||
|
"skill_not_found_setskill": "Навык не найден",
|
||||||
|
"player_not_found_setskill": "Игрок не найден",
|
||||||
|
"correct_form_setskill": "Правильное использование: CHATCOLORS.RED!setskill <ник> <навык>",
|
||||||
|
"correct_form_setscore": "Правильное использование: CHATCOLORS.RED!setscore <CT> <TT>",
|
||||||
|
"done_setskill": "Навык установлен",
|
||||||
|
"error_setskill": "Не удалось установить CHATCOLORS.REDнавык",
|
||||||
|
"for_setskill": "для",
|
||||||
|
|
||||||
|
"invalid_map": "Название карты введено неверно!",
|
||||||
|
"loading_map": "Загрузка новой карты",
|
||||||
|
|
||||||
|
"pause": "Матч приостановлен.",
|
||||||
|
"unpause": "Матч возобновлён.",
|
||||||
|
"healed": "Вы были вылечены.",
|
||||||
|
"game_start": "Игра началась!",
|
||||||
|
"reload": "Языки и конфигурации перезагружены.",
|
||||||
|
"hud_on": "HUD включён.",
|
||||||
|
"hud_off": "HUD выключен.",
|
||||||
|
|
||||||
|
"vote_started": "Голосование начато: '{0}'",
|
||||||
|
"vote_timeout": "Голосование '{0}' истекло!",
|
||||||
|
"vote_wait": "Нужно подождать перед началом нового голосования!",
|
||||||
|
"vote_same_wait": "Нужно подождать перед повторным голосованием по той же теме!",
|
||||||
|
"vote_not_enough_players": "Недостаточно игроков для начала голосования!",
|
||||||
|
"vote_alredy_voted": "Вы уже проголосовали!",
|
||||||
|
"vote_vote": "Голосование",
|
||||||
|
|
||||||
|
"bombsite_a": "Бомб-сайт A",
|
||||||
|
"bombsite_b": "Бомб-сайт B",
|
||||||
|
"bombplanted": "Бомба установлена\n{0} секунд до взрыва",
|
||||||
|
|
||||||
|
"teammate_skills": "Навыки ваших тиммейтов",
|
||||||
|
"summary": "Итоги прошедшего раунда",
|
||||||
|
|
||||||
|
"menu_controlls_scroll": "W/S — Прокрутка",
|
||||||
|
"menu_controlls_padding": " | ",
|
||||||
|
"menu_controlls_select": "E — Выбрать"
|
||||||
|
}
|
||||||
|
|
@ -3,52 +3,52 @@
|
||||||
"none_desc": "Hiçbir yeteneğin yok",
|
"none_desc": "Hiçbir yeteneğin yok",
|
||||||
|
|
||||||
"aimbot": "Aimbot",
|
"aimbot": "Aimbot",
|
||||||
"aimbot_desc": "Vurduğun her mermi kafadan vuruş (headshot) sayılır",
|
"aimbot_desc": "Vurduğunda kafadan (HS) sayılır",
|
||||||
|
|
||||||
"aimlock": "Nişan Kilidi",
|
"aimlock": "Kitlenme",
|
||||||
"aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın",
|
"aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın",
|
||||||
|
|
||||||
"anomaly": "Anomali",
|
"anomaly": "Zaman Büken",
|
||||||
"anomaly_desc": "Zamanı birkaç saniye geriye alırsın",
|
"anomaly_desc": "Zamanı birkaç saniye geriye alırsın",
|
||||||
|
|
||||||
"antyflash": "Anti-Flash",
|
"antyflash": "Anti-Flash",
|
||||||
"antyflash_desc": "Flaş bombalarından etkilenmezsin ve senin flaşların 7 saniye sürer",
|
"antyflash_desc": "Flaşa kör olmazsın ve flaşların 7 saniye sürer",
|
||||||
|
|
||||||
"antyhead": "Demir Kafa",
|
"antyhead": "Beton Kafa",
|
||||||
"antyhead_desc": "Kafadan vuruşlardan hasar almazsın",
|
"antyhead_desc": "Kafadan hasar almazsın",
|
||||||
|
|
||||||
"areareaper": "Bölge Azraili",
|
"areareaper": "Mekan Kapatan",
|
||||||
"areareaper_desc": "Devre dışı bırakmak için bir bomba alanı seçebilirsin",
|
"areareaper_desc": "Haritadaki bir bomba alanını tamamen devre dışı bırakabilirsin",
|
||||||
"areareaper_incorrect_site": "Böyle bir bomba alanı bulunamadı.",
|
"areareaper_incorrect_site": "Böyle bir bomba alanı yok uydurma",
|
||||||
"areareaper_no_site": "Hiçbir bomba alanı bulunamadı.",
|
"areareaper_no_site": "Haritada bomba alanı bulunamadı",
|
||||||
"areareaper_select_info": "Devre dışı bırakılacak alanı seçin:",
|
"areareaper_select_info": "Kapatılacak bomba alanını seç:",
|
||||||
"areareaper_site_disabled": "Bomba alanı {0} devre dışı bırakıldı - buraya bomba kurulamaz!",
|
"areareaper_site_disabled": "{0} alanı mühürlendi - artık buraya bomba kurulamaz!",
|
||||||
"areareaper_used_info": "Yeteneğin zaten kullanıldı.",
|
"areareaper_used_info": "Yeteneğini zaten kullandın, açgözlülük yapma",
|
||||||
"areareaper_bombsite_disabled": "Bu bomba alanı devre dışı bırakıldı!",
|
"areareaper_bombsite_disabled": "Bu bomba alanı kullanıma kapatıldı!",
|
||||||
|
|
||||||
"armored": "Zırhlı",
|
"armored": "Zırhlı",
|
||||||
"armored_desc": "Rastgele bir hasar alma çarpanına sahip olursun",
|
"armored_desc": "Rastgele hasar alma çarpanına sahip olursun",
|
||||||
"armored_desc2": "Hasar alma çarpanın: {0}x",
|
"armored_desc2": "Hasar alma: {0}x",
|
||||||
|
|
||||||
"assassin": "Suikastçı",
|
"assassin": "Suikastçı",
|
||||||
"assassin_desc": "Düşmanlara arkadan vurduğunda daha fazla hasar verirsin",
|
"assassin_desc": "Düşmanlara arkadan daha fazla hasar verirsin",
|
||||||
|
|
||||||
"astronaut": "Astronot",
|
"astronaut": "Astronot",
|
||||||
"astronaut_desc": "Raund başında rastgele bir yerçekimi değeri alırsın",
|
"astronaut_desc": "Rastgele bir yerçekimi değerine sahip olursun",
|
||||||
"astronaut_desc2": "Rastgele yerçekimin: {0}x",
|
"astronaut_desc2": "Yerçekimin: {0}x",
|
||||||
|
|
||||||
"moneyswap": "Vergi Memuru",
|
"moneyswap": "Vergi Memuru",
|
||||||
"moneyswap_desc": "Para takas etmek için bir oyuncu seç",
|
"moneyswap_desc": "Bir düşmanla paranı takasla",
|
||||||
"moneyswap_enemy_info": "Vergi dairesi seni yakaladı.",
|
"moneyswap_enemy_info": "Maliye kapına dayandı",
|
||||||
"moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin.",
|
"moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin",
|
||||||
"moneyswap_select_info": "Para takası yapılacak oyuncu:",
|
"moneyswap_select_info": "Para takasla biriyle:",
|
||||||
|
|
||||||
"baseball": "Beyzbolcu",
|
"baseball": "Beyzbolcu",
|
||||||
"baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı anında öldürür",
|
"baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı öldürür",
|
||||||
|
|
||||||
"behind": "Düşman Döndürücü",
|
"behind": "Baş Döndüren",
|
||||||
"behind_desc": "Düşmana vurduğunda onu 180 derece döndürme şansın olur",
|
"behind_desc": "Vurduğunda düşmanı 180 derece döndürme şansın olur",
|
||||||
"behind_desc2": "Vuruşta düşmanı döndürme şansın: %{0}",
|
"behind_desc2": "Baş döndürme şansın: %{0}",
|
||||||
|
|
||||||
"blademaster": "Kılıç Ustası",
|
"blademaster": "Kılıç Ustası",
|
||||||
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
|
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
|
||||||
|
|
@ -57,105 +57,105 @@
|
||||||
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
|
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
|
||||||
|
|
||||||
"c4camouflage": "C4 Kamuflajı",
|
"c4camouflage": "C4 Kamuflajı",
|
||||||
"c4camouflage_desc": "Bombayı taşırken görünmez olursun",
|
"c4camouflage_desc": "Elinde C4 varken tamamen görünmez olursun",
|
||||||
|
|
||||||
"carefulbullets": "Dikkatli Mermiler",
|
"carefulbullets": "Dikkatli Mermiler",
|
||||||
"carefulbullets_desc": "Iskaladığın her mermi için hasar alacak bir oyuncu seç",
|
"carefulbullets_desc": "Düşman mermi kaçırırsa hasar alır",
|
||||||
"carefulbullets_enemy_info": "Artık isabetsiz atışlar canını yakacak.",
|
"carefulbullets_enemy_info": "Mermi kaçırmak canını yakacak",
|
||||||
"carefulbullets_player_info": "'{0}' artık daha dikkatli olmalı.",
|
"carefulbullets_player_info": "'{0}' artık mermi sıkarken iki kere düşünecek",
|
||||||
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
|
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
|
||||||
|
|
||||||
"catapult": "Mancınık",
|
"catapult": "Mancınık",
|
||||||
"catapult_desc": "Düşmanı havaya fırlatma şansın olur",
|
"catapult_desc": "Vurduğun rakibi uzaya (yukarı doğru) fırlatma şansın var",
|
||||||
"catapult_desc2": "Vuruşta düşmanı fırlatma şansın: %{0}",
|
"catapult_desc2": "Fırlatma şansın: %{0}",
|
||||||
|
|
||||||
"chicken": "Tavuk",
|
"chicken": "Tavuk",
|
||||||
"chicken_desc": "Tavuk modeli + %10 daha hızlı hareket - 50 HP alırsın",
|
"chicken_desc": "Tavuk modeli ve %10 daha hızlısın fakat 50 HP",
|
||||||
|
|
||||||
"chillout": "Sakin Ol",
|
"chillout": "Ağırdan Al",
|
||||||
"chillout_desc": "Bombayı kurmak çok daha uzun sürer",
|
"chillout_desc": "Bombayı kurmak çok daha uzun sürer",
|
||||||
|
|
||||||
"cutter": "Kesici",
|
"cutter": "Kasap",
|
||||||
"cutter_desc": "Bıçakla tek atışta öldürme",
|
"cutter_desc": "Bıçakla tek atarsın",
|
||||||
|
|
||||||
"cypher": "Cypher",
|
"cypher": "Gözcü",
|
||||||
"cypher_desc": "Kamera oluşturmak/kameraya geçmek için E tuşuna bas",
|
"cypher_desc": "Kamera oluşturmak/geçmek için [css_useSkill] tuşuna bas",
|
||||||
"cypher_nospace": "Kamera duvara dik açıyla yerleştirilmelidir",
|
"cypher_nospace": "Kamerayı duvara dik yerleştir",
|
||||||
|
|
||||||
"darkness": "Karanlık",
|
"darkness": "Karanlık",
|
||||||
"darkness_desc": "Seçilen bir düşmana karanlık efekti uygular",
|
"darkness_desc": "Bir düşmanın ekranını karart",
|
||||||
"darkness_enemy_info": "Işıklar sönsün.",
|
"darkness_enemy_info": "Işıklar sönsün",
|
||||||
"darkness_player_info": "Karanlık, '{0}' isimli oyuncuyu ele geçirdi.",
|
"darkness_player_info": "'{0}' isimli oyuncunun dünyasını kararttın",
|
||||||
"darkness_select_info": "Karanlık uygulanacak oyuncuyu seç:",
|
"darkness_select_info": "Karanlık bir oyuncuyu seç:",
|
||||||
|
|
||||||
"deactivator": "Devre Dışı Bırakıcı",
|
"deactivator": "Silgi",
|
||||||
"deactivator_desc": "Yeteneğini kapatmak istediğin bir oyuncu seç",
|
"deactivator_desc": "Bir düşmanın yeteneğini sil",
|
||||||
"deactivator_enemy_info": "Yeteneğin devre dışı bırakıldı.",
|
"deactivator_enemy_info": "Yeteneğin silindi",
|
||||||
"deactivator_player_info": "'{0}' isimli oyuncunun yeteneği devre dışı bırakıldı.",
|
"deactivator_player_info": "'{0}' isimli oyuncunun yeteneği silindi",
|
||||||
"deactivator_select_info": "Bir oyuncunun yeteneğini devre dışı bırak:",
|
"deactivator_select_info": "Yetenek silmek için oyuncu seç:",
|
||||||
|
|
||||||
"deaf": "Sağır",
|
"deaf": "Sağır",
|
||||||
"deaf_desc": "Tüm seslerini kapatmak için bir oyuncu seç",
|
"deaf_desc": "Bir düşmanın kulağını kapat ve sesleri duymaz hale getir",
|
||||||
"deaf_enemy_info": "Kulaklıkların oyundan ayrıldı.",
|
"deaf_enemy_info": "Kulaklıkların tıkandı",
|
||||||
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
|
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
|
||||||
"deaf_select_info": "Sesleri kapatılacak oyuncuyu seç:",
|
"deaf_select_info": "Sağır bir oyuncuyu seç:",
|
||||||
|
|
||||||
"disarmament": "Silahsızlandırma",
|
"disarmament": "Silahsızlandırma",
|
||||||
"disarmament_desc": "Vurduğun düşmanın silahını düşürme şansın olur",
|
"disarmament_desc": "Vurduğunda rakibin elindeki silahı yere düşürme şansın olur",
|
||||||
"disarmament_desc2": "Düşmanı silahsızlandırma şansın: %{0}",
|
"disarmament_desc2": "Silahsızlandırma şansın: %{0}",
|
||||||
|
|
||||||
"distancer": "Mesafe Ölçer",
|
"distancer": "Kronometre",
|
||||||
"distancer_desc": "En yakın düşmana olan mesafeni görebilirsin",
|
"distancer_desc": "En yakın düşmanın mesafesini görürsün",
|
||||||
|
|
||||||
"dash": "Atılma",
|
"dash": "Atılma",
|
||||||
"dash_desc": "Atılmak (dash) için ikinci kez zıpla",
|
"dash_desc": "Atılmak için ikinci kez zıpla",
|
||||||
|
|
||||||
"dracula": "Dracula",
|
"dracula": "Drakula",
|
||||||
"dracula_desc": "Düşmana vurmak, verdiğin hasarın bir yüzdesi kadar canını yeniler",
|
"dracula_desc": "Rakiplere verdiğin hasarın belirli bir yüzdesi kadar can alırsın",
|
||||||
|
|
||||||
"duplicator": "Kopyalayıcı",
|
"duplicator": "Kopyacı",
|
||||||
"duplicator_desc": "Yeteneğini kopyalamak için bir oyuncu seç",
|
"duplicator_desc": "Yeteneğini kopyalamak için bir oyuncu seç",
|
||||||
"duplicator_player_info": "'{0}' isimli oyuncunun yeteneği kopyalandı.",
|
"duplicator_player_info": "'{0}' isimli oyuncunun yeteneği kopyalandı.",
|
||||||
"duplicator_select_info": "Yeteneği kopyalanacak oyuncu:",
|
"duplicator_select_info": "Yeteneği kopyalanacak oyuncu:",
|
||||||
|
|
||||||
"dwarf": "Cüce",
|
"dwarf": "Cüce",
|
||||||
"dwarf_desc": "Raund başında rastgele karakter boyutu",
|
"dwarf_desc": "Raund başında rastgele karakter boyutu",
|
||||||
"dwarf_desc2": "Boyut çarpanın: {0}x",
|
"dwarf_desc2": "Boyutun: {0}x",
|
||||||
|
|
||||||
"enemyspawn": "Düşman Başlangıcı",
|
"enemyspawn": "Base Baskını",
|
||||||
"enemyspawn_desc": "Düşman başlangıç noktasına ışınlanmak için E tuşuna bas",
|
"enemyspawn_desc": "[css_useSkill] tuşuna basarak düşman doğma noktasına ışınlan",
|
||||||
|
|
||||||
"explosiveshot": "Patlayıcı Atış",
|
"explosiveshot": "Patlayıcı Mermi",
|
||||||
"explosiveshot_desc": "Ateş ederken rastgele patlayıcı mermi atma şansı",
|
"explosiveshot_desc": "Ateş ederken rastgele mermilerin patlayabilir",
|
||||||
"explosiveshot_desc2": "Patlayıcı mermi atma şansın: %{0}",
|
"explosiveshot_desc2": "Patlayan mermi şansı: %{0}",
|
||||||
|
|
||||||
"falconeye": "Şahin Gözü",
|
"falconeye": "Şahin Gözü",
|
||||||
"falconeye_desc": "Kuş bakışı kamerayı aktif etmek için E tuşuna bas",
|
"falconeye_desc": "[css_useSkill] tuşuna basarak kuş bakışına geç",
|
||||||
|
|
||||||
"fastreload": "Hızlı Şarjör",
|
"fastreload": "Şipşak Şarjör",
|
||||||
"fastreload_desc": "Eldeki silahı anında doldurmak için E tuşuna bas",
|
"fastreload_desc": "[css_useSkill] tuşuna basarak şarjörünü hızlıca değiştir",
|
||||||
|
|
||||||
"flash": "Flash",
|
"flash": "Flash",
|
||||||
"flash_desc": "Raund başında rastgele oyuncu hızı",
|
"flash_desc": "Raund başında rastgele oyuncu hızı",
|
||||||
"flash_desc2": "Hız çarpanın: {0}x",
|
"flash_desc2": "Hızın: {0}x",
|
||||||
|
|
||||||
"fortnite": "Fortnite",
|
"fortnite": "Fortnite",
|
||||||
"fortnite_desc": "Parçalanabilir bir barikat oluşturmak için E tuşuna bas",
|
"fortnite_desc": "[css_useSkill] tuşuna basarak barikat kur",
|
||||||
|
|
||||||
"fragilebomb": "Hassas Bomba",
|
"fragilebomb": "Hassas Bomba",
|
||||||
"fragilebomb_desc": "Bombaya ateş etmek ona hasar verir",
|
"fragilebomb_desc": "Kurulu bombaya ateş etmek bombanın canını azaltır",
|
||||||
"fragilebomb_bomb_health": "Bomba canı",
|
"fragilebomb_bomb_health": "Bombanın canı",
|
||||||
|
|
||||||
"friendlyfire": "Dost Ateşi",
|
"friendlyfire": "Dost Şifası",
|
||||||
"friendlyfire_desc": "Takım arkadaşlarına ateş etmek onları iyileştirir",
|
"friendlyfire_desc": "Takım arkadaşlarına ateş etmek onları iyileştirir",
|
||||||
|
|
||||||
"frozendecoy": "Dondurucu Yem",
|
"frozendecoy": "Buz Kıran",
|
||||||
"frozendecoy_desc": "Yanıltıcı bomban (decoy) yakındaki tüm oyuncuları dondurur",
|
"frozendecoy_desc": "Yanıltıcı bomba (decoy) yakındaki tüm oyuncuları dondurur",
|
||||||
|
|
||||||
"gambler": "Kumarbaz",
|
"gambler": "Kumarbaz",
|
||||||
"gambler_desc": "Sunulan listeden bir yetenek seç.",
|
"gambler_desc": "Sunulan listeden bir yetenek seç.",
|
||||||
"gambler_select_info": "Yeteneğini seç:",
|
"gambler_select_info": "Yeteneğini seç:",
|
||||||
"gambler_more": "#00FF00|${0} karşılığında yenile",
|
"gambler_more": "#00FF00|${0} karşılığında yeni yetenekler",
|
||||||
"gambler_no_money": "Yeterli para yok.",
|
"gambler_no_money": "Yeterli para yok.",
|
||||||
|
|
||||||
"ghost": "Hayalet",
|
"ghost": "Hayalet",
|
||||||
|
|
@ -165,71 +165,71 @@
|
||||||
"glaz_desc": "Sis bombalarının içini görebilirsin",
|
"glaz_desc": "Sis bombalarının içini görebilirsin",
|
||||||
|
|
||||||
"glitch": "Glitç",
|
"glitch": "Glitç",
|
||||||
"glitch_desc": "Seçilen bir düşmanın radarını devre dışı bırakır",
|
"glitch_desc": "Seçilen bir düşmanın radarını kapatır",
|
||||||
"glitch_enemy_info": "Radarın devre dışı bırakıldı.",
|
"glitch_enemy_info": "Radarın kapandı",
|
||||||
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
|
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
|
||||||
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
|
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
|
||||||
|
|
||||||
"glue": "Yapıştırıcı",
|
"glue": "Yapıştırıcı",
|
||||||
"glue_desc": "Bombaların duvarlara yapışır",
|
"glue_desc": "Bombaların duvarlara yapışır",
|
||||||
|
|
||||||
"godmode": "Ölümsüzlük",
|
"godmode": "Ölümsüz",
|
||||||
"godmode_desc": "Kısa süreliğine ölümsüz olmak için E tuşuna bas",
|
"godmode_desc": "[css_useSkill] tuşuna basarak kısa süreli ölümsüz ol",
|
||||||
"godmode_off": "Ölümsüzlük kapalı",
|
"godmode_off": "Ölümsüzlük kapandı",
|
||||||
"godmode_on": "Ölümsüzlük açık",
|
"godmode_on": "Ölümsüzlük açıldı",
|
||||||
|
|
||||||
"grenadier": "Bombacı",
|
"grenadier": "Bombacı",
|
||||||
"grenadier_desc": "Sınırsız el bombasına sahipsin",
|
"grenadier_desc": "Sınırsız el bombasına sahipsin",
|
||||||
|
|
||||||
"healingsmoke": "İyileştiren Sis",
|
"healingsmoke": "Şifalı Sis",
|
||||||
"healingsmoke_desc": "Sis bombaların iyileştirir",
|
"healingsmoke_desc": "Sis bombaların iyileştirir",
|
||||||
|
|
||||||
"hermit": "Münzevi",
|
"hermit": "Münzevi",
|
||||||
"hermit_desc": "Öldürmek, mermilerini ve canının bir kısmını yeniler",
|
"hermit_desc": "Öldüğünde mernin ve canının biraz yenilenir",
|
||||||
|
|
||||||
"holyhandgrenade": "Kutsal El Bombası",
|
"holyhandgrenade": "Kutsal El Bombası",
|
||||||
"holyhandgrenade_desc": "El bombaların iki kat hasar verir ve iki kat menzile sahiptir",
|
"holyhandgrenade_desc": "El bomban iki kat hasara ve menzile sahip",
|
||||||
|
|
||||||
"homingnades": "Güdümlü El Bombaları",
|
"homingnades": "Güdümlü Bomba",
|
||||||
"homingnades_desc": "El bombalarınız (sis hariç) düşmanlara yönelir",
|
"homingnades_desc": "Bombalarınız (sis hariç) düşmanlara yönelir",
|
||||||
|
|
||||||
"hotbomb": "Sıcak Bomba",
|
"hotbomb": "Sıcak C4",
|
||||||
"hotbomb_desc": "Siz hayatta olduğunuz sürece, bomba taşıyıcısına hasar verir",
|
"hotbomb_desc": "Yaşadığın sürece bombacının canı azalıyor",
|
||||||
"hotbomb_hint": "Dikkatli ol, bomba çok sıcak!",
|
"hotbomb_hint": "Bomba çok sıcak!",
|
||||||
|
|
||||||
"iana": "Hologram",
|
"iana": "Hologram",
|
||||||
"iana_desc": "Hologramını birkaç saniyeliğine kontrol etmek için E tuşuna bas",
|
"iana_desc": "[css_useSkill] tuşuna basarak bir hologram oluştur",
|
||||||
|
|
||||||
"illiterate": "Okuryazar Olmayan",
|
"illiterate": "Cahiliye",
|
||||||
"illiterate_desc": "Siz hayatta olduğunuz sürece, düşmanlarınız yazıları okuyamaz",
|
"illiterate_desc": "Yaşadığın sürece rakibin sohbeti (chat) veya oyun yazılarını okuyamaz",
|
||||||
|
|
||||||
"illusionist": "İllüzyonist",
|
"illusionist": "İllüzyonist",
|
||||||
"illusionist_desc": "Düz ilerleyen bir kopya oluşturmak için [css_useSkill] tuşuna basın",
|
"illusionist_desc": "[css_useSkill] tuşuna basarak düz ilerleyen illüzyon oluştur",
|
||||||
|
|
||||||
"impostor": "Sahtekar",
|
"impostor": "Sahtekar",
|
||||||
"impostor_desc": "Raunda düşman oyuncu modeliyle başlarsın",
|
"impostor_desc": "Düşman oyuncu modeline dönüşürsün",
|
||||||
|
|
||||||
"infiniteammo": "Sınırsız Mermi",
|
"infiniteammo": "Sınırsız Mermi",
|
||||||
"infiniteammo_desc": "Tüm silahların için sınırsız mermi alırsın",
|
"infiniteammo_desc": "Tüm silahların sınırsız mermisi olur",
|
||||||
|
|
||||||
"jackal": "İzci",
|
"jackal": "İzci",
|
||||||
"jackal_desc": "Her rakip arkasında bir iz bırakır",
|
"jackal_desc": "Her rakip yürüdüğünde ayak izi bırakır",
|
||||||
|
|
||||||
"jammer": "Sinyal Kesici",
|
"jammer": "Sinyal Kesici",
|
||||||
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
|
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
|
||||||
"jammer_enemy_info": "Nişangahın devre dışı bırakıldı.",
|
"jammer_enemy_info": "Nişangahın kapatıldı.",
|
||||||
"jammer_player_info": "'{0}' isimli oyuncunun nişangahı devre dışı bırakıldı.",
|
"jammer_player_info": "'{0}' isimli oyuncunun nişangahı kapatıldı.",
|
||||||
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
|
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
|
||||||
|
|
||||||
"jester": "Joker",
|
"jester": "Soytarı",
|
||||||
"jester_desc": "Joker modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
|
"jester_desc": "Soytarı modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
|
||||||
"jester_mode": "Joker Modu",
|
"jester_mode": "Soytarı Modu",
|
||||||
"jester_on": "AÇIK",
|
"jester_on": "AÇIK",
|
||||||
"jester_off": "KAPALI",
|
"jester_off": "KAPALI",
|
||||||
|
|
||||||
"jumpban": "Bacaksız",
|
"jumpban": "Bacaksız",
|
||||||
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
||||||
"jumpban_enemy_info": "Birisi bacaklarını kesti.",
|
"jumpban_enemy_info": "Bacakların kesildi",
|
||||||
"jumpban_player_info": "'{0}' artık zıplayamaz.",
|
"jumpban_player_info": "'{0}' artık zıplayamaz.",
|
||||||
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
|
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
|
||||||
|
|
||||||
|
|
@ -237,59 +237,59 @@
|
||||||
"jumpingjack_desc": "Zıplamak canını yeniler",
|
"jumpingjack_desc": "Zıplamak canını yeniler",
|
||||||
|
|
||||||
"killerflash": "Ölümcül Flaş",
|
"killerflash": "Ölümcül Flaş",
|
||||||
"killerflash_desc": "Flaş bombanla tamamen kör olan herkes ölür (sen dahil)",
|
"killerflash_desc": "Flaşına tamamen kör olan herkes ölür (sen dahil)",
|
||||||
|
|
||||||
"lifeswap": "Can Takası",
|
"lifeswap": "Can Takası",
|
||||||
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
|
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
|
||||||
"lifeswap_enemy_info": "Birisi canını ödünç aldı.",
|
"lifeswap_enemy_info": "Birisi canını çaldı",
|
||||||
"lifeswap_player_info": "'{0}' isimli oyuncuyla canlarını takas ettin.",
|
"lifeswap_player_info": "'{0}' isimli oyuncuyla canlarını takas ettin.",
|
||||||
"lifeswap_select_info": "Can takası yapılacak oyuncu:",
|
"lifeswap_select_info": "Can takası yapılacak oyuncu:",
|
||||||
|
|
||||||
"longknife": "Uzun Bıçak",
|
"longknife": "Uzun Bıçak",
|
||||||
"longknife_desc": "Bıçak saldırısı mesafeden bağımsız olarak hasar verir",
|
"longknife_desc": "Bıçağın uzaktaki rakibe hasar verebilir",
|
||||||
|
|
||||||
"longzeus": "Uzak Zeus",
|
"longzeus": "Uzak Zeus",
|
||||||
"longzeus_desc": "Zeus mesafeden bağımsız olarak hasar verir",
|
"longzeus_desc": "Zeus uzaktaki rakibe hasar verebilir",
|
||||||
|
|
||||||
"magneticdecoy": "Manyetik Yanıltıcı",
|
"magneticdecoy": "Manyetik Yanıltıcı",
|
||||||
"magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker",
|
"magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker",
|
||||||
|
|
||||||
"magneto": "Magneto",
|
"magneto": "Magneto",
|
||||||
"magneto_desc": "Tüm düşman el bombaları sizden uzaklaştırılır",
|
"magneto_desc": "Tüm düşman bombaları sizden uzaklaştırılır",
|
||||||
|
|
||||||
"magnifier": "Büyüteç",
|
"magnifier": "Büyüteç",
|
||||||
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
|
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
|
||||||
"magnifier_enemy_info": "Görüş alanın bozuldu!",
|
"magnifier_enemy_info": "Görüşün bozuldu!",
|
||||||
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
|
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
|
||||||
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
|
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
|
||||||
|
|
||||||
"medic": "Sıhhiye",
|
"medic": "Sıhhiye",
|
||||||
"medic_desc": "50 can yenileyen bir iyileştirme yükü kullanmak için E tuşuna bas",
|
"medic_desc": "[css_useSkill] tuşuna basarak kendine anında 50 HP bas",
|
||||||
|
|
||||||
"miner": "Bomba Madencisi",
|
"miner": "Mayın",
|
||||||
"miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar",
|
"miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar",
|
||||||
|
|
||||||
"bankrupt": "İflas",
|
"bankrupt": "İflas",
|
||||||
"bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç",
|
"bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç",
|
||||||
"bankrupt_enemy_info": "İflas ettin.",
|
"bankrupt_enemy_info": "İflas ettin!",
|
||||||
"bankrupt_player_info": "'{0}' isimli oyuncu iflas etti.",
|
"bankrupt_player_info": "'{0}' isimli oyuncu iflas etti.",
|
||||||
"bankrupt_select_info": "İflas edecek oyuncuyu seç:",
|
"bankrupt_select_info": "İflas edecek oyuncuyu seç:",
|
||||||
|
|
||||||
"muhammed": "Bombacı",
|
"deathbomb": "Canlı Bomba",
|
||||||
"muhammed_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
|
"deathbomb_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
|
||||||
"muhammed_explosion": "ALLAHU EKBER!!!",
|
"deathbomb_explosion": "BOOM!!!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Hareketsiz durmak görünmezliğini %33, çömelmek %33 ve bıçak tutmak %33 artırır",
|
"ninja_desc": "Görünmezliğini sabit durmak %33, eğilmek %33 ve bıçak tutmak %33 artırır",
|
||||||
|
|
||||||
"nonades": "Bomba Geçirmez",
|
"nonades": "Bomba Geçirmez",
|
||||||
"nonades_desc": "Bombalar sana hasar vermez",
|
"nonades_desc": "Bombalar sana hasar vermez",
|
||||||
|
|
||||||
"norecoil": "Odaklanma",
|
"norecoil": "Odaklanma",
|
||||||
"norecoil_desc": "Ateş ederken geri tepme olmaz",
|
"norecoil_desc": "Silahın hiç sekmez",
|
||||||
|
|
||||||
"noclip": "Noclip",
|
"noclip": "Noclip",
|
||||||
"noclip_desc": "Kısa süreliğine noclip açmak için E tuşuna bas",
|
"noclip_desc": "[css_useSkill] tuşuna basarak duvarların içinden geç",
|
||||||
|
|
||||||
"oneshot": "Tek Atış",
|
"oneshot": "Tek Atış",
|
||||||
"oneshot_desc": "Düşmana vurmak onu anında öldürür",
|
"oneshot_desc": "Düşmana vurmak onu anında öldürür",
|
||||||
|
|
@ -297,18 +297,18 @@
|
||||||
"onlyhead": "Sadece Kafa",
|
"onlyhead": "Sadece Kafa",
|
||||||
"onlyhead_desc": "Sadece kafadan hasar alırsın",
|
"onlyhead_desc": "Sadece kafadan hasar alırsın",
|
||||||
|
|
||||||
"paweljumper": "Ekstra Zıplama",
|
"paweljumper": "Zıppır",
|
||||||
"paweljumper_desc": "Rastgele sayıda ekstra zıplama hakkı kazanırsın",
|
"paweljumper_desc": "Rastgele sayıda ekstra zıplaman olur",
|
||||||
"paweljumper_desc2": "{0} tane ekstra zıplama hakkın var",
|
"paweljumper_desc2": "{0} kez ekstra zıplayabilirsin",
|
||||||
|
|
||||||
"phoenix": "Anka Kuşu",
|
"phoenix": "Anka Kuşu",
|
||||||
"phoenix_desc": "Öldükten sonra rastgele yeniden doğma şansın olur",
|
"phoenix_desc": "Öldükten sonra rastgele yeniden doğma şansın olur",
|
||||||
"phoenix_desc2": "Ölümden sonra yeniden doğma şansın: %{0}",
|
"phoenix_desc2": "Yeniden doğma şansın: %{0}",
|
||||||
"phoenix_respawn": "Anka Kuşu'nun gücü sayesinde küllerinden yeniden doğdun!",
|
"phoenix_respawn": "Küllerinden yeniden doğdun!",
|
||||||
|
|
||||||
"psychicdefusing": "Psişik İmha",
|
"psychicdefusing": "Psişik İmha",
|
||||||
"psychicdefusing_desc": "Bombanın yanındayken onu otomatik imha etmeye başlarsın",
|
"psychicdefusing_desc": "Bombanın yanındayken onu otomatik imha etmeye başlarsın",
|
||||||
"psychicdefusing_hud_info": "İmha için {0} saniye kaldı",
|
"psychicdefusing_hud_info": "Bombanın çözülmesi için son {0} saniye",
|
||||||
|
|
||||||
"pilot": "Pilot",
|
"pilot": "Pilot",
|
||||||
"pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın",
|
"pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın",
|
||||||
|
|
@ -326,7 +326,7 @@
|
||||||
|
|
||||||
"primaryban": "Tüfek Yasak",
|
"primaryban": "Tüfek Yasak",
|
||||||
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
|
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
|
||||||
"primaryban_enemy_info": "Artık tüfek kullanamazsın.",
|
"primaryban_enemy_info": "Tüfek kullanmayı unuttun",
|
||||||
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
|
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
|
||||||
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
|
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
|
||||||
|
|
||||||
|
|
@ -335,13 +335,13 @@
|
||||||
|
|
||||||
"push": "İtici",
|
"push": "İtici",
|
||||||
"push_desc": "Düşmana vurduğunda onu geri itme şansın olur",
|
"push_desc": "Düşmana vurduğunda onu geri itme şansın olur",
|
||||||
"push_desc2": "Düşmanı geri itme şansın: %{0}",
|
"push_desc2": "Geri itme şansın: %{0}",
|
||||||
|
|
||||||
"pyro": "Piromani",
|
"pyro": "Ateşbaz",
|
||||||
"pyro_desc": "Molotof canını yeniler",
|
"pyro_desc": "Molotof canını yeniler",
|
||||||
|
|
||||||
"quickshot": "Seri Ateş",
|
"quickshot": "Seri Atış",
|
||||||
"quickshot_desc": "Tüm mermiler çok hızlı ateşlenir",
|
"quickshot_desc": "Silahın daha hızlı ateş eder",
|
||||||
|
|
||||||
"radarhack": "Radar Hack",
|
"radarhack": "Radar Hack",
|
||||||
"radarhack_desc": "Düşmanlar radarda görünür",
|
"radarhack_desc": "Düşmanlar radarda görünür",
|
||||||
|
|
@ -349,34 +349,34 @@
|
||||||
"rambo": "Rambo",
|
"rambo": "Rambo",
|
||||||
"rambo_desc": "Raund başında rastgele miktarda can alırsın",
|
"rambo_desc": "Raund başında rastgele miktarda can alırsın",
|
||||||
|
|
||||||
"randomweapon": "Rastgele Silah",
|
"randomweapon": "Silah Kumarı",
|
||||||
"randomweapon_desc": "Rastgele bir silah almak için E tuşuna bas",
|
"randomweapon_desc": "[css_useSkill] tuşuna basarak rastgele bir silah al",
|
||||||
|
|
||||||
"rezombie": "Zombi Dönüşümü",
|
"rezombie": "Zombi",
|
||||||
"rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız bir zombi olarak yeniden doğarsın",
|
"rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız zombi olarak doğarsın",
|
||||||
|
|
||||||
"reactivearmor": "Reaktif Zırh",
|
"reactivearmor": "Reaktif Zırh",
|
||||||
"reactivearmor_desc": "Zırh alınan ilk hasarı emmer",
|
"reactivearmor_desc": "Zırhın alınan ilk hasarı emmer",
|
||||||
|
|
||||||
"regeneration": "Yenilenme",
|
"regeneration": "Yenilenme",
|
||||||
"regeneration_desc": "Birkaç saniyede bir canın yenilenir",
|
"regeneration_desc": "Birkaç saniyede bir canın yenilenir",
|
||||||
|
|
||||||
"replicator": "Kopyacı",
|
"replicator": "Kopyacı",
|
||||||
"replicator_desc": "Vurulduğunda hasar veren bir kopya oluşturmak için E tuşuna bas",
|
"replicator_desc": "[css_useSkill] tuşuna basarak kopya oluştur ve ölürse rakibe hasar verir",
|
||||||
|
|
||||||
"retreat": "Geri Çekilme",
|
"retreat": "Geri Çekil",
|
||||||
"retreat_desc": "Başlangıç noktasına dönmek için E tuşuna bas",
|
"retreat_desc": "[css_useSkill] tuşuna basarak başlangıç noktasına ışınlan",
|
||||||
|
|
||||||
"returntosender": "İade",
|
"returntosender": "İade",
|
||||||
"returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına geri gönderir",
|
"returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına ışınlar",
|
||||||
|
|
||||||
"richboy": "Zengin Çocuk",
|
"richboy": "Zengin Bebe",
|
||||||
"richboy_desc": "Raund başında rastgele miktarda para alırsın",
|
"richboy_desc": "Raund başında rastgele miktarda para alırsın",
|
||||||
|
|
||||||
"robinhood": "Robin Hood",
|
"robinhood": "Robin Hood",
|
||||||
"robinhood_desc": "Düşmana hasar vermek onun parasını çalar",
|
"robinhood_desc": "Düşmana hasar vermek onun parasını çalar",
|
||||||
|
|
||||||
"rubber": "Lastik Mermiler",
|
"rubber": "Lastik Mermi",
|
||||||
"rubber_desc": "Mermilerin oyuncuları önemli ölçüde yavaşlatır",
|
"rubber_desc": "Mermilerin oyuncuları önemli ölçüde yavaşlatır",
|
||||||
|
|
||||||
"saper": "İstihkamcı",
|
"saper": "İstihkamcı",
|
||||||
|
|
@ -387,48 +387,48 @@
|
||||||
|
|
||||||
"shade": "Gölge",
|
"shade": "Gölge",
|
||||||
"shade_desc": "Vurduğun düşmanın arkasına ışınlanma şansın olur",
|
"shade_desc": "Vurduğun düşmanın arkasına ışınlanma şansın olur",
|
||||||
"shade_desc2": "Düşmanın arkasına ışınlanma şansın: %{0}",
|
"shade_desc2": "Arkasına ışınlanma şansın: %{0}",
|
||||||
"shade_nospace": "Uygun alan yok",
|
"shade_nospace": "Uygun alan yok",
|
||||||
|
|
||||||
"shortbomb": "Kısa Fünye",
|
"shortbomb": "Kısa Fünye",
|
||||||
"shortbomb_desc": "Bomba çok daha hızlı patlar",
|
"shortbomb_desc": "Bomba çok daha hızlı patlar",
|
||||||
|
|
||||||
"silent": "Sessiz",
|
"silent": "Sessiz",
|
||||||
"silent_desc": "Ayak seslerin ve zıplamaların DİĞER oyunculara duyulmaz",
|
"silent_desc": "Ayak seslerini ve zıplamalarını DİĞER oyuncular duyamaz",
|
||||||
|
|
||||||
"smoker": "Tiryaki",
|
"smoker": "Tiryaki",
|
||||||
"smoker_desc": "Sis bombalarınız asla bitmez",
|
"smoker_desc": "Sis bombalarınız asla bitmez",
|
||||||
|
|
||||||
"sniperelite": "Keskin Nişancı",
|
"sniperelite": "Keskin Nişancı",
|
||||||
"sniperelite_customname": "Keskin Nişancı Yeteneği",
|
"sniperelite_customname": "Keskin Nişancı",
|
||||||
"sniperelite_desc": "Mevcut silahını bir AWP ile değiştirmek için E tuşuna bas",
|
"sniperelite_desc": "[css_useSkill] tuşuna basarak silahını AWP ile değiştir",
|
||||||
|
|
||||||
"soldier": "Asker",
|
"soldier": "Teğmen",
|
||||||
"soldier_desc": "Rastgele bir hasar çarpanına sahip olursun",
|
"soldier_desc": "Rastgele bir oranda fazla hasar verirsin",
|
||||||
"soldier_desc2": "Hasar çarpanın: {0}x",
|
"soldier_desc2": "Hasarın: {0}x",
|
||||||
|
|
||||||
"soundmaker": "Gürültücü",
|
"soundmaker": "Halüsinasyon",
|
||||||
"soundmaker_desc": "Her düşman için bir ses tetiklemek için E tuşuna bas",
|
"soundmaker_desc": "[css_useSkill] tuşuna basarak rakibinin çığlık atmasını sağla",
|
||||||
|
|
||||||
"spectator": "İzleyici",
|
"spectator": "Röntgen",
|
||||||
"spectator_desc": "Rastgele bir düşmanı izlemek için E tuşuna bas",
|
"spectator_desc": "[css_useSkill] tuşuna basarak rakibinin gözünden gör",
|
||||||
|
|
||||||
"swapposition": "Yer Değiştirme",
|
"swapposition": "Yer Değiştirme",
|
||||||
"swapposition_desc": "Rastgele bir düşmanla yer değiştirmek için E tuşuna bas",
|
"swapposition_desc": "[css_useSkill] tuşuna basarak vurduğun düşmanla yer değiştir",
|
||||||
|
|
||||||
"teleporter": "Işınlayıcı",
|
"teleporter": "Işınlayıcı",
|
||||||
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
|
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
|
||||||
"teleporter_desc2": "Vuruştan sonra yer değiştirme şansınız: %{0}",
|
"teleporter_desc2": "Yer değiştirme şansın: %{0}",
|
||||||
|
|
||||||
"thief": "Hırsız",
|
"thief": "Hırsız",
|
||||||
"thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin",
|
"thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin",
|
||||||
"thief_enemy_info": "Yeteneğin çalındı.",
|
"thief_enemy_info": "Yeteneğin çalındı.",
|
||||||
"thief_player_info": "'{0}' isimli oyuncunun yeteneği çalındı.",
|
"thief_player_info": "'{0}' isimli oyuncunun yeteneği çalındı.",
|
||||||
"thief_select_info": "Yetenek çalınacak oyuncu:",
|
"thief_select_info": "Yetenek çalınacak oyuncu:",
|
||||||
"thief_incorrect_skill": "Bu yetenek seçilemez!",
|
"thief_incorrect_skill": "Bu yetenek çalınamaz!",
|
||||||
|
|
||||||
"thirdeye": "Üçüncü Göz",
|
"thirdeye": "Üçüncü Göz",
|
||||||
"thirdeye_desc": "Üçüncü şahıs bakış açısını aktif etmek için E tuşuna bas",
|
"thirdeye_desc": "[css_useSkill] tuşuna basarak üçüncü göze(thirdperson) geç",
|
||||||
|
|
||||||
"thorns": "Dikenler",
|
"thorns": "Dikenler",
|
||||||
"thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır",
|
"thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır",
|
||||||
|
|
@ -448,13 +448,13 @@
|
||||||
"watchmaker_tt": "Raund süresi {0} saniye uzatıldı.",
|
"watchmaker_tt": "Raund süresi {0} saniye uzatıldı.",
|
||||||
|
|
||||||
"weaponsswap": "Silah Takası",
|
"weaponsswap": "Silah Takası",
|
||||||
"weaponsswap_desc": "Rastgele bir düşmanla silahları takas etmek için E tuşuna bas",
|
"weaponsswap_desc": "[css_useSkill] tuşuna basarak silahını düşmanla takasla",
|
||||||
"weaponsswap_hud_info2": "Takas edilecek silahın yok",
|
"weaponsswap_hud_info2": "Takas edilecek silahın yok",
|
||||||
|
|
||||||
"weightless": "Yerçekimsiz",
|
"weightless": "Yerçekimsiz",
|
||||||
"weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve daha hızlı uçar",
|
"weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve dümdüz gider",
|
||||||
|
|
||||||
"wildthrow": "Vahşi Atış",
|
"wildthrow": "Unutkan Bombacı",
|
||||||
"wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin",
|
"wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin",
|
||||||
"wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu",
|
"wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu",
|
||||||
"wildthrow_select_info": "Bir oyuncu seçin:",
|
"wildthrow_select_info": "Bir oyuncu seçin:",
|
||||||
|
|
@ -462,25 +462,25 @@
|
||||||
"zeus": "Zeus",
|
"zeus": "Zeus",
|
||||||
"zeus_desc": "Zeus x27 anında şarj olur",
|
"zeus_desc": "Zeus x27 anında şarj olur",
|
||||||
|
|
||||||
"your_skill": "Mevcut yeteneğin",
|
"your_skill": "Yeteneğin",
|
||||||
"enemy_skill": "Düşmanın yeteneği",
|
"enemy_skill": "Düşmanın yeteneği",
|
||||||
"observer_skill": "Oyuncunun yeteneği",
|
"observer_skill": "Oyuncunun yeteneği",
|
||||||
"welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF",
|
"welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF",
|
||||||
"drawing_skill": "Yetenek çekiliyor",
|
"drawing_skill": "Yetenek çarkı dönüyor...",
|
||||||
"disabled_weapon": "Bu silahı kullanamazsın",
|
"disabled_weapon": "Bu silahı kullanamazsın",
|
||||||
|
|
||||||
"hud_info": "{0} saniye daha bekle",
|
"hud_info": "{0} saniye daha bekle",
|
||||||
"hud_info_no_enemy": "Düşman bulunamadı",
|
"hud_info_no_enemy": "Düşman yok",
|
||||||
"active_hud_info": "{0} milisaniye daha aktif",
|
"active_hud_info": "{0} milisaniye daha aktif",
|
||||||
|
|
||||||
"skills_menu": "Yetenek Listesi",
|
"skills_menu": "Yetenek Listesi",
|
||||||
"no_player": "Eşleşen oyuncu bulunamadı.",
|
"no_player": "Eşleşen oyuncu yok.",
|
||||||
"duplicate_player": "Aynı isimde birden fazla oyuncu bulundu.",
|
"duplicate_player": "Aynı isimde birden fazla oyuncu bulundu.",
|
||||||
"selectplayerskill_command": "/t yazın",
|
"selectplayerskill_command": "Sohbete /t yazın",
|
||||||
"selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu bulunamadı.",
|
"selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu yok.",
|
||||||
|
|
||||||
"skill_not_found_setskill": "Böyle bir yetenek bulunamadı",
|
"skill_not_found_setskill": "Böyle bir yetenek yok",
|
||||||
"player_not_found_setskill": "Böyle bir oyuncu bulunamadı",
|
"player_not_found_setskill": "Böyle bir oyuncu yok",
|
||||||
"correct_form_setskill": "Doğru kullanım: !setskill <isim> <yetenek>",
|
"correct_form_setskill": "Doğru kullanım: !setskill <isim> <yetenek>",
|
||||||
"correct_form_setscore": "Doğru kullanım: !setscore <CT> <TT>",
|
"correct_form_setscore": "Doğru kullanım: !setscore <CT> <TT>",
|
||||||
"done_setskill": "yetenek ayarlandı",
|
"done_setskill": "yetenek ayarlandı",
|
||||||
|
|
@ -506,12 +506,12 @@
|
||||||
"vote_alredy_voted": "Zaten oy kullandın!",
|
"vote_alredy_voted": "Zaten oy kullandın!",
|
||||||
"vote_vote": "Oy ver",
|
"vote_vote": "Oy ver",
|
||||||
|
|
||||||
"bombsite_a": "Bomba Alanı A",
|
"bombsite_a": "A Bölgesi",
|
||||||
"bombsite_b": "Bomba Alanı B",
|
"bombsite_b": "B Bölgesi",
|
||||||
"bombplanted": "Bomba kuruldu\nPatlamaya {0} saniye",
|
"bombplanted": "Bomba kuruldu\nPatlamaya {0} saniye",
|
||||||
|
|
||||||
"teammate_skills": "Takım arkadaşlarının yetenekleri",
|
"teammate_skills": "Takımının yetenekleri",
|
||||||
"summary": "Son raundun özeti",
|
"summary": "Raundun özeti",
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Kaydır",
|
"menu_controlls_scroll": "W/S - Kaydır",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"moneyswap_player_info": "你与玩家 '{0}' 交换了金钱。",
|
"moneyswap_player_info": "你与玩家 '{0}' 交换了金钱。",
|
||||||
"moneyswap_select_info": "选择你想与之交换金钱的玩家:",
|
"moneyswap_select_info": "选择你想与之交换金钱的玩家:",
|
||||||
|
|
||||||
"muhammed": "穆罕默德",
|
"deathbomb": "死亡炸弹",
|
||||||
"muhammed_desc": "你死亡时会爆炸,杀死附近的玩家",
|
"deathbomb_desc": "你死亡时会爆炸,杀死附近的玩家",
|
||||||
"muhammed_explosion": "真主至大!!!",
|
"deathbomb_explosion": "砰!",
|
||||||
|
|
||||||
"ninja": "忍者",
|
"ninja": "忍者",
|
||||||
"ninja_desc": "站立不动增加33%隐形,蹲下增加33%,持刀增加33%",
|
"ninja_desc": "站立不动增加33%隐形,蹲下增加33%,持刀增加33%",
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@ public enum Skills
|
||||||
Darkness,
|
Darkness,
|
||||||
Deactivator,
|
Deactivator,
|
||||||
Deaf,
|
Deaf,
|
||||||
|
DeathBomb,
|
||||||
Disarmament,
|
Disarmament,
|
||||||
Distancer,
|
Distancer,
|
||||||
Dash,
|
Dash,
|
||||||
|
|
@ -126,7 +127,6 @@ public enum Skills
|
||||||
Medic,
|
Medic,
|
||||||
Miner,
|
Miner,
|
||||||
MoneySwap,
|
MoneySwap,
|
||||||
Muhammed,
|
|
||||||
Ninja,
|
Ninja,
|
||||||
NoNades,
|
NoNades,
|
||||||
NoRecoil,
|
NoRecoil,
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,12 @@ using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Core.Attributes;
|
using CounterStrikeSharp.API.Core.Attributes;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
|
||||||
using CounterStrikeSharp.API.Modules.Cvars;
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
using CounterStrikeSharp.API.Modules.Events;
|
using CounterStrikeSharp.API.Modules.Events;
|
||||||
using CounterStrikeSharp.API.Modules.Memory;
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.UserMessages;
|
using CounterStrikeSharp.API.Modules.UserMessages;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using RayTraceAPI;
|
using RayTraceAPI;
|
||||||
using src.player.skills;
|
using src.player.skills;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
|
@ -465,6 +463,9 @@ namespace src.player
|
||||||
CCSPlayerController player = pawn.Controller.Value.As<CCSPlayerController>();
|
CCSPlayerController player = pawn.Controller.Value.As<CCSPlayerController>();
|
||||||
if (player == null || !player.IsValid) return HookResult.Continue;
|
if (player == null || !player.IsValid) return HookResult.Continue;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
|
||||||
|
if (playerInfo == null) return HookResult.Continue;
|
||||||
|
|
||||||
CCSWeaponBaseVData vdata = VirtualFunctions.GetCSWeaponDataFromKeyFunc.Invoke(-1, econItem.ItemDefinitionIndex.ToString());
|
CCSWeaponBaseVData vdata = VirtualFunctions.GetCSWeaponDataFromKeyFunc.Invoke(-1, econItem.ItemDefinitionIndex.ToString());
|
||||||
if (vdata == null) return HookResult.Continue;
|
if (vdata == null) return HookResult.Continue;
|
||||||
|
|
||||||
|
|
@ -483,7 +484,8 @@ namespace src.player
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return block ? HookResult.Stop : HookResult.Continue;
|
|
||||||
|
return block ? HookResult.Handled : HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -510,7 +512,7 @@ namespace src.player
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return block ? HookResult.Stop : HookResult.Continue;
|
return block ? HookResult.Handled : HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -570,7 +572,7 @@ namespace src.player
|
||||||
|
|
||||||
string welcomeMsg = player.GetTranslation("welcome_message", "welcome");
|
string welcomeMsg = player.GetTranslation("welcome_message", "welcome");
|
||||||
foreach (string line in welcomeMsg.Split("\n"))
|
foreach (string line in welcomeMsg.Split("\n"))
|
||||||
player.PrintToChat($" {ChatColors.Green}" + line.Replace("{PLAYER}", $" {ChatColors.Red}{player.PlayerName}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
player.PrintToChat($" {ChatColors.Green}" + line.Replace("{PLAYER}", $" {ChatColors.Red}\u202A{player.PlayerName}\u202C{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
||||||
.Replace("{SERVER_NAME}", $" {ChatColors.Red}{ConVar.Find("hostname")?.StringValue ?? "Default Server"}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
.Replace("{SERVER_NAME}", $" {ChatColors.Red}{ConVar.Find("hostname")?.StringValue ?? "Default Server"}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
||||||
.Replace("{VERSION}", $" {ChatColors.Red}v{Instance.ModuleVersion}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
.Replace("{VERSION}", $" {ChatColors.Red}v{Instance.ModuleVersion}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
||||||
.Replace("{SKILLS_COUNT}", $" {ChatColors.Red}{SkillData.Skills.Count - 1}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
.Replace("{SKILLS_COUNT}", $" {ChatColors.Red}{SkillData.Skills.Count - 1}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
|
||||||
|
|
@ -731,16 +733,22 @@ namespace src.player
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
isTransmitRegistered = false;
|
isTransmitRegistered = false;
|
||||||
|
|
||||||
Instance.AddTimer(.1f, () => {
|
Instance.AddTimer(.1f, () => {
|
||||||
DisableAll();
|
DisableAll();
|
||||||
ConVar.Find("sv_legacy_jump")?.SetValue("1");
|
ConVar.Find("sv_legacy_jump")?.SetValue("1");
|
||||||
|
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
||||||
|
|
||||||
playersSkills.Clear();
|
playersSkills.Clear();
|
||||||
staticSkills.Clear();
|
staticSkills.Clear();
|
||||||
|
|
||||||
ctSkill = noneSkill;
|
ctSkill = noneSkill;
|
||||||
tSkill = noneSkill;
|
tSkill = noneSkill;
|
||||||
allSkill = noneSkill;
|
allSkill = noneSkill;
|
||||||
|
|
||||||
PlayerManager.Clear();
|
PlayerManager.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -766,7 +774,7 @@ namespace src.player
|
||||||
var skillInfo = SkillData.Skills.FirstOrDefault(p => p.Skill == _playerSkill.Skill);
|
var skillInfo = SkillData.Skills.FirstOrDefault(p => p.Skill == _playerSkill.Skill);
|
||||||
var specialSkillInfo = SkillData.Skills.FirstOrDefault(s => s.Skill == _playerSkill.SpecialSkill);
|
var specialSkillInfo = SkillData.Skills.FirstOrDefault(s => s.Skill == _playerSkill.SpecialSkill);
|
||||||
if (skillInfo == null) continue;
|
if (skillInfo == null) continue;
|
||||||
skillsText += $" {ChatColors.DarkRed}{_player.PlayerName}{ChatColors.Lime}: {(_playerSkill.SpecialSkill == Skills.None || specialSkillInfo == null ? player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance) : $"{player.GetSkillName(specialSkillInfo.Skill)} -> {player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance)}")}\n";
|
skillsText += $" {ChatColors.DarkRed}\u202A{_player.PlayerName}\u202C{ChatColors.Lime}: {(_playerSkill.SpecialSkill == Skills.None || specialSkillInfo == null ? player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance) : $"{player.GetSkillName(specialSkillInfo.Skill)} -> {player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance)}")}\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -824,7 +832,7 @@ namespace src.player
|
||||||
|
|
||||||
SkillUtils.PrintToChat(victim,
|
SkillUtils.PrintToChat(victim,
|
||||||
$"{ChatColors.DarkRed}{(attackerInfo.SpecialSkill == Skills.None ? victim.GetSkillName(skillData.Skill) : $"{victim.GetSkillName(specialSkillData.Skill)} -> {victim.GetSkillName(skillData.Skill)}")}{ChatColors.Lime} - {skillDesc}",
|
$"{ChatColors.DarkRed}{(attackerInfo.SpecialSkill == Skills.None ? victim.GetSkillName(skillData.Skill) : $"{victim.GetSkillName(specialSkillData.Skill)} -> {victim.GetSkillName(skillData.Skill)}")}{ChatColors.Lime} - {skillDesc}",
|
||||||
title: $"{victim.GetTranslation("enemy_skill")} {ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime}");
|
title: $"{victim.GetTranslation("enemy_skill")} {ChatColors.DarkRed}\u202A{attacker.PlayerName}\u202C{ChatColors.Lime}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
@ -1064,9 +1072,9 @@ namespace src.player
|
||||||
float hudExpired = Config.LoadedConfig.SkillHudDuration;
|
float hudExpired = Config.LoadedConfig.SkillHudDuration;
|
||||||
skillPlayer.SkillHudExpired = hudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(hudExpired);
|
skillPlayer.SkillHudExpired = hudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(hudExpired);
|
||||||
|
|
||||||
float descriptionHudExpired = Config.LoadedConfig.SkillHudDuration;
|
float descriptionHudExpired = Config.LoadedConfig.SkillDescriptionDuration;
|
||||||
skillPlayer.SkillDescriptionHudExpired = descriptionHudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(descriptionHudExpired);
|
skillPlayer.SkillDescriptionHudExpired = descriptionHudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(descriptionHudExpired);
|
||||||
|
|
||||||
if (Config.LoadedConfig.TeamMateSkillChatInfo)
|
if (Config.LoadedConfig.TeamMateSkillChatInfo)
|
||||||
{
|
{
|
||||||
Instance?.AddTimer(.6f, () =>
|
Instance?.AddTimer(.6f, () =>
|
||||||
|
|
@ -1079,7 +1087,7 @@ namespace src.player
|
||||||
if (teammateInfo != null && teammateInfo?.Skill != null)
|
if (teammateInfo != null && teammateInfo?.Skill != null)
|
||||||
{
|
{
|
||||||
var skillInfo = SkillData.Skills.FirstOrDefault(p => p.Skill == teammateInfo.Skill);
|
var skillInfo = SkillData.Skills.FirstOrDefault(p => p.Skill == teammateInfo.Skill);
|
||||||
teammateSkills += $" {ChatColors.DarkRed}{teammate.PlayerName}{ChatColors.Lime}: {(skillInfo == null ? player.GetSkillName(Skills.None) : player.GetSkillName(skillInfo.Skill, teammateInfo.SkillChance))}\n";
|
teammateSkills += $" {ChatColors.DarkRed}\u202A{teammate.PlayerName}\u202C{ChatColors.Lime}: {(skillInfo == null ? player.GetSkillName(Skills.None) : player.GetSkillName(skillInfo.Skill, teammateInfo.SkillChance))}\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ namespace src.player
|
||||||
Instance.RegisterListener<OnTick>(() =>
|
Instance.RegisterListener<OnTick>(() =>
|
||||||
{
|
{
|
||||||
UpdateGameRules();
|
UpdateGameRules();
|
||||||
|
if (Server.TickCount % 2 != 0) return;
|
||||||
|
|
||||||
foreach (var player in Utilities.GetPlayers())
|
foreach (var player in Utilities.GetPlayers())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,16 @@
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
{
|
{
|
||||||
public class AntyFlash : ISkill
|
public class AntyFlash : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.AntyFlash;
|
private const Skills skillName = Skills.AntyFlash;
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -38,15 +41,76 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "flashbang") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "flashbang") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
|
|
||||||
|
int flashbangLimit = ConVar.Find("ammo_grenade_limit_flashbang")?.GetPrimitiveValue<int>() ?? 2;
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
|
||||||
|
if (grenadeLimit > flashbangLimit)
|
||||||
|
{
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade, grenadeLimit, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#D6E6FF", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float flashDuration = 7f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#D6E6FF", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float flashDuration = 7f, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float FlashDuration { get; set; } = flashDuration;
|
public float FlashDuration { get; set; } = flashDuration;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -41,7 +41,7 @@ namespace src.player.skills
|
||||||
foreach (var e in enemies)
|
foreach (var e in enemies)
|
||||||
{
|
{
|
||||||
int money = e.InGameMoneyServices?.Account ?? 0;
|
int money = e.InGameMoneyServices?.Account ?? 0;
|
||||||
menuItems.Add(($"{e.PlayerName} : {money}$", e.Index.ToString()));
|
menuItems.Add(($"\u202A{e.PlayerName}\u202C : {money}$", e.Index.ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!menuItems.IsEmpty)
|
if (!menuItems.IsEmpty)
|
||||||
|
|
@ -61,7 +61,7 @@ namespace src.player.skills
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive && p.Team != player.Team && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive && p.Team != player.Team && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
{
|
{
|
||||||
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices?.Account ?? 0)}$", e.Index.ToString()))];
|
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices?.Account ?? 0)}$", e.Index.ToString()))];
|
||||||
SkillUtils.CreateMenu(player, menuItems);
|
SkillUtils.CreateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
{
|
{
|
||||||
|
|
@ -12,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Baseball;
|
private const Skills skillName = Skills.Baseball;
|
||||||
private static readonly ConcurrentDictionary<uint, byte> decoys = [];
|
private static readonly ConcurrentDictionary<uint, byte> decoys = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -24,8 +24,17 @@ namespace src.player.skills
|
||||||
var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
|
var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
|
||||||
var weapon = @event.Weapon;
|
var weapon = @event.Weapon;
|
||||||
|
|
||||||
if (weapon != "decoy") return;
|
if (weapon != "decoy")
|
||||||
if (!Instance.IsPlayerValid(victim) || !Instance.IsPlayerValid(attacker)) return;
|
return;
|
||||||
|
|
||||||
|
if (victim == null || !victim.IsValid || victim.PlayerPawn?.Value == null || !victim.PlayerPawn.Value.IsValid || victim.PlayerPawn.Value.Health <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (attacker == null || !attacker.IsValid || attacker.PlayerPawn?.Value == null || !attacker.PlayerPawn.Value.IsValid || attacker.PlayerPawn.Value.Health <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (victim.Index == attacker.Index || victim.Team == attacker.Team)
|
||||||
|
return;
|
||||||
|
|
||||||
var attackerInfo = PlayerManager.GetPlayerByIndex(PlayerManager.GetPlayerEvent(attacker)!.Index);
|
var attackerInfo = PlayerManager.GetPlayerByIndex(PlayerManager.GetPlayerEvent(attacker)!.Index);
|
||||||
if (attackerInfo?.Skill != skillName) return;
|
if (attackerInfo?.Skill != skillName) return;
|
||||||
|
|
@ -108,16 +117,72 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "decoy") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#2effc7", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float speedMultipier = 2f, float maxSpeed = 900f, int damageDeal = 9999) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "decoy") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#2effc7", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float speedMultipier = 2f, float maxSpeed = 900f, int damageDeal = 9999, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float SpeedMultipier { get; set; } = speedMultipier;
|
public float SpeedMultipier { get; set; } = speedMultipier;
|
||||||
public float MaxSpeed { get; set; } = maxSpeed;
|
public float MaxSpeed { get; set; } = maxSpeed;
|
||||||
public float DamageDeal { get; set; } = damageDeal;
|
public float DamageDeal { get; set; } = damageDeal;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -125,14 +125,18 @@ namespace src.player.skills
|
||||||
|
|
||||||
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)playerPawn.Index);
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)playerPawn.Index);
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
|
||||||
|
if (info.TransmitEntities.Contains(entity.Index))
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
|
||||||
var bombIndex = GetBombIndex();
|
var bombIndex = GetBombIndex();
|
||||||
if (bombIndex == null) continue;
|
if (bombIndex == null) continue;
|
||||||
|
|
||||||
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
||||||
if (bombEntity == null || !bombEntity.IsValid) continue;
|
if (bombEntity == null || !bombEntity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(bombEntity.Index);
|
|
||||||
|
if (info.TransmitEntities.Contains(bombEntity.Index))
|
||||||
|
info.TransmitEntities.Remove(bombEntity.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -141,6 +145,7 @@ namespace src.player.skills
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
Event.EnableTransmit();
|
Event.EnableTransmit();
|
||||||
|
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
|
|
||||||
|
|
@ -157,6 +162,8 @@ namespace src.player.skills
|
||||||
|
|
||||||
invisiblePlayers.TryAdd(player.Index, 0);
|
invisiblePlayers.TryAdd(player.Index, 0);
|
||||||
SkillUtils.SetPlayerInvisibility(player, .5f);
|
SkillUtils.SetPlayerInvisibility(player, .5f);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
|
@ -164,6 +171,8 @@ namespace src.player.skills
|
||||||
invisiblePlayers.TryRemove(player.Index, out _);
|
invisiblePlayers.TryRemove(player.Index, out _);
|
||||||
SkillUtils.SetPlayerInvisibility(player, 0);
|
SkillUtils.SetPlayerInvisibility(player, 0);
|
||||||
EntityManager.DestroyPlayerEntities(player.Index);
|
EntityManager.DestroyPlayerEntities(player.Index);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CreatePlayerPosProp(CCSPlayerController player)
|
private static void CreatePlayerPosProp(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ using System.Drawing;
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using static src.jRandomSkills;
|
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
|
||||||
|
|
@ -19,7 +18,7 @@ namespace src.player.skills
|
||||||
"weapon_ump45", "weapon_p90", "weapon_mp5sd", "weapon_ssg08",
|
"weapon_ump45", "weapon_p90", "weapon_mp5sd", "weapon_ssg08",
|
||||||
"weapon_awp", "weapon_scar20", "weapon_g3sg1", "weapon_nova",
|
"weapon_awp", "weapon_scar20", "weapon_g3sg1", "weapon_nova",
|
||||||
"weapon_xm1014", "weapon_mag7", "weapon_sawedoff", "weapon_m249",
|
"weapon_xm1014", "weapon_mag7", "weapon_sawedoff", "weapon_m249",
|
||||||
"weapon_negev"
|
"weapon_negev", "weapon_sg556"
|
||||||
];
|
];
|
||||||
private static readonly ConcurrentDictionary<uint, uint> chickens = [];
|
private static readonly ConcurrentDictionary<uint, uint> chickens = [];
|
||||||
|
|
||||||
|
|
@ -82,8 +81,11 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
playerPawn.VelocityModifier = 1f;
|
playerPawn.VelocityModifier = 1f;
|
||||||
|
|
||||||
playerPawn.Health = Math.Min(playerPawn.Health + 50, 100);
|
if (playerPawn.Health > 0)
|
||||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
|
{
|
||||||
|
playerPawn.Health = Math.Min(playerPawn.Health + 50, 100);
|
||||||
|
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
|
||||||
|
}
|
||||||
|
|
||||||
SkillUtils.ChangePlayerScale(player, 1);
|
SkillUtils.ChangePlayerScale(player, 1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,8 @@ namespace src.player.skills
|
||||||
NextCamera = 0,
|
NextCamera = 0,
|
||||||
NoSpace = 0,
|
NoSpace = 0,
|
||||||
PlayerCameraRaw = player.PlayerPawn.Value.CameraServices.ViewEntity.Raw,
|
PlayerCameraRaw = player.PlayerPawn.Value.CameraServices.ViewEntity.Raw,
|
||||||
LastAngle = QAngle.Zero
|
LastPlayerAngle = QAngle.Zero,
|
||||||
|
LastCameraAngle = QAngle.Zero
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -160,16 +161,20 @@ namespace src.player.skills
|
||||||
if (playerInfo.CameraActive && playerInfo.CameraProp != null)
|
if (playerInfo.CameraActive && playerInfo.CameraProp != null)
|
||||||
{
|
{
|
||||||
if (pawn.AbsRotation != null)
|
if (pawn.AbsRotation != null)
|
||||||
playerInfo.LastAngle = new QAngle(pawn.V_angle.X, pawn.V_angle.Y, 0);
|
playerInfo.LastPlayerAngle = new QAngle(pawn.V_angle.X, pawn.V_angle.Y, 0);
|
||||||
|
|
||||||
var cameraProp = Utilities.GetEntityFromIndex<CDynamicProp>((int)playerInfo.CameraProp);
|
var cameraProp = Utilities.GetEntityFromIndex<CDynamicProp>((int)playerInfo.CameraProp);
|
||||||
if (cameraProp == null || !cameraProp.IsValid) return;
|
if (cameraProp == null || !cameraProp.IsValid || cameraProp.AbsRotation == null) return;
|
||||||
|
|
||||||
pawn.Teleport(null, cameraProp.AbsRotation);
|
if (playerInfo.LastCameraAngle == QAngle.Zero)
|
||||||
|
playerInfo.LastCameraAngle = new QAngle(cameraProp.AbsRotation.X, cameraProp.AbsRotation.Y, 0);
|
||||||
|
|
||||||
|
pawn.Look(playerInfo.LastCameraAngle);
|
||||||
}
|
}
|
||||||
else if (!forceToDefault)
|
else if (!forceToDefault)
|
||||||
{
|
{
|
||||||
pawn.Look(playerInfo.LastAngle);
|
playerInfo.LastCameraAngle = new QAngle(pawn.V_angle.X, pawn.V_angle.Y, 0);
|
||||||
|
pawn.Look(playerInfo.LastPlayerAngle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -399,7 +404,8 @@ namespace src.player.skills
|
||||||
public bool CameraActive { get; set; }
|
public bool CameraActive { get; set; }
|
||||||
public float NextCamera { get; set; }
|
public float NextCamera { get; set; }
|
||||||
public float NoSpace { get; set; }
|
public float NoSpace { get; set; }
|
||||||
public required QAngle LastAngle { get; set; }
|
public required QAngle LastPlayerAngle { get; set; }
|
||||||
|
public required QAngle LastCameraAngle { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#34ebd5", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = true, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float cooldown = 30) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#34ebd5", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = true, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float cooldown = 30) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ namespace src.player.skills
|
||||||
if (enemyInfo == null) continue;
|
if (enemyInfo == null) continue;
|
||||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
||||||
if (skillData == null) continue;
|
if (skillData == null) continue;
|
||||||
menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||||
}
|
}
|
||||||
SkillUtils.UpdateMenu(player, menuItems);
|
SkillUtils.UpdateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
|
|
@ -82,7 +82,7 @@ namespace src.player.skills
|
||||||
if (enemyInfo == null) continue;
|
if (enemyInfo == null) continue;
|
||||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
||||||
if (skillData == null) continue;
|
if (skillData == null) continue;
|
||||||
menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||||
}
|
}
|
||||||
SkillUtils.CreateMenu(player, menuItems);
|
SkillUtils.CreateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,13 @@ using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
|
||||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
{
|
{
|
||||||
public class Muhammed : ISkill
|
public class DeathBomb : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Muhammed;
|
private const Skills skillName = Skills.DeathBomb;
|
||||||
private static readonly QAngle angle = new(10, -5, 9);
|
private static readonly QAngle angle = new(10, -5, 9);
|
||||||
private static readonly ConcurrentDictionary<int, byte> nades = [];
|
private static readonly ConcurrentDictionary<int, byte> nades = [];
|
||||||
|
|
||||||
|
|
@ -57,7 +56,7 @@ namespace src.player.skills
|
||||||
SkillUtils.CreateHEGrenadeProjectile(pos, angle, new Vector(0, 0, -10), player.TeamNum);
|
SkillUtils.CreateHEGrenadeProjectile(pos, angle, new Vector(0, 0, -10), player.TeamNum);
|
||||||
|
|
||||||
foreach (var _p in Utilities.GetPlayers().Where(p => p.IsValid && p.Team is CsTeam.CounterTerrorist or CsTeam.Terrorist))
|
foreach (var _p in Utilities.GetPlayers().Where(p => p.IsValid && p.Team is CsTeam.CounterTerrorist or CsTeam.Terrorist))
|
||||||
SkillUtils.PrintToChat(_p, $"{ChatColors.DarkRed}{player.PlayerName}: {ChatColors.Lime}{_p.GetTranslation("muhammed_explosion")}",
|
SkillUtils.PrintToChat(_p, $"{ChatColors.DarkRed}\u202A{player.PlayerName}\u202C: {ChatColors.Lime}{_p.GetTranslation("deathbomb_explosion")}",
|
||||||
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
|
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
|
||||||
|
|
||||||
var fileNames = new[] { "radiobotfallback01", "radiobotfallback02", "radiobotfallback04" };
|
var fileNames = new[] { "radiobotfallback01", "radiobotfallback02", "radiobotfallback04" };
|
||||||
|
|
@ -88,7 +87,7 @@ namespace src.player.skills
|
||||||
heProjectile.DetonateTime = 0;
|
heProjectile.DetonateTime = 0;
|
||||||
|
|
||||||
if (nades.TryRemove(lastTick, out byte teamNum))
|
if (nades.TryRemove(lastTick, out byte teamNum))
|
||||||
heProjectile.Globalname = $"muhammed_team_{teamNum}_{heProjectile.Index}";
|
heProjectile.Globalname = $"deathbomb_team_{teamNum}_{heProjectile.Index}";
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,7 +102,7 @@ namespace src.player.skills
|
||||||
if (nade == null || !nade.IsValid) return;
|
if (nade == null || !nade.IsValid) return;
|
||||||
|
|
||||||
if (nade.DesignerName != "hegrenade_projectile") return;
|
if (nade.DesignerName != "hegrenade_projectile") return;
|
||||||
if (string.IsNullOrEmpty(nade.Globalname) || !nade.Globalname.StartsWith("muhammed_team_")) return;
|
if (string.IsNullOrEmpty(nade.Globalname) || !nade.Globalname.StartsWith("deathbomb_team_")) return;
|
||||||
|
|
||||||
if (!int.TryParse(nade.Globalname.Split('_')[2], out int nadeTeam)) return;
|
if (!int.TryParse(nade.Globalname.Split('_')[2], out int nadeTeam)) return;
|
||||||
|
|
||||||
|
|
@ -31,18 +31,18 @@ namespace src.player.skills
|
||||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
|
||||||
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p != null && p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p => p != null && p.IsValid && p.Team != player.Team && p.PlayerPawn?.Value != null && p.PlayerPawn.Value.IsValid && p.PlayerPawn.Value.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p != null && p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p => p != null && p.IsValid && p.Index != player.Index && p.PlayerPawn?.Value != null && p.PlayerPawn.Value.IsValid && p.PlayerPawn.Value.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
|
|
||||||
ConcurrentBag<(string, string)> menuItems = [];
|
ConcurrentBag<(string, string)> menuItems = [];
|
||||||
foreach (var enemy in enemies)
|
foreach (var enemy in enemies)
|
||||||
{
|
{
|
||||||
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
|
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy?.Index);
|
||||||
if (enemyInfo == null) continue;
|
if (enemyInfo == null) continue;
|
||||||
|
|
||||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
||||||
if (skillData == null) continue;
|
if (skillData == null) continue;
|
||||||
|
|
||||||
menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
menuItems.Add(($"\u202A{enemy!.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||||
}
|
}
|
||||||
SkillUtils.UpdateMenu(player, menuItems);
|
SkillUtils.UpdateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
|
|
@ -82,10 +82,12 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
|
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
|
||||||
if (enemyInfo == null) continue;
|
if (enemyInfo == null) continue;
|
||||||
|
|
||||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
||||||
if (skillData == null) continue;
|
if (skillData == null) continue;
|
||||||
|
|
||||||
skills.Add(skillData.Skill.ToString());
|
skills.Add(skillData.Skill.ToString());
|
||||||
menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ctSkills = Event.counterterroristSkills.Count(s => skills.Contains(s.Name));
|
int ctSkills = Event.counterterroristSkills.Count(s => skills.Contains(s.Name));
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,73 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using static src.jRandomSkills;
|
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
{
|
{
|
||||||
public class FriendlyFire : ISkill
|
public class FriendlyFire : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.FriendlyFire;
|
private const Skills skillName = Skills.FriendlyFire;
|
||||||
private static readonly string[] nades = ["inferno", "flashbang", "smokegrenade", "decoy", "hegrenade"];
|
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void PlayerHurt(EventPlayerHurt @event)
|
public static void OnTakeDamage(DynamicHook h)
|
||||||
{
|
{
|
||||||
var damage = @event.DmgHealth;
|
CEntityInstance param = h.GetParam<CEntityInstance>(0);
|
||||||
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
CTakeDamageInfo param2 = h.GetParam<CTakeDamageInfo>(1);
|
||||||
var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
|
|
||||||
var weapon = @event.Weapon;
|
|
||||||
|
|
||||||
if (nades.Contains(weapon)) return;
|
if (param == null || param.Entity == null || param2 == null || param2.Attacker == null || param2.Attacker.Value == null)
|
||||||
if (!Instance.IsPlayerValid(attacker) || !Instance.IsPlayerValid(victim) || attacker == victim) return;
|
return;
|
||||||
|
|
||||||
var playerInfo = PlayerManager.GetPlayerByIndex(attacker!.Index);
|
if (param2.AmmoType == 255)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
|
||||||
|
CCSPlayerPawn victimPawn = new(param.Handle);
|
||||||
|
|
||||||
|
if (attackerPawn == null || !attackerPawn.IsValid || victimPawn == null || !victimPawn.IsValid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (attackerPawn.DesignerName != "player" || victimPawn.DesignerName != "player")
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (attackerPawn == null || attackerPawn.Controller?.Value == null || victimPawn == null || victimPawn.Controller?.Value == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var attackerController = attackerPawn.Controller.Value;
|
||||||
|
if (attackerController == null || !attackerController.IsValid) return;
|
||||||
|
|
||||||
|
var victimController = victimPawn.Controller.Value;
|
||||||
|
if (victimController == null || !victimController.IsValid) return;
|
||||||
|
|
||||||
|
var attacker = attackerController.As<CCSPlayerController>();
|
||||||
|
if (attacker == null || !attacker.IsValid) return;
|
||||||
|
|
||||||
|
var victim = victimController.As<CCSPlayerController>();
|
||||||
|
if (victim == null || !victim.IsValid) return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(PlayerManager.GetPlayerEvent(attacker)!.Index);
|
||||||
if (playerInfo?.Skill != skillName || attacker!.Team != victim!.Team) return;
|
if (playerInfo?.Skill != skillName || attacker!.Team != victim!.Team) return;
|
||||||
|
|
||||||
|
float damage = param2.Damage;
|
||||||
|
param2.Damage = 0;
|
||||||
|
|
||||||
Server.ExecuteCommand("mp_autokick 0");
|
Server.ExecuteCommand("mp_autokick 0");
|
||||||
|
|
||||||
var pawn = victim.PlayerPawn.Value;
|
SkillUtils.AddHealth(
|
||||||
if (pawn == null || !pawn.IsValid) return;
|
victimPawn,
|
||||||
|
(int)(damage * SkillsInfo.GetValue<float>(skillName, "healthDamageMultiplier")),
|
||||||
if (damage == 0)
|
victimPawn.MaxHealth
|
||||||
damage = Instance.Random.Next(4, 6);
|
);
|
||||||
|
|
||||||
SkillUtils.AddHealth(pawn, damage + (int)(damage * SkillsInfo.GetValue<float>(skillName, "healthMultiplier")), pawn.MaxHealth);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff0000", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = true, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthMultiplier = 1.5f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff0000", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = true, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthDamageMultiplier = .3f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float HealthMultiplier { get; set; } = healthMultiplier;
|
public float HealthDamageMultiplier { get; set; } = healthDamageMultiplier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.FrozenDecoy;
|
private const Skills skillName = Skills.FrozenDecoy;
|
||||||
private static readonly ConcurrentDictionary<Vector, byte> decoys = [];
|
private static readonly ConcurrentDictionary<Vector, byte> decoys = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -67,15 +68,71 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "decoy") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#00eaff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, int slownessMultiplier = 5) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "decoy") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#00eaff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, int slownessMultiplier = 5, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float TriggerRadius { get; set; } = triggerRadius;
|
public float TriggerRadius { get; set; } = triggerRadius;
|
||||||
public int SlownessMultiplier { get; set; } = slownessMultiplier;
|
public int SlownessMultiplier { get; set; } = slownessMultiplier;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -13,17 +13,8 @@ namespace src.player.skills
|
||||||
public class Ghost : ISkill
|
public class Ghost : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Ghost;
|
private const Skills skillName = Skills.Ghost;
|
||||||
private static readonly string[] disabledWeapons =
|
private static readonly string[] allowedWeapons = [
|
||||||
[
|
"weapon_molotov", "weapon_incgrenade", "weapon_flashbang", "weapon_smokegrenade", "weapon_decoy", "weapon_hegrenade", "weapon_knife", "weapon_bayonet"
|
||||||
"weapon_deagle", "weapon_revolver", "weapon_glock", "weapon_usp_silencer",
|
|
||||||
"weapon_cz75a", "weapon_fiveseven", "weapon_p250", "weapon_tec9",
|
|
||||||
"weapon_elite", "weapon_hkp2000", "weapon_ak47", "weapon_m4a1",
|
|
||||||
"weapon_m4a4", "weapon_m4a1_silencer", "weapon_famas", "weapon_galilar",
|
|
||||||
"weapon_aug", "weapon_sg553", "weapon_mp9", "weapon_mac10",
|
|
||||||
"weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90",
|
|
||||||
"weapon_mp5sd", "weapon_ssg08", "weapon_awp", "weapon_scar20",
|
|
||||||
"weapon_g3sg1", "weapon_nova", "weapon_xm1014", "weapon_mag7",
|
|
||||||
"weapon_sawedoff", "weapon_m249", "weapon_negev"
|
|
||||||
];
|
];
|
||||||
private static readonly ConcurrentDictionary<uint, byte> invisiblePlayers = [];
|
private static readonly ConcurrentDictionary<uint, byte> invisiblePlayers = [];
|
||||||
private const string bloodParticle = "particles/blood_impact/blood_impact_high.vpcf";
|
private const string bloodParticle = "particles/blood_impact/blood_impact_high.vpcf";
|
||||||
|
|
@ -96,7 +87,8 @@ namespace src.player.skills
|
||||||
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)playerPawn.Index);
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)playerPawn.Index);
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
|
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
if (info.TransmitEntities.Contains(entity.Index))
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
|
||||||
var bombIndex = GetBombIndex(playerController);
|
var bombIndex = GetBombIndex(playerController);
|
||||||
if (bombIndex == null) continue;
|
if (bombIndex == null) continue;
|
||||||
|
|
@ -104,7 +96,8 @@ namespace src.player.skills
|
||||||
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
||||||
if (bombEntity == null || !bombEntity.IsValid) continue;
|
if (bombEntity == null || !bombEntity.IsValid) continue;
|
||||||
|
|
||||||
info.TransmitEntities.Remove(bombEntity.Index);
|
if (info.TransmitEntities.Contains(bombEntity.Index))
|
||||||
|
info.TransmitEntities.Remove(bombEntity.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -113,12 +106,15 @@ namespace src.player.skills
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
Event.EnableTransmit();
|
Event.EnableTransmit();
|
||||||
|
|
||||||
SetWeaponAttack(player, true);
|
SetWeaponAttack(player, true);
|
||||||
SkillUtils.SetPlayerInvisibility(player, .5f);
|
SkillUtils.SetPlayerInvisibility(player, .5f);
|
||||||
invisiblePlayers.TryAdd(player.Index, 0);
|
invisiblePlayers.TryAdd(player.Index, 0);
|
||||||
|
|
||||||
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
|
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
|
||||||
CreatePlayerPosProp(player);
|
CreatePlayerPosProp(player);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CreatePlayerPosProp(CCSPlayerController player)
|
private static void CreatePlayerPosProp(CCSPlayerController player)
|
||||||
|
|
@ -154,6 +150,8 @@ namespace src.player.skills
|
||||||
|
|
||||||
invisiblePlayers.TryRemove(player.Index, out _);
|
invisiblePlayers.TryRemove(player.Index, out _);
|
||||||
EntityManager.DestroyPlayerEntities(player.Index);
|
EntityManager.DestroyPlayerEntities(player.Index);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OnTick()
|
public static void OnTick()
|
||||||
|
|
@ -210,8 +208,10 @@ namespace src.player.skills
|
||||||
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
|
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
|
||||||
|
|
||||||
foreach (var weapon in pawn.WeaponServices.MyWeapons)
|
foreach (var weapon in pawn.WeaponServices.MyWeapons)
|
||||||
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
|
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid && !string.IsNullOrEmpty(weapon.Value.DesignerName))
|
||||||
if (disabledWeapons.Contains(weapon.Value.DesignerName))
|
{
|
||||||
|
string weaponName = weapon.Value.DesignerName;
|
||||||
|
if (!allowedWeapons.Contains(weaponName))
|
||||||
{
|
{
|
||||||
weapon.Value.NextPrimaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
|
weapon.Value.NextPrimaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
|
||||||
weapon.Value.NextSecondaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
|
weapon.Value.NextSecondaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
|
||||||
|
|
@ -219,6 +219,7 @@ namespace src.player.skills
|
||||||
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextPrimaryAttackTick");
|
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextPrimaryAttackTick");
|
||||||
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextSecondaryAttackTick");
|
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextSecondaryAttackTick");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void UpdateHUD(CCSPlayerController player)
|
private static void UpdateHUD(CCSPlayerController player)
|
||||||
|
|
@ -231,7 +232,7 @@ namespace src.player.skills
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
|
|
||||||
var weapon = pawn.WeaponServices.ActiveWeapon.Value;
|
var weapon = pawn.WeaponServices.ActiveWeapon.Value;
|
||||||
if (weapon == null || !weapon.IsValid || !disabledWeapons.Contains(weapon.DesignerName))
|
if (weapon == null || !weapon.IsValid || allowedWeapons.Contains(weapon.DesignerName))
|
||||||
{
|
{
|
||||||
playerInfo.PrintHTML = null;
|
playerInfo.PrintHTML = null;
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Glaz;
|
private const Skills skillName = Skills.Glaz;
|
||||||
private readonly static ConcurrentDictionary<int, byte> smokes = [];
|
private readonly static ConcurrentDictionary<int, byte> smokes = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
private static readonly object setLock = new();
|
private static readonly object setLock = new();
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
|
|
@ -51,19 +52,82 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)entityIndex);
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)entityIndex);
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
|
||||||
|
if (info.TransmitEntities.Contains(entity.Index))
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
Event.EnableTransmit();
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#5d00ff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
{
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
Event.EnableTransmit();
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#5d00ff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
|
{
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -13,6 +13,8 @@ namespace src.player.skills
|
||||||
private static readonly ConcurrentDictionary<uint, PlayerSkillInfo> SkillPlayerInfo = [];
|
private static readonly ConcurrentDictionary<uint, PlayerSkillInfo> SkillPlayerInfo = [];
|
||||||
private static readonly object setLock = new();
|
private static readonly object setLock = new();
|
||||||
|
|
||||||
|
public static bool HaveHodMode(uint playerIndex) => SkillPlayerInfo.TryGetValue(playerIndex, out var skillInfo) && skillInfo.CanUse == false;
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
|
|
@ -30,8 +32,12 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
SteamID = player.Index,
|
SteamID = player.Index,
|
||||||
CanUse = true,
|
CanUse = true,
|
||||||
|
HaveGodMode = false,
|
||||||
Cooldown = DateTime.MinValue,
|
Cooldown = DateTime.MinValue,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
|
||||||
|
skillInfo.HaveGodMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OnTick()
|
public static void OnTick()
|
||||||
|
|
@ -90,11 +96,15 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
skillInfo.CanUse = false;
|
skillInfo.CanUse = false;
|
||||||
skillInfo.Cooldown = DateTime.Now;
|
skillInfo.Cooldown = DateTime.Now;
|
||||||
|
skillInfo.HaveGodMode = true;
|
||||||
|
|
||||||
PlayerManager.GetPlayerFromEvent(player)?.PrintToChat($" {ChatColors.Green} {player.GetTranslation("godmode_on")}");
|
PlayerManager.GetPlayerFromEvent(player)?.PrintToChat($" {ChatColors.Green} {player.GetTranslation("godmode_on")}");
|
||||||
player.PlayerPawn.Value.TakesDamage = false;
|
player.PlayerPawn.Value.TakesDamage = false;
|
||||||
|
|
||||||
Instance.AddTimer(SkillsInfo.GetValue<float>(skillName, "duration"), () => {
|
Instance.AddTimer(SkillsInfo.GetValue<float>(skillName, "duration"), () => {
|
||||||
|
if (SkillPlayerInfo.TryGetValue(playerIndex, out var skillInfo))
|
||||||
|
skillInfo.HaveGodMode = false;
|
||||||
|
|
||||||
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
|
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||||
if (player != null && player.IsValid)
|
if (player != null && player.IsValid)
|
||||||
{
|
{
|
||||||
|
|
@ -102,6 +112,9 @@ namespace src.player.skills
|
||||||
|
|
||||||
player.PlayerPawn.Value.TakesDamage = true;
|
player.PlayerPawn.Value.TakesDamage = true;
|
||||||
PlayerManager.GetPlayerFromEvent(player)?.PrintToChat($" {ChatColors.Red} {player.GetTranslation("godmode_off")}");
|
PlayerManager.GetPlayerFromEvent(player)?.PrintToChat($" {ChatColors.Red} {player.GetTranslation("godmode_off")}");
|
||||||
|
|
||||||
|
if (player.PlayerPawn.Value.Health <= 0)
|
||||||
|
player.CommitSuicide(false, true);
|
||||||
}
|
}
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
|
|
@ -112,6 +125,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
public ulong SteamID { get; set; }
|
public ulong SteamID { get; set; }
|
||||||
public bool CanUse { get; set; }
|
public bool CanUse { get; set; }
|
||||||
|
public bool HaveGodMode { get; set; }
|
||||||
public DateTime Cooldown { get; set; }
|
public DateTime Cooldown { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.HealingSmoke;
|
private const Skills skillName = Skills.HealingSmoke;
|
||||||
private static readonly ConcurrentDictionary<Vector, byte> smokes = [];
|
private static readonly ConcurrentDictionary<Vector, byte> smokes = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -95,16 +96,72 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1fe070", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeHeal = 1, float smokeRadius = 180, int tickCooldown = 16) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1fe070", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeHeal = 1, float smokeRadius = 180, int tickCooldown = 16, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public int SmokeHeal { get; set; } = smokeHeal;
|
public int SmokeHeal { get; set; } = smokeHeal;
|
||||||
public float SmokeRadius { get; set; } = smokeRadius;
|
public float SmokeRadius { get; set; } = smokeRadius;
|
||||||
public int TickCooldown { get; set; } = tickCooldown;
|
public int TickCooldown { get; set; } = tickCooldown;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3,13 +3,14 @@ using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using static src.jRandomSkills;
|
using System.Collections.Concurrent;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
{
|
{
|
||||||
public class HolyHandGrenade : ISkill
|
public class HolyHandGrenade : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.HolyHandGrenade;
|
private const Skills skillName = Skills.HolyHandGrenade;
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -40,15 +41,71 @@ namespace src.player.skills
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffdd00", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float damageMultiplier = 2f, float damageRadiusMultiplier = 2f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffdd00", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float damageMultiplier = 2f, float damageRadiusMultiplier = 2f, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float DamageMultiplier { get; set; } = damageMultiplier;
|
public float DamageMultiplier { get; set; } = damageMultiplier;
|
||||||
public float DamageRadiusMultiplier { get; set; } = damageRadiusMultiplier;
|
public float DamageRadiusMultiplier { get; set; } = damageRadiusMultiplier;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.HomingNades;
|
private const Skills skillName = Skills.HomingNades;
|
||||||
private readonly static ConcurrentDictionary<uint, Vector> nades = [];
|
private readonly static ConcurrentDictionary<uint, Vector> nades = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -140,16 +141,72 @@ namespace src.player.skills
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#384728", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float strength = 150, float maxVelocity = 2000, float detonationRange = 130) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#384728", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float strength = 150, float maxVelocity = 2000, float detonationRange = 130, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float Strength { get; set; } = strength;
|
public float Strength { get; set; } = strength;
|
||||||
public float MaxVelocity { get; set; } = maxVelocity;
|
public float MaxVelocity { get; set; } = maxVelocity;
|
||||||
public float DetonationRange { get; set; } = detonationRange;
|
public float DetonationRange { get; set; } = detonationRange;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -241,7 +241,7 @@ namespace src.player.skills
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe static bool CheckPosition(CCSPlayerController player, Vector endPos)
|
private static bool CheckPosition(CCSPlayerController player, Vector endPos)
|
||||||
{
|
{
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
|
|
||||||
|
|
@ -340,10 +340,16 @@ namespace src.player.skills
|
||||||
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
if (victim == null || !victim.IsValid) return;
|
if (victim == null || !victim.IsValid) return;
|
||||||
|
|
||||||
if (playersInfo.TryGetValue(victim.Index, out var playerSkill) && playerSkill.CloneProp != null)
|
if (playersInfo.TryGetValue(victim.Index, out var playerSkill))
|
||||||
{
|
{
|
||||||
KillClone(playerSkill);
|
if (playerSkill.CloneProp != null)
|
||||||
SkillUtils.RestoreHealth(victim);
|
{
|
||||||
|
KillClone(playerSkill);
|
||||||
|
playerSkill.LastHit = Server.TickCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playerSkill.LastHit + 4 > Server.TickCount)
|
||||||
|
SkillUtils.RestoreHealth(victim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -429,6 +435,7 @@ namespace src.player.skills
|
||||||
public float NextUse { get; set; }
|
public float NextUse { get; set; }
|
||||||
public float UseTime { get; set; }
|
public float UseTime { get; set; }
|
||||||
public int InfoTime { get; set; }
|
public int InfoTime { get; set; }
|
||||||
|
public int LastHit { get; set; }
|
||||||
public List<ulong> Weapons { get; set; } = [];
|
public List<ulong> Weapons { get; set; } = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Core.Attributes;
|
using CounterStrikeSharp.API.Core.Attributes;
|
||||||
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
@ -75,7 +76,8 @@ namespace src.player.skills
|
||||||
if (relayEntity == null || !relayEntity.IsValid) continue;
|
if (relayEntity == null || !relayEntity.IsValid) continue;
|
||||||
|
|
||||||
if (player.Team == trailOwner.Team || !isJackalOwner)
|
if (player.Team == trailOwner.Team || !isJackalOwner)
|
||||||
info.TransmitEntities.Remove(relayEntity.Index);
|
if (info.TransmitEntities.Contains(relayEntity.Index))
|
||||||
|
info.TransmitEntities.Remove(relayEntity.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -137,6 +139,8 @@ namespace src.player.skills
|
||||||
|
|
||||||
mainSkillTimer ??= Instance.AddTimer(2.5f, () => UpdateAllTrails(),
|
mainSkillTimer ??= Instance.AddTimer(2.5f, () => UpdateAllTrails(),
|
||||||
CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void UpdateAllTrails()
|
private static void UpdateAllTrails()
|
||||||
|
|
@ -159,6 +163,8 @@ namespace src.player.skills
|
||||||
mainSkillTimer.Kill();
|
mainSkillTimer.Kill();
|
||||||
mainSkillTimer = null;
|
mainSkillTimer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#f542ef", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common, string particleName = "particles/ui/hud/ui_map_def_utility_trail.vpcf") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#f542ef", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common, string particleName = "particles/ui/hud/ui_map_def_utility_trail.vpcf") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -10,6 +11,7 @@ namespace src.player.skills
|
||||||
public class KillerFlash : ISkill
|
public class KillerFlash : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.KillerFlash;
|
private const Skills skillName = Skills.KillerFlash;
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -31,15 +33,77 @@ namespace src.player.skills
|
||||||
player?.PlayerPawn?.Value?.CommitSuicide(false, true);
|
player?.PlayerPawn?.Value?.CommitSuicide(false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "flashbang") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#57bcff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Epic, float flashDuration = 1f, bool friendlyFire = true) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "flashbang") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int flashbangLimit = ConVar.Find("ammo_grenade_limit_flashbang")?.GetPrimitiveValue<int>() ?? 2;
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
|
||||||
|
if (grenadeLimit > flashbangLimit)
|
||||||
|
{
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade, grenadeLimit, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#57bcff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Epic, float flashDuration = 1f, bool friendlyFire = true, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float FlashDuration { get; set; } = flashDuration;
|
public float FlashDuration { get; set; } = flashDuration;
|
||||||
public bool FriendlyFire { get; set; } = friendlyFire;
|
public bool FriendlyFire { get; set; } = friendlyFire;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -33,7 +33,7 @@ namespace src.player.skills
|
||||||
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
||||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||||
|
|
||||||
ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"{e.PlayerName} : {e?.PlayerPawn?.Value?.Health ?? 0} HP", e.Index.ToString())));
|
ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {e?.PlayerPawn?.Value?.Health ?? 0} HP", e.Index.ToString())));
|
||||||
SkillUtils.UpdateMenu(player, menuItems);
|
SkillUtils.UpdateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -75,7 +75,7 @@ namespace src.player.skills
|
||||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
{
|
{
|
||||||
ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"{e.PlayerName} : {e.PawnHealth} HP", e.Index.ToString())));
|
ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {e.PawnHealth} HP", e.Index.ToString())));
|
||||||
SkillUtils.CreateMenu(player, menuItems);
|
SkillUtils.CreateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.MagneticDecoy;
|
private const Skills skillName = Skills.MagneticDecoy;
|
||||||
private static readonly ConcurrentDictionary<Vector, byte> decoys = [];
|
private static readonly ConcurrentDictionary<Vector, byte> decoys = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -74,15 +75,71 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "decoy") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#81f0c4", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, float strenght = 30) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "decoy") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#81f0c4", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, float strenght = 30, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float TriggerRadius { get; set; } = triggerRadius;
|
public float TriggerRadius { get; set; } = triggerRadius;
|
||||||
public float Strenght { get; set; } = strenght;
|
public float Strenght { get; set; } = strenght;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Miner;
|
private const Skills skillName = Skills.Miner;
|
||||||
private readonly static ConcurrentDictionary<uint, byte> nades = [];
|
private readonly static ConcurrentDictionary<uint, byte> nades = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -20,6 +21,7 @@ namespace src.player.skills
|
||||||
public static void NewRound()
|
public static void NewRound()
|
||||||
{
|
{
|
||||||
nades.Clear();
|
nades.Clear();
|
||||||
|
playersWithSkill.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OnTick()
|
public static void OnTick()
|
||||||
|
|
@ -39,7 +41,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
if (nade.CreateTime + 3 > currentTime) return;
|
if (nade.CreateTime + 3 > currentTime) return;
|
||||||
Vector currentPos = new(nade.AbsOrigin.X, nade.AbsOrigin.Y, nade.AbsOrigin.Z);
|
Vector currentPos = new(nade.AbsOrigin.X, nade.AbsOrigin.Y, nade.AbsOrigin.Z);
|
||||||
|
|
||||||
foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive && p.TeamNum != nade.TeamNum))
|
foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive && p.TeamNum != nade.TeamNum))
|
||||||
{
|
{
|
||||||
var enemyPawn = enemy.PlayerPawn.Value;
|
var enemyPawn = enemy.PlayerPawn.Value;
|
||||||
|
|
@ -101,12 +103,68 @@ namespace src.player.skills
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#adf542", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float detonationRange = 130) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#adf542", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float detonationRange = 130, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float DetonationRange { get; set; } = detonationRange;
|
public float DetonationRange { get; set; } = detonationRange;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using static src.jRandomSkills;
|
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
|
||||||
|
|
@ -33,7 +32,7 @@ namespace src.player.skills
|
||||||
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
||||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||||
|
|
||||||
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
|
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
|
||||||
SkillUtils.UpdateMenu(player, menuItems);
|
SkillUtils.UpdateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -75,7 +74,7 @@ namespace src.player.skills
|
||||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
{
|
{
|
||||||
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
|
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
|
||||||
SkillUtils.CreateMenu(player, menuItems);
|
SkillUtils.CreateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -88,13 +88,17 @@ namespace src.player.skills
|
||||||
|
|
||||||
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)playerPawn.Index);
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)playerPawn.Index);
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
|
||||||
|
if (info.TransmitEntities.Contains(entity.Index))
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
|
||||||
var bombIndex = GetBombIndex(playerController);
|
var bombIndex = GetBombIndex(playerController);
|
||||||
if (bombIndex == null) continue;
|
if (bombIndex == null) continue;
|
||||||
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
||||||
if (bombEntity == null || !bombEntity.IsValid) continue;
|
if (bombEntity == null || !bombEntity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(bombEntity.Index);
|
|
||||||
|
if (info.TransmitEntities.Contains(bombEntity.Index))
|
||||||
|
info.TransmitEntities.Remove(bombEntity.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -135,6 +139,8 @@ namespace src.player.skills
|
||||||
|
|
||||||
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
|
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
|
||||||
CreatePlayerPosProp(player);
|
CreatePlayerPosProp(player);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
|
@ -142,6 +148,8 @@ namespace src.player.skills
|
||||||
SkillUtils.SetPlayerInvisibility(player, 0);
|
SkillUtils.SetPlayerInvisibility(player, 0);
|
||||||
invisiblePlayers.TryRemove(player.Index, out _);
|
invisiblePlayers.TryRemove(player.Index, out _);
|
||||||
EntityManager.DestroyPlayerEntities(player.Index);
|
EntityManager.DestroyPlayerEntities(player.Index);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CreatePlayerPosProp(CCSPlayerController player)
|
private static void CreatePlayerPosProp(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -9,6 +10,7 @@ namespace src.player.skills
|
||||||
public class Phoenix : ISkill
|
public class Phoenix : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Phoenix;
|
private const Skills skillName = Skills.Phoenix;
|
||||||
|
private static readonly ConcurrentDictionary<uint, int> phoenixTicks = new();
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -26,12 +28,21 @@ namespace src.player.skills
|
||||||
var pawn = victim.PlayerPawn.Value;
|
var pawn = victim.PlayerPawn.Value;
|
||||||
if (pawn == null || !pawn.IsValid) return;
|
if (pawn == null || !pawn.IsValid) return;
|
||||||
|
|
||||||
|
bool isProtected = phoenixTicks.TryGetValue(victim.Index, out int tick);
|
||||||
|
if (isProtected && tick + 4 > Server.TickCount)
|
||||||
|
{
|
||||||
|
SkillUtils.AddHealth(pawn, 100 - pawn.Health);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var playerInfo = PlayerManager.GetPlayerByIndex(victim.Index);
|
var playerInfo = PlayerManager.GetPlayerByIndex(victim.Index);
|
||||||
if (playerInfo?.Skill != skillName || pawn.Health > 0) return;
|
if (playerInfo?.Skill != skillName || pawn.Health > 0) return;
|
||||||
|
|
||||||
if (Instance.Random.NextDouble() > playerInfo.SkillChance) return;
|
if (Instance.Random.NextDouble() > playerInfo.SkillChance) return;
|
||||||
if (victim.TeamChanged) return;
|
if (victim.TeamChanged) return;
|
||||||
|
|
||||||
|
phoenixTicks[victim.Index] = Server.TickCount;
|
||||||
|
|
||||||
SkillUtils.AddHealth(pawn, 100 - pawn.Health);
|
SkillUtils.AddHealth(pawn, 100 - pawn.Health);
|
||||||
SkillUtils.PrintToChat(user, user.GetTranslation("phoenix_respawn"));
|
SkillUtils.PrintToChat(user, user.GetTranslation("phoenix_respawn"));
|
||||||
|
|
||||||
|
|
@ -51,8 +62,10 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
|
|
||||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "ChanceTo") - SkillsInfo.GetValue<float>(skillName, "ChanceFrom")) + SkillsInfo.GetValue<float>(skillName, "ChanceFrom");
|
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "ChanceTo") - SkillsInfo.GetValue<float>(skillName, "ChanceFrom")) + SkillsInfo.GetValue<float>(skillName, "ChanceFrom");
|
||||||
playerInfo.SkillChance = newChance;
|
playerInfo.SkillChance = newChance;
|
||||||
|
|
||||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}",
|
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}",
|
||||||
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
|
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
using CounterStrikeSharp.API;
|
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -10,6 +10,7 @@ namespace src.player.skills
|
||||||
public class Pyro : ISkill
|
public class Pyro : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Pyro;
|
private const Skills skillName = Skills.Pyro;
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -31,14 +32,77 @@ namespace src.player.skills
|
||||||
SkillUtils.AddHealth(pawn, (int)(damage * SkillsInfo.GetValue<float>(skillName, "regenerationMultiplier")));
|
SkillUtils.AddHealth(pawn, (int)(damage * SkillsInfo.GetValue<float>(skillName, "regenerationMultiplier")));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, player.Team == CsTeam.CounterTerrorist ? CsItem.IncendiaryGrenade : CsItem.Molotov);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "molotov" && weapon != "incgrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.Molotov, grenadesLeft - 1);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.IncendiaryGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#3c47de", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float regenerationMultiplier = 1.5f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.Molotov, grenadesLeft);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.IncendiaryGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
var item = player.Team == CsTeam.CounterTerrorist ? CsItem.IncendiaryGrenade : CsItem.Molotov;
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, item);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, item, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.Molotov, 1);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.IncendiaryGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#3c47de", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float regenerationMultiplier = 1.5f, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float RegenerationMultiplier { get; set; } = regenerationMultiplier;
|
public float RegenerationMultiplier { get; set; } = regenerationMultiplier;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11,7 +11,7 @@ namespace src.player.skills
|
||||||
public class ReZombie : ISkill
|
public class ReZombie : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.ReZombie;
|
private const Skills skillName = Skills.ReZombie;
|
||||||
private static readonly ConcurrentDictionary<uint, byte> zombies = [];
|
private static readonly ConcurrentDictionary<uint, int> zombies = [];
|
||||||
private static readonly object setLock = new();
|
private static readonly object setLock = new();
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
|
|
@ -76,25 +76,57 @@ namespace src.player.skills
|
||||||
var pawn = victim.PlayerPawn.Value;
|
var pawn = victim.PlayerPawn.Value;
|
||||||
if (pawn == null || !pawn.IsValid) return;
|
if (pawn == null || !pawn.IsValid) return;
|
||||||
|
|
||||||
if (zombies.ContainsKey(victim.Index)) return;
|
bool isZombie = zombies.TryGetValue(victim.Index, out int tick);
|
||||||
|
|
||||||
|
if (isZombie && tick + 4 < Server.TickCount)
|
||||||
|
return;
|
||||||
|
|
||||||
var playerInfo = PlayerManager.GetPlayerByIndex(victim.Index);
|
var playerInfo = PlayerManager.GetPlayerByIndex(victim.Index);
|
||||||
if (playerInfo?.Skill != skillName || pawn.Health > 0) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
lock (setLock)
|
var zombieHealth = SkillsInfo.GetValue<int>(skillName, "zombieHealth");
|
||||||
|
|
||||||
|
if (pawn.Health <= 0)
|
||||||
{
|
{
|
||||||
var zombieHealth = SkillsInfo.GetValue<int>(skillName, "zombieHealth");
|
|
||||||
bool isBlock = victim.TeamChanged;
|
bool isBlock = victim.TeamChanged;
|
||||||
|
|
||||||
zombies.TryAdd(victim.Index, 0);
|
zombies[victim.Index] = Server.TickCount;
|
||||||
|
|
||||||
if (isBlock) return;
|
if (isBlock) return;
|
||||||
|
|
||||||
|
DropAllBotWeapons(victim);
|
||||||
SetPlayerColor(pawn, false);
|
SetPlayerColor(pawn, false);
|
||||||
SkillUtils.AddHealth(pawn, zombieHealth - pawn.Health, zombieHealth);
|
SkillUtils.AddHealth(pawn, zombieHealth - pawn.Health, zombieHealth);
|
||||||
|
|
||||||
victim.ExecuteClientCommand("slot3");
|
victim.ExecuteClientCommand("slot3");
|
||||||
}
|
}
|
||||||
|
else if (isZombie && tick + 4 > Server.TickCount)
|
||||||
|
SkillUtils.AddHealth(pawn, zombieHealth - pawn.Health, zombieHealth);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void DropAllBotWeapons(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid || !player.IsBot) return;
|
||||||
|
|
||||||
|
var pawn = player.PlayerPawn?.Value;
|
||||||
|
if (pawn == null || !pawn.IsValid) return;
|
||||||
|
|
||||||
|
var itemServices = pawn.ItemServices?.As<CCSPlayer_ItemServices>();
|
||||||
|
if (itemServices == null || pawn.WeaponServices?.MyWeapons == null) return;
|
||||||
|
|
||||||
|
foreach (var item in pawn.WeaponServices.MyWeapons)
|
||||||
|
{
|
||||||
|
if (item == null || !item.IsValid) continue;
|
||||||
|
|
||||||
|
var weapon = item.Value;
|
||||||
|
if (weapon == null || !weapon.IsValid) continue;
|
||||||
|
|
||||||
|
var weaponName = weapon.DesignerName;
|
||||||
|
if (string.IsNullOrEmpty(weaponName) || weaponName.Contains("knife") || weaponName.Contains("bayonet"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SkillUtils.SafeKillEntity<CBasePlayerWeapon>(weapon.Index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool OnWeaponCanAcquire(DynamicHook hook, CCSPlayerController player, CEconItemView econItem, CCSWeaponBaseVData vdata)
|
public static bool OnWeaponCanAcquire(DynamicHook hook, CCSPlayerController player, CEconItemView econItem, CCSWeaponBaseVData vdata)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ namespace src.player.skills
|
||||||
public class SecondLife : ISkill
|
public class SecondLife : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.SecondLife;
|
private const Skills skillName = Skills.SecondLife;
|
||||||
private static readonly ConcurrentDictionary<nint, byte> secondLifePlayers = [];
|
private static readonly ConcurrentDictionary<nint, int> secondLifePlayers = [];
|
||||||
private static readonly object setLock = new();
|
private static readonly object setLock = new();
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
|
|
@ -26,24 +26,24 @@ namespace src.player.skills
|
||||||
public static void PlayerHurt(EventPlayerHurt @event)
|
public static void PlayerHurt(EventPlayerHurt @event)
|
||||||
{
|
{
|
||||||
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
int damage = @event.DmgHealth;
|
|
||||||
|
|
||||||
if (!Instance.IsPlayerValid(victim)) return;
|
if (!Instance.IsPlayerValid(victim)) return;
|
||||||
var victimInfo = PlayerManager.GetPlayerByIndex(victim!.Index);
|
var victimInfo = PlayerManager.GetPlayerByIndex(victim!.Index);
|
||||||
if (victimInfo == null || victimInfo.Skill != skillName) return;
|
if (victimInfo == null || victimInfo.Skill != skillName) return;
|
||||||
|
|
||||||
var victimPawn = victim!.PlayerPawn.Value;
|
var victimPawn = victim!.PlayerPawn.Value;
|
||||||
if (victimPawn!.Health > 0 || secondLifePlayers.ContainsKey(victim.Handle))
|
if (victimPawn!.Health > 0 || (secondLifePlayers.TryGetValue(victim.Handle, out int tick) && tick + 4 < Server.TickCount))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
secondLifePlayers.TryAdd(victim.Handle, 0);
|
|
||||||
SetHealth(victim, SkillsInfo.GetValue<int>(skillName, "startHealth"));
|
SetHealth(victim, SkillsInfo.GetValue<int>(skillName, "startHealth"));
|
||||||
|
|
||||||
var spawnpoint = SkillUtils.GetSpawnPointVector(victim);
|
var spawnpoint = SkillUtils.GetSpawnPointVector(victim);
|
||||||
if (spawnpoint == null) return;
|
if (spawnpoint == null) return;
|
||||||
|
|
||||||
victimPawn.Teleport(spawnpoint, null, null);
|
victimPawn.Teleport(spawnpoint, null, null);
|
||||||
|
secondLifePlayers.TryAdd(victim.Handle, Server.TickCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Smoker;
|
private const Skills skillName = Skills.Smoker;
|
||||||
private readonly static ConcurrentDictionary<uint, List<Timer>> playerSmokes = [];
|
private readonly static ConcurrentDictionary<uint, List<Timer>> playerSmokes = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
private static readonly object setLock = new();
|
private static readonly object setLock = new();
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
|
|
@ -31,15 +32,65 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (playerSmokes.TryRemove(player.Index, out var timers))
|
if (playerSmokes.TryRemove(player.Index, out var timers))
|
||||||
timers.ForEach(t => t?.Kill());
|
timers.ForEach(t => t?.Kill());
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SmokegrenadeDetonate(EventSmokegrenadeDetonate @event)
|
public static void SmokegrenadeDetonate(EventSmokegrenadeDetonate @event)
|
||||||
|
|
@ -72,8 +123,9 @@ namespace src.player.skills
|
||||||
playerSmokes.AddOrUpdate(player.Index, [smokeTimer], (_, list) => { list.Add(smokeTimer); return list; });
|
playerSmokes.AddOrUpdate(player.Index, [smokeTimer], (_, list) => { list.Add(smokeTimer); return list; });
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#b5ab8f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#b5ab8f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -58,6 +58,7 @@ namespace src.player.skills
|
||||||
foreach (var player in Utilities.GetPlayers())
|
foreach (var player in Utilities.GetPlayers())
|
||||||
if (cameras.TryGetValue(player.Index, out var cameraInfo) && cameraInfo.Item2 != 0)
|
if (cameras.TryGetValue(player.Index, out var cameraInfo) && cameraInfo.Item2 != 0)
|
||||||
{
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
var enemy = Utilities.GetPlayerFromIndex((int)cameraInfo.Item3);
|
var enemy = Utilities.GetPlayerFromIndex((int)cameraInfo.Item3);
|
||||||
if (enemy == null || !enemy.IsValid || enemy.PlayerPawn == null)
|
if (enemy == null || !enemy.IsValid || enemy.PlayerPawn == null)
|
||||||
|
|
@ -73,16 +74,18 @@ namespace src.player.skills
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enemyPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE
|
if (enemyPawn.Health <= 0 || (player.PlayerPawn?.Value != null && player.PlayerPawn.Value.Health <= 0))
|
||||||
|| (player.PlayerPawn.Value != null && player.PlayerPawn.Value.LifeState != (byte)LifeState_t.LIFE_ALIVE))
|
|
||||||
ChangeCamera(player, true);
|
ChangeCamera(player, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ChangeCamera(CCSPlayerController player, bool forceToDefault = false)
|
private static void ChangeCamera(CCSPlayerController player, bool forceToDefault = false)
|
||||||
{
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
uint orginalCameraRaw;
|
uint orginalCameraRaw;
|
||||||
uint newCameraRaw = 0;
|
uint newCameraRaw = 0;
|
||||||
|
|
||||||
var pawn = player.PlayerPawn.Value;
|
var pawn = player.PlayerPawn.Value;
|
||||||
if (pawn == null || !pawn.IsValid || pawn.CameraServices == null) return;
|
if (pawn == null || !pawn.IsValid || pawn.CameraServices == null) return;
|
||||||
|
|
||||||
|
|
@ -165,9 +168,9 @@ namespace src.player.skills
|
||||||
});
|
});
|
||||||
|
|
||||||
if (cameras.TryGetValue(player.Index, out var cameraInfo))
|
if (cameras.TryGetValue(player.Index, out var cameraInfo))
|
||||||
cameras.AddOrUpdate(player.Index, (cameraInfo.Item1, camera.Index, player.Index), (k, v) => (cameraInfo.Item1, camera.Index, player.Index));
|
cameras.AddOrUpdate(player.Index, (cameraInfo.Item1, camera.Index, enemy.Index), (k, v) => (cameraInfo.Item1, camera.Index, enemy.Index));
|
||||||
else
|
else
|
||||||
cameras.AddOrUpdate(player.Index, (pawn.CameraServices.ViewEntity.Raw, camera.Index, player.Index), (k, v) => (pawn.CameraServices.ViewEntity.Raw, camera.Index, player.Index));
|
cameras.AddOrUpdate(player.Index, (pawn.CameraServices.ViewEntity.Raw, camera.Index, enemy.Index), (k, v) => (pawn.CameraServices.ViewEntity.Raw, camera.Index, enemy.Index));
|
||||||
return camera.EntityHandle.Raw;
|
return camera.EntityHandle.Raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace src.player.skills
|
||||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
||||||
if (skillData == null) continue;
|
if (skillData == null) continue;
|
||||||
|
|
||||||
menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||||
}
|
}
|
||||||
SkillUtils.UpdateMenu(player, menuItems);
|
SkillUtils.UpdateMenu(player, menuItems);
|
||||||
}
|
}
|
||||||
|
|
@ -120,7 +120,7 @@ namespace src.player.skills
|
||||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
||||||
if (skillData == null) continue;
|
if (skillData == null) continue;
|
||||||
|
|
||||||
menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
SkillUtils.CreateMenu(player, menuItems);
|
SkillUtils.CreateMenu(player, menuItems);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
using CounterStrikeSharp.API;
|
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
|
@ -36,14 +35,18 @@ namespace src.player.skills
|
||||||
var victimInfo = PlayerManager.GetPlayerByIndex(victimEvent!.Index);
|
var victimInfo = PlayerManager.GetPlayerByIndex(victimEvent!.Index);
|
||||||
if (victimInfo?.Skill == skillName)
|
if (victimInfo?.Skill == skillName)
|
||||||
{
|
{
|
||||||
SkillUtils.TakeHealth(attackerEvent.PlayerPawn.Value, (int)(@event.DmgHealth * SkillsInfo.GetValue<float>(skillName, "healthTakenScale")));
|
int damage = (int)(@event.DmgHealth * SkillsInfo.GetValue<float>(skillName, "healthTakenScale"));
|
||||||
|
damage = Math.Min(damage, SkillsInfo.GetValue<int>(skillName, "maxTakenDamagePerShot"));
|
||||||
|
|
||||||
|
SkillUtils.TakeHealth(attackerEvent.PlayerPawn.Value, damage);
|
||||||
attackerEvent.EmitSound("Player.DamageBody.Onlooker");
|
attackerEvent.EmitSound("Player.DamageBody.Onlooker");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#962631", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthTakenScale = .3f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#962631", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthTakenScale = .3f, int maxTakenDamagePerShot = 37) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float HealthTakenScale { get; set; } = healthTakenScale;
|
public float HealthTakenScale { get; set; } = healthTakenScale;
|
||||||
|
public int MaxTakenDamagePerShot { get; set; } = maxTakenDamagePerShot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Core.Attributes;
|
using CounterStrikeSharp.API.Core.Attributes;
|
||||||
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Timers;
|
using CounterStrikeSharp.API.Modules.Timers;
|
||||||
using CounterStrikeSharp.API.Modules.UserMessages;
|
using CounterStrikeSharp.API.Modules.UserMessages;
|
||||||
|
|
@ -122,12 +123,15 @@ namespace src.player.skills
|
||||||
public static void EnableSkill(CCSPlayerController _)
|
public static void EnableSkill(CCSPlayerController _)
|
||||||
{
|
{
|
||||||
Event.EnableTransmit();
|
Event.EnableTransmit();
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (knivesInfo.TryRemove(player.Index, out KnifeInfo? knifeInfo) && knifeInfo != null)
|
if (knivesInfo.TryRemove(player.Index, out KnifeInfo? knifeInfo) && knifeInfo != null)
|
||||||
DisableKnifeSkill(knifeInfo);
|
DisableKnifeSkill(knifeInfo);
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableKnifeSkill(KnifeInfo knifeInfo)
|
public static void DisableKnifeSkill(KnifeInfo knifeInfo)
|
||||||
|
|
@ -388,7 +392,8 @@ namespace src.player.skills
|
||||||
bool isObservingOwner = observedPlayerIndex.HasValue && observedPlayerIndex.Value == knifeOwnerIndex;
|
bool isObservingOwner = observedPlayerIndex.HasValue && observedPlayerIndex.Value == knifeOwnerIndex;
|
||||||
|
|
||||||
if (!isOwner && !isObservingOwner)
|
if (!isOwner && !isObservingOwner)
|
||||||
info.TransmitEntities.Remove(glowEntity.Index);
|
if (info.TransmitEntities.Contains(glowEntity.Index))
|
||||||
|
info.TransmitEntities.Remove(glowEntity.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.ToxicSmoke;
|
private const Skills skillName = Skills.ToxicSmoke;
|
||||||
private static readonly ConcurrentDictionary<Vector, byte> smokes = [];
|
private static readonly ConcurrentDictionary<Vector, byte> smokes = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -95,16 +96,72 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#507529", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeDamage = 2, float smokeRadius = 180, int tickCooldown = 17) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#507529", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeDamage = 2, float smokeRadius = 180, int tickCooldown = 17, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public int SmokeDamage { get; set; } = smokeDamage;
|
public int SmokeDamage { get; set; } = smokeDamage;
|
||||||
public float SmokeRadius { get; set; } = smokeRadius;
|
public float SmokeRadius { get; set; } = smokeRadius;
|
||||||
public int TickCooldown { get; set; } = tickCooldown;
|
public int TickCooldown { get; set; } = tickCooldown;
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -12,7 +12,8 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Wallhack;
|
private const Skills skillName = Skills.Wallhack;
|
||||||
private static readonly ConcurrentDictionary<uint, byte> playersInAction = new();
|
private static readonly ConcurrentDictionary<uint, byte> playersInAction = new();
|
||||||
private static ConcurrentDictionary<uint, (uint RelayIndex, uint GlowIndex, CsTeam Team)> glows = new();
|
private static readonly ConcurrentDictionary<uint, (uint RelayIndex, uint GlowIndex, CsTeam Team)> glows = new();
|
||||||
|
private static readonly ConcurrentDictionary<uint, DateTime> temporaryBlockList = new();
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -21,6 +22,12 @@ namespace src.player.skills
|
||||||
|
|
||||||
public static void CheckTransmit([CastFrom(typeof(nint))] CCheckTransmitInfoList infoList)
|
public static void CheckTransmit([CastFrom(typeof(nint))] CCheckTransmitInfoList infoList)
|
||||||
{
|
{
|
||||||
|
foreach (var kvp in temporaryBlockList)
|
||||||
|
{
|
||||||
|
if (DateTime.Now > kvp.Value)
|
||||||
|
temporaryBlockList.TryRemove(kvp.Key, out _);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var (info, player) in infoList)
|
foreach (var (info, player) in infoList)
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid) continue;
|
if (player == null || !player.IsValid) continue;
|
||||||
|
|
@ -54,11 +61,20 @@ namespace src.player.skills
|
||||||
|
|
||||||
var glowEntity1 = Utilities.GetEntityFromIndex<CBaseEntity>((int)glowInfo.RelayIndex);
|
var glowEntity1 = Utilities.GetEntityFromIndex<CBaseEntity>((int)glowInfo.RelayIndex);
|
||||||
if (glowEntity1 == null || !glowEntity1.IsValid) continue;
|
if (glowEntity1 == null || !glowEntity1.IsValid) continue;
|
||||||
|
|
||||||
var glowEntity2 = Utilities.GetEntityFromIndex<CBaseEntity>((int)glowInfo.GlowIndex);
|
var glowEntity2 = Utilities.GetEntityFromIndex<CBaseEntity>((int)glowInfo.GlowIndex);
|
||||||
if (glowEntity2 == null || !glowEntity2.IsValid) continue;
|
if (glowEntity2 == null || !glowEntity2.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(glowEntity1.Index);
|
|
||||||
info.TransmitEntities.Remove(glowEntity2.Index);
|
if (info.TransmitEntities.Contains(glowEntity1.Index))
|
||||||
|
info.TransmitEntities.Remove(glowEntity1.Index);
|
||||||
|
|
||||||
|
if (info.TransmitEntities.Contains(glowEntity2.Index))
|
||||||
|
info.TransmitEntities.Remove(glowEntity2.Index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var kvp in temporaryBlockList)
|
||||||
|
if (info.TransmitEntities.Contains(kvp.Key))
|
||||||
|
info.TransmitEntities.Remove(kvp.Key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -71,6 +87,9 @@ namespace src.player.skills
|
||||||
|
|
||||||
SkillUtils.SafeKillEntity<CDynamicProp>(relayIndex);
|
SkillUtils.SafeKillEntity<CDynamicProp>(relayIndex);
|
||||||
SkillUtils.SafeKillEntity<CDynamicProp>(glowIndex);
|
SkillUtils.SafeKillEntity<CDynamicProp>(glowIndex);
|
||||||
|
|
||||||
|
temporaryBlockList.TryAdd(relayIndex, DateTime.Now.AddSeconds(2));
|
||||||
|
temporaryBlockList.TryAdd(glowIndex, DateTime.Now.AddSeconds(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
glows.Clear();
|
glows.Clear();
|
||||||
|
|
@ -81,15 +100,21 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
Event.EnableTransmit();
|
Event.EnableTransmit();
|
||||||
playersInAction.TryAdd(player.Index, 0);
|
playersInAction.TryAdd(player.Index, 0);
|
||||||
|
|
||||||
if (glows.IsEmpty)
|
if (glows.IsEmpty)
|
||||||
SetGlowEffectForAll();
|
SetGlowEffectForAll();
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
playersInAction.TryRemove(player.Index, out _);
|
playersInAction.TryRemove(player.Index, out _);
|
||||||
|
|
||||||
if (playersInAction.IsEmpty)
|
if (playersInAction.IsEmpty)
|
||||||
NewRound();
|
NewRound();
|
||||||
|
|
||||||
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetGlowEffectForAll()
|
private static void SetGlowEffectForAll()
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
private static readonly HashSet<string> weapons = [ "weapon_deagle", "weapon_revolver", "weapon_glock", "weapon_usp_silencer",
|
private static readonly HashSet<string> weapons = [ "weapon_deagle", "weapon_revolver", "weapon_glock", "weapon_usp_silencer",
|
||||||
"weapon_cz75a", "weapon_fiveseven", "weapon_p250", "weapon_tec9", "weapon_elite", "weapon_hkp2000",
|
"weapon_cz75a", "weapon_fiveseven", "weapon_p250", "weapon_tec9", "weapon_elite", "weapon_hkp2000",
|
||||||
"weapon_mp9", "weapon_mac10", "weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90",
|
"weapon_mp9", "weapon_mac10", "weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90", "weapon_sg556",
|
||||||
"weapon_mp5sd", "weapon_famas", "weapon_galilar", "weapon_m4a4", "weapon_m4a1_silencer", "weapon_ak47",
|
"weapon_mp5sd", "weapon_famas", "weapon_galilar", "weapon_m4a4", "weapon_m4a1_silencer", "weapon_ak47",
|
||||||
"weapon_aug", "weapon_sg553", "weapon_ssg08", "weapon_awp", "weapon_scar20", "weapon_g3sg1",
|
"weapon_aug", "weapon_sg553", "weapon_ssg08", "weapon_awp", "weapon_scar20", "weapon_g3sg1",
|
||||||
"weapon_nova", "weapon_xm1014", "weapon_mag7", "weapon_sawedoff", "weapon_m249", "weapon_negev" ];
|
"weapon_nova", "weapon_xm1014", "weapon_mag7", "weapon_sawedoff", "weapon_m249", "weapon_negev" ];
|
||||||
|
|
@ -114,10 +114,10 @@ namespace src.player.skills
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string[]? playerWeapon = GetWeapons(player);
|
(WeaponInfo[]? playerWeapon, bool playerC4) = GetWeapons(player);
|
||||||
string[]? enemyWeapon = GetWeapons(enemy);
|
(WeaponInfo[]? enemyWeapon, bool enemyC4) = GetWeapons(enemy);
|
||||||
|
|
||||||
if (playerWeapon == null || !playerWeapon.Any(w => weapons.Contains(w)))
|
if (playerWeapon == null || !playerWeapon.Any(w => weapons.Contains(w.Name)))
|
||||||
{
|
{
|
||||||
skillInfo.FindedEnemy = true;
|
skillInfo.FindedEnemy = true;
|
||||||
skillInfo.HaveWeapon = false;
|
skillInfo.HaveWeapon = false;
|
||||||
|
|
@ -139,8 +139,8 @@ namespace src.player.skills
|
||||||
if (enemy == null || !enemy.IsValid) return;
|
if (enemy == null || !enemy.IsValid) return;
|
||||||
player.RemoveWeapons();
|
player.RemoveWeapons();
|
||||||
enemy.RemoveWeapons();
|
enemy.RemoveWeapons();
|
||||||
GiveWeapons(player, enemyWeapon, playerWeapon.Contains("weapon_c4"));
|
GiveWeapons(player, enemyWeapon, playerC4);
|
||||||
GiveWeapons(enemy, playerWeapon, (enemyWeapon != null && enemyWeapon.Contains("weapon_c4")));
|
GiveWeapons(enemy, playerWeapon, (enemyWeapon != null && enemyC4));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -148,28 +148,76 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string[]? GetWeapons(CCSPlayerController player)
|
private static (WeaponInfo[]?, bool) GetWeapons(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
|
bool haveC4 = false;
|
||||||
|
|
||||||
var pawn = player.PlayerPawn.Value;
|
var pawn = player.PlayerPawn.Value;
|
||||||
if (pawn == null || !pawn.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return null;
|
if (pawn == null || !pawn.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return (null, haveC4);
|
||||||
if (pawn.WeaponServices == null) return null;
|
|
||||||
|
if (pawn.WeaponServices == null) return (null, haveC4);
|
||||||
|
|
||||||
var list = new List<string>();
|
var list = new List<WeaponInfo>();
|
||||||
foreach (var weapon in pawn.WeaponServices.MyWeapons)
|
foreach (var weapon in pawn.WeaponServices.MyWeapons)
|
||||||
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
|
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid && !string.IsNullOrEmpty(weapon.Value.DesignerName))
|
||||||
list.Add(SkillUtils.GetDesignerName(weapon.Value));
|
{
|
||||||
|
if (weapon.Value.DesignerName == "weapon_c4")
|
||||||
|
haveC4 = true;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list.Add(
|
||||||
|
new WeaponInfo
|
||||||
|
{
|
||||||
|
Name = SkillUtils.GetDesignerName(weapon.Value),
|
||||||
|
Clip1 = weapon.Value.Clip1,
|
||||||
|
Clip2 = weapon.Value.Clip2,
|
||||||
|
Reserve = weapon.Value.ReserveAmmo.Length >= 1 ? weapon.Value.ReserveAmmo[0] : 0,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return list.Count == 0 ? null : [.. list];
|
return (list.Count == 0 ? null : [.. list], haveC4);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void GiveWeapons(CCSPlayerController player, string[]? weapons, bool addC4)
|
private static void GiveWeapons(CCSPlayerController player, WeaponInfo[]? weapons, bool addC4)
|
||||||
{
|
{
|
||||||
if (weapons == null) return;
|
if (weapons == null) return;
|
||||||
|
uint index = player.Index;
|
||||||
|
|
||||||
foreach (var weapon in weapons)
|
foreach (var weapon in weapons)
|
||||||
if (weapon != "weapon_c4")
|
player.GiveNamedItem(weapon.Name);
|
||||||
player.GiveNamedItem(weapon);
|
|
||||||
if (addC4)
|
if (addC4)
|
||||||
player.GiveNamedItem("weapon_c4");
|
player.GiveNamedItem("weapon_c4");
|
||||||
|
|
||||||
|
Server.NextFrame(() =>
|
||||||
|
{
|
||||||
|
var player = Utilities.GetPlayerFromIndex((int)index);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var pawn = player.PlayerPawn.Value;
|
||||||
|
if (pawn == null || !pawn.IsValid) return;
|
||||||
|
|
||||||
|
if (pawn.WeaponServices == null) return;
|
||||||
|
|
||||||
|
foreach (var item in pawn.WeaponServices.MyWeapons)
|
||||||
|
if (item != null && item.IsValid)
|
||||||
|
{
|
||||||
|
var weapon = item.Value;
|
||||||
|
if (weapon == null || !weapon.IsValid || string.IsNullOrEmpty(weapon.DesignerName)) continue;
|
||||||
|
|
||||||
|
var enemyWeapon = weapons.FirstOrDefault(w => w.Name == SkillUtils.GetDesignerName(weapon));
|
||||||
|
if (enemyWeapon == null) continue;
|
||||||
|
|
||||||
|
weapon.Clip1 = enemyWeapon.Clip1;
|
||||||
|
weapon.Clip2 = enemyWeapon.Clip2;
|
||||||
|
weapon.ReserveAmmo.Fill(enemyWeapon.Reserve);
|
||||||
|
|
||||||
|
Utilities.SetStateChanged(weapon, "CBasePlayerWeapon", "m_iClip1");
|
||||||
|
Utilities.SetStateChanged(weapon, "CBasePlayerWeapon", "m_iClip2");
|
||||||
|
Utilities.SetStateChanged(weapon, "CBasePlayerWeapon", "m_pReserveAmmo");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CCSPlayerController? GetRandomEnemy(CCSPlayerController player)
|
private static CCSPlayerController? GetRandomEnemy(CCSPlayerController player)
|
||||||
|
|
@ -199,6 +247,15 @@ namespace src.player.skills
|
||||||
public bool HaveWeapon { get; set; }
|
public bool HaveWeapon { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class WeaponInfo
|
||||||
|
{
|
||||||
|
public required string Name { get; set; }
|
||||||
|
public required int Clip1 { get; set; }
|
||||||
|
public required int Clip2 { get; set; }
|
||||||
|
public required int Reserve { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#c7e03a", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float cooldown = 30f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#c7e03a", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float cooldown = 30f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
{
|
{
|
||||||
public float Cooldown { get; set; } = cooldown;
|
public float Cooldown { get; set; } = cooldown;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Weightless;
|
private const Skills skillName = Skills.Weightless;
|
||||||
private readonly static ConcurrentDictionary<uint, byte> nades = [];
|
private readonly static ConcurrentDictionary<uint, byte> nades = [];
|
||||||
|
private readonly static ConcurrentDictionary<uint, int> playersWithSkill = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -79,13 +80,69 @@ namespace src.player.skills
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||||
{
|
{
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Weapon;
|
||||||
|
if (weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
{
|
||||||
|
playersWithSkill[player.Index] = grenadesLeft - 1;
|
||||||
|
player!.GiveNamedItem($"weapon_{weapon}");
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8f6dc9", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
public static void WeaponEquip(EventItemEquip @event)
|
||||||
{
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WeaponPickup(EventItemPickup @event)
|
||||||
|
{
|
||||||
|
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
var weapon = @event.Item;
|
||||||
|
if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
|
||||||
|
|
||||||
|
if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
int grenadeLimit = SkillsInfo.GetValue<int>(skillName, "grenadeLimit");
|
||||||
|
playersWithSkill.TryAdd(player.Index, grenadeLimit);
|
||||||
|
|
||||||
|
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
playersWithSkill.TryRemove(player.Index, out _);
|
||||||
|
SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8f6dc9", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||||
|
{
|
||||||
|
public int GrenadeLimit { get; set; } = grenadeLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
101
jRandomSkills - SRC Files/src/utils/CServerSideClient.cs
Normal file
101
jRandomSkills - SRC Files/src/utils/CServerSideClient.cs
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
// https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348
|
||||||
|
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using CounterStrikeSharp.API;
|
||||||
|
using CounterStrikeSharp.API.Core;
|
||||||
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
|
|
||||||
|
namespace jRandomSkills.src.utils
|
||||||
|
{
|
||||||
|
|
||||||
|
#region Native Structs
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public unsafe struct CUtlMemory<T> where T : unmanaged
|
||||||
|
{
|
||||||
|
public T* m_pMemory;
|
||||||
|
public int m_nAllocationCount;
|
||||||
|
public int m_nGrowSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public unsafe struct CUtlVector<T> where T : unmanaged
|
||||||
|
{
|
||||||
|
public int m_Size;
|
||||||
|
public CUtlMemory<T> m_Memory;
|
||||||
|
|
||||||
|
public int Count => m_Size;
|
||||||
|
|
||||||
|
public ref T Element(int index)
|
||||||
|
{
|
||||||
|
if (index < 0 || index >= m_Size)
|
||||||
|
throw new IndexOutOfRangeException();
|
||||||
|
|
||||||
|
return ref m_Memory.m_pMemory[index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Network Services
|
||||||
|
|
||||||
|
public class INetworkServerService : NativeObject
|
||||||
|
{
|
||||||
|
private readonly VirtualFunctionWithReturn<nint, nint> GetIGameServerFunc;
|
||||||
|
|
||||||
|
public INetworkServerService() : base(NativeAPI.GetValveInterface(0, "NetworkServerService_001"))
|
||||||
|
{
|
||||||
|
GetIGameServerFunc = new VirtualFunctionWithReturn<nint, nint>(Handle, GameData.GetOffset("INetworkServerService_GetIGameServer"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public INetworkGameServer GetIGameServer()
|
||||||
|
{
|
||||||
|
return new INetworkGameServer(GetIGameServerFunc.Invoke(Handle));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public unsafe class INetworkGameServer(nint ptr) : NativeObject(ptr)
|
||||||
|
{
|
||||||
|
private static readonly int SlotsOffset = GameData.GetOffset("INetworkGameServer_Slots");
|
||||||
|
|
||||||
|
private ref CUtlVector<nint> Slots => ref Unsafe.AsRef<CUtlVector<nint>>((void*)(Handle + SlotsOffset));
|
||||||
|
|
||||||
|
public CServerSideClient? GetClientBySlot(int slot)
|
||||||
|
{
|
||||||
|
if (slot < 0 || slot >= Slots.Count)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var ptr = Slots.Element(slot);
|
||||||
|
|
||||||
|
if (ptr == nint.Zero)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return new CServerSideClient(ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region CServerSideClient
|
||||||
|
|
||||||
|
public unsafe class CServerSideClient(nint ptr) : NativeObject(ptr)
|
||||||
|
{
|
||||||
|
private static readonly int m_nDeltaTick = GameData.GetOffset("CServerSideClient_m_nDeltaTick");
|
||||||
|
|
||||||
|
private ref T Field<T>(int offset) where T : unmanaged
|
||||||
|
{
|
||||||
|
return ref Unsafe.AsRef<T>((void*)(Handle + offset));
|
||||||
|
}
|
||||||
|
|
||||||
|
public int DeltaTick
|
||||||
|
{
|
||||||
|
get => Field<int>(m_nDeltaTick);
|
||||||
|
set => Field<int>(m_nDeltaTick) = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ForceFullUpdate() => DeltaTick = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
@ -131,6 +131,7 @@ namespace src.utils
|
||||||
new LanguageInfo("PT-BR, PT, BR, AO, CV, GW, MZ, ST, TL", "pt-br"),
|
new LanguageInfo("PT-BR, PT, BR, AO, CV, GW, MZ, ST, TL", "pt-br"),
|
||||||
new LanguageInfo("FR, MC, HT", "fr"),
|
new LanguageInfo("FR, MC, HT", "fr"),
|
||||||
new LanguageInfo("DE, AT, CH, LI, LU, BE", "de"),
|
new LanguageInfo("DE, AT, CH, LI, LU, BE", "de"),
|
||||||
|
new LanguageInfo("RU, KZ, BY, KG, TJ, UZ, TM, AM, AZ, GE, MD", "ru"),
|
||||||
new LanguageInfo("TR", "tr"),
|
new LanguageInfo("TR", "tr"),
|
||||||
new LanguageInfo("CZ", "cs"),
|
new LanguageInfo("CZ", "cs"),
|
||||||
new LanguageInfo("PL", "pl"),
|
new LanguageInfo("PL", "pl"),
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,10 @@ using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Memory;
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
|
using CounterStrikeSharp.API.Modules.Timers;
|
||||||
using CounterStrikeSharp.API.Modules.UserMessages;
|
using CounterStrikeSharp.API.Modules.UserMessages;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
|
using jRandomSkills.src.utils;
|
||||||
using src.player;
|
using src.player;
|
||||||
using src.player.skills;
|
using src.player.skills;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
@ -56,7 +58,30 @@ namespace src.utils
|
||||||
SkillData.Skills.Add(new jSkill_SkillInfo(skill, color, display));
|
SkillData.Skills.Add(new jSkill_SkillInfo(skill, color, display));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void TryGiveWeapon(CCSPlayerController player, CsItem item, int count = 1)
|
public static void UpdateGrenadeCount(CCSPlayerController player, CsItem item, int ammo)
|
||||||
|
{
|
||||||
|
string? itemString = EnumUtils.GetEnumMemberAttributeValue(item);
|
||||||
|
if (string.IsNullOrWhiteSpace(itemString)) return;
|
||||||
|
|
||||||
|
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
|
||||||
|
if (player.PlayerPawn.Value.WeaponServices == null) return;
|
||||||
|
|
||||||
|
var weapon = player.PlayerPawn.Value.WeaponServices.MyWeapons
|
||||||
|
.FirstOrDefault(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid && !string.IsNullOrEmpty(w.Value.DesignerName) && w.Value.DesignerName == itemString);
|
||||||
|
|
||||||
|
if (weapon == null || !weapon.IsValid || weapon.Value == null || !weapon.Value.IsValid) return;
|
||||||
|
|
||||||
|
weapon.Value.Clip1 = ammo;
|
||||||
|
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_iClip1");
|
||||||
|
|
||||||
|
jRandomSkills.Instance.AddTimer(.1f, () =>
|
||||||
|
{
|
||||||
|
if (weapon == null || !weapon.IsValid || weapon.Value == null || !weapon.Value.IsValid) return;
|
||||||
|
weapon.Value.Clip1 = 1;
|
||||||
|
}, TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void TryGiveWeapon(CCSPlayerController player, CsItem item, int count = 1, bool existValidator = true)
|
||||||
{
|
{
|
||||||
string? itemString = EnumUtils.GetEnumMemberAttributeValue(item);
|
string? itemString = EnumUtils.GetEnumMemberAttributeValue(item);
|
||||||
if (string.IsNullOrWhiteSpace(itemString)) return;
|
if (string.IsNullOrWhiteSpace(itemString)) return;
|
||||||
|
|
@ -66,7 +91,8 @@ namespace src.utils
|
||||||
|
|
||||||
var exists = player.PlayerPawn.Value.WeaponServices.MyWeapons
|
var exists = player.PlayerPawn.Value.WeaponServices.MyWeapons
|
||||||
.FirstOrDefault(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid && w.Value.DesignerName == itemString);
|
.FirstOrDefault(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid && w.Value.DesignerName == itemString);
|
||||||
if (exists == null)
|
|
||||||
|
if (exists == null || !existValidator)
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
player.GiveNamedItem(item);
|
player.GiveNamedItem(item);
|
||||||
}
|
}
|
||||||
|
|
@ -259,6 +285,9 @@ namespace src.utils
|
||||||
|
|
||||||
var jester = Jester.GetJesterInfo(player.Index);
|
var jester = Jester.GetJesterInfo(player.Index);
|
||||||
if (jester?.Active == true) return false;
|
if (jester?.Active == true) return false;
|
||||||
|
|
||||||
|
if (playerInfo.Skill == Skills.GodMode && GodMode.HaveHodMode(player.Index))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int newHealth = (int)(pawn.Health - damage);
|
int newHealth = (int)(pawn.Health - damage);
|
||||||
|
|
@ -291,9 +320,35 @@ namespace src.utils
|
||||||
return EntityManager.CreateTrackedTrigger(ownerPlayerIndex, name, radius, pos);
|
return EntityManager.CreateTrackedTrigger(ownerPlayerIndex, name, radius, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void ForceFullUpdate(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
if (player == null || !player.IsValid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var pawn = player.PlayerPawn?.Value;
|
||||||
|
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return;
|
||||||
|
|
||||||
|
QAngle lastAngle = new(pawn.V_angle.X, pawn.V_angle.Y, pawn.V_angle.Z);
|
||||||
|
|
||||||
|
INetworkServerService networkServerService = new();
|
||||||
|
INetworkGameServer networkGameServer = networkServerService.GetIGameServer();
|
||||||
|
|
||||||
|
var client = networkGameServer.GetClientBySlot(player.Slot);
|
||||||
|
if (client == null) return;
|
||||||
|
|
||||||
|
client.ForceFullUpdate();
|
||||||
|
pawn.Look(lastAngle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ForceFullUpdateToAll()
|
||||||
|
{
|
||||||
|
foreach (var player in Utilities.GetPlayers())
|
||||||
|
ForceFullUpdate(player);
|
||||||
|
}
|
||||||
|
|
||||||
public static bool AddHealth(CCSPlayerPawn? pawn, int extraHealth, int? maxHealth = null)
|
public static bool AddHealth(CCSPlayerPawn? pawn, int extraHealth, int? maxHealth = null)
|
||||||
{
|
{
|
||||||
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
|
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE || pawn.Health <= 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
maxHealth ??= pawn.MaxHealth;
|
maxHealth ??= pawn.MaxHealth;
|
||||||
|
|
@ -381,6 +436,18 @@ namespace src.utils
|
||||||
return manager.HasMenu(player);
|
return manager.HasMenu(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string GetInvisibleSignature(string id)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(id)) return "";
|
||||||
|
var sb = new System.Text.StringBuilder();
|
||||||
|
|
||||||
|
foreach (char c in id)
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
sb.Append(((c >> i) & 1) == 1 ? "\u200B" : "\u200C");
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
public static void UpdateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> items)
|
public static void UpdateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> items)
|
||||||
{
|
{
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
@ -395,13 +462,19 @@ namespace src.utils
|
||||||
|
|
||||||
Dictionary<string, Action<CCSPlayerController, IWasdMenuOption>> list = [];
|
Dictionary<string, Action<CCSPlayerController, IWasdMenuOption>> list = [];
|
||||||
foreach (var item in items)
|
foreach (var item in items)
|
||||||
list.TryAdd(isIlliterate
|
{
|
||||||
|
string encodedText = isIlliterate
|
||||||
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(item.Item1)!)
|
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(item.Item1)!)
|
||||||
: System.Net.WebUtility.HtmlEncode(item.Item1), (p, option) =>
|
: System.Net.WebUtility.HtmlEncode(item.Item1);
|
||||||
|
|
||||||
|
string uniqueKey = GetInvisibleSignature(item.Item2) + $"\u202A{encodedText}\u202C";
|
||||||
|
|
||||||
|
list.TryAdd(uniqueKey, (p, option) =>
|
||||||
{
|
{
|
||||||
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { item.Item2 }]);
|
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { item.Item2 }]);
|
||||||
manager.CloseMenu(p);
|
manager.CloseMenu(p);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
manager.UpdateActiveMenu(player, list);
|
manager.UpdateActiveMenu(player, list);
|
||||||
}
|
}
|
||||||
|
|
@ -445,11 +518,11 @@ namespace src.utils
|
||||||
|
|
||||||
string infoLine = string.IsNullOrEmpty(your_skill)
|
string infoLine = string.IsNullOrEmpty(your_skill)
|
||||||
? ""
|
? ""
|
||||||
: $"<font class='fontWeight-Bold fontSize-{config.HeaderLineSize}' color='{config.HeaderLineColor}'>{your_skill}:</font><br>";
|
: $"<font class='fontWeight-Bold fontSize-{config.HeaderLineSize}' color='{config.HeaderLineColor}'>\u202A{your_skill}:\u202C</font><br>";
|
||||||
|
|
||||||
string skillLine = Illiterate.CheckIlliterateSkill(player)
|
string skillLine = Illiterate.CheckIlliterateSkill(player)
|
||||||
? $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}'>{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}</font><br>"
|
? $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}'>\u202A{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}\u202C</font><br>"
|
||||||
: $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}' color='{skillData.Color}'>{player.GetSkillName(skillData.Skill)}</font><br>";
|
: $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}' color='{skillData.Color}'>\u202A{player.GetSkillName(skillData.Skill)}\u202C</font><br>";
|
||||||
|
|
||||||
var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLower()}_select_info");
|
var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLower()}_select_info");
|
||||||
string remainingLine = string.IsNullOrWhiteSpace(skill_select_info)
|
string remainingLine = string.IsNullOrWhiteSpace(skill_select_info)
|
||||||
|
|
@ -470,22 +543,34 @@ namespace src.utils
|
||||||
|
|
||||||
IWasdMenu menu = manager.CreateMenu(hudContent, itemText, itemHoverText, controllsLine);
|
IWasdMenu menu = manager.CreateMenu(hudContent, itemText, itemHoverText, controllsLine);
|
||||||
foreach (var enemy in enemies)
|
foreach (var enemy in enemies)
|
||||||
menu.Add(isIlliterate
|
{
|
||||||
|
string encodedEnemyName = isIlliterate
|
||||||
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(enemy.Item1)!)
|
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(enemy.Item1)!)
|
||||||
: System.Net.WebUtility.HtmlEncode(enemy.Item1), (p, option) =>
|
: System.Net.WebUtility.HtmlEncode(enemy.Item1);
|
||||||
|
|
||||||
|
string uniqueKey = GetInvisibleSignature(enemy.Item2) + $"\u202A{encodedEnemyName}\u202C";
|
||||||
|
|
||||||
|
menu.Add(uniqueKey, (p, option) =>
|
||||||
{
|
{
|
||||||
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { enemy.Item2 }]);
|
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { enemy.Item2 }]);
|
||||||
manager.CloseMenu(p);
|
manager.CloseMenu(p);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (lastElement != null)
|
if (lastElement != null)
|
||||||
menu.Add(isIlliterate
|
{
|
||||||
|
string encodedLastElement = isIlliterate
|
||||||
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(lastElement.Value.Item1)!)
|
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(lastElement.Value.Item1)!)
|
||||||
: System.Net.WebUtility.HtmlEncode(lastElement.Value.Item1), (p, option) =>
|
: System.Net.WebUtility.HtmlEncode(lastElement.Value.Item1);
|
||||||
|
|
||||||
|
menu.Add($"\u202A{encodedLastElement}\u202C", (p, option) =>
|
||||||
{
|
{
|
||||||
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]);
|
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]);
|
||||||
if (lastElement.Value.Item3)
|
if (lastElement.Value.Item3)
|
||||||
manager.CloseMenu(p);
|
manager.CloseMenu(p);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
manager.OpenMainMenu(player, menu);
|
manager.OpenMainMenu(player, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,17 +27,22 @@
|
||||||
"linux": "55 48 89 E5 41 57 49 89 FF 48 89 F7 41 56 41 55 41 54 53 48 81 EC"
|
"linux": "55 48 89 E5 41 57 49 89 FF 48 89 F7 41 56 41 55 41 54 53 48 81 EC"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CCSPlayerController_HandleCommandDrop": {
|
"CServerSideClient_m_nDeltaTick": {
|
||||||
"signatures": {
|
"offsets": {
|
||||||
"library": "server",
|
"windows": 348,
|
||||||
"windows": "48 89 5C 24 ? 57 48 83 EC ? 48 8B FA E8 ? ? ? ? 48 8B D8",
|
"linux": 348
|
||||||
"linux": "55 48 89 E5 41 54 49 89 F4 53 E8 ? ? ? ? 48 85 C0 74 ? 48 89 C3"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CBaseEntity_CollisionRulesChanged": {
|
"INetworkGameServer_Slots": {
|
||||||
"offsets": {
|
"offsets": {
|
||||||
"windows": 186,
|
"windows": 592,
|
||||||
"linux": 185
|
"linux": 592
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"INetworkServerService_GetIGameServer": {
|
||||||
|
"offsets": {
|
||||||
|
"windows": 23,
|
||||||
|
"linux": 24
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -38,6 +38,10 @@
|
||||||
"IsoCodes": "DE, AT, CH, LI, LU, BE",
|
"IsoCodes": "DE, AT, CH, LI, LU, BE",
|
||||||
"FileName": "de"
|
"FileName": "de"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"IsoCodes": "RU, KZ, BY, KG, TJ, UZ, TM, AM, AZ, GE, MD",
|
||||||
|
"FileName": "ru"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"IsoCodes": "TR",
|
"IsoCodes": "TR",
|
||||||
"FileName": "tr"
|
"FileName": "tr"
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
"Rarity": "Common"
|
"Rarity": "Common"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"GrenadeLimit": 2,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -72,6 +73,7 @@
|
||||||
"SmokeDamage": 2,
|
"SmokeDamage": 2,
|
||||||
"SmokeRadius": 180.0,
|
"SmokeRadius": 180.0,
|
||||||
"TickCooldown": 17,
|
"TickCooldown": 17,
|
||||||
|
"GrenadeLimit": 1,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -97,6 +99,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"HealthTakenScale": 0.3,
|
"HealthTakenScale": 0.3,
|
||||||
|
"MaxTakenDamagePerShot": 37,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -205,6 +208,7 @@
|
||||||
"Rarity": "Common"
|
"Rarity": "Common"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"GrenadeLimit": 1,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -436,6 +440,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"RegenerationMultiplier": 1.5,
|
"RegenerationMultiplier": 1.5,
|
||||||
|
"GrenadeLimit": 2,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -645,20 +650,6 @@
|
||||||
"MaxPerServer": -1,
|
"MaxPerServer": -1,
|
||||||
"Rarity": "Common"
|
"Rarity": "Common"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ExplosionRadius": 500.0,
|
|
||||||
"ExplosionDamage": 999,
|
|
||||||
"DmgReductionForTeamates": 0.5,
|
|
||||||
"NeedsTeammates": false,
|
|
||||||
"DisableOnFreezeTime": false,
|
|
||||||
"OnlyTeam": 0,
|
|
||||||
"Color": "#F5CB42",
|
|
||||||
"Active": true,
|
|
||||||
"Name": "Muhammed",
|
|
||||||
"RequiredPermission": "",
|
|
||||||
"MaxPerServer": -1,
|
|
||||||
"Rarity": "Common"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
|
|
@ -672,6 +663,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"DetonationRange": 130.0,
|
"DetonationRange": 130.0,
|
||||||
|
"GrenadeLimit": 3,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -723,6 +715,7 @@
|
||||||
{
|
{
|
||||||
"TriggerRadius": 180.0,
|
"TriggerRadius": 180.0,
|
||||||
"Strenght": 30.0,
|
"Strenght": 30.0,
|
||||||
|
"GrenadeLimit": 3,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -773,6 +766,7 @@
|
||||||
{
|
{
|
||||||
"FlashDuration": 1.0,
|
"FlashDuration": 1.0,
|
||||||
"FriendlyFire": true,
|
"FriendlyFire": true,
|
||||||
|
"GrenadeLimit": 1,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -921,6 +915,7 @@
|
||||||
"Strength": 150.0,
|
"Strength": 150.0,
|
||||||
"MaxVelocity": 2000.0,
|
"MaxVelocity": 2000.0,
|
||||||
"DetonationRange": 130.0,
|
"DetonationRange": 130.0,
|
||||||
|
"GrenadeLimit": 2,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -934,6 +929,7 @@
|
||||||
{
|
{
|
||||||
"DamageMultiplier": 2.0,
|
"DamageMultiplier": 2.0,
|
||||||
"DamageRadiusMultiplier": 2.0,
|
"DamageRadiusMultiplier": 2.0,
|
||||||
|
"GrenadeLimit": 1,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -960,6 +956,7 @@
|
||||||
"SmokeHeal": 1,
|
"SmokeHeal": 1,
|
||||||
"SmokeRadius": 180.0,
|
"SmokeRadius": 180.0,
|
||||||
"TickCooldown": 16,
|
"TickCooldown": 16,
|
||||||
|
"GrenadeLimit": 1,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -1017,6 +1014,7 @@
|
||||||
"Rarity": "Common"
|
"Rarity": "Common"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"GrenadeLimit": 2,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -1053,6 +1051,7 @@
|
||||||
{
|
{
|
||||||
"TriggerRadius": 180.0,
|
"TriggerRadius": 180.0,
|
||||||
"SlownessMultiplier": 5,
|
"SlownessMultiplier": 5,
|
||||||
|
"GrenadeLimit": 3,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -1064,7 +1063,7 @@
|
||||||
"Rarity": "Common"
|
"Rarity": "Common"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"HealthMultiplier": 1.5,
|
"HealthDamageMultiplier": 0.3,
|
||||||
"NeedsTeammates": true,
|
"NeedsTeammates": true,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -1225,6 +1224,20 @@
|
||||||
"MaxPerServer": -1,
|
"MaxPerServer": -1,
|
||||||
"Rarity": "Common"
|
"Rarity": "Common"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ExplosionRadius": 500.0,
|
||||||
|
"ExplosionDamage": 999,
|
||||||
|
"DmgReductionForTeamates": 0.5,
|
||||||
|
"NeedsTeammates": false,
|
||||||
|
"DisableOnFreezeTime": false,
|
||||||
|
"OnlyTeam": 0,
|
||||||
|
"Color": "#F5CB42",
|
||||||
|
"Active": true,
|
||||||
|
"Name": "DeathBomb",
|
||||||
|
"RequiredPermission": "",
|
||||||
|
"MaxPerServer": -1,
|
||||||
|
"Rarity": "Common"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
|
|
@ -1404,6 +1417,7 @@
|
||||||
"SpeedMultipier": 2.0,
|
"SpeedMultipier": 2.0,
|
||||||
"MaxSpeed": 900.0,
|
"MaxSpeed": 900.0,
|
||||||
"DamageDeal": 9999.0,
|
"DamageDeal": 9999.0,
|
||||||
|
"GrenadeLimit": 3,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
@ -1488,6 +1502,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"FlashDuration": 7.0,
|
"FlashDuration": 7.0,
|
||||||
|
"GrenadeLimit": 2,
|
||||||
"NeedsTeammates": false,
|
"NeedsTeammates": false,
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,519 +1,519 @@
|
||||||
{
|
{
|
||||||
"none": "Keine",
|
"none": "Keine",
|
||||||
"none_desc": "Du hast keine Fertigkeit",
|
"none_desc": "Du hast keine Fertigkeit",
|
||||||
|
|
||||||
"aimbot": "Aimbot",
|
"aimbot": "Aimbot",
|
||||||
"aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
|
"aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
|
||||||
|
|
||||||
"aimlock": "Aim-Lock",
|
"aimlock": "Aim-Lock",
|
||||||
"aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
|
"aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
|
||||||
|
|
||||||
"anomaly": "Anomalie",
|
"anomaly": "Anomalie",
|
||||||
"anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
|
"anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
|
||||||
|
|
||||||
"antyflash": "Anti-Flash",
|
"antyflash": "Anti-Flash",
|
||||||
"antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
|
"antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
|
||||||
|
|
||||||
"antyhead": "Eiserner Kopf",
|
"antyhead": "Eiserner Kopf",
|
||||||
"antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
|
"antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
|
||||||
|
|
||||||
"areareaper": "Zone Reaper",
|
"areareaper": "Zone Reaper",
|
||||||
"areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
|
"areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
|
||||||
"areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
|
"areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
|
||||||
"areareaper_no_site": "Keine Bombenstandorte gefunden.",
|
"areareaper_no_site": "Keine Bombenstandorte gefunden.",
|
||||||
"areareaper_select_info": "Standort zum Deaktivieren auswählen:",
|
"areareaper_select_info": "Standort zum Deaktivieren auswählen:",
|
||||||
"areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
|
"areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
|
||||||
"areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
|
"areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
|
||||||
"areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
|
"areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
|
||||||
|
|
||||||
"armored": "Gepanzert",
|
"armored": "Gepanzert",
|
||||||
"armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
"armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
||||||
"armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
"armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"assassin": "Attentäter",
|
"assassin": "Attentäter",
|
||||||
"assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
|
"assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
|
||||||
|
|
||||||
"astronaut": "Astronaut",
|
"astronaut": "Astronaut",
|
||||||
"astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
|
"astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
|
||||||
"astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
|
"astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
|
||||||
|
|
||||||
"moneyswap": "Steuerbeamter",
|
"moneyswap": "Steuerbeamter",
|
||||||
"moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
|
"moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
|
||||||
"moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
|
"moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
|
||||||
"moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
|
"moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
|
||||||
"moneyswap_select_info": "Geld mit Spieler tauschen:",
|
"moneyswap_select_info": "Geld mit Spieler tauschen:",
|
||||||
|
|
||||||
"baseball": "Baseballspieler",
|
"baseball": "Baseballspieler",
|
||||||
"baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
|
"baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
|
||||||
|
|
||||||
"behind": "Feind drehen",
|
"behind": "Feind drehen",
|
||||||
"behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
|
"behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
|
||||||
"behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
|
"behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
|
||||||
|
|
||||||
"blademaster": "Schwertmeister",
|
"blademaster": "Schwertmeister",
|
||||||
"blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
|
"blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
|
||||||
|
|
||||||
"bunnyhop": "Hase",
|
"bunnyhop": "Hase",
|
||||||
"bunnyhop_desc": "Du erhältst automatisch bunnyhop",
|
"bunnyhop_desc": "Du erhältst automatisch bunnyhop",
|
||||||
|
|
||||||
"c4camouflage": "C4-Tarnung",
|
"c4camouflage": "C4-Tarnung",
|
||||||
"c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
|
"c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
|
||||||
|
|
||||||
"carefulbullets": "Vorsichtige Kugeln",
|
"carefulbullets": "Vorsichtige Kugeln",
|
||||||
"carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
|
"carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
|
||||||
"carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
|
"carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
|
||||||
"carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
|
"carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
|
||||||
"carefulbullets_select_info": "Fehler schaden dem Spieler:",
|
"carefulbullets_select_info": "Fehler schaden dem Spieler:",
|
||||||
|
|
||||||
"catapult": "Katapult",
|
"catapult": "Katapult",
|
||||||
"catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
|
"catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
|
||||||
"catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
|
"catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
|
||||||
|
|
||||||
"chicken": "Huhn",
|
"chicken": "Huhn",
|
||||||
"chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
|
"chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
|
||||||
|
|
||||||
"chillout": "Chillout",
|
"chillout": "Chillout",
|
||||||
"chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
|
"chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
|
||||||
|
|
||||||
"cutter": "Cutter",
|
"cutter": "Cutter",
|
||||||
"cutter_desc": "Sofortiger Tod mit einem Messer",
|
"cutter_desc": "Sofortiger Tod mit einem Messer",
|
||||||
|
|
||||||
"cypher": "Kamera",
|
"cypher": "Kamera",
|
||||||
"cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
|
"cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
|
||||||
"cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
|
"cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
|
||||||
|
|
||||||
"darkness": "Dunkelheit",
|
"darkness": "Dunkelheit",
|
||||||
"darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
|
"darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
|
||||||
"darkness_enemy_info": "Lass die Lichter ausgehen",
|
"darkness_enemy_info": "Lass die Lichter ausgehen",
|
||||||
"darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
|
"darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
|
||||||
"darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
|
"darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
|
||||||
|
|
||||||
"deactivator": "Deaktivator",
|
"deactivator": "Deaktivator",
|
||||||
"deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
|
"deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
|
||||||
"deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
|
"deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
|
||||||
"deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
|
"deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
|
||||||
"deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
|
"deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
|
||||||
|
|
||||||
"deaf": "Taub",
|
"deaf": "Taub",
|
||||||
"deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
|
"deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
|
||||||
"deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
|
"deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
|
||||||
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
|
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
|
||||||
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
|
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
|
||||||
|
|
||||||
"disarmament": "Entwaffnung",
|
"disarmament": "Entwaffnung",
|
||||||
"disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
|
"disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
|
||||||
"disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
|
"disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
|
||||||
|
|
||||||
"distancer": "Entfernungsmesser",
|
"distancer": "Entfernungsmesser",
|
||||||
"distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
|
"distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
|
||||||
|
|
||||||
"dash": "Sprinten",
|
"dash": "Sprinten",
|
||||||
"dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
|
"dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
|
||||||
|
|
||||||
"dracula": "Dracula",
|
"dracula": "Dracula",
|
||||||
"dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
|
"dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
|
||||||
|
|
||||||
"duplicator": "Duplikator",
|
"duplicator": "Duplikator",
|
||||||
"duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
|
"duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
|
||||||
"duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
|
"duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
|
||||||
"duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
|
"duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
|
||||||
|
|
||||||
"dwarf": "Zwerg",
|
"dwarf": "Zwerg",
|
||||||
"dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
|
"dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
|
||||||
"dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
|
"dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"enemyspawn": "Feindes-Spawn",
|
"enemyspawn": "Feindes-Spawn",
|
||||||
"enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
|
"enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
|
||||||
|
|
||||||
"explosiveshot": "Explosiver Schuss",
|
"explosiveshot": "Explosiver Schuss",
|
||||||
"explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
|
"explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
|
||||||
"explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
|
"explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
|
||||||
|
|
||||||
"falconeye": "Falkenauge",
|
"falconeye": "Falkenauge",
|
||||||
"falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
|
"falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
|
||||||
|
|
||||||
"fastreload": "Schnellnachladen",
|
"fastreload": "Schnellnachladen",
|
||||||
"fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
|
"fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
|
||||||
|
|
||||||
"flash": "Blitz",
|
"flash": "Blitz",
|
||||||
"flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
|
"flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
|
||||||
"flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
|
"flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"fortnite": "Fortnite",
|
"fortnite": "Fortnite",
|
||||||
"fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
|
"fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
|
||||||
|
|
||||||
"fragilebomb": "Fragile Bombe",
|
"fragilebomb": "Fragile Bombe",
|
||||||
"fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
|
"fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
|
||||||
"fragilebomb_bomb_health": "Bombengesundheit",
|
"fragilebomb_bomb_health": "Bombengesundheit",
|
||||||
|
|
||||||
"friendlyfire": "Friendly Fire",
|
"friendlyfire": "Friendly Fire",
|
||||||
"friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
|
"friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
|
||||||
|
|
||||||
"frozendecoy": "Eisige Attrappe",
|
"frozendecoy": "Eisige Attrappe",
|
||||||
"frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
|
"frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
|
||||||
|
|
||||||
"gambler": "Zocker",
|
"gambler": "Zocker",
|
||||||
"gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
|
"gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
|
||||||
"gambler_select_info": "Wähle deine Fähigkeit aus:",
|
"gambler_select_info": "Wähle deine Fähigkeit aus:",
|
||||||
"gambler_more": "#00FF00|Aktualisieren für ${0}",
|
"gambler_more": "#00FF00|Aktualisieren für ${0}",
|
||||||
"gambler_no_money": "Nicht genug Geld.",
|
"gambler_no_money": "Nicht genug Geld.",
|
||||||
|
|
||||||
"ghost": "Geist",
|
"ghost": "Geist",
|
||||||
"ghost_desc": "Du bist vollständig unsichtbar",
|
"ghost_desc": "Du bist vollständig unsichtbar",
|
||||||
|
|
||||||
"glaz": "Glaz",
|
"glaz": "Glaz",
|
||||||
"glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
|
"glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
|
||||||
|
|
||||||
"glitch": "Glitch",
|
"glitch": "Glitch",
|
||||||
"glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
|
"glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
|
||||||
"glitch_enemy_info": "Dein Radar wurde deaktiviert",
|
"glitch_enemy_info": "Dein Radar wurde deaktiviert",
|
||||||
"glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
|
"glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
|
||||||
"glitch_select_info": "Radar des Spielers ausschalten:",
|
"glitch_select_info": "Radar des Spielers ausschalten:",
|
||||||
|
|
||||||
"glue": "Glue",
|
"glue": "Glue",
|
||||||
"glue_desc": "Deine Granaten haften an Wänden",
|
"glue_desc": "Deine Granaten haften an Wänden",
|
||||||
|
|
||||||
"godmode": "Gott-Modus",
|
"godmode": "Gott-Modus",
|
||||||
"godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
|
"godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
|
||||||
"godmode_off": "Unsterblichkeit deaktiviert",
|
"godmode_off": "Unsterblichkeit deaktiviert",
|
||||||
"godmode_on": "Unsterblichkeit aktiviert",
|
"godmode_on": "Unsterblichkeit aktiviert",
|
||||||
|
|
||||||
"grenadier": "Grenadier",
|
"grenadier": "Grenadier",
|
||||||
"grenadier_desc": "Du hast unendlich viele Granaten",
|
"grenadier_desc": "Du hast unendlich viele Granaten",
|
||||||
|
|
||||||
"healingsmoke": "Heilender Rauch",
|
"healingsmoke": "Heilender Rauch",
|
||||||
"healingsmoke_desc": "Deine Rauchgranaten heilen",
|
"healingsmoke_desc": "Deine Rauchgranaten heilen",
|
||||||
|
|
||||||
"hermit": "Einsiedler",
|
"hermit": "Einsiedler",
|
||||||
"hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
|
"hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
|
||||||
|
|
||||||
"holyhandgrenade": "Heilige Handgranate",
|
"holyhandgrenade": "Heilige Handgranate",
|
||||||
"holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
|
"holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
|
||||||
|
|
||||||
"homingnades": "Zielsuchende Granaten",
|
"homingnades": "Zielsuchende Granaten",
|
||||||
"homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
|
"homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
|
||||||
|
|
||||||
"hotbomb": "Heiße Bombe",
|
"hotbomb": "Heiße Bombe",
|
||||||
"hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
|
"hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
|
||||||
"hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
|
"hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
|
||||||
|
|
||||||
"iana": "Hologramm",
|
"iana": "Hologramm",
|
||||||
"iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
|
"iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
|
||||||
|
|
||||||
"illiterate": "Analphabet",
|
"illiterate": "Analphabet",
|
||||||
"illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
|
"illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
|
||||||
|
|
||||||
"illusionist": "Illusionist",
|
"illusionist": "Illusionist",
|
||||||
"illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
|
"illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
|
||||||
|
|
||||||
"impostor": "Betrüger",
|
"impostor": "Betrüger",
|
||||||
"impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
|
"impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
|
||||||
|
|
||||||
"infiniteammo": "Unendliche Munition",
|
"infiniteammo": "Unendliche Munition",
|
||||||
"infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
|
"infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
|
||||||
|
|
||||||
"jackal": "Spürhund",
|
"jackal": "Spürhund",
|
||||||
"jackal_desc": "Jeder Gegner hinterlässt eine Spur",
|
"jackal_desc": "Jeder Gegner hinterlässt eine Spur",
|
||||||
|
|
||||||
"jammer": "Störsender",
|
"jammer": "Störsender",
|
||||||
"jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
|
"jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
|
||||||
"jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
|
"jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
|
||||||
"jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
|
"jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
|
||||||
"jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
|
"jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
|
||||||
|
|
||||||
"jester": "Narr",
|
"jester": "Narr",
|
||||||
"jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
|
"jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
|
||||||
"jester_mode": "Jester-Modus",
|
"jester_mode": "Jester-Modus",
|
||||||
"jester_on": "EIN",
|
"jester_on": "EIN",
|
||||||
"jester_off": "AUS",
|
"jester_off": "AUS",
|
||||||
|
|
||||||
"jumpban": "Beinlos",
|
"jumpban": "Beinlos",
|
||||||
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
|
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
|
||||||
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
|
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
|
||||||
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
|
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
|
||||||
"jumpban_select_info": "Spieler vom Springen ausschließen:",
|
"jumpban_select_info": "Spieler vom Springen ausschließen:",
|
||||||
|
|
||||||
"jumpingjack": "Jumping Jack",
|
"jumpingjack": "Jumping Jack",
|
||||||
"jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
|
"jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
|
||||||
|
|
||||||
"killerflash": "Killer Flash",
|
"killerflash": "Killer Flash",
|
||||||
"killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
|
"killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
|
||||||
|
|
||||||
"lifeswap": "Lebensaustausch",
|
"lifeswap": "Lebensaustausch",
|
||||||
"lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
|
"lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
|
||||||
"lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
|
"lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
|
||||||
"lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
|
"lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
|
||||||
"lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
|
"lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
|
||||||
|
|
||||||
"longknife": "Langes Messer",
|
"longknife": "Langes Messer",
|
||||||
"longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
|
"longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
|
||||||
|
|
||||||
"longzeus": "Langer Zeus",
|
"longzeus": "Langer Zeus",
|
||||||
"longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
|
"longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
|
||||||
|
|
||||||
"magneticdecoy": "Magnetischer Köder",
|
"magneticdecoy": "Magnetischer Köder",
|
||||||
"magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
|
"magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
|
||||||
|
|
||||||
"magneto": "Magneto",
|
"magneto": "Magneto",
|
||||||
"magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
|
"magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
|
||||||
|
|
||||||
"magnifier": "Lupe",
|
"magnifier": "Lupe",
|
||||||
"magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
|
"magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
|
||||||
"magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
|
"magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
|
||||||
"magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
|
"magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
|
||||||
"magnifier_select_info": "Bildschirm des Spielers vergrößern:",
|
"magnifier_select_info": "Bildschirm des Spielers vergrößern:",
|
||||||
|
|
||||||
"medic": "Sanitäter",
|
"medic": "Sanitäter",
|
||||||
"medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
|
"medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
|
||||||
|
|
||||||
"miner": "Bomben-Miner",
|
"miner": "Bomben-Miner",
|
||||||
"miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
|
"miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
|
||||||
|
|
||||||
"bankrupt": "Bankrott",
|
"bankrupt": "Bankrott",
|
||||||
"bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
|
"bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
|
||||||
"bankrupt_enemy_info": "Du bist bankrott.",
|
"bankrupt_enemy_info": "Du bist bankrott.",
|
||||||
"bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
|
"bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
|
||||||
"bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
|
"bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Todesbombe",
|
||||||
"muhammed_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
"deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
|
"ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
|
||||||
|
|
||||||
"nonades": "No-Nades",
|
"nonades": "No-Nades",
|
||||||
"nonades_desc": "Granaten fügen dir keinen Schaden zu",
|
"nonades_desc": "Granaten fügen dir keinen Schaden zu",
|
||||||
|
|
||||||
"norecoil": "Fokus",
|
|
||||||
"norecoil_desc": "Kein Rückstoß beim Schießen",
|
|
||||||
|
|
||||||
"noclip": "NoClip",
|
"norecoil": "Fokus",
|
||||||
"noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
|
"norecoil_desc": "Kein Rückstoß beim Schießen",
|
||||||
|
|
||||||
"oneshot": "One-Shot",
|
"noclip": "NoClip",
|
||||||
"oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
|
"noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
|
||||||
|
|
||||||
"onlyhead": "Nur Kopf",
|
"oneshot": "One-Shot",
|
||||||
"onlyhead_desc": "Du erleidest nur Schaden am Kopf",
|
"oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
|
||||||
|
|
||||||
"paweljumper": "Pawel Jumper",
|
"onlyhead": "Nur Kopf",
|
||||||
"paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
|
"onlyhead_desc": "Du erleidest nur Schaden am Kopf",
|
||||||
"paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
|
|
||||||
|
|
||||||
"phoenix": "Phönix",
|
"paweljumper": "Pawel Jumper",
|
||||||
"phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
|
"paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
|
||||||
"phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
|
"paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
|
||||||
"phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
|
|
||||||
|
|
||||||
"psychicdefusing": "Psychic Defusing",
|
"phoenix": "Phönix",
|
||||||
"psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
|
"phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
|
||||||
"psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
|
"phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
|
||||||
|
"phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
|
||||||
|
|
||||||
"pilot": "Pilot",
|
"psychicdefusing": "Psychic Defusing",
|
||||||
"pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
|
"psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
|
||||||
"pilot_hud_info": "Treibstoff",
|
"psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
|
||||||
|
|
||||||
"planter": "Freier Planter",
|
"pilot": "Pilot",
|
||||||
"planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
|
"pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
|
||||||
"planter_planting": "Bombe wird gelegt ({0})...",
|
"pilot_hud_info": "Treibstoff",
|
||||||
|
|
||||||
"poison": "Gift",
|
"planter": "Freier Planter",
|
||||||
"poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
|
"planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
|
||||||
"poison_enemy_info": "Du wurdest vergiftet",
|
"planter_planting": "Bombe wird gelegt ({0})...",
|
||||||
"poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
|
|
||||||
"poison_select_info": "Einen Spieler vergiften:",
|
|
||||||
|
|
||||||
"primaryban": "Keine Gewehre",
|
"poison": "Gift",
|
||||||
"primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
|
"poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
|
||||||
"primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
|
"poison_enemy_info": "Du wurdest vergiftet",
|
||||||
"primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
|
"poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
|
||||||
"primaryban_select_info": "Gewehre für Spieler verbieten:",
|
"poison_select_info": "Einen Spieler vergiften:",
|
||||||
|
|
||||||
"prosthesis": "Prothese",
|
"primaryban": "Keine Gewehre",
|
||||||
"prosthesis_desc": "Arme und Beine sind kugelsicher",
|
"primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
|
||||||
|
"primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
|
||||||
|
"primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
|
||||||
|
"primaryban_select_info": "Gewehre für Spieler verbieten:",
|
||||||
|
|
||||||
"push": "Pusher",
|
"prosthesis": "Prothese",
|
||||||
"push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
|
"prosthesis_desc": "Arme und Beine sind kugelsicher",
|
||||||
"push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
|
|
||||||
|
|
||||||
"pyro": "Pyro",
|
"push": "Pusher",
|
||||||
"pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
|
"push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
|
||||||
|
"push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
|
||||||
|
|
||||||
"quickshot": "Schnellfeuer",
|
"pyro": "Pyro",
|
||||||
"quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
|
"pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
|
||||||
|
|
||||||
"radarhack": "Radar-Hack",
|
"quickshot": "Schnellfeuer",
|
||||||
"radarhack_desc": "Gegner sind auf dem Radar sichtbar",
|
"quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
|
||||||
|
|
||||||
"rambo": "Rambo",
|
"radarhack": "Radar-Hack",
|
||||||
"rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
|
"radarhack_desc": "Gegner sind auf dem Radar sichtbar",
|
||||||
|
|
||||||
"randomweapon": "Zufällige Waffe",
|
"rambo": "Rambo",
|
||||||
"randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
|
"rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
|
||||||
|
|
||||||
"rezombie": "Re-Zombie",
|
"randomweapon": "Zufällige Waffe",
|
||||||
"rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
|
"randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
|
||||||
|
|
||||||
"reactivearmor": "Reaktive Rüstung",
|
"rezombie": "Re-Zombie",
|
||||||
"reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
|
"rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
|
||||||
|
|
||||||
"regeneration": "Regeneration",
|
"reactivearmor": "Reaktive Rüstung",
|
||||||
"regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
|
"reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
|
||||||
|
|
||||||
"replicator": "Replikator",
|
"regeneration": "Regeneration",
|
||||||
"replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
|
"regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
|
||||||
|
|
||||||
"retreat": "Rückzug",
|
"replicator": "Replikator",
|
||||||
"retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
|
"replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
|
||||||
|
|
||||||
"returntosender": "Zurück zum Absender",
|
"retreat": "Rückzug",
|
||||||
"returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
|
"retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
|
||||||
|
|
||||||
"richboy": "Rich Boy",
|
"returntosender": "Zurück zum Absender",
|
||||||
"richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
|
"returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
|
||||||
|
|
||||||
"robinhood": "Robin Hood",
|
"richboy": "Rich Boy",
|
||||||
"robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
|
"richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
|
||||||
|
|
||||||
"rubber": "Gummigeschosse",
|
"robinhood": "Robin Hood",
|
||||||
"rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
|
"robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
|
||||||
|
|
||||||
"saper": "Sapper",
|
"rubber": "Gummigeschosse",
|
||||||
"saper_desc": "Du kannst Bomben schneller legen und entschärfen",
|
"rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
|
||||||
|
|
||||||
"secondlife": "Zweite Chance",
|
"saper": "Sapper",
|
||||||
"secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
|
"saper_desc": "Du kannst Bomben schneller legen und entschärfen",
|
||||||
|
|
||||||
"shade": "Schatten",
|
"secondlife": "Zweite Chance",
|
||||||
"shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
|
"secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
|
||||||
"shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
|
|
||||||
"shade_nospace": "Kein Platz verfügbar",
|
|
||||||
|
|
||||||
"shortbomb": "Kurze Zündschnur",
|
"shade": "Schatten",
|
||||||
"shortbomb_desc": "Die Bombe explodiert viel schneller",
|
"shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
|
||||||
|
"shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
|
||||||
|
"shade_nospace": "Kein Platz verfügbar",
|
||||||
|
|
||||||
"silent": "Leise",
|
"shortbomb": "Kurze Zündschnur",
|
||||||
"silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
|
"shortbomb_desc": "Die Bombe explodiert viel schneller",
|
||||||
|
|
||||||
"smoker": "Smoker",
|
"silent": "Leise",
|
||||||
"smoker_desc": "Deine Rauchgranaten gehen nie aus",
|
"silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
|
||||||
|
|
||||||
"sniperelite": "Sniper Elite",
|
"smoker": "Smoker",
|
||||||
"sniperelite_customname": "Sniper-Elite-Skill",
|
"smoker_desc": "Deine Rauchgranaten gehen nie aus",
|
||||||
"sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
|
|
||||||
|
|
||||||
"soldier": "Soldat",
|
"sniperelite": "Sniper Elite",
|
||||||
"soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
"sniperelite_customname": "Sniper-Elite-Skill",
|
||||||
"soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
"sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
|
||||||
|
|
||||||
"soundmaker": "Soundmaker",
|
"soldier": "Soldat",
|
||||||
"soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
|
"soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
|
||||||
|
"soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
|
||||||
|
|
||||||
"spectator": "Zuschauer",
|
"soundmaker": "Soundmaker",
|
||||||
"spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
|
"soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
|
||||||
|
|
||||||
"swapposition": "Positionstausch",
|
"spectator": "Zuschauer",
|
||||||
"swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
|
"spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
|
||||||
|
|
||||||
"teleporter": "Teleporter",
|
"swapposition": "Positionstausch",
|
||||||
"teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
|
"swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
|
||||||
"teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
|
|
||||||
|
|
||||||
"thief": "Dieb",
|
"teleporter": "Teleporter",
|
||||||
"thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
|
"teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
|
||||||
"thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
|
"teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
|
||||||
"thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
|
|
||||||
"thief_select_info": "Fähigkeit eines Spielers stehlen:",
|
|
||||||
"thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
|
|
||||||
|
|
||||||
"thirdeye": "Drittes Auge",
|
"thief": "Dieb",
|
||||||
"thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
|
"thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
|
||||||
|
"thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
|
||||||
|
"thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
|
||||||
|
"thief_select_info": "Fähigkeit eines Spielers stehlen:",
|
||||||
|
"thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
|
||||||
|
|
||||||
"thorns": "Dornen",
|
"thirdeye": "Drittes Auge",
|
||||||
"thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
|
"thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
|
||||||
|
|
||||||
"throwingknife": "Wurfmesser",
|
"thorns": "Dornen",
|
||||||
"throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
|
"thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
|
||||||
|
|
||||||
"toxicsmoke": "Giftiger Rauch",
|
"throwingknife": "Wurfmesser",
|
||||||
"toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
|
"throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
|
||||||
|
|
||||||
"wallhack": "Wallhack",
|
"toxicsmoke": "Giftiger Rauch",
|
||||||
"wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
|
"toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
|
||||||
|
|
||||||
"watchmaker": "Uhrmacher",
|
"wallhack": "Wallhack",
|
||||||
"watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
|
"wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
|
||||||
"watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
|
|
||||||
"watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
|
|
||||||
|
|
||||||
"weaponsswap": "Waffenwechsel",
|
"watchmaker": "Uhrmacher",
|
||||||
"weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
|
"watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
|
||||||
"weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
|
"watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
|
||||||
|
"watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
|
||||||
|
|
||||||
"weightless": "Schwerelosigkeit",
|
"weaponsswap": "Waffenwechsel",
|
||||||
"weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
|
"weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
|
||||||
|
"weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
|
||||||
|
|
||||||
"wildthrow": "Wilder Wurf",
|
"weightless": "Schwerelosigkeit",
|
||||||
"wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
|
"weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
|
||||||
"wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
|
|
||||||
"wildthrow_select_info": "Wähle einen Spieler aus:",
|
"wildthrow": "Wilder Wurf",
|
||||||
|
"wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
|
||||||
"zeus": "Zeus",
|
"wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
|
||||||
"zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
|
"wildthrow_select_info": "Wähle einen Spieler aus:",
|
||||||
|
|
||||||
"your_skill": "Deine aktuelle Fertigkeit",
|
"zeus": "Zeus",
|
||||||
"enemy_skill": "Fähigkeit des Gegners",
|
"zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
|
||||||
"observer_skill": "Fähigkeit des Spielers",
|
|
||||||
"welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
|
"your_skill": "Deine aktuelle Fertigkeit",
|
||||||
"drawing_skill": "Eine Fertigkeit zeichnen",
|
"enemy_skill": "Fähigkeit des Gegners",
|
||||||
"disabled_weapon": "Du kannst diese Waffe nicht verwenden",
|
"observer_skill": "Fähigkeit des Spielers",
|
||||||
|
"welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
|
||||||
"hud_info": "Warte weitere {0} Sekunden",
|
"drawing_skill": "Eine Fertigkeit zeichnen",
|
||||||
"hud_info_no_enemy": "Kein Feind gefunden",
|
"disabled_weapon": "Du kannst diese Waffe nicht verwenden",
|
||||||
"active_hud_info": "Noch {0} Millisekunden aktiv",
|
|
||||||
|
"hud_info": "Warte weitere {0} Sekunden",
|
||||||
"skills_menu": "Fähigkeitenliste",
|
"hud_info_no_enemy": "Kein Feind gefunden",
|
||||||
"no_player": "Kein passender Spieler gefunden.",
|
"active_hud_info": "Noch {0} Millisekunden aktiv",
|
||||||
"duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
|
|
||||||
"selectplayerskill_command": "Gib /t ein",
|
"skills_menu": "Fähigkeitenliste",
|
||||||
"selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
|
"no_player": "Kein passender Spieler gefunden.",
|
||||||
|
"duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
|
||||||
"skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
|
"selectplayerskill_command": "Gib /t ein",
|
||||||
"player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
|
"selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
|
||||||
"correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill <Fähigkeit>",
|
|
||||||
"correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
|
"skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
|
||||||
"done_setskill": "Fähigkeit festgelegt",
|
"player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
|
||||||
"error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
|
"correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill <Fähigkeit>",
|
||||||
"for_setskill": "für",
|
"correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
|
||||||
|
"done_setskill": "Fähigkeit festgelegt",
|
||||||
"invalid_map": "Kartenname falsch eingegeben!",
|
"error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
|
||||||
"loading_map": "Neue Karte wird geladen",
|
"for_setskill": "für",
|
||||||
|
|
||||||
"pause": "Spiel wurde unterbrochen",
|
"invalid_map": "Kartenname falsch eingegeben!",
|
||||||
"unpause": "Spiel wurde fortgesetzt",
|
"loading_map": "Neue Karte wird geladen",
|
||||||
"healed": "Du wurdest geheilt.",
|
|
||||||
"game_start": "Spiel gestartet!",
|
"pause": "Spiel wurde unterbrochen",
|
||||||
"reload": "Sprachen und Konfigurationen wurden neu geladen.",
|
"unpause": "Spiel wurde fortgesetzt",
|
||||||
"hud_on": "HUD wurde aktiviert.",
|
"healed": "Du wurdest geheilt.",
|
||||||
"hud_off": "HUD wurde deaktiviert.",
|
"game_start": "Spiel gestartet!",
|
||||||
|
"reload": "Sprachen und Konfigurationen wurden neu geladen.",
|
||||||
"vote_started": "Abstimmung gestartet: ‚{0}‘",
|
"hud_on": "HUD wurde aktiviert.",
|
||||||
"vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
|
"hud_off": "HUD wurde deaktiviert.",
|
||||||
"vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
|
|
||||||
"vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
|
"vote_started": "Abstimmung gestartet: ‚{0}‘",
|
||||||
"vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
|
"vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
|
||||||
"vote_alredy_voted": "Du hast bereits abgestimmt!",
|
"vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
|
||||||
"vote_vote": "Abstimmen",
|
"vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
|
||||||
|
"vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
|
||||||
"bombsite_a": "Bombenplatz A",
|
"vote_alredy_voted": "Du hast bereits abgestimmt!",
|
||||||
"bombsite_b": "Bombenplatz B",
|
"vote_vote": "Abstimmen",
|
||||||
"bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
|
|
||||||
|
"bombsite_a": "Bombenplatz A",
|
||||||
"teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
|
"bombsite_b": "Bombenplatz B",
|
||||||
"summary": "Zusammenfassung der letzten runde",
|
"bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S – Scrollen",
|
"teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
|
||||||
"menu_controlls_padding": " | ",
|
"summary": "Zusammenfassung der letzten runde",
|
||||||
"menu_controlls_select": "E – Auswählen"
|
|
||||||
|
"menu_controlls_scroll": "W/S – Scrollen",
|
||||||
|
"menu_controlls_padding": " | ",
|
||||||
|
"menu_controlls_select": "E – Auswählen"
|
||||||
}
|
}
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"bankrupt_player_info": "Player '{0}' has gone bankrupt.",
|
"bankrupt_player_info": "Player '{0}' has gone bankrupt.",
|
||||||
"bankrupt_select_info": "Pick a player to go bankrupt:",
|
"bankrupt_select_info": "Pick a player to go bankrupt:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Death Bomb",
|
||||||
"muhammed_desc": "You explode upon death, killing nearby players",
|
"deathbomb_desc": "You explode upon death, killing nearby players",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
|
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
|
||||||
|
|
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
|
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
|
||||||
"bankrupt_select_info": "Mettre un joueur en faillite :",
|
"bankrupt_select_info": "Mettre un joueur en faillite :",
|
||||||
|
|
||||||
"muhammed": "Bombe",
|
"deathbomb": "Bombe",
|
||||||
"muhammed_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
"deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
|
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
|
||||||
|
|
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
|
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
|
||||||
"moneyswap_select_info": "Zamień się kasą z graczem:",
|
"moneyswap_select_info": "Zamień się kasą z graczem:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Ludzka bomba",
|
||||||
"muhammed_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
"deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
|
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
|
||||||
|
|
|
||||||
|
|
@ -52,10 +52,10 @@
|
||||||
|
|
||||||
"blademaster": "Mestre das Lâminas",
|
"blademaster": "Mestre das Lâminas",
|
||||||
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
|
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
|
||||||
|
|
||||||
"bunnyhop": "Coelho",
|
"bunnyhop": "Coelho",
|
||||||
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
||||||
|
|
||||||
"c4camouflage": "Camuflagem C4",
|
"c4camouflage": "Camuflagem C4",
|
||||||
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
|
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
|
||||||
|
|
||||||
|
|
@ -68,122 +68,122 @@
|
||||||
"catapult": "Catapulta",
|
"catapult": "Catapulta",
|
||||||
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
|
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
|
||||||
"catapult_desc2": "Sua chance de lançar um inimigo ao acertá-lo é: {0}%",
|
"catapult_desc2": "Sua chance de lançar um inimigo ao acertá-lo é: {0}%",
|
||||||
|
|
||||||
"chicken": "Galinha",
|
"chicken": "Galinha",
|
||||||
"chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
|
"chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
|
||||||
|
|
||||||
"chillout": "Esqueci a Senha",
|
"chillout": "Esqueci a Senha",
|
||||||
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
|
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
|
||||||
|
|
||||||
"cutter": "Corte Rápido",
|
"cutter": "Corte Rápido",
|
||||||
"cutter_desc": "Você mata instantaneamente com a faca",
|
"cutter_desc": "Você mata instantaneamente com a faca",
|
||||||
|
|
||||||
"cypher": "CFTV",
|
"cypher": "CFTV",
|
||||||
"cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
|
"cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
|
||||||
"cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
|
"cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
|
||||||
|
|
||||||
"darkness": "Escuridão",
|
"darkness": "Escuridão",
|
||||||
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
||||||
"darkness_enemy_info": "Que as luzes se apaguem.",
|
"darkness_enemy_info": "Que as luzes se apaguem.",
|
||||||
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
|
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
|
||||||
"darkness_select_info": "Escolha jogador: escuridão:",
|
"darkness_select_info": "Escolha jogador: escuridão:",
|
||||||
|
|
||||||
"deactivator": "Desativador",
|
"deactivator": "Desativador",
|
||||||
"deactivator_desc": "Escolha um jogador para desativar a habilidade",
|
"deactivator_desc": "Escolha um jogador para desativar a habilidade",
|
||||||
"deactivator_enemy_info": "Sua habilidade foi desativada.",
|
"deactivator_enemy_info": "Sua habilidade foi desativada.",
|
||||||
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
|
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
|
||||||
"deactivator_select_info": "Desativar skill do jogador:",
|
"deactivator_select_info": "Desativar skill do jogador:",
|
||||||
|
|
||||||
"deaf": "Surdo",
|
"deaf": "Surdo",
|
||||||
"deaf_desc": "Escolha um jogador para desativar todos os sons",
|
"deaf_desc": "Escolha um jogador para desativar todos os sons",
|
||||||
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
|
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
|
||||||
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
||||||
"deaf_select_info": "Silenciar jogador:",
|
"deaf_select_info": "Silenciar jogador:",
|
||||||
|
|
||||||
"disarmament": "Desarmamento",
|
"disarmament": "Desarmamento",
|
||||||
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
|
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
|
||||||
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
|
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
|
||||||
|
|
||||||
"distancer": "Medidor de Distância",
|
"distancer": "Medidor de Distância",
|
||||||
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
|
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
|
||||||
|
|
||||||
"dash": "Impulso",
|
"dash": "Impulso",
|
||||||
"dash_desc": "Pule novamente para receber um impulso",
|
"dash_desc": "Pule novamente para receber um impulso",
|
||||||
|
|
||||||
"dracula": "Drácula",
|
"dracula": "Drácula",
|
||||||
"dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
|
"dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
|
||||||
|
|
||||||
"duplicator": "ctrl+c ctrl+v",
|
"duplicator": "ctrl+c ctrl+v",
|
||||||
"duplicator_desc": "Escolha um jogador para copiar a habilidade",
|
"duplicator_desc": "Escolha um jogador para copiar a habilidade",
|
||||||
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
|
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
|
||||||
"duplicator_select_info": "Copiar skill do jogador:",
|
"duplicator_select_info": "Copiar skill do jogador:",
|
||||||
|
|
||||||
"dwarf": "Anão",
|
"dwarf": "Anão",
|
||||||
"dwarf_desc": "Sua altura agora é aleatória",
|
"dwarf_desc": "Sua altura agora é aleatória",
|
||||||
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
|
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
|
||||||
|
|
||||||
"enemyspawn": "Spawn Inimigo",
|
"enemyspawn": "Spawn Inimigo",
|
||||||
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
|
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
|
||||||
|
|
||||||
"explosiveshot": "Tiro Explosivo",
|
"explosiveshot": "Tiro Explosivo",
|
||||||
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
|
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
|
||||||
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
|
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
|
||||||
|
|
||||||
"falconeye": "Olho de Águia",
|
"falconeye": "Olho de Águia",
|
||||||
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
|
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
|
||||||
|
|
||||||
"fastreload": "Recarga Rápida",
|
"fastreload": "Recarga Rápida",
|
||||||
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
|
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
|
||||||
|
|
||||||
"flash": "Ligeirinho",
|
"flash": "Ligeirinho",
|
||||||
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
|
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
|
||||||
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
|
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
|
||||||
|
|
||||||
"fortnite": "Fortnite",
|
"fortnite": "Fortnite",
|
||||||
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
|
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
|
||||||
|
|
||||||
"fragilebomb": "Bomba Frágil",
|
"fragilebomb": "Bomba Frágil",
|
||||||
"fragilebomb_desc": "Atirar na bomba a danifica",
|
"fragilebomb_desc": "Atirar na bomba a danifica",
|
||||||
"fragilebomb_bomb_health": "Vida da bomba",
|
"fragilebomb_bomb_health": "Vida da bomba",
|
||||||
|
|
||||||
"friendlyfire": "Fogo Amigo",
|
"friendlyfire": "Fogo Amigo",
|
||||||
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
|
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
|
||||||
|
|
||||||
"frozendecoy": "Decoy Congelante",
|
"frozendecoy": "Decoy Congelante",
|
||||||
"frozendecoy_desc": "Sua decoy congela os players próximos",
|
"frozendecoy_desc": "Sua decoy congela os players próximos",
|
||||||
|
|
||||||
"gambler": "Tigrinho",
|
"gambler": "Tigrinho",
|
||||||
"gambler_desc": "Selecione uma habilidade da lista.",
|
"gambler_desc": "Selecione uma habilidade da lista.",
|
||||||
"gambler_select_info": "Escolha sua habilidade:",
|
"gambler_select_info": "Escolha sua habilidade:",
|
||||||
"gambler_more": "#00FF00|Atualizar por ${0}",
|
"gambler_more": "#00FF00|Atualizar por ${0}",
|
||||||
"gambler_no_money": "Yetersiz bakiye.",
|
"gambler_no_money": "Yetersiz bakiye.",
|
||||||
|
|
||||||
"ghost": "Fantasma",
|
"ghost": "Fantasma",
|
||||||
"ghost_desc": "Você é completamente invisível",
|
"ghost_desc": "Você é completamente invisível",
|
||||||
|
|
||||||
"glaz": "Smoke Transparente",
|
"glaz": "Smoke Transparente",
|
||||||
"glaz_desc": "Smokes tornam-se transparentes para você",
|
"glaz_desc": "Smokes tornam-se transparentes para você",
|
||||||
|
|
||||||
"glitch": "Sem Mapa",
|
"glitch": "Sem Mapa",
|
||||||
"glitch_desc": "Desativa o radar de um inimigo escolhido",
|
"glitch_desc": "Desativa o radar de um inimigo escolhido",
|
||||||
"glitch_enemy_info": "Seu radar foi desativado.",
|
"glitch_enemy_info": "Seu radar foi desativado.",
|
||||||
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
|
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
|
||||||
"glitch_select_info": "Desativar radar do jogador:",
|
"glitch_select_info": "Desativar radar do jogador:",
|
||||||
|
|
||||||
"glue": "Semtex",
|
"glue": "Semtex",
|
||||||
"glue_desc": "Suas granadas grudam nas paredes",
|
"glue_desc": "Suas granadas grudam nas paredes",
|
||||||
|
|
||||||
"godmode": "Modo Deus",
|
"godmode": "Modo Deus",
|
||||||
"godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos",
|
"godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos",
|
||||||
"godmode_off": "Imortalidade desativada",
|
"godmode_off": "Imortalidade desativada",
|
||||||
"godmode_on": "Imortalidade ativada",
|
"godmode_on": "Imortalidade ativada",
|
||||||
|
|
||||||
"grenadier": "Bomberman",
|
"grenadier": "Bomberman",
|
||||||
"grenadier_desc": "Você tem HEs infinitas",
|
"grenadier_desc": "Você tem HEs infinitas",
|
||||||
|
|
||||||
"healingsmoke": "Smoke Amiga",
|
"healingsmoke": "Smoke Amiga",
|
||||||
"healingsmoke_desc": "Suas smokes curam",
|
"healingsmoke_desc": "Suas smokes curam",
|
||||||
|
|
||||||
"hermit": "Sanguessuga",
|
"hermit": "Sanguessuga",
|
||||||
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
|
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
|
||||||
|
|
||||||
|
|
@ -199,7 +199,7 @@
|
||||||
|
|
||||||
"iana": "Holograma",
|
"iana": "Holograma",
|
||||||
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
|
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
|
||||||
|
|
||||||
"illiterate": "Analfabeto",
|
"illiterate": "Analfabeto",
|
||||||
"illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler",
|
"illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler",
|
||||||
|
|
||||||
|
|
@ -208,10 +208,10 @@
|
||||||
|
|
||||||
"impostor": "Impostor",
|
"impostor": "Impostor",
|
||||||
"impostor_desc": "Você começa a rodada vestido do time inimigo",
|
"impostor_desc": "Você começa a rodada vestido do time inimigo",
|
||||||
|
|
||||||
"infiniteammo": "Munição Infinita",
|
"infiniteammo": "Munição Infinita",
|
||||||
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
|
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
|
||||||
|
|
||||||
"jackal": "Lesma",
|
"jackal": "Lesma",
|
||||||
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
|
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
|
||||||
|
|
||||||
|
|
@ -220,37 +220,37 @@
|
||||||
"jammer_enemy_info": "Sua mira foi desativada.",
|
"jammer_enemy_info": "Sua mira foi desativada.",
|
||||||
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
|
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
|
||||||
"jammer_select_info": "Desativar mira do jogador:",
|
"jammer_select_info": "Desativar mira do jogador:",
|
||||||
|
|
||||||
"jester": "Palhaço",
|
"jester": "Palhaço",
|
||||||
"jester_desc": "No modo bobo você não pode causar nem receber dano. Esse modo muda a cada poucos segundos.",
|
"jester_desc": "No modo bobo você não pode causar nem receber dano. Esse modo muda a cada poucos segundos.",
|
||||||
"jester_mode": "Modo Palhaço",
|
"jester_mode": "Modo Palhaço",
|
||||||
"jester_on": "LIG.",
|
"jester_on": "LIG.",
|
||||||
"jester_off": "DESL.",
|
"jester_off": "DESL.",
|
||||||
|
|
||||||
"jumpban": "Perneta",
|
"jumpban": "Perneta",
|
||||||
"jumpban_desc": "Escolha um jogador que não poderá pular",
|
"jumpban_desc": "Escolha um jogador que não poderá pular",
|
||||||
"jumpban_enemy_info": "Cortaram as suas pernas.",
|
"jumpban_enemy_info": "Cortaram as suas pernas.",
|
||||||
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
|
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
|
||||||
"jumpban_select_info": "Banir pulo do jogador:",
|
"jumpban_select_info": "Banir pulo do jogador:",
|
||||||
|
|
||||||
"jumpingjack": "Pula-Pula",
|
"jumpingjack": "Pula-Pula",
|
||||||
"jumpingjack_desc": "Pular restaura vida",
|
"jumpingjack_desc": "Pular restaura vida",
|
||||||
|
|
||||||
"killerflash": "Flash Mortal",
|
"killerflash": "Flash Mortal",
|
||||||
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
|
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
|
||||||
|
|
||||||
"lifeswap": "Troca de Vida",
|
"lifeswap": "Troca de Vida",
|
||||||
"lifeswap_desc": "Escolha um jogador para trocar de vida",
|
"lifeswap_desc": "Escolha um jogador para trocar de vida",
|
||||||
"lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
|
"lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
|
||||||
"lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
|
"lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
|
||||||
"lifeswap_select_info": "Trocar de vida com jogador:",
|
"lifeswap_select_info": "Trocar de vida com jogador:",
|
||||||
|
|
||||||
"longknife": "Espada",
|
"longknife": "Espada",
|
||||||
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
|
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
|
||||||
|
|
||||||
"longzeus": "Zeus Longo",
|
"longzeus": "Zeus Longo",
|
||||||
"longzeus_desc": "Zeus causa dano independentemente da distância",
|
"longzeus_desc": "Zeus causa dano independentemente da distância",
|
||||||
|
|
||||||
"magneticdecoy": "Decoy Magnético",
|
"magneticdecoy": "Decoy Magnético",
|
||||||
"magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo",
|
"magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo",
|
||||||
|
|
||||||
|
|
@ -262,10 +262,10 @@
|
||||||
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
|
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
|
||||||
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
|
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
|
||||||
"magnifier_select_info": "Ampliar tela do jogador:",
|
"magnifier_select_info": "Ampliar tela do jogador:",
|
||||||
|
|
||||||
"medic": "Médico",
|
"medic": "Médico",
|
||||||
"medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
|
"medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
|
||||||
|
|
||||||
"miner": "Mineiro de Bombas",
|
"miner": "Mineiro de Bombas",
|
||||||
"miner_desc": "Sua granada HE só explode quando há um inimigo por perto",
|
"miner_desc": "Sua granada HE só explode quando há um inimigo por perto",
|
||||||
|
|
||||||
|
|
@ -274,131 +274,131 @@
|
||||||
"moneyswap_enemy_info": "Você provavelmente virou classe B",
|
"moneyswap_enemy_info": "Você provavelmente virou classe B",
|
||||||
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
||||||
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"deathbomb": "Bomba mortal",
|
||||||
"muhammed_desc": "Você explode ao morrer, matando os jogadores próximos",
|
"deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
|
||||||
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
"deathbomb_explosion": "Kaboom!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
|
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
|
||||||
|
|
||||||
"nonades": "Imune a Granadas",
|
"nonades": "Imune a Granadas",
|
||||||
"nonades_desc": "Granadas não causam dano a você",
|
"nonades_desc": "Granadas não causam dano a você",
|
||||||
|
|
||||||
"norecoil": "Sem Recoil",
|
"norecoil": "Sem Recoil",
|
||||||
"norecoil_desc": "Sem recoil ao atirar",
|
"norecoil_desc": "Sem recoil ao atirar",
|
||||||
|
|
||||||
"noclip": "NoClip",
|
"noclip": "NoClip",
|
||||||
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
|
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
|
||||||
|
|
||||||
"oneshot": "Ignorante",
|
"oneshot": "Ignorante",
|
||||||
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
|
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
|
||||||
|
|
||||||
"onlyhead": "Só na Cabeçinha",
|
"onlyhead": "Só na Cabeçinha",
|
||||||
"onlyhead_desc": "Você só recebe headshot",
|
"onlyhead_desc": "Você só recebe headshot",
|
||||||
|
|
||||||
"paweljumper": "Parkourista",
|
"paweljumper": "Parkourista",
|
||||||
"paweljumper_desc": "Você recebe um número aleatório de pulos extras",
|
"paweljumper_desc": "Você recebe um número aleatório de pulos extras",
|
||||||
"paweljumper_desc2": "Você ganha {0} pulos extras",
|
"paweljumper_desc2": "Você ganha {0} pulos extras",
|
||||||
|
|
||||||
"phoenix": "Fênix",
|
"phoenix": "Fênix",
|
||||||
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
|
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
|
||||||
"phoenix_desc2": "Sua chance de renascer após a morte: {0}%",
|
"phoenix_desc2": "Sua chance de renascer após a morte: {0}%",
|
||||||
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
|
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
|
||||||
|
|
||||||
"psychicdefusing": "Desarme Psíquico",
|
"psychicdefusing": "Desarme Psíquico",
|
||||||
"psychicdefusing_desc": "Quando você está proximo da bomba, começa a desarmá-la automaticamente",
|
"psychicdefusing_desc": "Quando você está proximo da bomba, começa a desarmá-la automaticamente",
|
||||||
"psychicdefusing_hud_info": "{0} segundos restantes para desarmar",
|
"psychicdefusing_hud_info": "{0} segundos restantes para desarmar",
|
||||||
|
|
||||||
"pilot": "Jetpack",
|
"pilot": "Jetpack",
|
||||||
"pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar",
|
"pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar",
|
||||||
"pilot_hud_info": "Combustível",
|
"pilot_hud_info": "Combustível",
|
||||||
|
|
||||||
"planter": "Meu Bombsite Minha Vida",
|
"planter": "Meu Bombsite Minha Vida",
|
||||||
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
|
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
|
||||||
"planter_planting": "Plantando ({0})...",
|
"planter_planting": "Plantando ({0})...",
|
||||||
|
|
||||||
"poison": "Veneno",
|
"poison": "Veneno",
|
||||||
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
|
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
|
||||||
"poison_enemy_info": "Você foi envenenado.",
|
"poison_enemy_info": "Você foi envenenado.",
|
||||||
"poison_player_info": "O jogador '{0}' foi envenenado.",
|
"poison_player_info": "O jogador '{0}' foi envenenado.",
|
||||||
"poison_select_info": "Envenenar jogador:",
|
"poison_select_info": "Envenenar jogador:",
|
||||||
|
|
||||||
"primaryban": "Sem Rifle",
|
"primaryban": "Sem Rifle",
|
||||||
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
|
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
|
||||||
"primaryban_enemy_info": "Você não pode mais usar rifles.",
|
"primaryban_enemy_info": "Você não pode mais usar rifles.",
|
||||||
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
|
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
|
||||||
"primaryban_select_info": "Banir rifles do jogador:",
|
"primaryban_select_info": "Banir rifles do jogador:",
|
||||||
|
|
||||||
"prosthesis": "Prótese",
|
"prosthesis": "Prótese",
|
||||||
"prosthesis_desc": "Braços e pernas são à prova de balas",
|
"prosthesis_desc": "Braços e pernas são à prova de balas",
|
||||||
|
|
||||||
"push": "Empurrão",
|
"push": "Empurrão",
|
||||||
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
|
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
|
||||||
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
|
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
|
||||||
|
|
||||||
"pyro": "Pirotecnia",
|
"pyro": "Pirotecnia",
|
||||||
"pyro_desc": "Molotov recupera vida",
|
"pyro_desc": "Molotov recupera vida",
|
||||||
|
|
||||||
"quickshot": "Tiro Rápido",
|
"quickshot": "Tiro Rápido",
|
||||||
"quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
|
"quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
|
||||||
|
|
||||||
"radarhack": "Hack de Mapa",
|
"radarhack": "Hack de Mapa",
|
||||||
"radarhack_desc": "Inimigos são visíveis no mapa",
|
"radarhack_desc": "Inimigos são visíveis no mapa",
|
||||||
|
|
||||||
"rambo": "Rambo",
|
"rambo": "Rambo",
|
||||||
"rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada",
|
"rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada",
|
||||||
|
|
||||||
"randomweapon": "Arma Aleatória",
|
"randomweapon": "Arma Aleatória",
|
||||||
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
|
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
|
||||||
|
|
||||||
"rezombie": "Walking Dead",
|
"rezombie": "Walking Dead",
|
||||||
"rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
|
"rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
|
||||||
|
|
||||||
"reactivearmor": "Armadura Reativa",
|
"reactivearmor": "Armadura Reativa",
|
||||||
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
|
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
|
||||||
|
|
||||||
"regeneration": "Regeneração",
|
"regeneration": "Regeneração",
|
||||||
"regeneration_desc": "Você restaura vida a cada poucos segundos",
|
"regeneration_desc": "Você restaura vida a cada poucos segundos",
|
||||||
|
|
||||||
"replicator": "Clone",
|
"replicator": "Clone",
|
||||||
"replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
|
"replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
|
||||||
|
|
||||||
"retreat": "De Volta as Origens",
|
"retreat": "De Volta as Origens",
|
||||||
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
|
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
|
||||||
|
|
||||||
"returntosender": "Devolução ao Remetente",
|
"returntosender": "Devolução ao Remetente",
|
||||||
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
|
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
|
||||||
|
|
||||||
"richboy": "Filhinho de Papai",
|
"richboy": "Filhinho de Papai",
|
||||||
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
|
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
|
||||||
|
|
||||||
"robinhood": "Robin Hood",
|
"robinhood": "Robin Hood",
|
||||||
"robinhood_desc": "Atirar em um inimigo rouba seu dinheiro",
|
"robinhood_desc": "Atirar em um inimigo rouba seu dinheiro",
|
||||||
|
|
||||||
"rubber": "Balas de Borracha",
|
"rubber": "Balas de Borracha",
|
||||||
"rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
|
"rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
|
||||||
|
|
||||||
"saper": "Especialista",
|
"saper": "Especialista",
|
||||||
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
|
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
|
||||||
|
|
||||||
"secondlife": "Segunda Chance",
|
"secondlife": "Segunda Chance",
|
||||||
"secondlife_desc": "Após morrer, você renasce com a mesma quantidade de vida",
|
"secondlife_desc": "Após morrer, você renasce com a mesma quantidade de vida",
|
||||||
|
|
||||||
"shade": "Sombra",
|
"shade": "Sombra",
|
||||||
"shade_desc": "Você tem uma chance aleatória de teletransportar para trás de um inimigo ao atingi-lo",
|
"shade_desc": "Você tem uma chance aleatória de teletransportar para trás de um inimigo ao atingi-lo",
|
||||||
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
|
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
|
||||||
"shade_nospace": "Sem espaço disponível",
|
"shade_nospace": "Sem espaço disponível",
|
||||||
|
|
||||||
"shortbomb": "Pavio Longo",
|
"shortbomb": "Pavio Longo",
|
||||||
"shortbomb_desc": "A bomba demora muito mais para explodir",
|
"shortbomb_desc": "A bomba demora muito mais para explodir",
|
||||||
|
|
||||||
"silent": "Shhhiu!",
|
"silent": "Shhhiu!",
|
||||||
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
|
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
|
||||||
|
|
||||||
"smoker": "Tiryaki",
|
"smoker": "Tiryaki",
|
||||||
"smoker_desc": "Sis bombalarınız asla bitmez",
|
"smoker_desc": "Sis bombalarınız asla bitmez",
|
||||||
|
|
||||||
"sniperelite": "Sniper do BOPE",
|
"sniperelite": "Sniper do BOPE",
|
||||||
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
|
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
|
||||||
"sniperelite_customname": "Keskin Nişancı Elit Yeteneği",
|
"sniperelite_customname": "Keskin Nişancı Elit Yeteneği",
|
||||||
|
|
@ -406,51 +406,51 @@
|
||||||
"soldier": "Soldado",
|
"soldier": "Soldado",
|
||||||
"soldier_desc": "Seus tiros causam mais dano",
|
"soldier_desc": "Seus tiros causam mais dano",
|
||||||
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
|
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
|
||||||
|
|
||||||
"soundmaker": "Criador de Som",
|
"soundmaker": "Criador de Som",
|
||||||
"soundmaker_desc": "Clique em [css_useSkill] para tocar um som para cada inimigo",
|
"soundmaker_desc": "Clique em [css_useSkill] para tocar um som para cada inimigo",
|
||||||
|
|
||||||
"spectator": "Espectador",
|
"spectator": "Espectador",
|
||||||
"spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório",
|
"spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório",
|
||||||
|
|
||||||
"swapposition": "Troca de Posição",
|
"swapposition": "Troca de Posição",
|
||||||
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
|
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
|
||||||
|
|
||||||
"teleporter": "Teletransportador",
|
"teleporter": "Teletransportador",
|
||||||
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
|
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
|
||||||
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
|
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
|
||||||
|
|
||||||
"thief": "Lula",
|
"thief": "Lula",
|
||||||
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
|
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
|
||||||
"thief_enemy_info": "Sua habilidade foi roubada.",
|
"thief_enemy_info": "Sua habilidade foi roubada.",
|
||||||
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
|
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
|
||||||
"thief_select_info": "Roubar skill do jogador:",
|
"thief_select_info": "Roubar skill do jogador:",
|
||||||
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
|
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
|
||||||
|
|
||||||
"thirdeye": "Terceiro Olho",
|
"thirdeye": "Terceiro Olho",
|
||||||
"thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
|
"thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
|
||||||
|
|
||||||
"thorns": "Porco Espinho",
|
"thorns": "Porco Espinho",
|
||||||
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
|
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
|
||||||
|
|
||||||
"throwingknife": "Faca de Arremesso",
|
"throwingknife": "Faca de Arremesso",
|
||||||
"throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros",
|
"throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros",
|
||||||
|
|
||||||
"toxicsmoke": "Smoke Tóxica",
|
"toxicsmoke": "Smoke Tóxica",
|
||||||
"toxicsmoke_desc": "Suas smokes causam dano",
|
"toxicsmoke_desc": "Suas smokes causam dano",
|
||||||
|
|
||||||
"wallhack": "Wallhack",
|
"wallhack": "Wallhack",
|
||||||
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
||||||
|
|
||||||
"watchmaker": "Relojoeiro",
|
"watchmaker": "Relojoeiro",
|
||||||
"watchmaker_desc": "Cada arremesso de granada altera o tempo da rodada",
|
"watchmaker_desc": "Cada arremesso de granada altera o tempo da rodada",
|
||||||
"watchmaker_ct": "Tempo da rodada reduzido em {0} segundos.",
|
"watchmaker_ct": "Tempo da rodada reduzido em {0} segundos.",
|
||||||
"watchmaker_tt": "Tempo da rodada estendido em {0} segundos.",
|
"watchmaker_tt": "Tempo da rodada estendido em {0} segundos.",
|
||||||
|
|
||||||
"weaponsswap": "Troca de Armas",
|
"weaponsswap": "Troca de Armas",
|
||||||
"weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório",
|
"weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório",
|
||||||
"weaponsswap_hud_info2": "Você não tem arma para trocar",
|
"weaponsswap_hud_info2": "Você não tem arma para trocar",
|
||||||
|
|
||||||
"weightless": "Gravidade Zero",
|
"weightless": "Gravidade Zero",
|
||||||
"weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido",
|
"weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido",
|
||||||
|
|
||||||
|
|
@ -461,24 +461,24 @@
|
||||||
|
|
||||||
"zeus": "Zeus",
|
"zeus": "Zeus",
|
||||||
"zeus_desc": "Zeus x27 recarrega instantaneamente",
|
"zeus_desc": "Zeus x27 recarrega instantaneamente",
|
||||||
|
|
||||||
"your_skill": "Sua habilidade atual",
|
"your_skill": "Sua habilidade atual",
|
||||||
"enemy_skill": "Habilidade do inimigo",
|
"enemy_skill": "Habilidade do inimigo",
|
||||||
"observer_skill": "Habilidade do jogador",
|
"observer_skill": "Habilidade do jogador",
|
||||||
"welcome_message": "Bem-vindo {PLAYER} ao {SERVER_NAME}!\nVersão atual do jRandomSkills: {VERSION} ({SKILLS_COUNT} habilidades).\n\nCriado originalmente por:\n{AUTHOR1}\nModificado e aprimorado por:\n{AUTHOR2}\nDiscord oficial: https://discord.gg/9H8EZYBpPF",
|
"welcome_message": "Bem-vindo {PLAYER} ao {SERVER_NAME}!\nVersão atual do jRandomSkills: {VERSION} ({SKILLS_COUNT} habilidades).\n\nCriado originalmente por:\n{AUTHOR1}\nModificado e aprimorado por:\n{AUTHOR2}\nDiscord oficial: https://discord.gg/9H8EZYBpPF",
|
||||||
"drawing_skill": "Sorteando uma habilidade",
|
"drawing_skill": "Sorteando uma habilidade",
|
||||||
"disabled_weapon": "Você não pode usar esta arma",
|
"disabled_weapon": "Você não pode usar esta arma",
|
||||||
|
|
||||||
"hud_info": "Espere mais {0} segundos",
|
"hud_info": "Espere mais {0} segundos",
|
||||||
"hud_info_no_enemy": "Nenhum inimigo encontrado",
|
"hud_info_no_enemy": "Nenhum inimigo encontrado",
|
||||||
"active_hud_info": "Ativo por mais {0} milissegundos",
|
"active_hud_info": "Ativo por mais {0} milissegundos",
|
||||||
|
|
||||||
"skills_menu": "Lista de Habilidades",
|
"skills_menu": "Lista de Habilidades",
|
||||||
"no_player": "Nenhum jogador correspondente encontrado.",
|
"no_player": "Nenhum jogador correspondente encontrado.",
|
||||||
"duplicate_player": "Mais de um jogador encontrado com o mesmo nome.",
|
"duplicate_player": "Mais de um jogador encontrado com o mesmo nome.",
|
||||||
"selectplayerskill_command": "Digite /t",
|
"selectplayerskill_command": "Digite /t",
|
||||||
"selectplayerskill_incorrect_enemy_index": "Não foram encontrados jogadores para selecionar.",
|
"selectplayerskill_incorrect_enemy_index": "Não foram encontrados jogadores para selecionar.",
|
||||||
|
|
||||||
"skill_not_found_setskill": "Nenhuma habilidade CHATCOLORS.RED encontrada",
|
"skill_not_found_setskill": "Nenhuma habilidade CHATCOLORS.RED encontrada",
|
||||||
"player_not_found_setskill": "Nenhum jogador CHATCOLORS.RED encontrado",
|
"player_not_found_setskill": "Nenhum jogador CHATCOLORS.RED encontrado",
|
||||||
"correct_form_setskill": "Uso correto: CHATCOLORS.RED!setskill <apelido> <habilidade>",
|
"correct_form_setskill": "Uso correto: CHATCOLORS.RED!setskill <apelido> <habilidade>",
|
||||||
|
|
@ -486,10 +486,10 @@
|
||||||
"done_setskill": "Habilidade definida",
|
"done_setskill": "Habilidade definida",
|
||||||
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
|
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
|
||||||
"for_setskill": "para",
|
"for_setskill": "para",
|
||||||
|
|
||||||
"invalid_map": "Nome do mapa inválido!",
|
"invalid_map": "Nome do mapa inválido!",
|
||||||
"loading_map": "Carregando um novo mapa",
|
"loading_map": "Carregando um novo mapa",
|
||||||
|
|
||||||
"pause": "Partida pausada.",
|
"pause": "Partida pausada.",
|
||||||
"unpause": "Partida retomada.",
|
"unpause": "Partida retomada.",
|
||||||
"healed": "Você foi curado.",
|
"healed": "Você foi curado.",
|
||||||
|
|
@ -497,7 +497,7 @@
|
||||||
"reload": "Os idiomas e as configurações foram recarregados.",
|
"reload": "Os idiomas e as configurações foram recarregados.",
|
||||||
"hud_on": "O HUD foi ativado.",
|
"hud_on": "O HUD foi ativado.",
|
||||||
"hud_off": "O HUD foi desativado.",
|
"hud_off": "O HUD foi desativado.",
|
||||||
|
|
||||||
"vote_started": "Votação iniciada: '{0}'",
|
"vote_started": "Votação iniciada: '{0}'",
|
||||||
"vote_timeout": "Votação '{0}' expirou!",
|
"vote_timeout": "Votação '{0}' expirou!",
|
||||||
"vote_wait": "Você precisa esperar antes de iniciar outra votação!",
|
"vote_wait": "Você precisa esperar antes de iniciar outra votação!",
|
||||||
|
|
@ -505,14 +505,14 @@
|
||||||
"vote_not_enough_players": "Não há jogadores suficientes para iniciar uma votação!",
|
"vote_not_enough_players": "Não há jogadores suficientes para iniciar uma votação!",
|
||||||
"vote_alredy_voted": "Você já votou!",
|
"vote_alredy_voted": "Você já votou!",
|
||||||
"vote_vote": "Votar",
|
"vote_vote": "Votar",
|
||||||
|
|
||||||
"bombsite_a": "Bombsite A",
|
"bombsite_a": "Bombsite A",
|
||||||
"bombsite_b": "Bombsite B",
|
"bombsite_b": "Bombsite B",
|
||||||
"bombplanted": "A bomba foi plantada\n{0} segundos até a detonação",
|
"bombplanted": "A bomba foi plantada\n{0} segundos até a detonação",
|
||||||
|
|
||||||
"teammate_skills": "Habilidades dos seus companheiros de equipe",
|
"teammate_skills": "Habilidades dos seus companheiros de equipe",
|
||||||
"summary": "Resumo da última rodada",
|
"summary": "Resumo da última rodada",
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Rolar",
|
"menu_controlls_scroll": "W/S - Rolar",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
"menu_controlls_select": "E - Selecionar"
|
"menu_controlls_select": "E - Selecionar"
|
||||||
|
|
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
|
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
|
||||||
"bankrupt_select_info": "Выберите игрока для банкротства:",
|
"bankrupt_select_info": "Выберите игрока для банкротства:",
|
||||||
|
|
||||||
"muhammed": "Мухаммед",
|
"deathbomb": "Смертельная бомба",
|
||||||
"muhammed_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
|
"deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
|
||||||
"muhammed_explosion": "АЛЛАХУ АКБАР!!!",
|
"deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
|
||||||
|
|
||||||
"ninja": "Ниндзя",
|
"ninja": "Ниндзя",
|
||||||
"ninja_desc": "Стоя на месте, ваша невидимость увеличивается на 33%, в приседе на 33%, с ножом на 33%",
|
"ninja_desc": "Стоя на месте, ваша невидимость увеличивается на 33%, в приседе на 33%, с ножом на 33%",
|
||||||
|
|
|
||||||
|
|
@ -3,52 +3,52 @@
|
||||||
"none_desc": "Hiçbir yeteneğin yok",
|
"none_desc": "Hiçbir yeteneğin yok",
|
||||||
|
|
||||||
"aimbot": "Aimbot",
|
"aimbot": "Aimbot",
|
||||||
"aimbot_desc": "Vurduğun her mermi kafadan vuruş (headshot) sayılır",
|
"aimbot_desc": "Vurduğunda kafadan (HS) sayılır",
|
||||||
|
|
||||||
"aimlock": "Nişan Kilidi",
|
"aimlock": "Kitlenme",
|
||||||
"aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın",
|
"aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın",
|
||||||
|
|
||||||
"anomaly": "Anomali",
|
"anomaly": "Zaman Büken",
|
||||||
"anomaly_desc": "Zamanı birkaç saniye geriye alırsın",
|
"anomaly_desc": "Zamanı birkaç saniye geriye alırsın",
|
||||||
|
|
||||||
"antyflash": "Anti-Flash",
|
"antyflash": "Anti-Flash",
|
||||||
"antyflash_desc": "Flaş bombalarından etkilenmezsin ve senin flaşların 7 saniye sürer",
|
"antyflash_desc": "Flaşa kör olmazsın ve flaşların 7 saniye sürer",
|
||||||
|
|
||||||
"antyhead": "Demir Kafa",
|
"antyhead": "Beton Kafa",
|
||||||
"antyhead_desc": "Kafadan vuruşlardan hasar almazsın",
|
"antyhead_desc": "Kafadan hasar almazsın",
|
||||||
|
|
||||||
"areareaper": "Bölge Azraili",
|
"areareaper": "Mekan Kapatan",
|
||||||
"areareaper_desc": "Devre dışı bırakmak için bir bomba alanı seçebilirsin",
|
"areareaper_desc": "Haritadaki bir bomba alanını tamamen devre dışı bırakabilirsin",
|
||||||
"areareaper_incorrect_site": "Böyle bir bomba alanı bulunamadı.",
|
"areareaper_incorrect_site": "Böyle bir bomba alanı yok uydurma",
|
||||||
"areareaper_no_site": "Hiçbir bomba alanı bulunamadı.",
|
"areareaper_no_site": "Haritada bomba alanı bulunamadı",
|
||||||
"areareaper_select_info": "Devre dışı bırakılacak alanı seçin:",
|
"areareaper_select_info": "Kapatılacak bomba alanını seç:",
|
||||||
"areareaper_site_disabled": "Bomba alanı {0} devre dışı bırakıldı - buraya bomba kurulamaz!",
|
"areareaper_site_disabled": "{0} alanı mühürlendi - artık buraya bomba kurulamaz!",
|
||||||
"areareaper_used_info": "Yeteneğin zaten kullanıldı.",
|
"areareaper_used_info": "Yeteneğini zaten kullandın, açgözlülük yapma",
|
||||||
"areareaper_bombsite_disabled": "Bu bomba alanı devre dışı bırakıldı!",
|
"areareaper_bombsite_disabled": "Bu bomba alanı kullanıma kapatıldı!",
|
||||||
|
|
||||||
"armored": "Zırhlı",
|
"armored": "Zırhlı",
|
||||||
"armored_desc": "Rastgele bir hasar alma çarpanına sahip olursun",
|
"armored_desc": "Rastgele hasar alma çarpanına sahip olursun",
|
||||||
"armored_desc2": "Hasar alma çarpanın: {0}x",
|
"armored_desc2": "Hasar alma: {0}x",
|
||||||
|
|
||||||
"assassin": "Suikastçı",
|
"assassin": "Suikastçı",
|
||||||
"assassin_desc": "Düşmanlara arkadan vurduğunda daha fazla hasar verirsin",
|
"assassin_desc": "Düşmanlara arkadan daha fazla hasar verirsin",
|
||||||
|
|
||||||
"astronaut": "Astronot",
|
"astronaut": "Astronot",
|
||||||
"astronaut_desc": "Raund başında rastgele bir yerçekimi değeri alırsın",
|
"astronaut_desc": "Rastgele bir yerçekimi değerine sahip olursun",
|
||||||
"astronaut_desc2": "Rastgele yerçekimin: {0}x",
|
"astronaut_desc2": "Yerçekimin: {0}x",
|
||||||
|
|
||||||
"moneyswap": "Vergi Memuru",
|
"moneyswap": "Vergi Memuru",
|
||||||
"moneyswap_desc": "Para takas etmek için bir oyuncu seç",
|
"moneyswap_desc": "Bir düşmanla paranı takasla",
|
||||||
"moneyswap_enemy_info": "Vergi dairesi seni yakaladı.",
|
"moneyswap_enemy_info": "Maliye kapına dayandı",
|
||||||
"moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin.",
|
"moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin",
|
||||||
"moneyswap_select_info": "Para takası yapılacak oyuncu:",
|
"moneyswap_select_info": "Para takasla biriyle:",
|
||||||
|
|
||||||
"baseball": "Beyzbolcu",
|
"baseball": "Beyzbolcu",
|
||||||
"baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı anında öldürür",
|
"baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı öldürür",
|
||||||
|
|
||||||
"behind": "Düşman Döndürücü",
|
"behind": "Baş Döndüren",
|
||||||
"behind_desc": "Düşmana vurduğunda onu 180 derece döndürme şansın olur",
|
"behind_desc": "Vurduğunda düşmanı 180 derece döndürme şansın olur",
|
||||||
"behind_desc2": "Vuruşta düşmanı döndürme şansın: %{0}",
|
"behind_desc2": "Baş döndürme şansın: %{0}",
|
||||||
|
|
||||||
"blademaster": "Kılıç Ustası",
|
"blademaster": "Kılıç Ustası",
|
||||||
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
|
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
|
||||||
|
|
@ -57,105 +57,105 @@
|
||||||
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
|
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
|
||||||
|
|
||||||
"c4camouflage": "C4 Kamuflajı",
|
"c4camouflage": "C4 Kamuflajı",
|
||||||
"c4camouflage_desc": "Bombayı taşırken görünmez olursun",
|
"c4camouflage_desc": "Elinde C4 varken tamamen görünmez olursun",
|
||||||
|
|
||||||
"carefulbullets": "Dikkatli Mermiler",
|
"carefulbullets": "Dikkatli Mermiler",
|
||||||
"carefulbullets_desc": "Iskaladığın her mermi için hasar alacak bir oyuncu seç",
|
"carefulbullets_desc": "Düşman mermi kaçırırsa hasar alır",
|
||||||
"carefulbullets_enemy_info": "Artık isabetsiz atışlar canını yakacak.",
|
"carefulbullets_enemy_info": "Mermi kaçırmak canını yakacak",
|
||||||
"carefulbullets_player_info": "'{0}' artık daha dikkatli olmalı.",
|
"carefulbullets_player_info": "'{0}' artık mermi sıkarken iki kere düşünecek",
|
||||||
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
|
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
|
||||||
|
|
||||||
"catapult": "Mancınık",
|
"catapult": "Mancınık",
|
||||||
"catapult_desc": "Düşmanı havaya fırlatma şansın olur",
|
"catapult_desc": "Vurduğun rakibi uzaya (yukarı doğru) fırlatma şansın var",
|
||||||
"catapult_desc2": "Vuruşta düşmanı fırlatma şansın: %{0}",
|
"catapult_desc2": "Fırlatma şansın: %{0}",
|
||||||
|
|
||||||
"chicken": "Tavuk",
|
"chicken": "Tavuk",
|
||||||
"chicken_desc": "Tavuk modeli + %10 daha hızlı hareket - 50 HP alırsın",
|
"chicken_desc": "Tavuk modeli ve %10 daha hızlısın fakat 50 HP",
|
||||||
|
|
||||||
"chillout": "Sakin Ol",
|
"chillout": "Ağırdan Al",
|
||||||
"chillout_desc": "Bombayı kurmak çok daha uzun sürer",
|
"chillout_desc": "Bombayı kurmak çok daha uzun sürer",
|
||||||
|
|
||||||
"cutter": "Kesici",
|
"cutter": "Kasap",
|
||||||
"cutter_desc": "Bıçakla tek atışta öldürme",
|
"cutter_desc": "Bıçakla tek atarsın",
|
||||||
|
|
||||||
"cypher": "Cypher",
|
"cypher": "Gözcü",
|
||||||
"cypher_desc": "Kamera oluşturmak/kameraya geçmek için E tuşuna bas",
|
"cypher_desc": "Kamera oluşturmak/geçmek için [css_useSkill] tuşuna bas",
|
||||||
"cypher_nospace": "Kamera duvara dik açıyla yerleştirilmelidir",
|
"cypher_nospace": "Kamerayı duvara dik yerleştir",
|
||||||
|
|
||||||
"darkness": "Karanlık",
|
"darkness": "Karanlık",
|
||||||
"darkness_desc": "Seçilen bir düşmana karanlık efekti uygular",
|
"darkness_desc": "Bir düşmanın ekranını karart",
|
||||||
"darkness_enemy_info": "Işıklar sönsün.",
|
"darkness_enemy_info": "Işıklar sönsün",
|
||||||
"darkness_player_info": "Karanlık, '{0}' isimli oyuncuyu ele geçirdi.",
|
"darkness_player_info": "'{0}' isimli oyuncunun dünyasını kararttın",
|
||||||
"darkness_select_info": "Karanlık uygulanacak oyuncuyu seç:",
|
"darkness_select_info": "Karanlık bir oyuncuyu seç:",
|
||||||
|
|
||||||
"deactivator": "Devre Dışı Bırakıcı",
|
"deactivator": "Silgi",
|
||||||
"deactivator_desc": "Yeteneğini kapatmak istediğin bir oyuncu seç",
|
"deactivator_desc": "Bir düşmanın yeteneğini sil",
|
||||||
"deactivator_enemy_info": "Yeteneğin devre dışı bırakıldı.",
|
"deactivator_enemy_info": "Yeteneğin silindi",
|
||||||
"deactivator_player_info": "'{0}' isimli oyuncunun yeteneği devre dışı bırakıldı.",
|
"deactivator_player_info": "'{0}' isimli oyuncunun yeteneği silindi",
|
||||||
"deactivator_select_info": "Bir oyuncunun yeteneğini devre dışı bırak:",
|
"deactivator_select_info": "Yetenek silmek için oyuncu seç:",
|
||||||
|
|
||||||
"deaf": "Sağır",
|
"deaf": "Sağır",
|
||||||
"deaf_desc": "Tüm seslerini kapatmak için bir oyuncu seç",
|
"deaf_desc": "Bir düşmanın kulağını kapat ve sesleri duymaz hale getir",
|
||||||
"deaf_enemy_info": "Kulaklıkların oyundan ayrıldı.",
|
"deaf_enemy_info": "Kulaklıkların tıkandı",
|
||||||
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
|
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
|
||||||
"deaf_select_info": "Sesleri kapatılacak oyuncuyu seç:",
|
"deaf_select_info": "Sağır bir oyuncuyu seç:",
|
||||||
|
|
||||||
"disarmament": "Silahsızlandırma",
|
"disarmament": "Silahsızlandırma",
|
||||||
"disarmament_desc": "Vurduğun düşmanın silahını düşürme şansın olur",
|
"disarmament_desc": "Vurduğunda rakibin elindeki silahı yere düşürme şansın olur",
|
||||||
"disarmament_desc2": "Düşmanı silahsızlandırma şansın: %{0}",
|
"disarmament_desc2": "Silahsızlandırma şansın: %{0}",
|
||||||
|
|
||||||
"distancer": "Mesafe Ölçer",
|
"distancer": "Kronometre",
|
||||||
"distancer_desc": "En yakın düşmana olan mesafeni görebilirsin",
|
"distancer_desc": "En yakın düşmanın mesafesini görürsün",
|
||||||
|
|
||||||
"dash": "Atılma",
|
"dash": "Atılma",
|
||||||
"dash_desc": "Atılmak (dash) için ikinci kez zıpla",
|
"dash_desc": "Atılmak için ikinci kez zıpla",
|
||||||
|
|
||||||
"dracula": "Dracula",
|
"dracula": "Drakula",
|
||||||
"dracula_desc": "Düşmana vurmak, verdiğin hasarın bir yüzdesi kadar canını yeniler",
|
"dracula_desc": "Rakiplere verdiğin hasarın belirli bir yüzdesi kadar can alırsın",
|
||||||
|
|
||||||
"duplicator": "Kopyalayıcı",
|
"duplicator": "Kopyacı",
|
||||||
"duplicator_desc": "Yeteneğini kopyalamak için bir oyuncu seç",
|
"duplicator_desc": "Yeteneğini kopyalamak için bir oyuncu seç",
|
||||||
"duplicator_player_info": "'{0}' isimli oyuncunun yeteneği kopyalandı.",
|
"duplicator_player_info": "'{0}' isimli oyuncunun yeteneği kopyalandı.",
|
||||||
"duplicator_select_info": "Yeteneği kopyalanacak oyuncu:",
|
"duplicator_select_info": "Yeteneği kopyalanacak oyuncu:",
|
||||||
|
|
||||||
"dwarf": "Cüce",
|
"dwarf": "Cüce",
|
||||||
"dwarf_desc": "Raund başında rastgele karakter boyutu",
|
"dwarf_desc": "Raund başında rastgele karakter boyutu",
|
||||||
"dwarf_desc2": "Boyut çarpanın: {0}x",
|
"dwarf_desc2": "Boyutun: {0}x",
|
||||||
|
|
||||||
"enemyspawn": "Düşman Başlangıcı",
|
"enemyspawn": "Base Baskını",
|
||||||
"enemyspawn_desc": "Düşman başlangıç noktasına ışınlanmak için E tuşuna bas",
|
"enemyspawn_desc": "[css_useSkill] tuşuna basarak düşman doğma noktasına ışınlan",
|
||||||
|
|
||||||
"explosiveshot": "Patlayıcı Atış",
|
"explosiveshot": "Patlayıcı Mermi",
|
||||||
"explosiveshot_desc": "Ateş ederken rastgele patlayıcı mermi atma şansı",
|
"explosiveshot_desc": "Ateş ederken rastgele mermilerin patlayabilir",
|
||||||
"explosiveshot_desc2": "Patlayıcı mermi atma şansın: %{0}",
|
"explosiveshot_desc2": "Patlayan mermi şansı: %{0}",
|
||||||
|
|
||||||
"falconeye": "Şahin Gözü",
|
"falconeye": "Şahin Gözü",
|
||||||
"falconeye_desc": "Kuş bakışı kamerayı aktif etmek için E tuşuna bas",
|
"falconeye_desc": "[css_useSkill] tuşuna basarak kuş bakışına geç",
|
||||||
|
|
||||||
"fastreload": "Hızlı Şarjör",
|
"fastreload": "Şipşak Şarjör",
|
||||||
"fastreload_desc": "Eldeki silahı anında doldurmak için E tuşuna bas",
|
"fastreload_desc": "[css_useSkill] tuşuna basarak şarjörünü hızlıca değiştir",
|
||||||
|
|
||||||
"flash": "Flash",
|
"flash": "Flash",
|
||||||
"flash_desc": "Raund başında rastgele oyuncu hızı",
|
"flash_desc": "Raund başında rastgele oyuncu hızı",
|
||||||
"flash_desc2": "Hız çarpanın: {0}x",
|
"flash_desc2": "Hızın: {0}x",
|
||||||
|
|
||||||
"fortnite": "Fortnite",
|
"fortnite": "Fortnite",
|
||||||
"fortnite_desc": "Parçalanabilir bir barikat oluşturmak için E tuşuna bas",
|
"fortnite_desc": "[css_useSkill] tuşuna basarak barikat kur",
|
||||||
|
|
||||||
"fragilebomb": "Hassas Bomba",
|
"fragilebomb": "Hassas Bomba",
|
||||||
"fragilebomb_desc": "Bombaya ateş etmek ona hasar verir",
|
"fragilebomb_desc": "Kurulu bombaya ateş etmek bombanın canını azaltır",
|
||||||
"fragilebomb_bomb_health": "Bomba canı",
|
"fragilebomb_bomb_health": "Bombanın canı",
|
||||||
|
|
||||||
"friendlyfire": "Dost Ateşi",
|
"friendlyfire": "Dost Şifası",
|
||||||
"friendlyfire_desc": "Takım arkadaşlarına ateş etmek onları iyileştirir",
|
"friendlyfire_desc": "Takım arkadaşlarına ateş etmek onları iyileştirir",
|
||||||
|
|
||||||
"frozendecoy": "Dondurucu Yem",
|
"frozendecoy": "Buz Kıran",
|
||||||
"frozendecoy_desc": "Yanıltıcı bomban (decoy) yakındaki tüm oyuncuları dondurur",
|
"frozendecoy_desc": "Yanıltıcı bomba (decoy) yakındaki tüm oyuncuları dondurur",
|
||||||
|
|
||||||
"gambler": "Kumarbaz",
|
"gambler": "Kumarbaz",
|
||||||
"gambler_desc": "Sunulan listeden bir yetenek seç.",
|
"gambler_desc": "Sunulan listeden bir yetenek seç.",
|
||||||
"gambler_select_info": "Yeteneğini seç:",
|
"gambler_select_info": "Yeteneğini seç:",
|
||||||
"gambler_more": "#00FF00|${0} karşılığında yenile",
|
"gambler_more": "#00FF00|${0} karşılığında yeni yetenekler",
|
||||||
"gambler_no_money": "Yeterli para yok.",
|
"gambler_no_money": "Yeterli para yok.",
|
||||||
|
|
||||||
"ghost": "Hayalet",
|
"ghost": "Hayalet",
|
||||||
|
|
@ -165,71 +165,71 @@
|
||||||
"glaz_desc": "Sis bombalarının içini görebilirsin",
|
"glaz_desc": "Sis bombalarının içini görebilirsin",
|
||||||
|
|
||||||
"glitch": "Glitç",
|
"glitch": "Glitç",
|
||||||
"glitch_desc": "Seçilen bir düşmanın radarını devre dışı bırakır",
|
"glitch_desc": "Seçilen bir düşmanın radarını kapatır",
|
||||||
"glitch_enemy_info": "Radarın devre dışı bırakıldı.",
|
"glitch_enemy_info": "Radarın kapandı",
|
||||||
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
|
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
|
||||||
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
|
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
|
||||||
|
|
||||||
"glue": "Yapıştırıcı",
|
"glue": "Yapıştırıcı",
|
||||||
"glue_desc": "Bombaların duvarlara yapışır",
|
"glue_desc": "Bombaların duvarlara yapışır",
|
||||||
|
|
||||||
"godmode": "Ölümsüzlük",
|
"godmode": "Ölümsüz",
|
||||||
"godmode_desc": "Kısa süreliğine ölümsüz olmak için E tuşuna bas",
|
"godmode_desc": "[css_useSkill] tuşuna basarak kısa süreli ölümsüz ol",
|
||||||
"godmode_off": "Ölümsüzlük kapalı",
|
"godmode_off": "Ölümsüzlük kapandı",
|
||||||
"godmode_on": "Ölümsüzlük açık",
|
"godmode_on": "Ölümsüzlük açıldı",
|
||||||
|
|
||||||
"grenadier": "Bombacı",
|
"grenadier": "Bombacı",
|
||||||
"grenadier_desc": "Sınırsız el bombasına sahipsin",
|
"grenadier_desc": "Sınırsız el bombasına sahipsin",
|
||||||
|
|
||||||
"healingsmoke": "İyileştiren Sis",
|
"healingsmoke": "Şifalı Sis",
|
||||||
"healingsmoke_desc": "Sis bombaların iyileştirir",
|
"healingsmoke_desc": "Sis bombaların iyileştirir",
|
||||||
|
|
||||||
"hermit": "Münzevi",
|
"hermit": "Münzevi",
|
||||||
"hermit_desc": "Öldürmek, mermilerini ve canının bir kısmını yeniler",
|
"hermit_desc": "Öldüğünde mernin ve canının biraz yenilenir",
|
||||||
|
|
||||||
"holyhandgrenade": "Kutsal El Bombası",
|
"holyhandgrenade": "Kutsal El Bombası",
|
||||||
"holyhandgrenade_desc": "El bombaların iki kat hasar verir ve iki kat menzile sahiptir",
|
"holyhandgrenade_desc": "El bomban iki kat hasara ve menzile sahip",
|
||||||
|
|
||||||
"homingnades": "Güdümlü El Bombaları",
|
"homingnades": "Güdümlü Bomba",
|
||||||
"homingnades_desc": "El bombalarınız (sis hariç) düşmanlara yönelir",
|
"homingnades_desc": "Bombalarınız (sis hariç) düşmanlara yönelir",
|
||||||
|
|
||||||
"hotbomb": "Sıcak Bomba",
|
"hotbomb": "Sıcak C4",
|
||||||
"hotbomb_desc": "Siz hayatta olduğunuz sürece, bomba taşıyıcısına hasar verir",
|
"hotbomb_desc": "Yaşadığın sürece bombacının canı azalıyor",
|
||||||
"hotbomb_hint": "Dikkatli ol, bomba çok sıcak!",
|
"hotbomb_hint": "Bomba çok sıcak!",
|
||||||
|
|
||||||
"iana": "Hologram",
|
"iana": "Hologram",
|
||||||
"iana_desc": "Hologramını birkaç saniyeliğine kontrol etmek için E tuşuna bas",
|
"iana_desc": "[css_useSkill] tuşuna basarak bir hologram oluştur",
|
||||||
|
|
||||||
"illiterate": "Okuryazar Olmayan",
|
"illiterate": "Cahiliye",
|
||||||
"illiterate_desc": "Siz hayatta olduğunuz sürece, düşmanlarınız yazıları okuyamaz",
|
"illiterate_desc": "Yaşadığın sürece rakibin sohbeti (chat) veya oyun yazılarını okuyamaz",
|
||||||
|
|
||||||
"illusionist": "İllüzyonist",
|
"illusionist": "İllüzyonist",
|
||||||
"illusionist_desc": "Düz ilerleyen bir kopya oluşturmak için [css_useSkill] tuşuna basın",
|
"illusionist_desc": "[css_useSkill] tuşuna basarak düz ilerleyen illüzyon oluştur",
|
||||||
|
|
||||||
"impostor": "Sahtekar",
|
"impostor": "Sahtekar",
|
||||||
"impostor_desc": "Raunda düşman oyuncu modeliyle başlarsın",
|
"impostor_desc": "Düşman oyuncu modeline dönüşürsün",
|
||||||
|
|
||||||
"infiniteammo": "Sınırsız Mermi",
|
"infiniteammo": "Sınırsız Mermi",
|
||||||
"infiniteammo_desc": "Tüm silahların için sınırsız mermi alırsın",
|
"infiniteammo_desc": "Tüm silahların sınırsız mermisi olur",
|
||||||
|
|
||||||
"jackal": "İzci",
|
"jackal": "İzci",
|
||||||
"jackal_desc": "Her rakip arkasında bir iz bırakır",
|
"jackal_desc": "Her rakip yürüdüğünde ayak izi bırakır",
|
||||||
|
|
||||||
"jammer": "Sinyal Kesici",
|
"jammer": "Sinyal Kesici",
|
||||||
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
|
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
|
||||||
"jammer_enemy_info": "Nişangahın devre dışı bırakıldı.",
|
"jammer_enemy_info": "Nişangahın kapatıldı.",
|
||||||
"jammer_player_info": "'{0}' isimli oyuncunun nişangahı devre dışı bırakıldı.",
|
"jammer_player_info": "'{0}' isimli oyuncunun nişangahı kapatıldı.",
|
||||||
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
|
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
|
||||||
|
|
||||||
"jester": "Joker",
|
"jester": "Soytarı",
|
||||||
"jester_desc": "Joker modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
|
"jester_desc": "Soytarı modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
|
||||||
"jester_mode": "Joker Modu",
|
"jester_mode": "Soytarı Modu",
|
||||||
"jester_on": "AÇIK",
|
"jester_on": "AÇIK",
|
||||||
"jester_off": "KAPALI",
|
"jester_off": "KAPALI",
|
||||||
|
|
||||||
"jumpban": "Bacaksız",
|
"jumpban": "Bacaksız",
|
||||||
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
||||||
"jumpban_enemy_info": "Birisi bacaklarını kesti.",
|
"jumpban_enemy_info": "Bacakların kesildi",
|
||||||
"jumpban_player_info": "'{0}' artık zıplayamaz.",
|
"jumpban_player_info": "'{0}' artık zıplayamaz.",
|
||||||
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
|
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
|
||||||
|
|
||||||
|
|
@ -237,59 +237,59 @@
|
||||||
"jumpingjack_desc": "Zıplamak canını yeniler",
|
"jumpingjack_desc": "Zıplamak canını yeniler",
|
||||||
|
|
||||||
"killerflash": "Ölümcül Flaş",
|
"killerflash": "Ölümcül Flaş",
|
||||||
"killerflash_desc": "Flaş bombanla tamamen kör olan herkes ölür (sen dahil)",
|
"killerflash_desc": "Flaşına tamamen kör olan herkes ölür (sen dahil)",
|
||||||
|
|
||||||
"lifeswap": "Can Takası",
|
"lifeswap": "Can Takası",
|
||||||
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
|
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
|
||||||
"lifeswap_enemy_info": "Birisi canını ödünç aldı.",
|
"lifeswap_enemy_info": "Birisi canını çaldı",
|
||||||
"lifeswap_player_info": "'{0}' isimli oyuncuyla canlarını takas ettin.",
|
"lifeswap_player_info": "'{0}' isimli oyuncuyla canlarını takas ettin.",
|
||||||
"lifeswap_select_info": "Can takası yapılacak oyuncu:",
|
"lifeswap_select_info": "Can takası yapılacak oyuncu:",
|
||||||
|
|
||||||
"longknife": "Uzun Bıçak",
|
"longknife": "Uzun Bıçak",
|
||||||
"longknife_desc": "Bıçak saldırısı mesafeden bağımsız olarak hasar verir",
|
"longknife_desc": "Bıçağın uzaktaki rakibe hasar verebilir",
|
||||||
|
|
||||||
"longzeus": "Uzak Zeus",
|
"longzeus": "Uzak Zeus",
|
||||||
"longzeus_desc": "Zeus mesafeden bağımsız olarak hasar verir",
|
"longzeus_desc": "Zeus uzaktaki rakibe hasar verebilir",
|
||||||
|
|
||||||
"magneticdecoy": "Manyetik Yanıltıcı",
|
"magneticdecoy": "Manyetik Yanıltıcı",
|
||||||
"magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker",
|
"magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker",
|
||||||
|
|
||||||
"magneto": "Magneto",
|
"magneto": "Magneto",
|
||||||
"magneto_desc": "Tüm düşman el bombaları sizden uzaklaştırılır",
|
"magneto_desc": "Tüm düşman bombaları sizden uzaklaştırılır",
|
||||||
|
|
||||||
"magnifier": "Büyüteç",
|
"magnifier": "Büyüteç",
|
||||||
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
|
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
|
||||||
"magnifier_enemy_info": "Görüş alanın bozuldu!",
|
"magnifier_enemy_info": "Görüşün bozuldu!",
|
||||||
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
|
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
|
||||||
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
|
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
|
||||||
|
|
||||||
"medic": "Sıhhiye",
|
"medic": "Sıhhiye",
|
||||||
"medic_desc": "50 can yenileyen bir iyileştirme yükü kullanmak için E tuşuna bas",
|
"medic_desc": "[css_useSkill] tuşuna basarak kendine anında 50 HP bas",
|
||||||
|
|
||||||
"miner": "Bomba Madencisi",
|
"miner": "Mayın",
|
||||||
"miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar",
|
"miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar",
|
||||||
|
|
||||||
"bankrupt": "İflas",
|
"bankrupt": "İflas",
|
||||||
"bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç",
|
"bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç",
|
||||||
"bankrupt_enemy_info": "İflas ettin.",
|
"bankrupt_enemy_info": "İflas ettin!",
|
||||||
"bankrupt_player_info": "'{0}' isimli oyuncu iflas etti.",
|
"bankrupt_player_info": "'{0}' isimli oyuncu iflas etti.",
|
||||||
"bankrupt_select_info": "İflas edecek oyuncuyu seç:",
|
"bankrupt_select_info": "İflas edecek oyuncuyu seç:",
|
||||||
|
|
||||||
"muhammed": "Bombacı",
|
"deathbomb": "Canlı Bomba",
|
||||||
"muhammed_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
|
"deathbomb_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
|
||||||
"muhammed_explosion": "ALLAHU EKBER!!!",
|
"deathbomb_explosion": "BOOM!!!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Hareketsiz durmak görünmezliğini %33, çömelmek %33 ve bıçak tutmak %33 artırır",
|
"ninja_desc": "Görünmezliğini sabit durmak %33, eğilmek %33 ve bıçak tutmak %33 artırır",
|
||||||
|
|
||||||
"nonades": "Bomba Geçirmez",
|
"nonades": "Bomba Geçirmez",
|
||||||
"nonades_desc": "Bombalar sana hasar vermez",
|
"nonades_desc": "Bombalar sana hasar vermez",
|
||||||
|
|
||||||
"norecoil": "Odaklanma",
|
"norecoil": "Odaklanma",
|
||||||
"norecoil_desc": "Ateş ederken geri tepme olmaz",
|
"norecoil_desc": "Silahın hiç sekmez",
|
||||||
|
|
||||||
"noclip": "Noclip",
|
"noclip": "Noclip",
|
||||||
"noclip_desc": "Kısa süreliğine noclip açmak için E tuşuna bas",
|
"noclip_desc": "[css_useSkill] tuşuna basarak duvarların içinden geç",
|
||||||
|
|
||||||
"oneshot": "Tek Atış",
|
"oneshot": "Tek Atış",
|
||||||
"oneshot_desc": "Düşmana vurmak onu anında öldürür",
|
"oneshot_desc": "Düşmana vurmak onu anında öldürür",
|
||||||
|
|
@ -297,18 +297,18 @@
|
||||||
"onlyhead": "Sadece Kafa",
|
"onlyhead": "Sadece Kafa",
|
||||||
"onlyhead_desc": "Sadece kafadan hasar alırsın",
|
"onlyhead_desc": "Sadece kafadan hasar alırsın",
|
||||||
|
|
||||||
"paweljumper": "Ekstra Zıplama",
|
"paweljumper": "Zıppır",
|
||||||
"paweljumper_desc": "Rastgele sayıda ekstra zıplama hakkı kazanırsın",
|
"paweljumper_desc": "Rastgele sayıda ekstra zıplaman olur",
|
||||||
"paweljumper_desc2": "{0} tane ekstra zıplama hakkın var",
|
"paweljumper_desc2": "{0} kez ekstra zıplayabilirsin",
|
||||||
|
|
||||||
"phoenix": "Anka Kuşu",
|
"phoenix": "Anka Kuşu",
|
||||||
"phoenix_desc": "Öldükten sonra rastgele yeniden doğma şansın olur",
|
"phoenix_desc": "Öldükten sonra rastgele yeniden doğma şansın olur",
|
||||||
"phoenix_desc2": "Ölümden sonra yeniden doğma şansın: %{0}",
|
"phoenix_desc2": "Yeniden doğma şansın: %{0}",
|
||||||
"phoenix_respawn": "Anka Kuşu'nun gücü sayesinde küllerinden yeniden doğdun!",
|
"phoenix_respawn": "Küllerinden yeniden doğdun!",
|
||||||
|
|
||||||
"psychicdefusing": "Psişik İmha",
|
"psychicdefusing": "Psişik İmha",
|
||||||
"psychicdefusing_desc": "Bombanın yanındayken onu otomatik imha etmeye başlarsın",
|
"psychicdefusing_desc": "Bombanın yanındayken onu otomatik imha etmeye başlarsın",
|
||||||
"psychicdefusing_hud_info": "İmha için {0} saniye kaldı",
|
"psychicdefusing_hud_info": "Bombanın çözülmesi için son {0} saniye",
|
||||||
|
|
||||||
"pilot": "Pilot",
|
"pilot": "Pilot",
|
||||||
"pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın",
|
"pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın",
|
||||||
|
|
@ -326,7 +326,7 @@
|
||||||
|
|
||||||
"primaryban": "Tüfek Yasak",
|
"primaryban": "Tüfek Yasak",
|
||||||
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
|
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
|
||||||
"primaryban_enemy_info": "Artık tüfek kullanamazsın.",
|
"primaryban_enemy_info": "Tüfek kullanmayı unuttun",
|
||||||
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
|
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
|
||||||
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
|
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
|
||||||
|
|
||||||
|
|
@ -335,13 +335,13 @@
|
||||||
|
|
||||||
"push": "İtici",
|
"push": "İtici",
|
||||||
"push_desc": "Düşmana vurduğunda onu geri itme şansın olur",
|
"push_desc": "Düşmana vurduğunda onu geri itme şansın olur",
|
||||||
"push_desc2": "Düşmanı geri itme şansın: %{0}",
|
"push_desc2": "Geri itme şansın: %{0}",
|
||||||
|
|
||||||
"pyro": "Piromani",
|
"pyro": "Ateşbaz",
|
||||||
"pyro_desc": "Molotof canını yeniler",
|
"pyro_desc": "Molotof canını yeniler",
|
||||||
|
|
||||||
"quickshot": "Seri Ateş",
|
"quickshot": "Seri Atış",
|
||||||
"quickshot_desc": "Tüm mermiler çok hızlı ateşlenir",
|
"quickshot_desc": "Silahın daha hızlı ateş eder",
|
||||||
|
|
||||||
"radarhack": "Radar Hack",
|
"radarhack": "Radar Hack",
|
||||||
"radarhack_desc": "Düşmanlar radarda görünür",
|
"radarhack_desc": "Düşmanlar radarda görünür",
|
||||||
|
|
@ -349,34 +349,34 @@
|
||||||
"rambo": "Rambo",
|
"rambo": "Rambo",
|
||||||
"rambo_desc": "Raund başında rastgele miktarda can alırsın",
|
"rambo_desc": "Raund başında rastgele miktarda can alırsın",
|
||||||
|
|
||||||
"randomweapon": "Rastgele Silah",
|
"randomweapon": "Silah Kumarı",
|
||||||
"randomweapon_desc": "Rastgele bir silah almak için E tuşuna bas",
|
"randomweapon_desc": "[css_useSkill] tuşuna basarak rastgele bir silah al",
|
||||||
|
|
||||||
"rezombie": "Zombi Dönüşümü",
|
"rezombie": "Zombi",
|
||||||
"rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız bir zombi olarak yeniden doğarsın",
|
"rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız zombi olarak doğarsın",
|
||||||
|
|
||||||
"reactivearmor": "Reaktif Zırh",
|
"reactivearmor": "Reaktif Zırh",
|
||||||
"reactivearmor_desc": "Zırh alınan ilk hasarı emmer",
|
"reactivearmor_desc": "Zırhın alınan ilk hasarı emmer",
|
||||||
|
|
||||||
"regeneration": "Yenilenme",
|
"regeneration": "Yenilenme",
|
||||||
"regeneration_desc": "Birkaç saniyede bir canın yenilenir",
|
"regeneration_desc": "Birkaç saniyede bir canın yenilenir",
|
||||||
|
|
||||||
"replicator": "Kopyacı",
|
"replicator": "Kopyacı",
|
||||||
"replicator_desc": "Vurulduğunda hasar veren bir kopya oluşturmak için E tuşuna bas",
|
"replicator_desc": "[css_useSkill] tuşuna basarak kopya oluştur ve ölürse rakibe hasar verir",
|
||||||
|
|
||||||
"retreat": "Geri Çekilme",
|
"retreat": "Geri Çekil",
|
||||||
"retreat_desc": "Başlangıç noktasına dönmek için E tuşuna bas",
|
"retreat_desc": "[css_useSkill] tuşuna basarak başlangıç noktasına ışınlan",
|
||||||
|
|
||||||
"returntosender": "İade",
|
"returntosender": "İade",
|
||||||
"returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına geri gönderir",
|
"returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına ışınlar",
|
||||||
|
|
||||||
"richboy": "Zengin Çocuk",
|
"richboy": "Zengin Bebe",
|
||||||
"richboy_desc": "Raund başında rastgele miktarda para alırsın",
|
"richboy_desc": "Raund başında rastgele miktarda para alırsın",
|
||||||
|
|
||||||
"robinhood": "Robin Hood",
|
"robinhood": "Robin Hood",
|
||||||
"robinhood_desc": "Düşmana hasar vermek onun parasını çalar",
|
"robinhood_desc": "Düşmana hasar vermek onun parasını çalar",
|
||||||
|
|
||||||
"rubber": "Lastik Mermiler",
|
"rubber": "Lastik Mermi",
|
||||||
"rubber_desc": "Mermilerin oyuncuları önemli ölçüde yavaşlatır",
|
"rubber_desc": "Mermilerin oyuncuları önemli ölçüde yavaşlatır",
|
||||||
|
|
||||||
"saper": "İstihkamcı",
|
"saper": "İstihkamcı",
|
||||||
|
|
@ -387,48 +387,48 @@
|
||||||
|
|
||||||
"shade": "Gölge",
|
"shade": "Gölge",
|
||||||
"shade_desc": "Vurduğun düşmanın arkasına ışınlanma şansın olur",
|
"shade_desc": "Vurduğun düşmanın arkasına ışınlanma şansın olur",
|
||||||
"shade_desc2": "Düşmanın arkasına ışınlanma şansın: %{0}",
|
"shade_desc2": "Arkasına ışınlanma şansın: %{0}",
|
||||||
"shade_nospace": "Uygun alan yok",
|
"shade_nospace": "Uygun alan yok",
|
||||||
|
|
||||||
"shortbomb": "Kısa Fünye",
|
"shortbomb": "Kısa Fünye",
|
||||||
"shortbomb_desc": "Bomba çok daha hızlı patlar",
|
"shortbomb_desc": "Bomba çok daha hızlı patlar",
|
||||||
|
|
||||||
"silent": "Sessiz",
|
"silent": "Sessiz",
|
||||||
"silent_desc": "Ayak seslerin ve zıplamaların DİĞER oyunculara duyulmaz",
|
"silent_desc": "Ayak seslerini ve zıplamalarını DİĞER oyuncular duyamaz",
|
||||||
|
|
||||||
"smoker": "Tiryaki",
|
"smoker": "Tiryaki",
|
||||||
"smoker_desc": "Sis bombalarınız asla bitmez",
|
"smoker_desc": "Sis bombalarınız asla bitmez",
|
||||||
|
|
||||||
"sniperelite": "Keskin Nişancı",
|
"sniperelite": "Keskin Nişancı",
|
||||||
"sniperelite_customname": "Keskin Nişancı Yeteneği",
|
"sniperelite_customname": "Keskin Nişancı",
|
||||||
"sniperelite_desc": "Mevcut silahını bir AWP ile değiştirmek için E tuşuna bas",
|
"sniperelite_desc": "[css_useSkill] tuşuna basarak silahını AWP ile değiştir",
|
||||||
|
|
||||||
"soldier": "Asker",
|
"soldier": "Teğmen",
|
||||||
"soldier_desc": "Rastgele bir hasar çarpanına sahip olursun",
|
"soldier_desc": "Rastgele bir oranda fazla hasar verirsin",
|
||||||
"soldier_desc2": "Hasar çarpanın: {0}x",
|
"soldier_desc2": "Hasarın: {0}x",
|
||||||
|
|
||||||
"soundmaker": "Gürültücü",
|
"soundmaker": "Halüsinasyon",
|
||||||
"soundmaker_desc": "Her düşman için bir ses tetiklemek için E tuşuna bas",
|
"soundmaker_desc": "[css_useSkill] tuşuna basarak rakibinin çığlık atmasını sağla",
|
||||||
|
|
||||||
"spectator": "İzleyici",
|
"spectator": "Röntgen",
|
||||||
"spectator_desc": "Rastgele bir düşmanı izlemek için E tuşuna bas",
|
"spectator_desc": "[css_useSkill] tuşuna basarak rakibinin gözünden gör",
|
||||||
|
|
||||||
"swapposition": "Yer Değiştirme",
|
"swapposition": "Yer Değiştirme",
|
||||||
"swapposition_desc": "Rastgele bir düşmanla yer değiştirmek için E tuşuna bas",
|
"swapposition_desc": "[css_useSkill] tuşuna basarak vurduğun düşmanla yer değiştir",
|
||||||
|
|
||||||
"teleporter": "Işınlayıcı",
|
"teleporter": "Işınlayıcı",
|
||||||
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
|
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
|
||||||
"teleporter_desc2": "Vuruştan sonra yer değiştirme şansınız: %{0}",
|
"teleporter_desc2": "Yer değiştirme şansın: %{0}",
|
||||||
|
|
||||||
"thief": "Hırsız",
|
"thief": "Hırsız",
|
||||||
"thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin",
|
"thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin",
|
||||||
"thief_enemy_info": "Yeteneğin çalındı.",
|
"thief_enemy_info": "Yeteneğin çalındı.",
|
||||||
"thief_player_info": "'{0}' isimli oyuncunun yeteneği çalındı.",
|
"thief_player_info": "'{0}' isimli oyuncunun yeteneği çalındı.",
|
||||||
"thief_select_info": "Yetenek çalınacak oyuncu:",
|
"thief_select_info": "Yetenek çalınacak oyuncu:",
|
||||||
"thief_incorrect_skill": "Bu yetenek seçilemez!",
|
"thief_incorrect_skill": "Bu yetenek çalınamaz!",
|
||||||
|
|
||||||
"thirdeye": "Üçüncü Göz",
|
"thirdeye": "Üçüncü Göz",
|
||||||
"thirdeye_desc": "Üçüncü şahıs bakış açısını aktif etmek için E tuşuna bas",
|
"thirdeye_desc": "[css_useSkill] tuşuna basarak üçüncü göze(thirdperson) geç",
|
||||||
|
|
||||||
"thorns": "Dikenler",
|
"thorns": "Dikenler",
|
||||||
"thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır",
|
"thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır",
|
||||||
|
|
@ -448,13 +448,13 @@
|
||||||
"watchmaker_tt": "Raund süresi {0} saniye uzatıldı.",
|
"watchmaker_tt": "Raund süresi {0} saniye uzatıldı.",
|
||||||
|
|
||||||
"weaponsswap": "Silah Takası",
|
"weaponsswap": "Silah Takası",
|
||||||
"weaponsswap_desc": "Rastgele bir düşmanla silahları takas etmek için E tuşuna bas",
|
"weaponsswap_desc": "[css_useSkill] tuşuna basarak silahını düşmanla takasla",
|
||||||
"weaponsswap_hud_info2": "Takas edilecek silahın yok",
|
"weaponsswap_hud_info2": "Takas edilecek silahın yok",
|
||||||
|
|
||||||
"weightless": "Yerçekimsiz",
|
"weightless": "Yerçekimsiz",
|
||||||
"weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve daha hızlı uçar",
|
"weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve dümdüz gider",
|
||||||
|
|
||||||
"wildthrow": "Vahşi Atış",
|
"wildthrow": "Unutkan Bombacı",
|
||||||
"wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin",
|
"wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin",
|
||||||
"wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu",
|
"wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu",
|
||||||
"wildthrow_select_info": "Bir oyuncu seçin:",
|
"wildthrow_select_info": "Bir oyuncu seçin:",
|
||||||
|
|
@ -462,25 +462,25 @@
|
||||||
"zeus": "Zeus",
|
"zeus": "Zeus",
|
||||||
"zeus_desc": "Zeus x27 anında şarj olur",
|
"zeus_desc": "Zeus x27 anında şarj olur",
|
||||||
|
|
||||||
"your_skill": "Mevcut yeteneğin",
|
"your_skill": "Yeteneğin",
|
||||||
"enemy_skill": "Düşmanın yeteneği",
|
"enemy_skill": "Düşmanın yeteneği",
|
||||||
"observer_skill": "Oyuncunun yeteneği",
|
"observer_skill": "Oyuncunun yeteneği",
|
||||||
"welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF",
|
"welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF",
|
||||||
"drawing_skill": "Yetenek çekiliyor",
|
"drawing_skill": "Yetenek çarkı dönüyor...",
|
||||||
"disabled_weapon": "Bu silahı kullanamazsın",
|
"disabled_weapon": "Bu silahı kullanamazsın",
|
||||||
|
|
||||||
"hud_info": "{0} saniye daha bekle",
|
"hud_info": "{0} saniye daha bekle",
|
||||||
"hud_info_no_enemy": "Düşman bulunamadı",
|
"hud_info_no_enemy": "Düşman yok",
|
||||||
"active_hud_info": "{0} milisaniye daha aktif",
|
"active_hud_info": "{0} milisaniye daha aktif",
|
||||||
|
|
||||||
"skills_menu": "Yetenek Listesi",
|
"skills_menu": "Yetenek Listesi",
|
||||||
"no_player": "Eşleşen oyuncu bulunamadı.",
|
"no_player": "Eşleşen oyuncu yok.",
|
||||||
"duplicate_player": "Aynı isimde birden fazla oyuncu bulundu.",
|
"duplicate_player": "Aynı isimde birden fazla oyuncu bulundu.",
|
||||||
"selectplayerskill_command": "/t yazın",
|
"selectplayerskill_command": "Sohbete /t yazın",
|
||||||
"selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu bulunamadı.",
|
"selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu yok.",
|
||||||
|
|
||||||
"skill_not_found_setskill": "Böyle bir yetenek bulunamadı",
|
"skill_not_found_setskill": "Böyle bir yetenek yok",
|
||||||
"player_not_found_setskill": "Böyle bir oyuncu bulunamadı",
|
"player_not_found_setskill": "Böyle bir oyuncu yok",
|
||||||
"correct_form_setskill": "Doğru kullanım: !setskill <isim> <yetenek>",
|
"correct_form_setskill": "Doğru kullanım: !setskill <isim> <yetenek>",
|
||||||
"correct_form_setscore": "Doğru kullanım: !setscore <CT> <TT>",
|
"correct_form_setscore": "Doğru kullanım: !setscore <CT> <TT>",
|
||||||
"done_setskill": "yetenek ayarlandı",
|
"done_setskill": "yetenek ayarlandı",
|
||||||
|
|
@ -506,12 +506,12 @@
|
||||||
"vote_alredy_voted": "Zaten oy kullandın!",
|
"vote_alredy_voted": "Zaten oy kullandın!",
|
||||||
"vote_vote": "Oy ver",
|
"vote_vote": "Oy ver",
|
||||||
|
|
||||||
"bombsite_a": "Bomba Alanı A",
|
"bombsite_a": "A Bölgesi",
|
||||||
"bombsite_b": "Bomba Alanı B",
|
"bombsite_b": "B Bölgesi",
|
||||||
"bombplanted": "Bomba kuruldu\nPatlamaya {0} saniye",
|
"bombplanted": "Bomba kuruldu\nPatlamaya {0} saniye",
|
||||||
|
|
||||||
"teammate_skills": "Takım arkadaşlarının yetenekleri",
|
"teammate_skills": "Takımının yetenekleri",
|
||||||
"summary": "Son raundun özeti",
|
"summary": "Raundun özeti",
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Kaydır",
|
"menu_controlls_scroll": "W/S - Kaydır",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
|
||||||
|
|
@ -275,9 +275,9 @@
|
||||||
"moneyswap_player_info": "你与玩家 '{0}' 交换了金钱。",
|
"moneyswap_player_info": "你与玩家 '{0}' 交换了金钱。",
|
||||||
"moneyswap_select_info": "选择你想与之交换金钱的玩家:",
|
"moneyswap_select_info": "选择你想与之交换金钱的玩家:",
|
||||||
|
|
||||||
"muhammed": "穆罕默德",
|
"deathbomb": "死亡炸弹",
|
||||||
"muhammed_desc": "你死亡时会爆炸,杀死附近的玩家",
|
"deathbomb_desc": "你死亡时会爆炸,杀死附近的玩家",
|
||||||
"muhammed_explosion": "真主至大!!!",
|
"deathbomb_explosion": "砰!",
|
||||||
|
|
||||||
"ninja": "忍者",
|
"ninja": "忍者",
|
||||||
"ninja_desc": "站立不动增加33%隐形,蹲下增加33%,持刀增加33%",
|
"ninja_desc": "站立不动增加33%隐形,蹲下增加33%,持刀增加33%",
|
||||||
|
|
|
||||||
329
readme-pl.md
329
readme-pl.md
|
|
@ -13,7 +13,7 @@
|
||||||
> Te repozytorium jest to fork [projektu](https://github.com/jakubbartosik/dRandomSkills) stworzonego przez [Jakuba Bartosika (D3X)](https://github.com/jakubbartosik).
|
> Te repozytorium jest to fork [projektu](https://github.com/jakubbartosik/dRandomSkills) stworzonego przez [Jakuba Bartosika (D3X)](https://github.com/jakubbartosik).
|
||||||
|
|
||||||
## 💡 Opis
|
## 💡 Opis
|
||||||
jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do rozgrywki! W każdej rundzie losowo otrzymujesz jedną z unikalnych supermocy – od niewidzialności, przez wybuchowe strzały, po manipulację kamerą. Zaskocz przeciwników, przejmij kontrolę nad meczem i odkryj dziesiątki kreatywnych umiejętności, które zmieniają dynamikę gry!
|
jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do rozgrywki! W każdej rundzie losowo otrzymujesz jedną z unikalnych supermocy - od niewidzialności, przez wybuchowe strzały, po manipulację kamerą. Zaskocz przeciwników, przejmij kontrolę nad meczem i odkryj dziesiątki kreatywnych umiejętności, które zmieniają dynamikę gry!
|
||||||
|
|
||||||
#### Wybierz język:
|
#### Wybierz język:
|
||||||
<a href="./readme-pl.md">
|
<a href="./readme-pl.md">
|
||||||
|
|
@ -29,6 +29,8 @@ jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do
|
||||||
- **Francuski** [by: [@felyjyn](https://github.com/felyjyn)]
|
- **Francuski** [by: [@felyjyn](https://github.com/felyjyn)]
|
||||||
- **Portugalski (Brazylijski)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
|
- **Portugalski (Brazylijski)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
|
||||||
- **Niemiecki** [by: [@Enrory](https://github.com/Enrory)]
|
- **Niemiecki** [by: [@Enrory](https://github.com/Enrory)]
|
||||||
|
- **Turecki** [by: [@brkvlr](https://github.com/brkvlr), [@ByDexterTR](https://github.com/ByDexterTR)]
|
||||||
|
- **Rosyjski** [by: [@213sdfsdgf](https://github.com/213sdfsdgf)]
|
||||||
- **Chiński uproszczony** [GrokAI / ChatGPT]
|
- **Chiński uproszczony** [GrokAI / ChatGPT]
|
||||||
|
|
||||||
## 🖼️ Prezentacja Pluginu
|
## 🖼️ Prezentacja Pluginu
|
||||||
|
|
@ -40,18 +42,19 @@ Dołącz do serwera testowego 3v3 i wypróbuj plugin jRandomSkills:
|
||||||
- **Adres**: `jRandomSkills@pukawka.pl`
|
- **Adres**: `jRandomSkills@pukawka.pl`
|
||||||
- **Hasło**: `public`
|
- **Hasło**: `public`
|
||||||
- **Godziny otwarcia**: `00:00-19:00`
|
- **Godziny otwarcia**: `00:00-19:00`
|
||||||
- **Połącz URL**: `steam://connect/51.38.122.215:27235/public`
|
- **Połącz URL**: `steam://connect/51.38.122.215:27215/public`
|
||||||
- **Połącz**: `connect 51.38.122.215:27235; password public`
|
- **Połącz**: `connect 51.38.122.215:27215; password public`
|
||||||
|
|
||||||
Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://pukawka.pl/pp,juzlus.html).
|
Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://pukawka.pl/pp,juzlus.html).
|
||||||
|
|
||||||
## ✨ Aktualne Supermoce (112)
|
## ✨ Aktualne Supermoce (124)
|
||||||
<details>
|
<details>
|
||||||
<summary>Poniższa tabela przedstawia wszystkie dostępne supermoce w grze, wraz z ich opisami.</summary>
|
<summary>Poniższa tabela przedstawia wszystkie dostępne supermoce w grze, wraz z ich opisami.</summary>
|
||||||
|
|
||||||
| Nazwa | Opis | Czas odnowienia / Zakres |
|
| Nazwa | Opis | Czas odnowienia / Zakres |
|
||||||
| - | - | -|
|
| - | - | -|
|
||||||
| Aimbot | Każdy twój trafiony pocisk liczy się jako strzał w głowę | - |
|
| Aimbot | Każdy twój trafiony pocisk liczy się jako strzał w głowę | - |
|
||||||
|
| Aim Lock | Kliknij [css_useSkill], aby wycelować na najbliższego wroga | 20 s |
|
||||||
| Anomalia | Cofasz się o 5 sekund do tyłu | 15 s |
|
| Anomalia | Cofasz się o 5 sekund do tyłu | 15 s |
|
||||||
| Anty Flash | Posiadasz odporność na flash'e, a twoje flash'e trwają 7 sekund | - |
|
| Anty Flash | Posiadasz odporność na flash'e, a twoje flash'e trwają 7 sekund | - |
|
||||||
| Żelazna Głowa | Nie otrzymujesz obrażeń w głowę | - |
|
| Żelazna Głowa | Nie otrzymujesz obrażeń w głowę | - |
|
||||||
|
|
@ -74,6 +77,7 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
|
||||||
| Mrok | Nadaje efekt ciemności wybranemu przeciwnikowi | - |
|
| Mrok | Nadaje efekt ciemności wybranemu przeciwnikowi | - |
|
||||||
| Deaktywator | Wybierasz gracza, którego supermoc chcesz wyłączyć | - |
|
| Deaktywator | Wybierasz gracza, którego supermoc chcesz wyłączyć | - |
|
||||||
| Głuchy | Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki | - |
|
| Głuchy | Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki | - |
|
||||||
|
| Ludzka bomba | Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu | - |
|
||||||
| Rozbrojenie | Masz losową szanse na wyrzucenie broni wroga po trafieniu | (20 - 35)% |
|
| Rozbrojenie | Masz losową szanse na wyrzucenie broni wroga po trafieniu | (20 - 35)% |
|
||||||
| Odległościomierz | Możesz zobaczyć odległość do najbliższego przeciwnika | - |
|
| Odległościomierz | Możesz zobaczyć odległość do najbliższego przeciwnika | - |
|
||||||
| Doskok | Wykonaj drugi skok, aby wykonać doskok | - |
|
| Doskok | Wykonaj drugi skok, aby wykonać doskok | - |
|
||||||
|
|
@ -99,7 +103,11 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
|
||||||
| Leczący Dym | Twoje granaty dymne leczą | - |
|
| Leczący Dym | Twoje granaty dymne leczą | - |
|
||||||
| Pustelnik | Zabijanie przywraca amunicję i część zdrowia | - |
|
| Pustelnik | Zabijanie przywraca amunicję i część zdrowia | - |
|
||||||
| Święty Granat Ręczny | Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg | - |
|
| Święty Granat Ręczny | Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg | - |
|
||||||
|
| Naprowadzane Granaty | Twoje granaty (z wyjątkiem dymnych) są przyciągane do wrogów | - |
|
||||||
|
| Gorąca Bomba | Dopóki żyjesz, bomba zadaje obrażenia osobie, która ją niesie | - |
|
||||||
| Hologram | Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund | - |
|
| Hologram | Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund | - |
|
||||||
|
| Analfabeta | Dopóki żyjesz, Twoi wrogowie nie potrafią czytać | - |
|
||||||
|
| Iluzjonista | Naciśnij [css_useSkill], aby wypuścić replikę idącą prosto przed siebie | 30 s |
|
||||||
| Szpieg | Na początku rundy otrzymujesz model postaci przeciwnika | - |
|
| Szpieg | Na początku rundy otrzymujesz model postaci przeciwnika | - |
|
||||||
| Nieskończone Ammo | Otrzymujesz nieskończoną ilość amunicji do wszystkich broni | - |
|
| Nieskończone Ammo | Otrzymujesz nieskończoną ilość amunicji do wszystkich broni | - |
|
||||||
| Stópkarz | Wybierasz gracza, który pozostawi za sobą ślad | - |
|
| Stópkarz | Wybierasz gracza, który pozostawi za sobą ślad | - |
|
||||||
|
|
@ -111,10 +119,12 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
|
||||||
| Zamiana Żyć | Wybierasz gracza, z którym chcesz wymienić się zdrowiem | - |
|
| Zamiana Żyć | Wybierasz gracza, z którym chcesz wymienić się zdrowiem | - |
|
||||||
| Długi Nóż | Podstawowy atak nożem zadaje obrażenia niezależnie od odległości | - |
|
| Długi Nóż | Podstawowy atak nożem zadaje obrażenia niezależnie od odległości | - |
|
||||||
| Długi Zeus | Zeus zadaje obrażenia niezależnie od odległości | - |
|
| Długi Zeus | Zeus zadaje obrażenia niezależnie od odległości | - |
|
||||||
|
| Magnetyczny Wabik | Twój wabik przyciąga pobliskich graczy do siebie | - |
|
||||||
|
| Magneto | Wszystkie granaty wroga są odpychane od Ciebie | - |
|
||||||
| Lupa | Przybiżasz ekran wybranemu przeciwnikowi | - |
|
| Lupa | Przybiżasz ekran wybranemu przeciwnikowi | - |
|
||||||
| Medyk | Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia | 1 s |
|
| Medyk | Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia | 1 s |
|
||||||
|
| Bomberman | Twoje granaty HE wybuchają tylko wtedy, gdy w pobliżu jest wróg | - |
|
||||||
| Skarbówka | Wybierasz gracza, z którym chcesz zamienić się pieniędzmi | - |
|
| Skarbówka | Wybierasz gracza, z którym chcesz zamienić się pieniędzmi | - |
|
||||||
| Muhammed | Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu | - |
|
|
||||||
| Ninja | Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33% | - |
|
| Ninja | Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33% | - |
|
||||||
| Pancernik | Granaty nie zadają Ci obrażeń | - |
|
| Pancernik | Granaty nie zadają Ci obrażeń | - |
|
||||||
| Skupienie | Brak odrzutu podczas strzelania | - |
|
| Skupienie | Brak odrzutu podczas strzelania | - |
|
||||||
|
|
@ -149,7 +159,8 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
|
||||||
| Cień | Teleportujesz się za plecy trafionego wroga | - |
|
| Cień | Teleportujesz się za plecy trafionego wroga | - |
|
||||||
| Krótka Bomba | Bomba wybucha znacznie szybciej | - |
|
| Krótka Bomba | Bomba wybucha znacznie szybciej | - |
|
||||||
| Cichociemny | Twoje kroki i skoki są niesłyszalne dla INNYCH graczy | - |
|
| Cichociemny | Twoje kroki i skoki są niesłyszalne dla INNYCH graczy | - |
|
||||||
| SzeliS | Kliknij [css_useSkill], aby zamienić aktualną broń na AWP | 0 s |
|
| Zadymiarz | Twoje granaty dymne nigdy się nie kończą | - |
|
||||||
|
| Papito | Kliknij [css_useSkill], aby zamienić aktualną broń na AWP | 0 s |
|
||||||
| Żołnierz | Masz losowy mnożnik obrażeń | (1.15 - 1.35)x |
|
| Żołnierz | Masz losowy mnożnik obrażeń | (1.15 - 1.35)x |
|
||||||
| Dźwiękowiec | Kliknij [css_useSkill], aby wywołać dźwięk u każdego przeciwnika | 5 s |
|
| Dźwiękowiec | Kliknij [css_useSkill], aby wywołać dźwięk u każdego przeciwnika | 5 s |
|
||||||
| Obserwator | Kliknij [css_useSkill], aby obserwować losowego przeciwnika | 0 s |
|
| Obserwator | Kliknij [css_useSkill], aby obserwować losowego przeciwnika | 0 s |
|
||||||
|
|
@ -159,9 +170,12 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
|
||||||
| Złodziej | Możesz ukraść supermoc wybranemu graczowi | - |
|
| Złodziej | Możesz ukraść supermoc wybranemu graczowi | - |
|
||||||
| Trzecie Oko | Kliknij [css_useSkill], aby aktywować trzecią osobę | 0 s |
|
| Trzecie Oko | Kliknij [css_useSkill], aby aktywować trzecią osobę | 0 s |
|
||||||
| Ciernie | Twój przeciwnik otrzymuje część obrażeń, które zadał ci | - |
|
| Ciernie | Twój przeciwnik otrzymuje część obrażeń, które zadał ci | - |
|
||||||
|
| TNóż do Rzucania | Naciśnij [css_useSkill], aby rzucić nożem. Ale uważaj na innych | - |
|
||||||
| Toksyczny Dym | Twoje granaty dymne zadają obrażenia | - |
|
| Toksyczny Dym | Twoje granaty dymne zadają obrażenia | - |
|
||||||
| Wallhack | Widzisz wrogów przez ściany | - |
|
| Wallhack | Widzisz wrogów przez ściany | - |
|
||||||
| Zegarmistrz | Każdy rzut granatem zmienia czas rundy o -10 lub +10 sekund | - |
|
| Zegarmistrz | Każdy rzut granatem zmienia czas rundy o -10 lub +10 sekund | - |
|
||||||
|
| Nieważkość | Twoje granaty nie podlegają grawitacji i lecą szybciej | - |
|
||||||
|
| Dzikie Rzuty | Wybierz gracza, który będzie miał trudności z rzucaniem granatami | - |
|
||||||
| Zeus | Zeus x27 natychmiastowo się odnawia | - |
|
| Zeus | Zeus x27 natychmiastowo się odnawia | - |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
@ -181,14 +195,13 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
|
||||||
3. Zainstaluj **CounterStrikeSharp**
|
3. Zainstaluj **CounterStrikeSharp**
|
||||||
- Pobierz [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases)
|
- Pobierz [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases)
|
||||||
- Wypakuj go do folderu `C2Server/game/csgo/`
|
- Wypakuj go do folderu `C2Server/game/csgo/`
|
||||||
4. Zainstaluj **CS2TraceRay**
|
4. Zainstaluj **Ray-Trace**
|
||||||
- Pobierz [CS2TraceRay](https://github.com/schwarper/CS2TraceRay/releases)
|
- Pobierz [RayTrace-CSS-API](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
|
||||||
- Wypakuj go do folderu `CS2Server/game/csgo/addons/counterstrikesharp/`
|
- Wypakuj folder `conterstrikesharp` do folderu `CS2Server/game/csgo/addons/`.
|
||||||
|
- Pobierz [RayTrace-MM](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
|
||||||
|
- Wypakuj go do folderu `CS2Server/game/csgo/addons/`.
|
||||||
5. Zainstaluj **jRandomSkills**
|
5. Zainstaluj **jRandomSkills**
|
||||||
- Pobierz [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
|
- Pobierz [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
|
||||||
- Wypakuj go do folderu `C2Server/game/csgo/addons/counterstrikesharp/`
|
|
||||||
- JEŚLI do pobrania jest plik `gamedata.json`:
|
|
||||||
- Wypakuj `gamedata.json` do folderu `C2Server/server/game/csgo/addons/counterstrikesharp/gamedata/`
|
|
||||||
|
|
||||||
## </> Komendy Serwerowe
|
## </> Komendy Serwerowe
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
|
|
@ -215,6 +228,10 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
|
||||||
| `!setscore <CT> <TT>` | `!setscore 10 7` | Ustawienie wyniku gry | `@jRandomSkills/owner` |
|
| `!setscore <CT> <TT>` | `!setscore 10 7` | Ustawienie wyniku gry | `@jRandomSkills/owner` |
|
||||||
| `!setstaticskill <playerName/steamID> <skill>` | `!setstaticskill Juzlus Aimbot` | Przypisanie supermocy do gracza na stałe | `@jRandomSkills/admin` |
|
| `!setstaticskill <playerName/steamID> <skill>` | `!setstaticskill Juzlus Aimbot` | Przypisanie supermocy do gracza na stałe | `@jRandomSkills/admin` |
|
||||||
| `!setstaticskill <playerName/steamID> None` | `!setstaticskill Juzlus None` | Powrót do normalności | `@jRandomSkills/admin` |
|
| `!setstaticskill <playerName/steamID> None` | `!setstaticskill Juzlus None` | Powrót do normalności | `@jRandomSkills/admin` |
|
||||||
|
| `!botplace [slot] [godmode]` | `!botplace 2 1` | Teleportuj bota do swojej lokalizacji | `@jRandomSkills/admin` |
|
||||||
|
| `!next_skill <name/steamID> [idx]` | `!next_skill Juzlus` | Przełącza umiejętność gracza (następna, poprzednia -1 lub konkretny idx) | `@jRandomSkills/admin` |
|
||||||
|
| `!plantedbomb [time]` | `!plantedbomb 35` | Stwórz podłożoną bombę C4 w miejscu, w którym stoisz, z niestandardowym lub domyślnym (40 s) czasem detonacji | `@jRandomSkills/admin` |
|
||||||
|
| `!sethealth <amount>` | `!sethealth 150` | Ustala określoną ilość zdrowia dla samego siebie | `@jRandomSkills/admin` |
|
||||||
| `!reload` | `!reload` | Odśwież tłumaczenia | - |
|
| `!reload` | `!reload` | Odśwież tłumaczenia | - |
|
||||||
|
|
||||||
_Większość poleceń wymaga uprawnień, które należy ustawić w pliku: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
|
_Większość poleceń wymaga uprawnień, które należy ustawić w pliku: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
|
||||||
|
|
@ -250,10 +267,12 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
|
||||||
// 4 - Losowa supermoc dla każdego gracza (Pełna losowość)
|
// 4 - Losowa supermoc dla każdego gracza (Pełna losowość)
|
||||||
// 5 - Debug: Supormoce są przydzielane po kolei
|
// 5 - Debug: Supormoce są przydzielane po kolei
|
||||||
"YourSkillChatInfo": true, // Pokazuj swoją supermoc na czacie
|
"YourSkillChatInfo": true, // Pokazuj swoją supermoc na czacie
|
||||||
"KillerSkillInfo": true, // Pokazuj supermoc zabójcy na czacie
|
"KillerSkillChatInfo": true, // Pokazuj supermoc zabójcy na czacie
|
||||||
"TeamMateSkillInfo": true, // Pokazuj supermoc sojuszników na czacie
|
"TeamMateSkillChatInfo": true, // Pokazuj supermoc sojuszników na czacie
|
||||||
"SummaryAfterTheRound": true, // Pokazuj podsumowanie z ostatniej rundy
|
"SummaryAfterTheRound": true, // Pokazuj podsumowanie z ostatniej rundy
|
||||||
"DebugMode": true, // Zapisuj aktywność do folderu 'Debug'
|
"EnableBotSkills": true, // Włącz umiejętności dla botów
|
||||||
|
"EnableBotKickDebug": false, // Co 45 sekund wyrzuć losowego bota (do celów debugowania/testowania)
|
||||||
|
"DebugMode": false, // Zapisuj aktywność do folderu 'Debug'
|
||||||
"AlternativeSkillButton": null, // Możliwe przyciski:
|
"AlternativeSkillButton": null, // Możliwe przyciski:
|
||||||
// null, "Attack", "Jump", "Duck", "Forward", "Back",
|
// null, "Attack", "Jump", "Duck", "Forward", "Back",
|
||||||
// "Use", "Cancel", "Left", "Right", "Moveleft",
|
// "Use", "Cancel", "Left", "Right", "Moveleft",
|
||||||
|
|
@ -263,12 +282,12 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
|
||||||
// "Attack3", "Scoreboard", "Inspect"
|
// "Attack3", "Scoreboard", "Inspect"
|
||||||
"SkillTimeBeforeStart": 7.0, // Ile sekund przed końcem freeze time należy zakończyć
|
"SkillTimeBeforeStart": 7.0, // Ile sekund przed końcem freeze time należy zakończyć
|
||||||
// losowanie umiejętności? (freezetime - SkillTimeBeforeStart)
|
// losowanie umiejętności? (freezetime - SkillTimeBeforeStart)
|
||||||
"SkillHudDuration": 999.0, // Jak długo HUD HTML powinien być widoczny?
|
"SkillHudDuration": -1.0, // Jak długo HUD HTML powinien być widoczny?
|
||||||
"SkillDescriptionDuration": 999, // Jak długo opis umiejętności powinien być widoczny?
|
"SkillDescriptionDuration": 7.0, // Jak długo opis umiejętności powinien być widoczny?
|
||||||
"DisplayAlwaysDescription":false,// Zawsze wyświetlaj opis umiejętności
|
"DisplayAlwaysDescription":false,// Zawsze wyświetlaj opis umiejętności
|
||||||
"DisableSpectateHUD": false, // Wyłącz HUD HTML bedąc martwym
|
"DisableSpectateHUD": false, // Wyłącz HUD HTML bedąc martwym
|
||||||
"FlashingHtmlHudFix": true, // Włącz FlashingHtmlHudFix
|
"EnableFlashingHtmlHudFix": false,// Włącz FlashingHtmlHudFix
|
||||||
"CS2TraceRayDebug": false, // Włącz widoczność ścieżki dla 'Długi Nóż', 'Długi Zeus'
|
"TraceRayBeam": false, // Włącz widoczność ścieżki dla 'Długi Nóż', 'Długi Zeus'
|
||||||
"DisableHUDOnDeathPermission": "@jRandomSkills/death", // Wyłącz HUD po śmierci dla graczy z tym uprawnieniem
|
"DisableHUDOnDeathPermission": "@jRandomSkills/death", // Wyłącz HUD po śmierci dla graczy z tym uprawnieniem
|
||||||
"DisableSkillsOnRoundEnd": false,// Wyłącz wszystkie umiejętności na koniec rundy (gdy widoczne jest podsumowanie)
|
"DisableSkillsOnRoundEnd": false,// Wyłącz wszystkie umiejętności na koniec rundy (gdy widoczne jest podsumowanie)
|
||||||
|
|
||||||
|
|
@ -298,7 +317,12 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
|
||||||
"Color": "#ff0000", // Kolor supermocy
|
"Color": "#ff0000", // Kolor supermocy
|
||||||
"Active": true, // Włączona przy uruchamianiu
|
"Active": true, // Włączona przy uruchamianiu
|
||||||
"Name": "Aimbot", // Nazwa supermocy
|
"Name": "Aimbot", // Nazwa supermocy
|
||||||
"RequiredPermission": "" // Wymagane uprawnienie
|
"RequiredPermission": "", // Wymagane uprawnienie
|
||||||
|
"MaxPerServer": -1, // Maksymalna liczba graczy, którzy mogą posiadać tę
|
||||||
|
// umiejętność na serwerze (-1 dla "nieograniczona")
|
||||||
|
"Rarity": "Common" // Poziom rzadkości umiejętności:
|
||||||
|
// Common (70x), Uncommon (14x),
|
||||||
|
// Rare (10x), Epic (5x), Legendary (1x)
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
|
|
@ -314,20 +338,265 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
|
||||||
|
|
||||||
## 🔗 Uznanie
|
## 🔗 Uznanie
|
||||||
Plugin korzysta z zawartości następujących projektów:
|
Plugin korzysta z zawartości następujących projektów:
|
||||||
- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - system losowych umiejętności
|
- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) autorstwa [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - System losowych umiejętności
|
||||||
- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) autorstwa [schwarper](https://github.com/schwarper) - system śledzenia promieni (Trace Ray)
|
- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) autorstwa [schwarper](https://github.com/schwarper) - Stary system śledzenia promieni (Trace Ray)
|
||||||
- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) autorstwa [girlglock](https://github.com/girlglock) - poprawka migotania okienka z supermocą
|
- [Ray-Trace](https://github.com/FUNPLAY-pro-CS2/Ray-Trace) autorstwa [SlynxCZ](https://github.com/SlynxCZ) - Nowy system śledzenia promieni (Trace Ray)
|
||||||
- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) autorstwa [ipsvn](https://github.com/ipsvn) - ustawianie wyniku rund
|
- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) autorstwa [girlglock](https://github.com/girlglock) - Poprawka migotania okienka z supermocą
|
||||||
- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) by [Interesting-exe](https://github.com/Interesting-exe) - API do łatwego tworzenia menu za pomocą klawiszy WASD
|
- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) autorstwa [ipsvn](https://github.com/ipsvn) - Ustawianie wyniku rund
|
||||||
- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) by [aprox2](https://github.com/aprox2) - zarządzenie geolokalizacją
|
- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) autorstwa [Interesting-exe](https://github.com/Interesting-exe) - API do łatwego tworzenia menu za pomocą klawiszy WASD
|
||||||
- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) by [MaxMind](https://www.maxmind.com/) - dane geolokalizacyjne
|
- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) autorstwa [aprox2](https://github.com/aprox2) - Zarządzenie geolokalizacją
|
||||||
|
- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) autorstwa [MaxMind](https://www.maxmind.com/) - Dane geolokalizacyjne
|
||||||
|
- [CServerSideClient](https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348) autorstwa [SLAYER](https://github.com/zakriamansoor47)
|
||||||
|
|
||||||
|
## ❤️ Szczególne podziękowania
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td align="center"><a href="https://github.com/Juzlus"><img src="https://avatars.githubusercontent.com/u/41649887?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="Juzlus"/><br/><sub><b>Juzlus</b></sub></a></td><td align="center"><a href="https://github.com/vinicius-trev"><img src="https://avatars.githubusercontent.com/u/36710856?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="vinicius-trev"/><br/><sub><b>vinicius-trev</b></sub></a></td><td align="center"><a href="https://github.com/jakubbartosik"><img src="https://avatars.githubusercontent.com/u/87545618?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="jakubbartosik"/><br/><sub><b>jakubbartosik</b></sub></a></td><td align="center"><a href="https://github.com/brkvlr"><img src="https://avatars.githubusercontent.com/u/50466021?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="brkvlr"/><br/><sub><b>brkvlr</b></sub></a></td><td align="center"><a href="https://github.com/vladimir214sd"><img src="https://avatars.githubusercontent.com/u/159032035?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="vladimir214sd"/><br/><sub><b>vladimir214sd</b></sub></a></td><td align="center"><a href="https://github.com/felyjyn"><img src="https://avatars.githubusercontent.com/u/25257673?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="felyjyn"/><br/><sub><b>felyjyn</b></sub></a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/Enrory"><img src="https://avatars.githubusercontent.com/u/29148418?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="Enrory"/><br/><sub><b>Enrory</b></sub></a></td><td align="center"><a href="https://github.com/ByDexterTR"><img src="https://avatars.githubusercontent.com/u/46813962?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="ByDexterTR"/><br/><sub><b>ByDexterTR</b></sub></a></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<sub>Jeśli jesteś <a href="https://github.com/Juzlus/jRandomSkills/graphs/contributors">współtwórcą</a> i chcesz, aby Twój profil został usunięty z tej listy, skontaktuj się ze mną.</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
ㅤ
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_7ee4547c02f2.png" width="75" height="75" style="border-radius:50%" alt="Ryuu Jin"/><br/><sub><b>Ryuu Jin</b></sub></td><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_f7017ab921b5.png" width="75" height="75" style="border-radius:50%" alt="cj☭"/><br/><sub><b>cj☭</b></sub></td><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_20f902436962.png" width="75" height="75" style="border-radius:50%" alt="k4chen"/><br/><sub><b>k4chen</b></sub></td><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_a3b321b84dc6.png" width="75" height="75" style="border-radius:50%" alt="luno"/><br/><sub><b>luno</b></sub></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<sub>Jeśli jesteś na tej liście i chcesz usunąć swój profil, skontaktuj się ze mną.</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
## 📋 Lista Zmian
|
## 📋 Lista Zmian
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.2.b2</b></summary>
|
||||||
|
|
||||||
|
- #### Ogólne:
|
||||||
|
- ###### Zaktualizowano zależność CSS do wersji 1.0.369.
|
||||||
|
- ###### Przeniesiono projekt z .NET 8.0 na .NET 10.0.
|
||||||
|
- ###### Zaktualizowano tłumaczenie na język turecki przez [@ByDexterTR](https://github.com/ByDexterTR)].
|
||||||
|
- ###### Dodano tłumaczenie na język rosyjski autorstwa [@213sdfsdgf](https://github.com/213sdfsdgf)].
|
||||||
|
- ###### Naprawiono problem z błędnym wyświetlaniem arabskich pseudonimów.
|
||||||
|
- ###### Wykorzystano ForceFullUpdate, aby naprawić crash "FATAL ERROR: CopyExistingEntity".
|
||||||
|
- ###### Wyłączono nieaktualny hook HandleCommandDrop, aby uniknąć crashy, gdy gracz dołącza do drużyny (podziękowania dla [@vladimir214sd](https://github.com/vladimir214sd)).
|
||||||
|
- ###### Dodano nowe sygnatury do gamedata.
|
||||||
|
- ###### Dodano możliwość ustawienia ilości granatów dla każdej mocy, która korzysta z granatów jako części swojej umiejętności (np. Bomberman, Anty Flash, Magnetyczny Wabik itp.).
|
||||||
|
|
||||||
|
- #### Poprawki mocy:
|
||||||
|
- ###### Re-Zombie:
|
||||||
|
- ###### Naprawiono błędy z przełączaniem broni, gdy gracz trzyma Zeusa i nóż.
|
||||||
|
- ###### Bronie są teraz usuwane dla botów w trybie zombie.
|
||||||
|
- ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
|
||||||
|
- ###### Duszek:
|
||||||
|
- ###### Zablokowano możliwość korzystania z Zeusa.
|
||||||
|
- ###### Zablokowano możliwość korzystania z SG556 (`weapon_sg556`).
|
||||||
|
- ###### Ciernie:
|
||||||
|
- ###### Dodano konfigurowalny maksymalny limit zdrowia (37 HP) dla obrażeń, które mogą zostać odbite.
|
||||||
|
- ###### Druga Szansa:
|
||||||
|
- ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
|
||||||
|
- ###### Feniks:
|
||||||
|
- ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
|
||||||
|
- ###### Kurczak:
|
||||||
|
- ###### Zablokowano możliwość korzystania z SG556 (`weapon_sg556`).
|
||||||
|
- ###### Wallhack:
|
||||||
|
- ###### Naprawiono błąd, który powodował tymczasowe podświetlanie wrogów natychmiast po śmierci.
|
||||||
|
- ###### Kamera:
|
||||||
|
- ###### Dodano zapamiętywanie pozycji kamery.
|
||||||
|
- ###### Nieśmiertelność:
|
||||||
|
- ###### Naprawiono błąd z permanentną nieśmiertelnością aktywującą się po osiągnięciu dokładnie 0 HP.
|
||||||
|
- ###### Zamiana Broni:
|
||||||
|
- ###### Ilość amunicji jest teraz również przenoszona podczas zamiany broni.
|
||||||
|
- ###### Ludzka bomba:
|
||||||
|
- ###### Zmieniono nazwę umiejętności na "DeathBomb".
|
||||||
|
- ###### Obserwator:
|
||||||
|
- ###### Naprawiono błąd, przez który gracz z umiejętnością Kurczak po śmierci nadal wyświetlał się jako ragdoll podczas bycia obserwowanym.
|
||||||
|
- ###### Ogień Przyjacielski:
|
||||||
|
- ###### Umiejętność działa teraz nawet wtedy, gdy serwerowa funkcja mp_friendlyfire jest ustawiona na 0.
|
||||||
|
- ###### Bejsbolista:
|
||||||
|
- ###### Wyłączono zabijanie członków drużyny.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.2.b1</b></summary>
|
||||||
|
|
||||||
|
- #### Ogólne:
|
||||||
|
- ###### Zaktualizowano zależności projektu.
|
||||||
|
- ###### Zaimplementowano `EntityManager` w celu automatycznego czyszczenia encji i zarządzania pamięcią.
|
||||||
|
- ###### Dodano konfigurację umożliwiającą włączenie lub wyłączenie umiejętności dla botów.
|
||||||
|
- ###### Poprawki stabilności i wydajności.
|
||||||
|
|
||||||
|
- #### Poprawki mocy:
|
||||||
|
- ###### Umiejętności oparte na niewidzialności: Są teraz widoczne dla członków drużyny oraz obserwatorów.
|
||||||
|
- ###### Fortnite:
|
||||||
|
- ###### Naprawiono problem z niezniszczalnymi barykadami po śmierci gracza.
|
||||||
|
- ###### Wallhack:
|
||||||
|
- ###### Ulepszono logikę wykrywania niewidzialnych graczy.
|
||||||
|
- ###### Dźwiękowiec / Stópkarz / Obserwator:
|
||||||
|
- ###### Zaktualizowano kod, aby poprawnie współpracował z niewidzialnymi graczami.
|
||||||
|
- ###### I więcej...
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.1.b9</b></summary>
|
||||||
|
|
||||||
|
- #### Ogólne:
|
||||||
|
- ###### Dodano Crash Handler w celu poprawy stabilności serwera (Podziękowania dla cj za pomoc).
|
||||||
|
- ###### Dodano rzadkość umiejętności (Skill Rarity - wprowadzono poziomy rzadkości dla mocy).
|
||||||
|
- ###### Dodano limit 'MaxPerServer' (ogranicza liczbę osób, które mogą korzystać z tej samej umiejętności jednocześnie).
|
||||||
|
- ###### Zastąpiono model "ghost_speaker.vmd" modelem "spray_plane.vmdl".
|
||||||
|
|
||||||
|
- #### Poprawki mocy:
|
||||||
|
- ###### Skupienie:
|
||||||
|
- ###### Naprawiono i ulepszono kontrolę odrzutu (recoil control).
|
||||||
|
- ###### Re-Zombie / Feniks:
|
||||||
|
- ###### Zablokowano możliwość nadużywania (exploitu) odradzania się podczas zmiany drużyny.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.1.b8</b></summary>
|
||||||
|
|
||||||
|
- #### Ogólne:
|
||||||
|
- ###### Zastąpiono [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) biblioteką [RayTraceApi](https://github.com/FUNPLAY-pro-CS2/Ray-Trace).
|
||||||
|
- ###### Zaktualizowano CounterStrikeSharp do najnowszej wersji.
|
||||||
|
- ###### Nowa komenda do testowania umiejętności: `css_next_skill <(null)/-1/index>`.
|
||||||
|
- ###### Zaktualizowano sygnatury gamedata.
|
||||||
|
- ###### Zastąpiono bezpośrednie referencje do obiektów indeksami encji (entity indices) w celu poprawy bezpieczeństwa pamięci.
|
||||||
|
- ###### Naprawiono ścieżki modeli agentów.
|
||||||
|
- ###### Umiejętności są teraz automatycznie wyłączane, gdy gracz opuszcza serwer.
|
||||||
|
- ###### Dodano sprawdzenia wartości null (null-pointer checks) dla poprawy stabilności.
|
||||||
|
|
||||||
|
- #### Poprawki mocy:
|
||||||
|
- ###### Aim Lock:
|
||||||
|
- ###### Ulepszono celowanie w głowę przeciwnika.
|
||||||
|
- ###### Anomalia / Skrytobójca / Kamera / Odpychacz / Zamiana Miejsc / Teleporter:
|
||||||
|
- ###### Ulepszono pozycjonowanie kamery podczas teleportacji.
|
||||||
|
- ###### Ostrożne pociski / Strzał Wybuchowy / Krucha Bomba:
|
||||||
|
- ###### Zaprojektowano na nowo logikę z powodu zmian w zdarzeniu `OnTakeDamage`.
|
||||||
|
- ###### Ogień Przyjacielski:
|
||||||
|
- ###### Naprawiono działanie umiejętności, gdy ogień przyjacielski jest wyłączony na serwerze (tryb Uproszczony/Casual).
|
||||||
|
- ###### Hologram:
|
||||||
|
- ###### Zablokowano możliwość wyrzucania i podnoszenia broni podczas bycia w formie hologramu.
|
||||||
|
- ###### Analfabeta:
|
||||||
|
- ###### Naprawiono błąd z poprawnym wyświetlaniem tekstu.
|
||||||
|
- ###### Stópkarz:
|
||||||
|
- ###### Naprawiono problemy związane z licznikami czasu (timerami).
|
||||||
|
- ###### Ninja:
|
||||||
|
- ###### Naprawiono błąd, przez który początkowy stan niewidzialności nigdy się nie aktualizował.
|
||||||
|
- ###### Skupienie / Szybkostrzelność:
|
||||||
|
- ###### Zaktualizowano kod, aby pasował do nowej struktury `AimPunchServices`.
|
||||||
|
- ###### NoClip / Cień / Iana:
|
||||||
|
- ###### Przeniesiono logikę na `TraceHullShape` w celu dokładniejszego wykrywania kolizji.
|
||||||
|
- ###### Re-Zombie:
|
||||||
|
- ###### Zablokowano możliwość używania broni w trybie zombie oraz zwiększono zdrowie do 500 HP.
|
||||||
|
|
||||||
|
- #### Znane problemy:
|
||||||
|
- ###### Długi Nóż:
|
||||||
|
- ###### Wykrywanie prawego przycisku myszy jest obecnie zepsute na systemach Linux (pomimo poprawnych sygnatur).
|
||||||
|
- ###### Iluzjonista:
|
||||||
|
- ###### Błąd z T-Pose: Po dodaniu animgraph_2, modele postaci nie mają wbudowanych żadnych animacji. Na ten moment nie ma możliwości naprawienia tego bez dodawania własnych animacji z Warsztatu Steam.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.1.b7</b></summary>
|
||||||
|
|
||||||
|
- #### Ogólne:
|
||||||
|
- ###### Podniesiono wersję modułu do **1.2.1.b7**.
|
||||||
|
- ###### Zaimplementowano **HTMLEncoder** w celu zwiększenia bezpieczeństwa wiadomości i ich ochrony.
|
||||||
|
- ###### Zaktualizowano funkcję `SkillAction`, aby zwracała wynik wywołanej metody (`object?`) lub `null`, jeśli nie została znaleziona.
|
||||||
|
- ###### Przebudowano system dystrybucji zdarzeń graczy, aby wywoływał `SkillAction` **tylko raz na każdą unikalną aktywną umiejętność**, co zmniejsza liczbę nadmiarowych wywołań.
|
||||||
|
- ###### Przełączono logikę pomiaru czasu na używanie `Server.CurrentTime` zamiast `EngineTime`.
|
||||||
|
- ###### Dodano informacje w konsoli podczas uruchamiania oraz automatyczne **sprawdzanie wersji** przy ładowaniu wtyczki.
|
||||||
|
- ###### Zaimplementowano **automatyczne kopiowanie** plików gamedata, bibliotek DLL oraz plików językowych podczas procesu budowania (autor: @vinicius-trev).
|
||||||
|
- ###### Zaktualizowano główne zależności: `CounterStrikeSharp.API` do wersji **1.0.364** oraz `MaxMind.Db` do wersji **5.0.0** (autor: @vinicius-trev).
|
||||||
|
- ###### Dodano **obsługę geolokalizacji** dla Turcji (`tr`) i Czech (`cz`).
|
||||||
|
- ###### Dodano obsługę **języka tureckiego (`tr`)** (autor: @brkvlr) oraz ulepszono tłumaczenia dla **języka portugalskiego brazylijskiego (`pt-br`)** (autor: @vinicius-trev).
|
||||||
|
- ###### W przypadku braku tłumaczenia system **używa teraz tekstu angielskiego** zamiast wyświetlania surowego klucza tłumaczenia.
|
||||||
|
- ###### **SkillUtils:** Naprawiono błędy wyboru punktów odrodzenia, problemy z referencjami pamięci oraz dodano obsługę parametru `maxHealth` dla funkcji `AddHealth`.
|
||||||
|
- ###### Naprawiono błąd, przez który **klawisz E** (interakcja/rozbrajanie) był przerywany przez użycie umiejętności; gracze mogą teraz rozbrajać bombę i wchodzić w interakcję z obiektami bez zakłóceń.
|
||||||
|
- ###### Licznik czasu systemu głosowania resetuje się teraz poprawnie po każdym głosowaniu.
|
||||||
|
|
||||||
|
- #### Poprawki mocy:
|
||||||
|
- ##### Pilot (Rework):
|
||||||
|
- ###### Całkowicie przepisano logikę skoku. Lot wymaga teraz **podwójnego kliknięcia** klawisza skoku, aby go aktywować.
|
||||||
|
- ##### Błazen (Rework):
|
||||||
|
- ###### Zrefaktoryzowano system na działający indywidualnie dla każdego gracza (**per-player system**) wraz z poprawą stabilności licznika czasu. Licznik czasu Błazna **resetuje się** teraz, gdy gracz próbuje podłożyć lub rozbroić bombę.
|
||||||
|
- ##### NoClip (Rework):
|
||||||
|
- ###### Całkowita Rework logiki ruchu; ulepszono wykrywanie kolizji, aby **zapobiec utykaniu** w obiektach oraz zapewniono płynniejszy lot.
|
||||||
|
- ##### Duszek / C4 Kamuflaż / Ninja:
|
||||||
|
- ###### **Obserwatorzy widzą teraz niewidzialnych graczy.**
|
||||||
|
- ###### Ulepszono funkcję ukrywania bomby i naprawiono problem ze spamowaniem konsoli.
|
||||||
|
- ##### Odwrót / Resp Wroga:
|
||||||
|
- ###### Naprawiono błąd związany z niepoprawną interpretacją punktu odrodzenia.
|
||||||
|
- ##### Teleporter:
|
||||||
|
- ###### Mechanika została zmieniona na **procentową szansę** na zamianę miejsc z wrogiem, zamiast gwarantowanych 100%.
|
||||||
|
- ##### Hazardzista:
|
||||||
|
- ###### Naprawiono błąd, który pozwalał na odświeżenie umiejętności bez posiadania wymaganych pieniędzy.
|
||||||
|
- ##### Cień:
|
||||||
|
- ###### Naprawiono problemy związane z logiką teleportacji.
|
||||||
|
- ##### Ludzka bomba:
|
||||||
|
- ###### Zablokowano możliwość korzystania z umiejętności podczas zmiany drużyny, aby zapobiec nadużyciom (exploitom).
|
||||||
|
- ##### Bejsbolista:
|
||||||
|
- ###### Granaty wabiące (decoy) mają teraz taką samą kolizję jak gracze (**PlayerClip**).
|
||||||
|
- ##### Papito:
|
||||||
|
- ###### Główna refaktoryzacja oraz **naprawa crashy serwera** związanych z wymianą broni.
|
||||||
|
- ##### Replikator:
|
||||||
|
- ###### Dodano **animacje kucania** dla replik, aby dopasować je do ruchu gracza.
|
||||||
|
- ##### Mistrz Ostrza / Scyzoryk / Rozbrojenie / Długi Nóż / Długi Zeus / Zabójczy Flash:
|
||||||
|
- ###### Ulepszono obsługę broni typu **Bagnet** (Bayonet).
|
||||||
|
- ###### Dodano opcje konfiguracyjne **friendlyFire** dla `LongKnife`, `LongZeus` oraz `KillerFlash`.
|
||||||
|
- ##### Samowolka / Krótka Bomba / Wyluzowany:
|
||||||
|
- ###### Powiadomienia docierają teraz do wszystkich prawidłowych graczy, niezależnie od tego, czy żyją; dodano obsługę `BombAbortPlant`.
|
||||||
|
- ##### Niszczyciel Stref:
|
||||||
|
- ###### Dodano komunikat podczas przebywania na wyłączonym bombsite.
|
||||||
|
- ##### Wallhack:
|
||||||
|
- ###### Podświetlenie (glow) jest teraz poprawnie wyłączane dla martwych graczy.
|
||||||
|
- ##### Dźwiękowiec (Rework):
|
||||||
|
- ###### Przerobiono umiejętność tak, aby automatycznie odtwarzała dźwięk co 2 sekundy (słyszalny tylko dla gracza z tą umiejętnością).
|
||||||
|
|
||||||
|
- #### Nowe moce:
|
||||||
|
- ##### Aim Lock:
|
||||||
|
- ###### Ustawia celownik na najbliższym przeciwniku przez ograniczony czas.
|
||||||
|
- ##### Naprowadzane Granaty:
|
||||||
|
- ###### Twoje granaty (z wyjątkiem dymnych) are przyciągane do pobliskich wrogów.
|
||||||
|
- ##### Magneto:
|
||||||
|
- ###### Odpycha nadlatujące granaty wroga od gracza.
|
||||||
|
- ##### Bomberman:
|
||||||
|
- ###### Rozmieszcza granaty odłamkowe (HE), które wybuchają tylko wtedy, gdy wróg znajdzie się w ich zasięgu.
|
||||||
|
- ##### Analfabeta:
|
||||||
|
- ###### Dopóki użytkownik żyje, wrogowie nie mogą czytać czatu ani informacji na HUD-zie.
|
||||||
|
- ##### Gorąca Bomba:
|
||||||
|
- ###### C4 zadaje stałe obrażenia osobie niosącej bombę tak długo, jak żyje właściciel umiejętności.
|
||||||
|
- ##### Iluzjonista:
|
||||||
|
- ###### Tworzy replikę, która idzie prosto przed siebie, aby odwrócić uwagę wrogów.
|
||||||
|
- ##### Magnetyczny Wabik:
|
||||||
|
- ###### Granaty wabiące (decoy) przyciągają pobliskich graczy do swojego środka.
|
||||||
|
- ##### TNóż do Rzucania:
|
||||||
|
- ###### Dodaje możliwość rzucania we wrogów zabójczym nożem.
|
||||||
|
- ##### Nieważkość:
|
||||||
|
- ###### Granaty lecą szybciej i nie działa już na nie grawitacja.
|
||||||
|
- ##### Dzikie Rzuty:
|
||||||
|
- ###### Sprawia, że wybrany gracz "zapomina swoich lineupów", co skutkuje losowymi trajektoriami rzutów granatów.
|
||||||
|
- ##### Zadymiarz:
|
||||||
|
- ###### Twoje granaty dymne nigdy się nie kończą.
|
||||||
|
|
||||||
|
- #### Nowe komendy:
|
||||||
|
- ###### `css_bot_place <slot : int> <godmode : bool>` - Teleportuje bota na pozycję gracza z opcjonalnym trybem godmode.
|
||||||
|
- ###### `!sethealth <health : int>` - Komenda dla administratora do zarządzania zdrowiem i testowania.
|
||||||
|
- ###### `!plantedbomb <seconds : float>` - Komenda do testowania stanów i logiki związanej z podłożoną bombą.
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>v1.2.0</b></summary>
|
<summary><b>v1.2.0</b></summary>
|
||||||
|
|
||||||
- #### General:
|
- #### Ogólne:
|
||||||
- ###### Zmieniono nazwę pluginu z `!jRandomSkills` na `jRandomSkills`.
|
- ###### Zmieniono nazwę pluginu z `!jRandomSkills` na `jRandomSkills`.
|
||||||
- ###### Poprawiono literówkę w uprawnieniach z `@jRandmosSkills` na `@jRandomSkills`.
|
- ###### Poprawiono literówkę w uprawnieniach z `@jRandmosSkills` na `@jRandomSkills`.
|
||||||
- ###### Domyślnie wyłączono `DebugMode` w konfiguracji (przez: [@vinicius-trev](https://github.com/vinicius-trev)).
|
- ###### Domyślnie wyłączono `DebugMode` w konfiguracji (przez: [@vinicius-trev](https://github.com/vinicius-trev)).
|
||||||
|
|
@ -535,7 +804,7 @@ Plugin korzysta z zawartości następujących projektów:
|
||||||
<details>
|
<details>
|
||||||
<summary><b>v1.1.9a</b></summary>
|
<summary><b>v1.1.9a</b></summary>
|
||||||
|
|
||||||
- #### General:
|
- #### Ogólne:
|
||||||
- ###### Zaktualizowano zależności do najnowszej wersji.
|
- ###### Zaktualizowano zależności do najnowszej wersji.
|
||||||
- ###### Aktualizacja sygnatur (jRandomSkills.gamedata.json).
|
- ###### Aktualizacja sygnatur (jRandomSkills.gamedata.json).
|
||||||
- ###### FlashingHtmlHudFix jest teraz wyłączony podczas rozgrzewki.
|
- ###### FlashingHtmlHudFix jest teraz wyłączony podczas rozgrzewki.
|
||||||
|
|
@ -616,7 +885,7 @@ Plugin korzysta z zawartości następujących projektów:
|
||||||
- ###### Dodano konfigurowalny czas blokady na początku rundy.
|
- ###### Dodano konfigurowalny czas blokady na początku rundy.
|
||||||
- ##### Rozbrojenie:
|
- ##### Rozbrojenie:
|
||||||
- ###### Powrót do upuszczania broni zamiast zmiany na slot3.
|
- ###### Powrót do upuszczania broni zamiast zmiany na slot3.
|
||||||
- ###### Zmniejszono szansę na upuszczenie broni: (20–50)% → (20–35)%.
|
- ###### Zmniejszono szansę na upuszczenie broni: (20-50)% → (20-35)%.
|
||||||
- ##### Kurczak:
|
- ##### Kurczak:
|
||||||
- ###### Zmieniła się metoda poruszania się kurczaka.
|
- ###### Zmieniła się metoda poruszania się kurczaka.
|
||||||
- ###### Gracz widzi model swojego kurczaka.
|
- ###### Gracz widzi model swojego kurczaka.
|
||||||
|
|
|
||||||
322
readme.md
322
readme.md
|
|
@ -13,7 +13,7 @@
|
||||||
> This repository is a fork of the [project](https://github.com/jakubbartosik/dRandomSkills) created by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik).
|
> This repository is a fork of the [project](https://github.com/jakubbartosik/dRandomSkills) created by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik).
|
||||||
|
|
||||||
## 💡 About
|
## 💡 About
|
||||||
jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gameplay! In each round, you randomly receive one of the unique skills – from invisibility and explosive shots to camera manipulation. Surprise your opponents, take control of the match, and discover dozens of creative abilities that transform the game's dynamics!
|
jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gameplay! In each round, you randomly receive one of the unique skills - from invisibility and explosive shots to camera manipulation. Surprise your opponents, take control of the match, and discover dozens of creative abilities that transform the game's dynamics!
|
||||||
|
|
||||||
#### Choose language:
|
#### Choose language:
|
||||||
<a href="./readme-pl.md">
|
<a href="./readme-pl.md">
|
||||||
|
|
@ -29,6 +29,8 @@ jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gamep
|
||||||
- **French** [by: [@felyjyn](https://github.com/felyjyn)]
|
- **French** [by: [@felyjyn](https://github.com/felyjyn)]
|
||||||
- **Portuguese (Brazilian)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
|
- **Portuguese (Brazilian)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
|
||||||
- **German** [by: [@Enrory](https://github.com/Enrory)]
|
- **German** [by: [@Enrory](https://github.com/Enrory)]
|
||||||
|
- **Turkish** [by: [@brkvlr](https://github.com/brkvlr), [@ByDexterTR](https://github.com/ByDexterTR)]
|
||||||
|
- **Russian** [by: [@213sdfsdgf](https://github.com/213sdfsdgf)]
|
||||||
- **Simplified Chinese** [GrokAI / ChatGPT]
|
- **Simplified Chinese** [GrokAI / ChatGPT]
|
||||||
|
|
||||||
## 🖼️ Preview
|
## 🖼️ Preview
|
||||||
|
|
@ -40,19 +42,20 @@ Join the 3v3 test server and try out the jRandomSkills plugin:
|
||||||
- **Address**: `jRandomSkills@pukawka.pl`
|
- **Address**: `jRandomSkills@pukawka.pl`
|
||||||
- **Password**: `public`
|
- **Password**: `public`
|
||||||
- **Opening Hours**: `22:00-17:00 UTC`
|
- **Opening Hours**: `22:00-17:00 UTC`
|
||||||
- **Connect URL**: `steam://connect/51.38.122.215:27235/public`
|
- **Connect URL**: `steam://connect/51.38.122.215:27215/public`
|
||||||
- **Connect**: `connect 51.38.122.215:27235; password public`
|
- **Connect**: `connect 51.38.122.215:27215; password public`
|
||||||
|
|
||||||
Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.html).
|
Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.html).
|
||||||
|
|
||||||
|
|
||||||
## ✨ Current Skills (112)
|
## ✨ Current Skills (124)
|
||||||
<details>
|
<details>
|
||||||
<summary>The table below lists all available skills in the game, along with their descriptions.</summary>
|
<summary>The table below lists all available skills in the game, along with their descriptions.</summary>
|
||||||
|
|
||||||
| Name | Description | Cooldown / Range |
|
| Name | Description | Cooldown / Range |
|
||||||
| - | - | - |
|
| - | - | - |
|
||||||
| Aimbot | Every bullet you hit counts as a headshot | - |
|
| Aimbot | Every bullet you hit counts as a headshot | - |
|
||||||
|
| Aim Lock | Click [css_useSkill] to lock your aim on the nearest enemy | 20 s |
|
||||||
| Anomaly | You rewind a few seconds back in time | 15 s |
|
| Anomaly | You rewind a few seconds back in time | 15 s |
|
||||||
| Anti-Flash | You are immune to flashbangs, and your flashbangs last 7 seconds | - |
|
| Anti-Flash | You are immune to flashbangs, and your flashbangs last 7 seconds | - |
|
||||||
| Iron Head | You take no damage from headshots | - |
|
| Iron Head | You take no damage from headshots | - |
|
||||||
|
|
@ -75,6 +78,7 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
| Darkness | Applies a darkness effect to a chosen enemy | - |
|
| Darkness | Applies a darkness effect to a chosen enemy | - |
|
||||||
| Deactivator | Choose a player whose skill you want to disable | - |
|
| Deactivator | Choose a player whose skill you want to disable | - |
|
||||||
| Deaf | Choose a player to mute all sounds for | - |
|
| Deaf | Choose a player to mute all sounds for | - |
|
||||||
|
| Death Bomb | You explode upon death, killing nearby players | - |
|
||||||
| Disarmament | You have a random chance to make an enemy drop their weapon on hit | (20 - 35)% |
|
| Disarmament | You have a random chance to make an enemy drop their weapon on hit | (20 - 35)% |
|
||||||
| Rangefinder | You can see the distance to the nearest enemy | - |
|
| Rangefinder | You can see the distance to the nearest enemy | - |
|
||||||
| Dash | Perform a second jump to dash | - |
|
| Dash | Perform a second jump to dash | - |
|
||||||
|
|
@ -100,7 +104,11 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
| Healing Smoke | Your smoke grenades heal | - |
|
| Healing Smoke | Your smoke grenades heal | - |
|
||||||
| Hermit | Killing restores ammo and a portion of health | - |
|
| Hermit | Killing restores ammo and a portion of health | - |
|
||||||
| Holy Hand Grenade | Your HE grenades deal double damage and have double range| - |
|
| Holy Hand Grenade | Your HE grenades deal double damage and have double range| - |
|
||||||
|
| Homing Grenades | Your grenades (except smokes) are attracted to enemies | - |
|
||||||
|
| Hot Bomb | As long as you are alive, the bomb deals damage to its carrier | - |
|
||||||
| Hologram | Click [css_useSkill] to control your hologram for a few seconds | 30 s |
|
| Hologram | Click [css_useSkill] to control your hologram for a few seconds | 30 s |
|
||||||
|
| Illiterate | As long as you are alive, your enemies cannot read | - |
|
||||||
|
| Illusionist | Click [css_useSkill] to deploy a replica that walks straight ahead | 30 s |
|
||||||
| Impostor | You start the round with an enemy player model | - |
|
| Impostor | You start the round with an enemy player model | - |
|
||||||
| Infinite Ammo | You receive infinite ammo for all your weapons | - |
|
| Infinite Ammo | You receive infinite ammo for all your weapons | - |
|
||||||
| Tracker | Choose a player who will leave a trail behind them | - |
|
| Tracker | Choose a player who will leave a trail behind them | - |
|
||||||
|
|
@ -112,10 +120,12 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
| Life Swap | Choose a player to swap health with | - |
|
| Life Swap | Choose a player to swap health with | - |
|
||||||
| Long Knife | A primary knife attack deals damage regardless of distance | - |
|
| Long Knife | A primary knife attack deals damage regardless of distance | - |
|
||||||
| Long Zeus | Zeus deals damage regardless of distance | - |
|
| Long Zeus | Zeus deals damage regardless of distance | - |
|
||||||
|
| Magnetic Decoy | Your decoy attracts nearby players towards itself | - |
|
||||||
|
| Magneto | All enemy grenades are repelled away from you | - |
|
||||||
| Magnifier | Forces the enemy's screen to zoom in, reducing their field of view | - |
|
| Magnifier | Forces the enemy's screen to zoom in, reducing their field of view | - |
|
||||||
| Medic | Click [css_useSkill] to use a healing charge that restores 50 health | 1 s |
|
| Medic | Click [css_useSkill] to use a healing charge that restores 50 health | 1 s |
|
||||||
|
| Bomb Miner | Your HE grenade only explode when there is an enemy nearby | - |
|
||||||
| Taxman | Choose a player to swap money with | - |
|
| Taxman | Choose a player to swap money with | - |
|
||||||
| Muhammed | You explode upon death, killing nearby players | - |
|
|
||||||
| Ninja | Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33% | - |
|
| Ninja | Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33% | - |
|
||||||
| No-Nades | Grenades deal no damage to you | - |
|
| No-Nades | Grenades deal no damage to you | - |
|
||||||
| Focus | No recoil while shooting | - |
|
| Focus | No recoil while shooting | - |
|
||||||
|
|
@ -150,6 +160,7 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
| Shade | You teleport behind the back of a hit enemy | - |
|
| Shade | You teleport behind the back of a hit enemy | - |
|
||||||
| Short Fuse | The bomb explodes much faster | - |
|
| Short Fuse | The bomb explodes much faster | - |
|
||||||
| Silent | Your footsteps and jumps are silent to other players | - |
|
| Silent | Your footsteps and jumps are silent to other players | - |
|
||||||
|
| Smoker | Your smoke grenades never run out | - |
|
||||||
| Sniper Elite | Click [css_useSkill] to swap your current weapon for an AWP | 0 s |
|
| Sniper Elite | Click [css_useSkill] to swap your current weapon for an AWP | 0 s |
|
||||||
| Soldier | You have a random damage multiplier | (1.15 - 1.35)x |
|
| Soldier | You have a random damage multiplier | (1.15 - 1.35)x |
|
||||||
| Soundmaker | Click [css_useSkill] to trigger a sound for every enemy | 5 s |
|
| Soundmaker | Click [css_useSkill] to trigger a sound for every enemy | 5 s |
|
||||||
|
|
@ -159,10 +170,13 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
| Thief | You can steal a skill from a chosen player | - |
|
| Thief | You can steal a skill from a chosen player | - |
|
||||||
| Third Eye | Click [css_useSkill] to activate third-person view | 0 s |
|
| Third Eye | Click [css_useSkill] to activate third-person view | 0 s |
|
||||||
| Thorns | Your opponent will receive a portion of the damage that they inflicted on you | - |
|
| Thorns | Your opponent will receive a portion of the damage that they inflicted on you | - |
|
||||||
|
| Throwing Knife | Click [css_useSkill] to throw a knife. But watch out for others | - |
|
||||||
| Toxic Smoke | Your smoke grenades deal damage | - |
|
| Toxic Smoke | Your smoke grenades deal damage | - |
|
||||||
| Wallhack | You can see enemies through walls | - |
|
| Wallhack | You can see enemies through walls | - |
|
||||||
| Watchmaker | Every grenade throw alters the round time | - |
|
| Watchmaker | Every grenade throw alters the round time | - |
|
||||||
| Weapon Swap | Click [css_useSkill] to swap weapons with a random enemy | 30 s |
|
| Weapon Swap | Click [css_useSkill] to swap weapons with a random enemy | 30 s |
|
||||||
|
| Weightlessness | Your grenades are not affected by gravity and fly faster | - |
|
||||||
|
| Wild Throws | Choose a player who will have trouble throwing grenades | - |
|
||||||
| Zeus | Zeus x27 instantly recharges | - |
|
| Zeus | Zeus x27 instantly recharges | - |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
@ -183,14 +197,13 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
3. Install **CounterStrikeSharp**.
|
3. Install **CounterStrikeSharp**.
|
||||||
- Download [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases).
|
- Download [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases).
|
||||||
- Extract it to the `C2Server/game/csgo/` folder.
|
- Extract it to the `C2Server/game/csgo/` folder.
|
||||||
4. Install **CS2TraceRay**
|
4. Install **Ray-Trace**
|
||||||
- Download [CS2TraceRay](https://github.com/schwarper/CS2TraceRay/releases)
|
- Download [RayTrace-CSS-API](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
|
||||||
- Extract it to the `CS2Server/game/csgo/addons/counterstrikesharp/` folder.
|
- Extract folder `conterstrikesharp` to the `CS2Server/game/csgo/addons/` folder.
|
||||||
|
- Download [RayTrace-MM](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
|
||||||
|
- Extract it to the `CS2Server/game/csgo/addons/` folder.
|
||||||
5. Install **jRandomSkills**
|
5. Install **jRandomSkills**
|
||||||
- Download [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
|
- Download [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
|
||||||
- Extract it to the `C2Server/game/csgo/addons/counterstrikesharp/` folder.
|
|
||||||
- IF there is a `gamedata.json` file to download:
|
|
||||||
- Extract `gamedata.json` to the `C2Server/server/game/csgo/addons/counterstrikesharp/gamedata/` folder.
|
|
||||||
|
|
||||||
## </> Server Commands
|
## </> Server Commands
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
|
|
@ -217,6 +230,10 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
| `!setscore <CT> <TT>` | `!setscore 10 7` | Set the game score | `@jRandomSkills/owner` |
|
| `!setscore <CT> <TT>` | `!setscore 10 7` | Set the game score | `@jRandomSkills/owner` |
|
||||||
| `!setstaticskill <playerName/steamID> <skill>` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandomSkills/admin` |
|
| `!setstaticskill <playerName/steamID> <skill>` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandomSkills/admin` |
|
||||||
| `!setstaticskill <playerName/steamID> None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandomSkills/admin` |
|
| `!setstaticskill <playerName/steamID> None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandomSkills/admin` |
|
||||||
|
| `!botplace [slot] [godmode]` | `!botplace 2 1` | Teleport a bot to your location | `@jRandomSkills/admin` |
|
||||||
|
| `!next_skill <name/steamID> [idx]` | `!next_skill Juzlus` | Switch skill for a player (next, previous -1, or specific idx) | `@jRandomSkills/admin` |
|
||||||
|
| `!plantedbomb [time]` | `!plantedbomb 35` | Spawn a planted C4 bomb at your position with custom or default (40s) detonation time | `@jRandomSkills/admin` |
|
||||||
|
| `!sethealth <amount>` | `!sethealth 150` | Set a specific health amount for yourself | `@jRandomSkills/admin` |
|
||||||
| `!reload` | `!reload` | Reload translations | - |
|
| `!reload` | `!reload` | Reload translations | - |
|
||||||
|
|
||||||
_Most commands require permissions, which must be set in the file: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
|
_Most commands require permissions, which must be set in the file: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
|
||||||
|
|
@ -252,10 +269,12 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
|
||||||
// 4 - Random skills for each player (Full random)
|
// 4 - Random skills for each player (Full random)
|
||||||
// 5 - Debug: Skills are assigned in turn
|
// 5 - Debug: Skills are assigned in turn
|
||||||
"YourSkillChatInfo": true, // Show your skill in chat
|
"YourSkillChatInfo": true, // Show your skill in chat
|
||||||
"KillerSkillInfo": true, // Show killer's skill in chat
|
"KillerSkillChatInfo": true, // Show killer's skill in chat
|
||||||
"TeamMateSkillInfo": true, // Show allies' skills in chat
|
"TeamMateSkillChatInfo": true, // Show allies' skills in chat
|
||||||
"SummaryAfterTheRound": true, // Show summary of the last round
|
"SummaryAfterTheRound": true, // Show summary of the last round
|
||||||
"DebugMode": false, // Write activity to the ‘Debug’ folder
|
"EnableBotSkills": true, // Enable skills for bots
|
||||||
|
"EnableBotKickDebug": false, // Kick a random bot every 45s (for debug/testing)
|
||||||
|
"DebugMode": false, // Write activity to the ‘Debug’ folder
|
||||||
"AlternativeSkillButton": null, // Possible buttons:
|
"AlternativeSkillButton": null, // Possible buttons:
|
||||||
// null, "Attack", "Jump", "Duck", "Forward", "Back",
|
// null, "Attack", "Jump", "Duck", "Forward", "Back",
|
||||||
// "Use", "Cancel", "Left", "Right", "Moveleft",
|
// "Use", "Cancel", "Left", "Right", "Moveleft",
|
||||||
|
|
@ -265,12 +284,12 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
|
||||||
// "Attack3", "Scoreboard", "Inspect"
|
// "Attack3", "Scoreboard", "Inspect"
|
||||||
"SkillTimeBeforeStart": 7.0, // How many seconds before freeze time ends should skills
|
"SkillTimeBeforeStart": 7.0, // How many seconds before freeze time ends should skills
|
||||||
// drawing be completed? (freezetime - SkillTimeBeforeStart)
|
// drawing be completed? (freezetime - SkillTimeBeforeStart)
|
||||||
"SkillHudDuration": 999.0, // How long should the HUD be visible for?
|
"SkillHudDuration": -1.0, // How long should the HUD be visible for?
|
||||||
"SkillDescriptionDuration": 999, // How long should the skill description be visible for?
|
"SkillDescriptionDuration": 7.0, // How long should the skill description be visible for?
|
||||||
"DisplayAlwaysDescription":false,// Always display skill description (SkillDescriptionDuration = 9999)
|
"DisplayAlwaysDescription":false,// Always display skill description (SkillDescriptionDuration = 9999)
|
||||||
"DisableSpectateHUD": false, // Disable HTML HUD when spectating
|
"DisableSpectateHUD": false, // Disable HTML HUD when spectating
|
||||||
"FlashingHtmlHudFix": true, // Enable FlashingHtmlHudFix
|
"EnableFlashingHtmlHudFix": false,// Enable FlashingHtmlHudFix
|
||||||
"CS2TraceRayDebug": false, // Enable trail visibility for 'Long Knife', 'Long Zeus'
|
"TraceRayBeam": false, // Enable trail visibility for 'Long Knife', 'Long Zeus'
|
||||||
"DisableHUDOnDeathPermission": "@jRandomSkills/death", // Disable the HUD after death for players with this permission
|
"DisableHUDOnDeathPermission": "@jRandomSkills/death", // Disable the HUD after death for players with this permission
|
||||||
"DisableSkillsOnRoundEnd": false,// Disable all skills at the end of the round (when the summary is visible)
|
"DisableSkillsOnRoundEnd": false,// Disable all skills at the end of the round (when the summary is visible)
|
||||||
|
|
||||||
|
|
@ -300,7 +319,12 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
|
||||||
"Color": "#ff0000", // Skill color
|
"Color": "#ff0000", // Skill color
|
||||||
"Active": true, // Enabled on startup
|
"Active": true, // Enabled on startup
|
||||||
"Name": "Aimbot", // Skill name
|
"Name": "Aimbot", // Skill name
|
||||||
"RequiredPermission": "" // Required permission
|
"RequiredPermission": "", // Required permission
|
||||||
|
"MaxPerServer": -1, // Maximum number of players allowed to have
|
||||||
|
// this skill on the server (-1 for unlimited)
|
||||||
|
"Rarity": "Common" // Rarity tier of the skill:
|
||||||
|
// Common (70x), Uncommon (14x),
|
||||||
|
// Rare (10x), Epic (5x), Legendary (1x)
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
|
|
@ -316,16 +340,262 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
|
||||||
|
|
||||||
## 🔗 Credits
|
## 🔗 Credits
|
||||||
This plugin uses content from the following projects:
|
This plugin uses content from the following projects:
|
||||||
- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - random skills system
|
- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - Random skills system
|
||||||
- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) by [schwarper](https://github.com/schwarper) - Trace Ray system
|
- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) by [schwarper](https://github.com/schwarper) - Old Trace Ray system
|
||||||
- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) by [girlglock](https://github.com/girlglock) - a fix for window flickering
|
- [Ray-Trace](https://github.com/FUNPLAY-pro-CS2/Ray-Trace) by [SlynxCZ](https://github.com/SlynxCZ) - New Trace Ray system
|
||||||
- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) by [ipsvn](https://github.com/ipsvn) - round score management
|
- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) by [girlglock](https://github.com/girlglock) - A fix for window flickering
|
||||||
|
- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) by [ipsvn](https://github.com/ipsvn) - Round score management
|
||||||
- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) by [Interesting-exe](https://github.com/Interesting-exe) - API to easily create WASD menus
|
- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) by [Interesting-exe](https://github.com/Interesting-exe) - API to easily create WASD menus
|
||||||
- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) by [aprox2](https://github.com/aprox2) - geolocation language manager
|
- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) by [aprox2](https://github.com/aprox2) - Geolocation language manager
|
||||||
- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) by [MaxMind](https://www.maxmind.com/) - geolocation data
|
- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) by [MaxMind](https://www.maxmind.com/) - Geolocation data
|
||||||
|
- [CServerSideClient](https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348) by [SLAYER](https://github.com/zakriamansoor47)
|
||||||
|
|
||||||
|
## ❤️ Special thanks
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td align="center"><a href="https://github.com/Juzlus"><img src="https://avatars.githubusercontent.com/u/41649887?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="Juzlus"/><br/><sub><b>Juzlus</b></sub></a></td><td align="center"><a href="https://github.com/vinicius-trev"><img src="https://avatars.githubusercontent.com/u/36710856?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="vinicius-trev"/><br/><sub><b>vinicius-trev</b></sub></a></td><td align="center"><a href="https://github.com/jakubbartosik"><img src="https://avatars.githubusercontent.com/u/87545618?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="jakubbartosik"/><br/><sub><b>jakubbartosik</b></sub></a></td><td align="center"><a href="https://github.com/brkvlr"><img src="https://avatars.githubusercontent.com/u/50466021?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="brkvlr"/><br/><sub><b>brkvlr</b></sub></a></td><td align="center"><a href="https://github.com/vladimir214sd"><img src="https://avatars.githubusercontent.com/u/159032035?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="vladimir214sd"/><br/><sub><b>vladimir214sd</b></sub></a></td><td align="center"><a href="https://github.com/felyjyn"><img src="https://avatars.githubusercontent.com/u/25257673?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="felyjyn"/><br/><sub><b>felyjyn</b></sub></a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/Enrory"><img src="https://avatars.githubusercontent.com/u/29148418?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="Enrory"/><br/><sub><b>Enrory</b></sub></a></td><td align="center"><a href="https://github.com/ByDexterTR"><img src="https://avatars.githubusercontent.com/u/46813962?v=4&s=75" width="75" height="75" style="border-radius:50%" alt="ByDexterTR"/><br/><sub><b>ByDexterTR</b></sub></a></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<sub>If you are a <a href="https://github.com/Juzlus/jRandomSkills/graphs/contributors">contributor</a> and want your profile removed from this list, please contact me.</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
ㅤ
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_7ee4547c02f2.png" width="75" height="75" style="border-radius:50%" alt="Ryuu Jin"/><br/><sub><b>Ryuu Jin</b></sub></td><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_f7017ab921b5.png" width="75" height="75" style="border-radius:50%" alt="cj☭"/><br/><sub><b>cj☭</b></sub></td><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_20f902436962.png" width="75" height="75" style="border-radius:50%" alt="k4chen"/><br/><sub><b>k4chen</b></sub></td><td align="center"><img src="https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars/discord_a3b321b84dc6.png" width="75" height="75" style="border-radius:50%" alt="luno"/><br/><sub><b>luno</b></sub></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<sub>If you are on this list and want your profile removed, please contact me.</sub>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
## 📋 Changelog
|
## 📋 Changelog
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.2.b2</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Updated CSS dependency to version 1.0.369.
|
||||||
|
- ###### Upgraded the project from .NET 8.0 to .NET 10.0.
|
||||||
|
- ###### Updated Turkish language translation by [@ByDexterTR](https://github.com/ByDexterTR)].
|
||||||
|
- ###### Added Russian language translation by [@213sdfsdgf](https://github.com/213sdfsdgf)].
|
||||||
|
- ###### Fixed an issue with incorrect display of Arabic nicknames.
|
||||||
|
- ###### Used ForceFullUpdate to resolve the "FATAL ERROR: CopyExistingEntity" crash.
|
||||||
|
- ###### Disabled stale HandleCommandDrop hook to avoid crashes when a player joins a team (thanks to [@vladimir214sd](https://github.com/vladimir214sd)).
|
||||||
|
- ###### Added new signatures to gamedata.
|
||||||
|
- ###### Added the ability to configure the number of grenades for every skill that uses grenades as part of its ability (e.g., Miner, AntyFlash, MagneticDecoy, etc.).
|
||||||
|
|
||||||
|
- #### Skill improvements:
|
||||||
|
- ###### Re-Zombie:
|
||||||
|
- ###### Fixed weapon switching issues when a player is holding a Zeus and a knife.
|
||||||
|
- ###### Weapons are now removed for bots in zombie mode.
|
||||||
|
- ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
|
||||||
|
- ###### Ghost:
|
||||||
|
- ###### Blocked the ability to use the Zeus.
|
||||||
|
- ###### Blocked the ability to use the SG556 (`weapon_sg556`).
|
||||||
|
- ###### Thorns:
|
||||||
|
- ###### Added a configurable maximum health limit (37 HP) for the damage that can be reflected.
|
||||||
|
- ###### Second Life:
|
||||||
|
- ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
|
||||||
|
- ###### Phoenix:
|
||||||
|
- ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
|
||||||
|
- ###### Chicken:
|
||||||
|
- ###### Blocked the ability to use the SG556 (`weapon_sg556`).
|
||||||
|
- ###### Wallhack:
|
||||||
|
- ###### Fixed a bug that caused temporary enemy highlighting right after death.
|
||||||
|
- ###### Cypher:
|
||||||
|
- ###### Added camera position persistence.
|
||||||
|
- ###### God Mode:
|
||||||
|
- ###### Fixed an issue with permanent immortality triggering after reaching exactly 0 HP.
|
||||||
|
- ###### Weapons Swap:
|
||||||
|
- ###### The ammo count is now also transferred when weapons are swapped.
|
||||||
|
- ###### Muhammed:
|
||||||
|
- ###### Renamed the skill to "DeathBomb".
|
||||||
|
- ###### Spectator:
|
||||||
|
- ###### Fixed a bug where a player with the Chicken skill would still display as a ragdoll after death when spectated.
|
||||||
|
- ###### Friendly Fire:
|
||||||
|
- ###### The skill now works even when the server's mp_friendlyfire setting is set to 0.
|
||||||
|
- ###### Baseball:
|
||||||
|
- ###### Disabled teammate killing.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.2.b1</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Updated project dependencies.
|
||||||
|
- ###### Implemented `EntityManager` for automated entity cleanup and memory management.
|
||||||
|
- ###### Added configuration to enable or disable skills for bots.
|
||||||
|
- ###### Stability and performance improvements.
|
||||||
|
|
||||||
|
- #### Skill improvements:
|
||||||
|
- ###### Invisibility-based skills: Now visible to teammates and spectators.
|
||||||
|
- ###### Fortnite:
|
||||||
|
- ###### Fixed an issue with indestructible barricades after player death.
|
||||||
|
- ###### Wallhack:
|
||||||
|
- ###### Improved detection logic for invisible players.
|
||||||
|
- ###### Soundmaker / Jackal / Spectator:
|
||||||
|
- ###### Updated to correctly work with invisible players.
|
||||||
|
- ###### And more...
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.1.b9</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Added Crash Handler to improve server stability (Thanks to cj for help).
|
||||||
|
- ###### Added Skill Rarity (added rarity levels to skills).
|
||||||
|
- ###### Added 'MaxPerServer' limit (limits how many people can use the same skill).
|
||||||
|
- ###### Replaced model "ghost_speaker.vmd" with "spray_plane.vmdl".
|
||||||
|
|
||||||
|
- #### Skill improvements:
|
||||||
|
- ###### Focus:
|
||||||
|
- ###### Fixed and improved recoil control.
|
||||||
|
- ###### ReZombie / Phoenix:
|
||||||
|
- ###### Blocked respawn exploit when changing teams.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.1.b8</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Replaced [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) with [RayTraceApi](https://github.com/FUNPLAY-pro-CS2/Ray-Trace).
|
||||||
|
- ###### Updated CounterStrikeSharp to the latest version.
|
||||||
|
- ###### New command for skill testing: `css_next_skill <(null)/index>`.
|
||||||
|
- ###### Updated gamedata signatures.
|
||||||
|
- ###### Replaced CS2TraceRay with `RayTraceApi`.
|
||||||
|
- ###### Replaced direct object references with entity indices to improve memory safety.
|
||||||
|
- ###### Fixed agent model paths.
|
||||||
|
- ###### Skills are now automatically disabled when a player leaves the server.
|
||||||
|
- ###### Added null-pointer checks for improved stability.
|
||||||
|
|
||||||
|
- #### Skill improvements:
|
||||||
|
- ###### AimLock:
|
||||||
|
- ###### Aiming at the opponent's head has been improved.
|
||||||
|
- ###### Anomaly / Behind / Cypher / Push / SwapPosition / Teleporter:
|
||||||
|
- ###### Improved camera positioning during teleportation.
|
||||||
|
- ###### CarefulBullets / ExplosiveShot / FragileBomb:
|
||||||
|
- ###### Redesigned logic due to changes in the `OnTakeDamage` event.
|
||||||
|
- ###### FriendlyFire:
|
||||||
|
- ###### Fixed skill functionality when friendly fire is disabled on the server (Casual mode).
|
||||||
|
- ###### Hologram:
|
||||||
|
- ###### Blocked weapon dropping and picking up while in hologram form.
|
||||||
|
- ###### Illiterate:
|
||||||
|
- ###### Fixed a bug with correct text display.
|
||||||
|
- ###### Tracker:
|
||||||
|
- ###### Fixed issues related to timers.
|
||||||
|
- ###### Ninja:
|
||||||
|
- ###### Fixed a bug where the initial invisibility state never update.
|
||||||
|
- ###### NoRecoil / QuickShot:
|
||||||
|
- ###### Updated to match the new `AimPunchServices` structure.
|
||||||
|
- ###### Noclip / Shade / Iana:
|
||||||
|
- ###### Migrated to `TraceHullShape` for more accurate collision detection.
|
||||||
|
- ###### ReZombie:
|
||||||
|
- ###### Disabled weapon usage in zombie mode and increased HP to 500.
|
||||||
|
|
||||||
|
- #### Known Issues:
|
||||||
|
- ###### LongKnife:
|
||||||
|
- ###### Right-click detection is currently broken on Linux (despite valid signatures).
|
||||||
|
- ###### Illusionist:
|
||||||
|
- ###### T-Pose bug: After adding animgraph_2, the character models don't have any animations built in. So, for now, there isn't really any way to do this without adding your own from the Workshop.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.1.b7</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Bumped module version to **1.2.1.b7**.
|
||||||
|
- ###### Implemented **HTMLEncoder** for improved message security and protection.
|
||||||
|
- ###### Updated `SkillAction` to return the invoked method result (`object?`) or `null` if not found.
|
||||||
|
- ###### Reworked player event dispatching to call `SkillAction` **once per distinct active skill**, reducing redundant invocations.
|
||||||
|
- ###### Switched timing logic to use `Server.CurrentTime` instead of `EngineTime`.
|
||||||
|
- ###### Added startup console information and an automated **version check** on plugin load.
|
||||||
|
- ###### Implemented **automatic copying** of gamedata, DLLs, and language files during the build process (by @vinicius-trev).
|
||||||
|
- ###### Updated core dependencies: `CounterStrikeSharp.API` to **1.0.364** and `MaxMind.Db` to **5.0.0** (by @vinicius-trev).
|
||||||
|
- ###### Added **geolocation support** for Turkey (`tr`) and Czechia (`cz`).
|
||||||
|
- ###### Added **Turkish (`tr`)** language support (by @brkvlr) and improved **Portuguese-Brazil (`pt-br`)** translations (by @vinicius-trev).
|
||||||
|
- ###### If a translation is missing, the system now **falls back to English text** instead of displaying the raw translation key.
|
||||||
|
- ###### **SkillUtils:** Fixed spawn point selection bugs, memory referencing issues, and added `maxHealth` parameter support for `AddHealth`.
|
||||||
|
- ###### Fixed an issue where the **E key** (interact/defuse) was interrupted by skill usage; players can now defuse and interact with objects without interference.
|
||||||
|
- ###### Vote system timer now correctly resets after each vote.
|
||||||
|
|
||||||
|
- #### Skill improvements:
|
||||||
|
- ##### Pilot (Rework):
|
||||||
|
- ###### Completely rewritten jump and fuel logic. Flight now requires a **double-click** of the jump key to activate.
|
||||||
|
- ##### Jester (Rework):
|
||||||
|
- ###### Refactored to a **per-player system** with improved timer stability. The Jester timer now **resets** when the player attempts to plant or defuse the bomb.
|
||||||
|
- ##### Noclip (Rework):
|
||||||
|
- ###### Total rework of the movement logic; improved collision detection to **prevent getting stuck** in objects and ensured smoother flight.
|
||||||
|
- ##### Ghost / C4 Camouflage / Ninja:
|
||||||
|
- ###### **Observers can now see invisible players.**
|
||||||
|
- ###### Improved bomb hiding function and fixed console spam issues.
|
||||||
|
- ##### Retreat / Enemy Spawn:
|
||||||
|
- ###### Fixed an error with incorrect spawn point interpretation.
|
||||||
|
- ##### Teleporter:
|
||||||
|
- ###### The mechanic has been changed to a **percentage chance** of swapping places with an enemy, rather than a guaranteed 100%.
|
||||||
|
- ##### Gambler:
|
||||||
|
- ###### Fixed a bug that allowed the skill to be refreshed without having the required money.
|
||||||
|
- ##### Shade:
|
||||||
|
- ###### Fixed issues related to teleportation logic.
|
||||||
|
- ##### Muhammed:
|
||||||
|
- ###### Blocked skill usage during team switching to prevent exploits.
|
||||||
|
- ##### Baseball:
|
||||||
|
- ###### Decoy grenades now have the same collision as players (**PlayerClip**).
|
||||||
|
- ##### Sniper Elite:
|
||||||
|
- ###### Major refactoring and **fix for server crashes** related to weapon swapping.
|
||||||
|
- ##### Replicator:
|
||||||
|
- ###### Added **crouching animations** for replicas to match player movement.
|
||||||
|
- ##### Blade Master / Cutter / Disarmament / Long Knife / Long Zeus / Killer Flash:
|
||||||
|
- ###### Improved handling for **Bayonet** weapon types.
|
||||||
|
- ###### Added **friendlyFire** configuration options for `LongKnife`, `LongZeus`, and `KillerFlash`.
|
||||||
|
- ##### Planter / Short Bomb / Chill Out:
|
||||||
|
- ###### Notifications now reach all valid players regardless of life status; added `BombAbortPlant` support.
|
||||||
|
- ##### Area Reaper:
|
||||||
|
- ###### Added a message while being on a disabled bombsite.
|
||||||
|
- ##### Wallhack:
|
||||||
|
- ###### Glow is now correctly disabled for dead players.
|
||||||
|
- ##### Sound Maker (Rework):
|
||||||
|
- ###### Reworked to automatically play a sound every 2 seconds (audible only for the player with skill).
|
||||||
|
|
||||||
|
- #### New skills:
|
||||||
|
- ##### Aim Lock:
|
||||||
|
- ###### Lock your aim on the nearest enemy for a limited duration.
|
||||||
|
- ##### Homing Nades:
|
||||||
|
- ###### Your grenades (except smokes) are attracted to nearby enemies.
|
||||||
|
- ##### Magneto:
|
||||||
|
- ###### Pushes incoming enemy grenades away from the player.
|
||||||
|
- ##### Miner:
|
||||||
|
- ###### Deploys HE grenades that only detonate when an enemy is within range.
|
||||||
|
- ##### Illiterate:
|
||||||
|
- ###### While the user is alive, enemies are unable to read chat or HUD information.
|
||||||
|
- ##### Hot Bomb:
|
||||||
|
- ###### The C4 deals constant damage to the carrier as long as the skill owner is alive.
|
||||||
|
- ##### Illusionist:
|
||||||
|
- ###### Deploys a replica that walks straight ahead to distract enemies.
|
||||||
|
- ##### Magnetic Decoy:
|
||||||
|
- ###### Decoy grenades attract nearby players towards the center of the decoy.
|
||||||
|
- ##### Throwing Knife:
|
||||||
|
- ###### Adds the ability to throw a lethal knife at enemies.
|
||||||
|
- ##### Weightless:
|
||||||
|
- ###### Grenades fly faster and are no longer affected by gravity.
|
||||||
|
- ##### Wild Throw:
|
||||||
|
- ###### Causes a selected player to "forget their lineups," resulting in randomized grenade trajectories.
|
||||||
|
- ##### Smoker:
|
||||||
|
- ###### Your smoke grenades never run out.
|
||||||
|
|
||||||
|
- #### New commands:
|
||||||
|
- ###### `css_bot_place <slot : int> <godmode : bool>` - Teleports a bot to the player's position with optional godmode.
|
||||||
|
- ###### `!sethealth <health : int>` - Admin command for health management and testing.
|
||||||
|
- ###### `!plantedbomb <seconds : float>` - Command for testing bomb-related states and logic.
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>v1.2.0</b></summary>
|
<summary><b>v1.2.0</b></summary>
|
||||||
|
|
||||||
|
|
@ -623,7 +893,7 @@ This plugin uses content from the following projects:
|
||||||
- ###### Added a configurable cooldown at the start of the round.
|
- ###### Added a configurable cooldown at the start of the round.
|
||||||
- ##### Disarmament:
|
- ##### Disarmament:
|
||||||
- ###### Back to dropping weapons instead of changing to slot3.
|
- ###### Back to dropping weapons instead of changing to slot3.
|
||||||
- ###### The chance of dropping weapons has been reduced: (20–50)% → (20–35)%
|
- ###### The chance of dropping weapons has been reduced: (20-50)% → (20-35)%
|
||||||
- ##### Chicken:
|
- ##### Chicken:
|
||||||
- ###### The method used to attach the chicken has changed.
|
- ###### The method used to attach the chicken has changed.
|
||||||
- ###### Player with skill can see a model of your chicken.
|
- ###### Player with skill can see a model of your chicken.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue