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:
Juzlus 2026-06-10 13:47:34 +02:00
parent cba834e8f0
commit 91761f7376
84 changed files with 6894 additions and 1689 deletions

39
.github/workflows/update_thanks.yml vendored Normal file
View 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
View file

@ -37,4 +37,5 @@ project.fragment.lock.json
# Other common ignores # Other common ignores
node_modules/ node_modules/
dist/ dist/
.env

View file

@ -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++;

View file

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

1311
github/readme-pl.md Normal file

File diff suppressed because it is too large Load diff

1321
github/readme.md Normal file

File diff suppressed because it is too large Load diff

View file

@ -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()

View file

@ -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>

View file

@ -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");

View file

@ -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
} }
} }
} }

View file

@ -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)
{ {

View file

@ -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"
} }

View file

@ -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%",

View file

@ -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%",

View file

@ -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%",

View file

@ -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"

View 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 — Выбрать"
}

View file

@ -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": " | ",

View file

@ -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%",

View file

@ -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,

View file

@ -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";
} }
} }

View file

@ -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())
{ {

View file

@ -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;
} }
} }
} }

View file

@ -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

View file

@ -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;
} }
} }
} }

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);
} }

View file

@ -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;

View file

@ -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));

View file

@ -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;
} }
} }
} }

View file

@ -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;
} }
} }
} }

View file

@ -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;

View file

@ -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;
} }
} }
} }

View file

@ -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; }
} }

View file

@ -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;
} }
} }
} }

View file

@ -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;
} }
} }
} }

View file

@ -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;
} }
} }
} }

View file

@ -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; } = [];
} }

View file

@ -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)

View file

@ -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;
} }
} }
} }

View file

@ -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

View file

@ -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;
} }
} }
} }

View file

@ -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;
} }
} }
} }

View file

@ -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

View file

@ -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)

View file

@ -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");
} }

View file

@ -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;
} }
} }
} }

View file

@ -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)

View file

@ -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);
} }
} }

View file

@ -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;
} }
} }
} }

View file

@ -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;
} }

View file

@ -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);

View file

@ -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;
} }
} }
} }

View file

@ -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);
} }
} }
} }

View file

@ -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;
} }
} }
} }

View file

@ -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()

View file

@ -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;

View file

@ -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;
} }
} }
} }

View 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
}

View file

@ -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"),

View file

@ -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);
} }

View file

@ -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
} }
} }
} }

View file

@ -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"

View file

@ -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,

View file

@ -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"
} }

View file

@ -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%",

View file

@ -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%",

View file

@ -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%",

View file

@ -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"

View file

@ -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%",

View file

@ -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": " | ",

View file

@ -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%",

View file

@ -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
View file

@ -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.