diff --git a/jRandomSkills - SRC Files/src/jRandomSkills.cs b/jRandomSkills - SRC Files/src/jRandomSkills.cs index bed51d3..0fd62d4 100644 --- a/jRandomSkills - SRC Files/src/jRandomSkills.cs +++ b/jRandomSkills - SRC Files/src/jRandomSkills.cs @@ -28,7 +28,7 @@ namespace src public override string ModuleName => "[CS2] [ jRandomSkills ]"; 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 ModuleVersion => "1.2.1.b4"; + public override string ModuleVersion => "1.2.1.b7"; public override void Load(bool hotReload) { @@ -77,7 +77,7 @@ namespace src Debug.WriteToDebug($"Loaded: {skill.Skill}"); } - internal void SkillAction(string skill, string methodName, object[]? param = null) + internal object? SkillAction(string skill, string methodName, object[]? param = null) { string className = $"src.player.skills.{skill}"; Type? type = Type.GetType(className); @@ -85,10 +85,11 @@ namespace src if (type != null && typeof(ISkill).IsAssignableFrom(type)) { MethodInfo? method = type.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public); - method?.Invoke(null, param); + return method?.Invoke(null, param); } else Server.PrintToConsole($"Could not find or load {className}"); + return null; } internal void RegisterListener(Action onTick, HookMode pre) diff --git a/jRandomSkills - SRC Files/src/lang/de.json b/jRandomSkills - SRC Files/src/lang/de.json index 161f149..f06a831 100644 --- a/jRandomSkills - SRC Files/src/lang/de.json +++ b/jRandomSkills - SRC Files/src/lang/de.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss", + "aimlock": "Aim-Lock", + "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren", + "anomaly": "Anomalie", "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück", @@ -21,6 +24,7 @@ "areareaper_select_info": "Standort zum Deaktivieren auswählen:", "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!", "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.", + "areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!", "armored": "Gepanzert", "armored_desc": "Du hast einen zufälligen Schadensmultiplikator", @@ -186,9 +190,22 @@ "holyhandgrenade": "Heilige Handgranate", "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite", + "homingnades": "Zielsuchende Granaten", + "homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen", + + "hotbomb": "Heiße Bombe", + "hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu", + "hotbomb_hint": "Vorsicht, die Bombe ist heiß!", + "iana": "Hologramm", "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern", + "illiterate": "Analphabet", + "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen", + + "illusionist": "Illusionist", + "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft", + "impostor": "Betrüger", "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell", @@ -234,6 +251,12 @@ "longzeus": "Langer Zeus", "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden", + "magneticdecoy": "Magnetischer Köder", + "magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran", + + "magneto": "Magneto", + "magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen", + "magnifier": "Lupe", "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld", "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!", @@ -243,6 +266,9 @@ "medic": "Sanitäter", "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt", + "miner": "Bomben-Miner", + "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist", + "bankrupt": "Bankrott", "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird", "bankrupt_enemy_info": "Du bist bankrott.", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung", "pilot": "Pilot", - "pilot_desc": "Fliege für eine begrenzte Zeit. Halte [USE - E] gedrückt, um zu fliegen", + "pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen", "pilot_hud_info": "Treibstoff", "planter": "Freier Planter", "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.", + "planter_planting": "Bombe wird gelegt ({0})...", "poison": "Gift", "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt", @@ -369,8 +396,11 @@ "silent": "Leise", "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos", + "smoker": "Smoker", + "smoker_desc": "Deine Rauchgranaten gehen nie aus", + "sniperelite": "Sniper Elite", - "sniperelite_customname": "Sniper Elite-Fähigkeit", + "sniperelite_customname": "Sniper-Elite-Skill", "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen", "soldier": "Soldat", @@ -387,7 +417,8 @@ "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen", "teleporter": "Teleporter", - "teleporter_desc": "Du tauschst mit dem getroffenen Gegner die Plätze", + "teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen", + "teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%", "thief": "Dieb", "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen", @@ -402,6 +433,9 @@ "thorns": "Dornen", "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat", + "throwingknife": "Wurfmesser", + "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht", + "toxicsmoke": "Giftiger Rauch", "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden", @@ -417,6 +451,14 @@ "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", + "weightless": "Schwerelosigkeit", + "weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller", + + "wildthrow": "Wilder Wurf", + "wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird", + "wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen", + "wildthrow_select_info": "Wähle einen Spieler aus:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 lädt sich sofort wieder auf", diff --git a/jRandomSkills - SRC Files/src/lang/en.json b/jRandomSkills - SRC Files/src/lang/en.json index d55af0b..80f90d1 100644 --- a/jRandomSkills - SRC Files/src/lang/en.json +++ b/jRandomSkills - SRC Files/src/lang/en.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Every bullet you hit counts as a headshot", + "aimlock": "Aim Lock", + "aimlock_desc": "Click [css_useSkill] to lock your aim on the nearest enemy", + "anomaly": "Anomaly", "anomaly_desc": "You rewind a few seconds back in time", @@ -21,6 +24,7 @@ "areareaper_select_info": "Select site to deactivate:", "areareaper_site_disabled": "Bomb site {0} has been deactivated - no bombs can be planted there!", "areareaper_used_info": "Your skill has already been used.", + "areareaper_bombsite_disabled": "This bombsite has been disabled!", "armored": "Armored", "armored_desc": "You have a random damage taken multiplier", @@ -175,7 +179,7 @@ "godmode_on": "Immortality enabled", "grenadier": "Grenadier", - "grenadier_desc": "You have infinite hegranade", + "grenadier_desc": "You have infinite hegrenade", "healingsmoke": "Healing Smoke", "healingsmoke_desc": "Your smoke grenades heal", @@ -186,9 +190,22 @@ "holyhandgrenade": "Holy Hand Grenade", "holyhandgrenade_desc": "Your HE grenades deal double damage and have double range", + "homingnades": "Homing Grenades", + "homingnades_desc": "Your grenades (except smokes) are attracted to enemies", + + "hotbomb": "Hot Bomb", + "hotbomb_desc": "As long as you are alive, the bomb deals damage to its carrier", + "hotbomb_hint": "Careful, the bomb is hot!", + "iana": "Hologram", "iana_desc": "Click [css_useSkill] to control your hologram for a few seconds", + "illiterate": "Illiterate", + "illiterate_desc": "As long as you are alive, your enemies cannot read", + + "illusionist": "Illusionist", + "illusionist_desc": "Click [css_useSkill] to deploy a replica that walks straight ahead", + "impostor": "Impostor", "impostor_desc": "You start the round with an enemy player model", @@ -234,6 +251,12 @@ "longzeus": "Long Zeus", "longzeus_desc": "Zeus deals damage regardless of distance", + "magneticdecoy": "Magnetic Decoy", + "magneticdecoy_desc": "Your decoy attracts nearby players towards itself", + + "magneto": "Magneto", + "magneto_desc": "All enemy grenades are repelled away from you", + "magnifier": "Magnifier", "magnifier_desc": "Forces the enemy's screen to zoom in, reducing their field of view", "magnifier_enemy_info": "Your field of view has been distorted!", @@ -243,6 +266,9 @@ "medic": "Medic", "medic_desc": "Click [css_useSkill] to use a healing charge that restores 50 health", + "miner": "Bomb Miner", + "miner_desc": "Your HE grenade only explode when there is an enemy nearby", + "bankrupt": "Bankrupt", "bankrupt_desc": "Choose the player who will lose all their money", "bankrupt_enemy_info": "You have gone bankrupt.", @@ -290,6 +316,7 @@ "planter": "Free Planter", "planter_desc": "You can plant the bomb anywhere, with a detonation time of 60 seconds.", + "planter_planting": "Planting ({0})...", "poison": "Poison", "poison_desc": "Choose a player who will take damage every few seconds", @@ -390,7 +417,8 @@ "swapposition_desc": "Click [css_useSkill] to swap places with a random enemy", "teleporter": "Teleporter", - "teleporter_desc": "You swap places with the hit enemy", + "teleporter_desc": "You have the chance to swap places with a hit enemy", + "teleporter_desc2": "Your chances of swapping places after a hit: {0}%", "thief": "Thief", "thief_desc": "You can steal a skill from a chosen player", @@ -405,6 +433,9 @@ "thorns": "Thorns", "thorns_desc": "Your opponent will receive a portion of the damage that they inflicted on you", + "throwingknife": "Throwing Knife", + "throwingknife_desc": "Click [css_useSkill] to throw a knife. But watch out for others", + "toxicsmoke": "Toxic Smoke", "toxicsmoke_desc": "Your smoke grenades deal damage", @@ -420,6 +451,14 @@ "weaponsswap_desc": "Click [css_useSkill] to swap weapons with a random enemy", "weaponsswap_hud_info2": "You have no weapon to swap", + "weightless": "Weightlessness", + "weightless_desc": "Your grenades are not affected by gravity and fly faster", + + "wildthrow": "Wild Throws", + "wildthrow_desc": "Choose a player who will have trouble throwing grenades", + "wildthrow_player_info": "Player '{0}' has forgotten all their lineups", + "wildthrow_select_info": "Select a player:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 instantly recharges", @@ -476,54 +515,5 @@ "menu_controlls_scroll": "W/S - Scroll", "menu_controlls_padding": " | ", - "menu_controlls_select": "E - Select", - - - - - - - - - - - - - - - - "aimlock": "Aim Lock", - "aimlock_desc": "Click [css_useSkill] to lock your aim on the nearest enemy", - - "homingnades": "Homing Grenades", - "homingnades_desc": "Your grenades (except smokes) are attracted to enemies", - - "hotbomb": "Hot Bomb", - "hotbomb_desc": "As long as you are alive, the bomb deals damage to its carrier", - "hotbomb_hint": "Careful, the bomb is hot!", - - "illiterate": "Illiterate", - "illiterate_desc": "As long as you are alive, your enemies cannot read", - - "illusionist": "Illusionist", - "illusionist_desc": "Click [css_useSkill] to deploy a replica that walks straight ahead", - - "magneticdecoy": "Magnetic Decoy", - "magneticdecoy_desc": "Your decoy attracts nearby players towards itself", - - "magneto": "Magneto", - "magneto_desc": "All enemy grenades are repelled away from you", - - "weightless": "Weightlessness", - "weightless_desc": "Your grenades are not affected by gravity and fly faster", - - "wildthrow": "Wild Throws", - "wildthrow_desc": "Choose a player who will have trouble throwing grenades", - "wildthrow_player_info": "Player '{0}' has forgotten all their lineups", - "wildthrow_select_info": "Select a player:", - - "throwingknife": "Throwing Knife", - "throwingknife_desc": "Click [css_useSkill] to throw a knife. But watch out for others", - - "planter_planting": "Planting ({0})..." + "menu_controlls_select": "E - Select" } \ No newline at end of file diff --git a/jRandomSkills - SRC Files/src/lang/fr.json b/jRandomSkills - SRC Files/src/lang/fr.json index 91cfcd7..d648e66 100644 --- a/jRandomSkills - SRC Files/src/lang/fr.json +++ b/jRandomSkills - SRC Files/src/lang/fr.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Chaque balle que vous touchez compte comme un headshot", + "aimlock": "Verrouillage de visée", + "aimlock_desc": "Cliquez sur [css_useSkill] pour verrouiller votre visée sur l'ennemi le plus proche", + "anomaly": "Anomalie", "anomaly_desc": "Vous revenez quelques secondes en arrière dans le temps", @@ -21,6 +24,7 @@ "areareaper_select_info": "Sélectionnez un site à désactiver :", "areareaper_site_disabled": "Le site de bombe {0} a été désactivé – aucune bombe ne peut y être posée !", "areareaper_used_info": "Votre compétence a déjà été utilisée.", + "areareaper_bombsite_disabled": "Ce site de bombe a été désactivé !", "armored": "Blindé", "armored_desc": "Vous avez un multiplicateur de dégâts subis aléatoire", @@ -186,9 +190,22 @@ "holyhandgrenade": "Grenade Sacrée", "holyhandgrenade_desc": "Vos grenades HE infligent le double de dégâts et ont une portée doublée", + "homingnades": "Grenades à tête chercheuse", + "homingnades_desc": "Vos grenades (sauf les fumigènes) sont attirées par les ennemis", + + "hotbomb": "Bombe brûlante", + "hotbomb_desc": "Tant que vous êtes en vie, la bombe inflige des dégâts à son porteur", + "hotbomb_hint": "Attention, la bombe est brûlante !", + "iana": "Hologramme", "iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes", + "illiterate": "Illettré", + "illiterate_desc": "Tant que vous êtes en vie, vos ennemis ne mogą pas lire", + + "illusionist": "Illusionniste", + "illusionist_desc": "Cliquez sur [css_useSkill] pour déployer une réplique qui marche droit devant", + "impostor": "Imposteur", "impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi", @@ -234,6 +251,12 @@ "longzeus": "Zeus Longue Portée", "longzeus_desc": "Le Zeus inflige des dégâts quelle que soit la distance", + "magneticdecoy": "Leurre magnétique", + "magneticdecoy_desc": "Votre leurre attire les joueurs à proximité vers lui", + + "magneto": "Magneto", + "magneto_desc": "Toutes les grenades ennemies są repoussées loin de vous", + "magnifier": "Loupe", "magnifier_desc": "Force l’écran de l’ennemi à zoomer, réduisant son champ de vision", "magnifier_enemy_info": "Votre champ de vision a été déformé !", @@ -243,6 +266,9 @@ "medic": "Médecin", "medic_desc": "Appuyez sur [css_useSkill] pour utiliser une charge de soin qui restaure 50 PV", + "miner": "Poseur de mines", + "miner_desc": "Votre grenade HE n'explose que lorsqu'un ennemi est à proximité", + "bankrupt": "Faillite", "bankrupt_desc": "Choisissez le joueur qui perdra tout son argent", "bankrupt_enemy_info": "Vous êtes en faillite.", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "{0} secondes restantes pour désamorcer", "pilot": "Pilote", - "pilot_desc": "Volez pendant un temps limité. Maintenez [UTILISER - E] pour voler", + "pilot_desc": "Volez pendant un temps limité. Double-cliquez sur saut pour voler", "pilot_hud_info": "Carburant", "planter": "Poseur Libre", "planter_desc": "Vous pouvez planter la bombe n’importe où, avec un temps de détonation de 60 secondes.", + "planter_planting": "Amorçage ({0})...", "poison": "Poison", "poison_desc": "Choisissez un joueur qui subira des dégâts toutes les quelques secondes", @@ -369,6 +396,9 @@ "silent": "Silencieux", "silent_desc": "Vos pas et vos sauts sont silencieux pour les AUTRES joueurs", + "smoker": "Fumeur", + "smoker_desc": "Vos grenades fumigènes sont illimitées", + "sniperelite": "Sniper d’Élite", "sniperelite_customname": "Compétence Sniper d’Élite", "sniperelite_desc": "Appuyez sur [css_useSkill] pour échanger votre arme actuelle contre un AWP", @@ -387,7 +417,8 @@ "swapposition_desc": "Appuyez sur [css_useSkill] pour échanger de place avec un ennemi aléatoire", "teleporter": "Téléporteur", - "teleporter_desc": "Vous échangez de place avec l’ennemi touché", + "teleporter_desc": "Vous avez une chance d'échanger votre place avec un ennemi touché", + "teleporter_desc2": "Vos chances d'échanger votre place après un coup : {0}%", "thief": "Voleur", "thief_desc": "Vous pouvez voler la compétence d’un joueur choisi", @@ -402,6 +433,9 @@ "thorns": "Épines", "thorns_desc": "Votre adversaire recevra une partie des dégâts qu’il vous a infligés", + "throwingknife": "Couteau de lancer", + "throwingknife_desc": "Cliquez sur [css_useSkill] pour lancer un couteau. Mais attention aux autres", + "toxicsmoke": "Fumée Toxique", "toxicsmoke_desc": "Vos grenades fumigènes infligent des dégâts", @@ -417,6 +451,14 @@ "weaponsswap_desc": "Appuyez sur [css_useSkill] pour échanger vos armes avec un ennemi aléatoire", "weaponsswap_hud_info2": "Vous n’avez aucune arme à échanger", + "weightless": "Apesanteur", + "weightless_desc": "Vos grenades ne sont pas affectées par la gravité et volent plus vite", + + "wildthrow": "Lancers sauvages", + "wildthrow_desc": "Choisissez un joueur qui aura des difficultés à lancer des grenades", + "wildthrow_player_info": "Le joueur '{0}' a oublié tous ses alignements (lineups)", + "wildthrow_select_info": "Sélectionnez un joueur :", + "zeus": "Zeus", "zeus_desc": "Le Zeus x27 se recharge instantanément", diff --git a/jRandomSkills - SRC Files/src/lang/pl.json b/jRandomSkills - SRC Files/src/lang/pl.json index 3063468..2570ed2 100644 --- a/jRandomSkills - SRC Files/src/lang/pl.json +++ b/jRandomSkills - SRC Files/src/lang/pl.json @@ -24,6 +24,7 @@ "areareaper_select_info": "Wybierz strefę do dezaktyw.:", "areareaper_site_disabled": "Strefa detonacji {0} została dezaktywowana - nie można na niej podłożyć bomby!", "areareaper_used_info": "Twoja moc została już wykorzystana.", + "areareaper_bombsite_disabled": "Ten bombsite został wyłączony!", "armored": "Gruby", "armored_desc": "Masz losowy mnożnik otrzymywanych obrażeń", @@ -189,17 +190,21 @@ "holyhandgrenade": "Święty Granat Ręczny", "holyhandgrenade_desc": "Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg", - "homingnades": "Namierzające Granaty", - "homingnades_desc": "Twoje granaty (oprócz dymnych) są przyciągane do wrogów", + "homingnades": "Naprowadzane Granaty", + "homingnades_desc": "Twoje granaty (z wyjątkiem dymnych) są przyciągane do wrogów", "hotbomb": "Gorąca Bomba", - "hotbomb_desc": "Póki żyjesz, bomba zadaje obrażenia nosicielowi", + "hotbomb_desc": "Dopóki żyjesz, bomba zadaje obrażenia osobie, która ją niesie", + "hotbomb_hint": "Ostrożnie, bomba parzy!", "iana": "Hologram", "iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund", "illiterate": "Analfabeta", - "illiterate_desc": "Dopóki żyjesz, twoi wrogowie nie potrafią czytać", + "illiterate_desc": "Dopóki żyjesz, Twoi wrogowie nie potrafią czytać", + + "illusionist": "Iluzjonista", + "illusionist_desc": "Naciśnij [css_useSkill], aby wypuścić replikę idącą prosto przed siebie", "impostor": "Szpieg", "impostor_desc": "Na początku rundy otrzymujesz model postaci przeciwnika", @@ -246,11 +251,11 @@ "longzeus": "Długi Zeus", "longzeus_desc": "Zeus zadaje obrażenia niezależnie od odległości", - "magneticdecoy": "Magnetyczny Decoy", - "magneticdecoy_desc": "Twój wabik przyciąga graczy wokół siebie", + "magneticdecoy": "Magnetyczny Wabik", + "magneticdecoy_desc": "Twój wabik przyciąga pobliskich graczy do siebie", "magneto": "Magneto", - "magneto_desc": "Wszystkie granaty przeciwnika są odpychane od ciebie", + "magneto_desc": "Wszystkie granaty wroga są odpychane od Ciebie", "magnifier": "Lupa", "magnifier_desc": "Przybiżasz ekran wybranemu przeciwnikowi", @@ -261,6 +266,9 @@ "medic": "Medyk", "medic_desc": "Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia", + "miner": "Bomberman", + "miner_desc": "Twoje granaty HE wybuchają tylko wtedy, gdy w pobliżu jest wróg", + "moneyswap": "Skarbówka", "moneyswap_desc": "Wybierasz gracza, z którym chcesz zamienić się pieniędzmi", "moneyswap_enemy_info": "Urząd skarbowy cię dopadł.", @@ -303,11 +311,12 @@ "psychicdefusing_hud_info": "Pozostało {0} sekund do rozbrojenia", "pilot": "Pilot", - "pilot_desc": "Latanie przez określony czas. Kliknij dwukrotnie skok, aby latać", + "pilot_desc": "Lataj przez ograniczony czas. Kliknij dwa razy skok, aby lecieć", "pilot_hud_info": "Paliwo", "planter": "Samowolka", "planter_desc": "Bombę można podłożyć w dowolnym miejscu, a czas detonacji wynosi 60 sekund.", + "planter_planting": "Plantowanie ({0})...", "poison": "Trutka", "poison_desc": "Wybierasz gracza, który co kilka sekund będzie otrzymywał obrażenia", @@ -408,7 +417,8 @@ "swapposition_desc": "Kliknij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem", "teleporter": "Teleporter", - "teleporter_desc": "Zamieniasz się miejscami z trafionym przeciwnikiem", + "teleporter_desc": "Masz szansę na zamianę miejsc z trafionym wrogiem", + "teleporter_desc2": "Szansa na zamianę miejsc po trafieniu: {0}%", "thief": "Złodziej", "thief_desc": "Możesz ukraść supermoc wybranemu graczowi", @@ -424,7 +434,7 @@ "thorns_desc": "Twój przeciwnik otrzymuje część obrażeń, które zadał ci", "throwingknife": "Nóż do Rzucania", - "throwingknife_desc": "Kliknij [css_useSkill], aby rzucić nożem. Ale uważaj na innych", + "throwingknife_desc": "Naciśnij [css_useSkill], aby rzucić nożem. Ale uważaj na innych", "toxicsmoke": "Toksyczny Dym", "toxicsmoke_desc": "Twoje granaty dymny zadają obrażenia", @@ -441,10 +451,10 @@ "weaponsswap_desc": "Kliknij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem", "weaponsswap_hud_info2": "Nie posiadasz broni na zamiane", - "weightless": "Stan Nieważkości", + "weightless": "Nieważkość", "weightless_desc": "Twoje granaty nie podlegają grawitacji i lecą szybciej", - "wildthrow": "Dzikie rzuty", + "wildthrow": "Dzikie Rzuty", "wildthrow_desc": "Wybierz gracza, który będzie miał trudności z rzucaniem granatami", "wildthrow_player_info": "Gracz '{0}' zapomniał wszystkie lineup'y", "wildthrow_select_info": "Wybierz gracza:", diff --git a/jRandomSkills - SRC Files/src/lang/pt-br.json b/jRandomSkills - SRC Files/src/lang/pt-br.json index 99de67a..2e53cab 100644 --- a/jRandomSkills - SRC Files/src/lang/pt-br.json +++ b/jRandomSkills - SRC Files/src/lang/pt-br.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Toda bala que você acertar conta como um hs", + "aimlock": "Aim Lock", + "aimlock_desc": "Clique em [css_useSkill] para travar a mira no inimigo mais próximo", + "anomaly": "Máquina do Tempo", "anomaly_desc": "Você volta alguns segundos no tempo", @@ -21,6 +24,7 @@ "areareaper_select_info": "Escolha o bomb p/ desativar:", "areareaper_site_disabled": "Bombsite {0} foi desativado - nenhuma bomba pode ser plantada lá!", "areareaper_used_info": "Seu poder já foi usado.", + "areareaper_bombsite_disabled": "Este local de bomba foi desativado!", "armored": "Super Tiro", "armored_desc": "Seu dano é multiplicado por um valor aleatório", @@ -152,6 +156,7 @@ "gambler_desc": "Selecione uma habilidade da lista.", "gambler_select_info": "Escolha sua habilidade:", "gambler_more": "#00FF00|Atualizar por ${0}", + "gambler_no_money": "Yetersiz bakiye.", "ghost": "Fantasma", "ghost_desc": "Você é completamente invisível", @@ -185,9 +190,22 @@ "holyhandgrenade": "Granada Obesa", "holyhandgrenade_desc": "HEs causam dano dobrado e têm alcance dobrado", + "homingnades": "Granadas Teleguiadas", + "homingnades_desc": "Suas granadas (exceto fumaça) são atraídas por inimigos", + + "hotbomb": "Bomba Quente", + "hotbomb_desc": "Enquanto você estiver vivo, a bomba causa dano ao portador", + "hotbomb_hint": "Cuidado, a bomba está quente!", + "iana": "Holograma", "iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos", + "illiterate": "Analfabeto", + "illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler", + + "illusionist": "Ilusionista", + "illusionist_desc": "Clique em [css_useSkill] para enviar uma réplica que caminha em frente", + "impostor": "Impostor", "impostor_desc": "Você começa a rodada vestido do time inimigo", @@ -233,6 +251,12 @@ "longzeus": "Zeus Longo", "longzeus_desc": "Zeus causa dano independentemente da distância", + "magneticdecoy": "Decoy Magnético", + "magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo", + + "magneto": "Magneto", + "magneto_desc": "Todas as granadas inimigas są repelidas para longe de você", + "magnifier": "Lupa", "magnifier_desc": "Força a tela do inimigo a dar um zoom, reduzindo seu campo de visão", "magnifier_enemy_info": "Seu campo de visão foi distorcido!", @@ -242,6 +266,9 @@ "medic": "Médico", "medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida", + "miner": "Mineiro de Bombas", + "miner_desc": "Sua granada HE só explode quando há um inimigo por perto", + "moneyswap": "Troca de Grana", "moneyswap_desc": "Escolha um jogador para trocar de dinheiro com ele", "moneyswap_enemy_info": "Você provavelmente virou classe B", @@ -284,11 +311,12 @@ "psychicdefusing_hud_info": "{0} segundos restantes para desarmar", "pilot": "Jetpack", - "pilot_desc": "Voe por um tempo limitado. Segure [USE - E] para voar", + "pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar", "pilot_hud_info": "Combustível", "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_planting": "Plantando ({0})...", "poison": "Veneno", "poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos", @@ -367,10 +395,14 @@ "silent": "Shhhiu!", "silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores", + + "smoker": "Tiryaki", + "smoker_desc": "Sis bombalarınız asla bitmez", "sniperelite": "Sniper do BOPE", "sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP", - + "sniperelite_customname": "Keskin Nişancı Elit Yeteneği", + "soldier": "Soldado", "soldier_desc": "Seus tiros causam mais dano", "soldier_desc2": "Seu multiplicador de dano é: {0}x", @@ -385,7 +417,8 @@ "swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório", "teleporter": "Teletransportador", - "teleporter_desc": "Você troca de lugar com o inimigo que acertar", + "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}%", "thief": "Lula", "thief_desc": "Você pode roubar uma habilidade de um jogador escolhido", @@ -400,6 +433,9 @@ "thorns": "Porco Espinho", "thorns_desc": "Seu oponente receberá uma parte do dano que causou a você", + "throwingknife": "Faca de Arremesso", + "throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros", + "toxicsmoke": "Smoke Tóxica", "toxicsmoke_desc": "Suas smokes causam dano", @@ -415,6 +451,14 @@ "weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório", "weaponsswap_hud_info2": "Você não tem arma para trocar", + "weightless": "Gravidade Zero", + "weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido", + + "wildthrow": "Arremesso Selvagem", + "wildthrow_desc": "Escolha um jogador que terá problemas para lançar granadas", + "wildthrow_player_info": "O jogador '{0}' esqueceu todos os seus lineups", + "wildthrow_select_info": "Selecione um jogador:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 recarrega instantaneamente", diff --git a/jRandomSkills - SRC Files/src/lang/tr.json b/jRandomSkills - SRC Files/src/lang/tr.json index 29a150f..fddcada 100644 --- a/jRandomSkills - SRC Files/src/lang/tr.json +++ b/jRandomSkills - SRC Files/src/lang/tr.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Vurduğun her mermi kafadan vuruş (headshot) sayılır", + "aimlock": "Nişan Kilidi", + "aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın", + "anomaly": "Anomali", "anomaly_desc": "Zamanı birkaç saniye geriye alırsın", @@ -21,6 +24,7 @@ "areareaper_select_info": "Devre dışı bırakılacak alanı seçin:", "areareaper_site_disabled": "Bomba alanı {0} devre dışı bırakıldı - buraya bomba kurulamaz!", "areareaper_used_info": "Yeteneğin zaten kullanıldı.", + "areareaper_bombsite_disabled": "Bu bomba alanı devre dışı bırakıldı!", "armored": "Zırhlı", "armored_desc": "Rastgele bir hasar alma çarpanına sahip olursun", @@ -186,9 +190,22 @@ "holyhandgrenade": "Kutsal El Bombası", "holyhandgrenade_desc": "El bombaların iki kat hasar verir ve iki kat menzile sahiptir", + "homingnades": "Güdümlü El Bombaları", + "homingnades_desc": "El bombalarınız (sis hariç) düşmanlara yönelir", + + "hotbomb": "Sıcak Bomba", + "hotbomb_desc": "Siz hayatta olduğunuz sürece, bomba taşıyıcısına hasar verir", + "hotbomb_hint": "Dikkatli ol, bomba çok sıcak!", + "iana": "Hologram", "iana_desc": "Hologramını birkaç saniyeliğine kontrol etmek için E tuşuna bas", + "illiterate": "Okuryazar Olmayan", + "illiterate_desc": "Siz hayatta olduğunuz sürece, düşmanlarınız yazıları okuyamaz", + + "illusionist": "İllüzyonist", + "illusionist_desc": "Düz ilerleyen bir kopya oluşturmak için [css_useSkill] tuşuna basın", + "impostor": "Sahtekar", "impostor_desc": "Raunda düşman oyuncu modeliyle başlarsın", @@ -234,6 +251,12 @@ "longzeus": "Uzak Zeus", "longzeus_desc": "Zeus mesafeden bağımsız olarak hasar verir", + "magneticdecoy": "Manyetik Yanıltıcı", + "magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker", + + "magneto": "Magneto", + "magneto_desc": "Tüm düşman el bombaları sizden uzaklaştırılır", + "magnifier": "Büyüteç", "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!", @@ -243,6 +266,9 @@ "medic": "Sıhhiye", "medic_desc": "50 can yenileyen bir iyileştirme yükü kullanmak için E tuşuna bas", + "miner": "Bomba Madencisi", + "miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar", + "bankrupt": "İflas", "bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç", "bankrupt_enemy_info": "İflas ettin.", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "İmha için {0} saniye kaldı", "pilot": "Pilot", - "pilot_desc": "Sınırlı bir süre uç. Uçmak için [USE - E] tuşuna basılı tut", + "pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın", "pilot_hud_info": "Yakıt", "planter": "Serbest Kurucu", "planter_desc": "Bombayı her yere kurabilirsin, patlama süresi 60 saniyedir.", + "planter_planting": "Kuruluyor ({0})...", "poison": "Zehir", "poison_desc": "Birkaç saniyede bir hasar alacak bir oyuncu seç", @@ -369,6 +396,9 @@ "silent": "Sessiz", "silent_desc": "Ayak seslerin ve zıplamaların DİĞER oyunculara duyulmaz", + "smoker": "Tiryaki", + "smoker_desc": "Sis bombalarınız asla bitmez", + "sniperelite": "Keskin Nişancı", "sniperelite_customname": "Keskin Nişancı Yeteneği", "sniperelite_desc": "Mevcut silahını bir AWP ile değiştirmek için E tuşuna bas", @@ -387,7 +417,8 @@ "swapposition_desc": "Rastgele bir düşmanla yer değiştirmek için E tuşuna bas", "teleporter": "Işınlayıcı", - "teleporter_desc": "Vurduğun düşmanla yer değiştirirsin", + "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}", "thief": "Hırsız", "thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin", @@ -402,6 +433,9 @@ "thorns": "Dikenler", "thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır", + "throwingknife": "Fırlatma Bıçağı", + "throwingknife_desc": "Bıçak fırlatmak için [css_useSkill] tuşuna basın. Ama başkalarına dikkat edin", + "toxicsmoke": "Zehirli Sis", "toxicsmoke_desc": "Sis bombaların hasar verir", @@ -417,6 +451,14 @@ "weaponsswap_desc": "Rastgele bir düşmanla silahları takas etmek için E tuşuna bas", "weaponsswap_hud_info2": "Takas edilecek silahın yok", + "weightless": "Yerçekimsiz", + "weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve daha hızlı uçar", + + "wildthrow": "Vahşi Atış", + "wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin", + "wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu", + "wildthrow_select_info": "Bir oyuncu seçin:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 anında şarj olur", @@ -474,4 +516,4 @@ "menu_controlls_scroll": "W/S - Kaydır", "menu_controlls_padding": " | ", "menu_controlls_select": "E - Seç" -} +} \ No newline at end of file diff --git a/jRandomSkills - SRC Files/src/lang/zh.json b/jRandomSkills - SRC Files/src/lang/zh.json index 245438e..c42ef7c 100644 --- a/jRandomSkills - SRC Files/src/lang/zh.json +++ b/jRandomSkills - SRC Files/src/lang/zh.json @@ -5,6 +5,9 @@ "aimbot": "自动瞄准", "aimbot_desc": "你击中的每颗子弹都算作爆头", + "aimlock": "自瞄锁定", + "aimlock_desc": "点击 [css_useSkill] 锁定距离最近的敌人", + "anomaly": "异常", "anomaly_desc": "你会倒退几秒钟的时间", @@ -21,6 +24,7 @@ "areareaper_select_info": "选择你想禁用的炸弹点:", "areareaper_site_disabled": "炸弹点 {0} 已被禁用 - 无法在此放置炸弹!", "areareaper_used_info": "你的能力已被使用。", + "areareaper_bombsite_disabled": "该炸弹安置点已被禁用!", "armored": "装甲", "armored_desc": "你有随机受到伤害的倍率", @@ -186,9 +190,22 @@ "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": "回合开始时你获得敌方玩家模型", @@ -234,6 +251,12 @@ "longzeus": "长宙斯", "longzeus_desc": "宙斯电击枪无论距离多远都能造成伤害", + "magneticdecoy": "磁性诱饵", + "magneticdecoy_desc": "你的诱饵弹会将附近的玩家吸引到自己身边", + + "magneto": "万磁王", + "magneto_desc": "所有敌方手雷都会被你弹开", + "magnifier": "放大镜", "magnifier_desc": "强制敌方屏幕放大,缩小其视野范围", "magnifier_enemy_info": "你的视野已被扭曲!", @@ -243,6 +266,9 @@ "medic": "医务兵", "medic_desc": "点击 [css_useSkill] 使用治疗装置恢复50点生命值", + "miner": "炸弹矿工", + "miner_desc": "你的高爆手雷仅在附近有敌人时才会爆炸", + "moneyswap": "税务员", "moneyswap_desc": "选择一个玩家以交换金钱", "moneyswap_enemy_info": "税务局找上你了。", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "拆除还剩 {0} 秒", "pilot": "飞行员", - "pilot_desc": "在有限时间内飞行。按住 [USE - E] 飞行", + "pilot_desc": "限时飞行。双击跳跃键开始飞行", "pilot_hud_info": "燃料", "planter": "自由种植者", "planter_desc": "你可以在任何地方放置炸弹,引爆时间为60秒。", + "planter_planting": "安放炸弹中 ({0})...", "poison": "毒药", "poison_desc": "选择一个玩家,每隔几秒受到伤害", @@ -369,6 +396,9 @@ "silent": "无声", "silent_desc": "你的脚步和跳跃对其他玩家无声", + "smoker": "烟雾使者", + "smoker_desc": "你的烟雾弹永远用不完", + "sniperelite": "狙击精英", "sniperelite_customname": "狙击精英技能", "sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP", @@ -387,7 +417,8 @@ "swapposition_desc": "点击 [css_useSkill] 与随机敌人交换位置", "teleporter": "传送者", - "teleporter_desc": "你与被击中的敌人交换位置", + "teleporter_desc": "击中敌人后你有机会与其交换位置", + "teleporter_desc2": "击中后交换位置的概率为:{0}%", "thief": "小偷", "thief_desc": "你可以从选定玩家那里偷取技能", @@ -402,6 +433,9 @@ "thorns": "荊棘", "thorns_desc": "你的對手將承受其對你造成傷害的一部分", + "throwingknife": "投掷飞刀", + "throwingknife_desc": "点击 [css_useSkill] 扔出飞刀。但要小心其他人", + "toxicsmoke": "毒烟", "toxicsmoke_desc": "你的烟雾弹会造成伤害", @@ -417,6 +451,14 @@ "weaponsswap_desc": "点击 [css_useSkill] 与随机敌人交换武器", "weaponsswap_hud_info2": "你没有可交换的武器", + "weightless": "失重状态", + "weightless_desc": "你的手雷不受重力影响,且飞行速度更快", + + "wildthrow": "乱扔手雷", + "wildthrow_desc": "选择一名丢雷会遇到麻烦的玩家", + "wildthrow_player_info": "玩家 '{0}' 已经忘记了所有投掷角度", + "wildthrow_select_info": "选择一名玩家:", + "zeus": "宙斯", "zeus_desc": "宙斯x27立即充能", diff --git a/jRandomSkills - SRC Files/src/player/ISkill.cs b/jRandomSkills - SRC Files/src/player/ISkill.cs index bcb9206..0dd186c 100644 --- a/jRandomSkills - SRC Files/src/player/ISkill.cs +++ b/jRandomSkills - SRC Files/src/player/ISkill.cs @@ -44,6 +44,7 @@ public interface ISkill public static void OnTriggerEnter(CBaseTrigger _, CBaseEntity __) { } public static void OnTriggerExit(CBaseTrigger _, CBaseEntity __) { } + public static bool OnWeaponCanAcquire(DynamicHook _, CCSPlayerController __, CEconItemView ___, CCSWeaponBaseVData ____) { return false; } public class SkillConfig { } } @@ -52,7 +53,7 @@ public enum Skills { None, Aimbot, - AimLock, // <- + AimLock, Anomaly, AntyFlash, AntyHead, @@ -81,7 +82,7 @@ public enum Skills Dracula, Duplicator, Dwarf, - Earthquake, // <- + Earthquake, EnemySpawn, ExplosiveShot, FalconEye, @@ -98,11 +99,11 @@ public enum Skills Glue, GodMode, Grenadier, - HealingChicken, // <- + HealingChicken, HealingSmoke, Hermit, HolyHandGrenade, - HomingNades, // <- + HomingNades, HotBomb, Iana, Illiterate, @@ -134,7 +135,7 @@ public enum Skills PawelJumper, Phoenix, PsychicDefusing, - Pilot, // <- + Pilot, Planter, Poison, PrimaryBan, @@ -145,7 +146,7 @@ public enum Skills RadarHack, Rambo, RandomWeapon, - RCMelon, // <- + RCMelon, ReZombie, ReactiveArmor, Regeneration, @@ -158,10 +159,10 @@ public enum Skills Saper, SecondLife, Shade, - ShortBomb, // <- short + ShortBomb, Silent, - Smoker, // <- nie dziala - SniperElite, // <- nie dziala + Smoker, + SniperElite, Soldier, SoundMaker, Spectator, diff --git a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs index 0085c12..6c727e9 100644 --- a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs +++ b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs @@ -80,6 +80,7 @@ namespace src.player VirtualFunctions.CBaseTrigger_StartTouchFunc.Hook(OnTriggerEnter, HookMode.Post); VirtualFunctions.CBaseTrigger_EndTouchFunc.Hook(OnTriggerExit, HookMode.Pre); + VirtualFunctions.CCSPlayer_ItemServices_CanAcquireFunc.Hook(OnWeaponCanAcquire, HookMode.Pre); } private static HookResult PlayerMakeSound(UserMessage um) @@ -388,6 +389,44 @@ namespace src.player } } + private static HookResult OnWeaponCanAcquire(DynamicHook hook) + { + lock (setLock) + { + CCSPlayer_ItemServices itemServices = hook.GetParam(0); + if (itemServices == null || itemServices.Pawn.Value == null || !itemServices.Pawn.Value.IsValid) return HookResult.Continue; + + CEconItemView econItem = hook.GetParam(1); + if (econItem == null) return HookResult.Continue; + + CBasePlayerPawn pawn = itemServices.Pawn.Value; + if (pawn == null || !pawn.IsValid || pawn.Controller.Value == null || !pawn.Controller.Value.IsValid) return HookResult.Continue; + + CCSPlayerController player = pawn.Controller.Value.As(); + if (player == null || !player.IsValid) return HookResult.Continue; + + CCSWeaponBaseVData vdata = VirtualFunctions.GetCSWeaponDataFromKeyFunc.Invoke(-1, econItem.ItemDefinitionIndex.ToString()); + if (vdata == null) return HookResult.Continue; + + var activeSkills = Instance.SkillPlayer + .Where(p => !p.IsDrawing) + .Select(p => p.Skill.ToString()) + .Distinct(); + + bool block = false; + foreach (string skillName in activeSkills) + { + bool? result = (bool?)Instance.SkillAction(skillName, "OnWeaponCanAcquire", [hook, player, econItem, vdata]); + if (result == true) + { + block = true; + break; + } + } + return block ? HookResult.Stop : HookResult.Continue; + } + } + private static void OnTick() { lock (setLock) @@ -827,10 +866,6 @@ namespace src.player } } - if (randomSkill.Display) - SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}", - border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && !p.IsBot && p != player) ? "tb" : "t"); - Instance?.SkillAction(skillPlayer.Skill.ToString(), "DisableSkill", [player]); skillPlayer.Skill = randomSkill.Skill; skillPlayer.SpecialSkill = Skills.None; @@ -840,6 +875,10 @@ namespace src.player Instance?.AddTimer(.2f, () => { + if (randomSkill.Display) + SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}", + border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && !p.IsBot && p != player) ? "tb" : "t"); + if (SkillsInfo.GetValue(randomSkill.Skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime()) Instance?.AddTimer(Config.LoadedConfig.SkillTimeBeforeStart, () => { @@ -1016,10 +1055,10 @@ namespace src.player } var config = Config.LoadedConfig.HtmlHudCustomisation; - var emptySymbol = $" "; + var emptySymbol = $" "; var emptySymbol2 = $" "; - string infoLine = string.IsNullOrEmpty(headerLine) + string infoLine = string.IsNullOrEmpty(headerLine) || string.IsNullOrEmpty(config.HeaderLineSize) ? "" : $"{headerLine}:
"; @@ -1030,6 +1069,7 @@ namespace src.player : $"
{emptySymbol}{extraLine}{emptySymbol}"; var hudContent = infoLine + skillLine + remainingLine; + player.PrintToCenterHtml(hudContent); } } diff --git a/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs b/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs index 4bfd430..76b4c7f 100644 --- a/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs +++ b/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs @@ -105,7 +105,7 @@ namespace src.player var observeredPlayerSpecialSkillInfo = SkillData.Skills.FirstOrDefault(s => s.Skill == observeredPlayerSkill.SpecialSkill); if (observeredPlayerSpecialSkillInfo == null) return; - string pName = observeredPlayerSkill.PlayerName; + string pName = System.Net.WebUtility.HtmlEncode(observeredPlayerSkill.PlayerName); if (pName.Length > 18) pName = $"{pName[..17]}..."; var observerSkill = player.GetTranslation("observer_skill"); diff --git a/jRandomSkills - SRC Files/src/player/skills/Distancer.cs b/jRandomSkills - SRC Files/src/player/skills/Distancer.cs index d71967e..77a4f8e 100644 --- a/jRandomSkills - SRC Files/src/player/skills/Distancer.cs +++ b/jRandomSkills - SRC Files/src/player/skills/Distancer.cs @@ -50,7 +50,7 @@ namespace src.player.skills } string distanceColor = closetDistance > 1500 ? "#00FF00" : closetDistance > 600 ? "#FFFF00" : "#FF0000"; - playerInfo.PrintHTML = $"{closetEnemy}: {(closetDistance > 3000 ? "3000+" : closetDistance)}"; + playerInfo.PrintHTML = $"{System.Net.WebUtility.HtmlEncode(closetEnemy)}: {(closetDistance > 3000 ? "3000+" : closetDistance)}"; } } diff --git a/jRandomSkills - SRC Files/src/player/skills/HealingChicken.cs b/jRandomSkills - SRC Files/src/player/skills/HealingChicken.cs index 832a48e..fd1e8f3 100644 --- a/jRandomSkills - SRC Files/src/player/skills/HealingChicken.cs +++ b/jRandomSkills - SRC Files/src/player/skills/HealingChicken.cs @@ -1,6 +1,5 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; -using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Timers; using CounterStrikeSharp.API.Modules.Utils; @@ -20,7 +19,7 @@ namespace src.player.skills public static void LoadSkill() { - SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color")); + // SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color")); } public static void NewRound() diff --git a/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs b/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs index c01c588..ca2c993 100644 --- a/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs +++ b/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs @@ -27,8 +27,10 @@ namespace src.player.skills { var player = @event.Userid; if (player == null || !player.IsValid) return; + var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); if (playerInfo?.Skill != skillName) return; + smokes.TryAdd(new Vector(@event.X, @event.Y, @event.Z), 0); } @@ -36,8 +38,10 @@ namespace src.player.skills { var player = @event.Userid; if (player == null || !player.IsValid) return; + var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); if (playerInfo?.Skill != skillName) return; + foreach (var smoke in smokes.Keys.Where(v => v.X == @event.X && v.Y == @event.Y && v.Z == @event.Z)) smokes.TryRemove(smoke, out _); } @@ -71,12 +75,20 @@ namespace src.player.skills public static void OnTick() { int tick = SkillsInfo.GetValue(skillName, "tickCooldown"); + if (Server.TickCount % tick != 0) return; + + float smokeRadius = SkillsInfo.GetValue(skillName, "smokeRadius"); + int smokeHeal = SkillsInfo.GetValue(skillName, "smokeHeal"); + foreach (Vector smokePos in smokes.Keys) - foreach (var player in Utilities.GetPlayers()) - if (Server.TickCount % tick == 0) - if (player.PlayerPawn.Value != null && player.PlayerPawn.Value.IsValid && player.PlayerPawn.Value.AbsOrigin != null) - if (SkillUtils.GetDistance(smokePos, player.PlayerPawn.Value.AbsOrigin) <= SkillsInfo.GetValue(skillName, "smokeRadius")) - AddHealth(player.PlayerPawn.Value, SkillsInfo.GetValue(skillName, "smokeHeal")); + foreach (var player in Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive)) + { + var pawn = player.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) continue; + + if (SkillUtils.GetDistance(smokePos, pawn.AbsOrigin) <= smokeRadius) + AddHealth(pawn, smokeHeal); + } } public static void EnableSkill(CCSPlayerController player) diff --git a/jRandomSkills - SRC Files/src/player/skills/Illiterate.cs b/jRandomSkills - SRC Files/src/player/skills/Illiterate.cs index 09a169c..54a7ca1 100644 --- a/jRandomSkills - SRC Files/src/player/skills/Illiterate.cs +++ b/jRandomSkills - SRC Files/src/player/skills/Illiterate.cs @@ -9,7 +9,7 @@ namespace src.player.skills { private const Skills skillName = Skills.Illiterate; private static bool isActive = false; - private static int offset = jRandomSkills.Instance.Random.Next(0, 26); + private static int offset = jRandomSkills.Instance.Random.Next(2, 26); public static void LoadSkill() { @@ -55,7 +55,7 @@ namespace src.player.skills { if (string.IsNullOrEmpty(input)) return null; if (Server.TickCount % 64 == 0) - offset = jRandomSkills.Instance.Random.Next(1, 26); + offset = jRandomSkills.Instance.Random.Next(2, 26); return new string([.. input.Select(c => { diff --git a/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs b/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs index 5c152a2..c6dd147 100644 --- a/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs +++ b/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs @@ -33,7 +33,7 @@ namespace src.player.skills if (playerInfo == null || playerInfo.Skill != skillName) continue; var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray(); - ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account)}$", e.Index.ToString()))); + ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))]; SkillUtils.UpdateMenu(player, menuItems); } } @@ -74,7 +74,7 @@ namespace src.player.skills var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray(); if (enemies.Length > 0) { - ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account)}$", e.Index.ToString()))); + ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))]; SkillUtils.CreateMenu(player, menuItems); } else @@ -90,7 +90,7 @@ namespace src.player.skills if (playerMoneyServices == null || enemyMoneyServices == null) return; int playerMoney = playerMoneyServices.Account; - playerMoneyServices.Account = enemyMoneyServices.Account; + playerMoneyServices.Account = enemyMoneyServices.Account + enemyMoneyServices.CashSpentThisRound; Utilities.SetStateChanged(player, "CCSPlayerController", "m_pInGameMoneyServices"); enemyMoneyServices.Account = playerMoney; diff --git a/jRandomSkills - SRC Files/src/player/skills/Teleporter.cs b/jRandomSkills - SRC Files/src/player/skills/Teleporter.cs index 80b8f01..85d628d 100644 --- a/jRandomSkills - SRC Files/src/player/skills/Teleporter.cs +++ b/jRandomSkills - SRC Files/src/player/skills/Teleporter.cs @@ -1,3 +1,4 @@ +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Utils; using src.utils; @@ -12,7 +13,19 @@ namespace src.player.skills public static void LoadSkill() { - SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color")); + SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"), false); + } + + public static void EnableSkill(CCSPlayerController player) + { + var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo == null) return; + + float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue(skillName, "ChanceTo") - SkillsInfo.GetValue(skillName, "ChanceFrom")) + SkillsInfo.GetValue(skillName, "ChanceFrom"); + playerInfo.SkillChance = 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.IsBot && p != player) ? "tb" : "t"); } public static void PlayerHurt(EventPlayerHurt @event) @@ -24,7 +37,8 @@ namespace src.player.skills var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker?.SteamID); if (attackerInfo?.Skill == skillName) - TeleportPlayers(attacker!, victim!); + if (Instance.Random.NextDouble() <= attackerInfo.SkillChance) + TeleportPlayers(attacker!, victim!); } private static void TeleportPlayers(CCSPlayerController attacker, CCSPlayerController victim) @@ -46,8 +60,10 @@ namespace src.player.skills attackerPawn.Teleport(victimPosition, victimAngles, victimVelocity); } - public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8A2BE2", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission) + public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8A2BE2", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float chanceFrom = .5f, float chanceTo = .6f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission) { + public float ChanceFrom { get; set; } = chanceFrom; + public float ChanceTo { get; set; } = chanceTo; } } } diff --git a/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs b/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs index 59340cc..207e089 100644 --- a/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs +++ b/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs @@ -1,19 +1,22 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core.Attributes; +using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions; +using CounterStrikeSharp.API.Modules.Timers; +using CounterStrikeSharp.API.Modules.UserMessages; using CounterStrikeSharp.API.Modules.Utils; using src.utils; using System.Collections.Concurrent; using System.Drawing; using static src.jRandomSkills; +using Timer = CounterStrikeSharp.API.Modules.Timers.Timer; namespace src.player.skills { public class ThrowingKnife : ISkill { private const Skills skillName = Skills.ThrowingKnife; - private readonly static ConcurrentDictionary triggers = []; - private readonly static ConcurrentDictionary glows = []; + private readonly static ConcurrentDictionary knivesInfo = []; public static void LoadSkill() { @@ -22,40 +25,134 @@ namespace src.player.skills public static void NewRound() { - foreach (var player in Utilities.GetPlayers()) - DisableSkill(player); - triggers.Clear(); - glows.Clear(); + foreach (var knifeInfo in knivesInfo.Values) + DisableKnifeSkill(knifeInfo); + knivesInfo.Clear(); } - public static void EnableSkill(CCSPlayerController player) + public static void PlayerMakeSound(UserMessage um) + { + var soundevent = um.ReadUInt("soundevent_hash"); + var userIndex = um.ReadUInt("source_entity_index"); + + if (soundevent != 3208928088 || userIndex != 0) return; + + byte[] packedParams = um.ReadBytes("packed_params"); + + Vector? soundPos = null; + if (packedParams != null && packedParams.Length >= 19) + { + try + { + float x = BitConverter.ToSingle(packedParams, 7); + float y = BitConverter.ToSingle(packedParams, 11); + float z = BitConverter.ToSingle(packedParams, 15); + soundPos = new Vector(x, y, z); + } catch { } + } + if (soundPos == null) return; + + (var knife, var knifeInfo) = GetClosetKnife(soundPos); + if (knife == null || knife.AbsRotation == null || knifeInfo == null || knifeInfo.InitialLook == null) return; + + knifeInfo.IsDropped = false; + QAngle rotation = new(knifeInfo.InitialLook?.X, knifeInfo.InitialLook?.Y, knife.AbsRotation.Z); + Vector offset = SkillUtils.GetForwardVector(new QAngle(rotation.X - 90, rotation.Y, rotation.Z)) * 2; + + knife.Teleport( + new Vector(soundPos.X - offset.X, soundPos.Y - offset.Y, soundPos.Z - offset.Z), + rotation, + Vector.Zero + ); + + var world = Utilities.GetEntityFromIndex(0); + knife.AcceptInput("SetParent", world, world, "!activator"); + + if (knifeInfo.Timer != null) + knifeInfo.Timer?.Kill(); + + knifeInfo.Timer = + Instance.AddTimer(3f, () => + { + if (knife != null && knife.IsValid) + knife.AcceptInput("ClearParent"); + }, TimerFlags.STOP_ON_MAPCHANGE); + } + + public static bool OnWeaponCanAcquire(DynamicHook hook, CCSPlayerController player, CEconItemView econItem, CCSWeaponBaseVData vdata) + { + string weaponName = vdata.Name; + if (string.IsNullOrEmpty(weaponName)) return false; + + if (!weaponName.Contains("knife") && !weaponName.Contains("bayonet")) + return false; + + var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill != skillName) return false; + + if (knivesInfo.TryGetValue(player.Index, out KnifeInfo? knifeInfo) && knifeInfo != null && knifeInfo.KnifeId == econItem.ItemID) + { + knifeInfo.IsDropped = false; + if (knifeInfo.Timer != null) + { + knifeInfo.Timer?.Kill(); + knifeInfo.Timer = null; + } + + return false; + } + + hook.SetReturn(AcquireResult.InvalidItem); + return true; + } + + public static void EnableSkill(CCSPlayerController _) { Event.EnableTransmit(); } public static void DisableSkill(CCSPlayerController player) { - var playersTriggers = triggers.Where(t => t.Value == player.Index).Select(t => t.Key).ToList(); - foreach (var triggerIndex in playersTriggers) - if (triggers.TryRemove(triggerIndex, out _)) - { - var entity = Utilities.GetEntityFromIndex((int)triggerIndex); - if (entity != null && entity.IsValid) - Server.NextFrame(() => - { - if (entity.IsValid) - entity.AcceptInput("Kill"); - }); - } + if (knivesInfo.TryRemove(player.Index, out KnifeInfo? knifeInfo) && knifeInfo != null) + DisableKnifeSkill(knifeInfo); + } - if (glows.TryRemove(player.Index, out uint glowIndex)) + public static void DisableKnifeSkill(KnifeInfo knifeInfo) + { + if (knifeInfo.Timer != null) + knifeInfo.Timer?.Kill(); + knifeInfo.Timer = null; + + if (knifeInfo.TriggerIndex != null) { - var entity = Utilities.GetEntityFromIndex((int)glowIndex); - if (entity != null && entity.IsValid) + var trigger = Utilities.GetEntityFromIndex((int)knifeInfo.TriggerIndex); + if (trigger != null && trigger.IsValid) Server.NextFrame(() => { - if (entity.IsValid) - entity.AcceptInput("Kill"); + if (trigger.IsValid) + trigger.AcceptInput("Kill"); + }); + } + + if (knifeInfo.GlowIndex != null) + { + var glow = Utilities.GetEntityFromIndex((int)knifeInfo.GlowIndex); + if (glow != null && glow.IsValid) + Server.NextFrame(() => + { + if (glow.IsValid) + glow.AcceptInput("Kill"); + }); + } + + if (knifeInfo.RelayIndex != null) + { + var relay = Utilities.GetEntityFromIndex((int)knifeInfo.RelayIndex); + if (relay != null && relay.IsValid) + Server.NextFrame(() => + { + if (relay.IsValid) + relay.AcceptInput("Kill"); }); } } @@ -88,12 +185,12 @@ namespace src.player.skills private static void ThrowKnife(CCSPlayerController player, CBasePlayerWeapon knife) { if (player == null || !player.IsValid) return; - - var pawn = player.PlayerPawn.Value; - if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return; if (knife == null || !knife.IsValid || knife.AbsOrigin == null) return; - float force = 2000; + var pawn = player.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return; + + float force = 2000f; Vector pos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z); QAngle angle = new(0, 0, 0); @@ -102,35 +199,61 @@ namespace src.player.skills knife.Collision.CollisionAttribute.InteractsWith = pawn.Collision.CollisionAttribute.InteractsWith; knife.Teleport(pos, angle, vel); - CreateTrigger(player, knife); - CreateGlow(player, knife); + + if (!knivesInfo.ContainsKey(player.Index)) + { + uint? triggerIndex = CreateTrigger(player, knife); + (uint? relayIndex, uint? glowIndex) = CreateGlow(player, knife); + + knivesInfo.TryAdd(player.Index, new KnifeInfo + { + PlayerIndex = player.Index, + KnifeIndex = knife.Index, + KnifeId = knife.AttributeManager.Item.ItemID, + TriggerIndex = triggerIndex, + GlowIndex = glowIndex, + RelayIndex = relayIndex + }); + } + + if (knivesInfo.TryGetValue(player.Index, out KnifeInfo? knifeInfo)) + { + knifeInfo.IsDropped = true; + knifeInfo.InitialLook = new QAngle(pawn.V_angle.X + 90, pawn.V_angle.Y, pawn.V_angle.Z); + } } - private static void CreateTrigger(CCSPlayerController player, CBaseEntity knife) + private static uint? CreateTrigger(CCSPlayerController player, CBasePlayerWeapon knife) { - if (player == null || !player.IsValid) return; - if (triggers.Any(t => t.Value == player.Index)) return; - - var pawn = player.PlayerPawn.Value; - if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return; - - if (knife == null || !knife.IsValid || knife.AbsOrigin == null) return; - + if (player == null || !player.IsValid) return null; + if (knife == null || !knife.IsValid || knife.AbsOrigin == null) return null; + var trigger = SkillUtils.CreateTrigger($"trowingknife", 10, knife.AbsOrigin); - if (trigger == null || !trigger.IsValid) return; + if (trigger == null || !trigger.IsValid) return null; trigger.AcceptInput("SetParent", knife, knife, "!activator"); - triggers.TryAdd(trigger.Index, player.Index); + return trigger.Index; } - private static void CreateGlow(CCSPlayerController player, CBaseEntity knife) + private static (uint?, uint?) CreateGlow(CCSPlayerController player, CBaseEntity knife) { - if (player == null || !player.IsValid) return; - if (glows.ContainsKey(player.Index)) return; - if (knife == null || !knife.IsValid || knife.AbsOrigin == null) return; + if (player == null || !player.IsValid) return (null, null); + if (knife == null || !knife.IsValid || knife.AbsOrigin == null) return (null, null); + + var modelRelay = Utilities.CreateEntityByName("prop_physics_multiplayer"); + if (modelRelay == null) return (null, null); + + modelRelay.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags = (uint)(modelRelay.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags & ~(1 << 2)); + modelRelay.SetModel(knife!.CBodyComponent!.SceneNode!.GetSkeletonInstance().ModelState.ModelName); + modelRelay.Spawnflags = 256u; + modelRelay.Render = Color.FromArgb(1, 255, 255, 255); + modelRelay.DispatchSpawn(); + + modelRelay.Teleport(knife.AbsOrigin, knife.AbsRotation, knife.AbsVelocity); + modelRelay.AcceptInput("SetParent", knife, modelRelay, "!activator"); var modelGlow = Utilities.CreateEntityByName("prop_physics_multiplayer"); - if (modelGlow == null) return; + if (modelGlow == null) return (null, null); modelGlow.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags = (uint)(modelGlow.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags & ~(1 << 2)); @@ -144,9 +267,9 @@ namespace src.player.skills modelGlow.Glow.GlowRangeMin = 10; modelGlow.Teleport(knife.AbsOrigin, knife.AbsRotation, knife.AbsVelocity); - modelGlow.AcceptInput("SetParent", knife, modelGlow, "!activator"); + modelGlow.AcceptInput("SetParent", modelRelay, modelGlow, "!activator"); - glows.TryAdd(player.Index, modelGlow.Index); + return (modelRelay.Index, modelGlow.Index); } public static void OnTriggerEnter(CBaseTrigger trigger, CBaseEntity entity) @@ -155,20 +278,25 @@ namespace src.player.skills string triggerName = trigger.Globalname; if (entity.DesignerName != "player" || string.IsNullOrEmpty(triggerName) || !triggerName.StartsWith("trowingknife")) return; - - if (triggers.TryGetValue(trigger.Index, out var throwerIndex)) + + CCSPlayerPawn victimPawn = entity.As(); + if (victimPawn == null || !victimPawn.IsValid || victimPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE) return; + + KnifeInfo? knifeInfo = knivesInfo.Values.FirstOrDefault(ki => ki.TriggerIndex == trigger.Index); + + if (knifeInfo != null) { - var thrower = Utilities.GetPlayerFromIndex((int)throwerIndex); + var thrower = Utilities.GetPlayerFromIndex((int)knifeInfo.PlayerIndex); if (thrower == null || !thrower.IsValid) return; - CCSPlayerPawn victimPawn = entity.As(); - if (victimPawn == null || !victimPawn.IsValid || victimPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE) return; - if (thrower != null && thrower.Pawn.Value != null && victimPawn.Index == thrower.Pawn.Index) return; + + bool friendlyFire = SkillsInfo.GetValue(skillName, "friendlyFire"); + if (!friendlyFire && thrower?.TeamNum == victimPawn.TeamNum) return; + if (CheckHasKnife(thrower!)) return; - SkillUtils.TakeHealth(victimPawn, 99999); - Server.PrintToChatAll($"HIT"); + SkillUtils.TakeHealth(victimPawn, SkillsInfo.GetValue(skillName, "damage")); } } @@ -179,6 +307,31 @@ namespace src.player.skills return pawn.WeaponServices.MyWeapons.Any(w => w.IsValid && w != null && w.Value != null && w.Value.IsValid && (w.Value.DesignerName.Contains("knife") || w.Value.DesignerName.Contains("bayonet"))); } + private static (CBaseEntity?, KnifeInfo?) GetClosetKnife(Vector pos) + { + double minDistance = double.MaxValue; + KnifeInfo? minKnifeInfo = null; + CBaseEntity? closet = null; + + foreach (var knifeInfo in knivesInfo.Values) + { + if (!knifeInfo.IsDropped) continue; + + var knifeEntity = Utilities.GetEntityFromIndex((int)knifeInfo.KnifeIndex); + if (knifeEntity == null || !knifeEntity.IsValid || knifeEntity.AbsOrigin == null) continue; + + double distance = SkillUtils.GetDistance(knifeEntity.AbsOrigin, pos); + if (distance < minDistance) + { + minDistance = distance; + closet = knifeEntity; + minKnifeInfo = knifeInfo; + } + } + + return (closet, minKnifeInfo); + } + public static void CheckTransmit([CastFrom(typeof(nint))] CCheckTransmitInfoList infoList) { foreach (var (info, player) in infoList) @@ -186,19 +339,35 @@ namespace src.player.skills if (player == null || !player.IsValid) continue; var observedPlayer = Utilities.GetPlayers().FirstOrDefault(p => p?.Pawn?.Value?.Handle == player?.Pawn?.Value?.ObserverServices?.ObserverTarget?.Value?.Handle); - foreach (var glow in glows) + foreach ((uint playerIndex, KnifeInfo knifeInfo) in knivesInfo) { - if (glow.Key == player.Index || (observedPlayer != null && observedPlayer.IsValid && glow.Key == observedPlayer.Index)) continue; + if (playerIndex == player.Index || (observedPlayer != null && observedPlayer.IsValid && playerIndex == observedPlayer.Index)) continue; + if (knifeInfo.GlowIndex == null) continue; - var glowEntity = Utilities.GetEntityFromIndex((int)glow.Value); + var glowEntity = Utilities.GetEntityFromIndex((int)knifeInfo.GlowIndex); if (glowEntity == null || !glowEntity.IsValid) continue; info.TransmitEntities.Remove(glowEntity.Index); } } } - public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8f108f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission) + public class KnifeInfo() { + public required uint PlayerIndex { get; set; } + public required uint KnifeIndex { get; set; } + public required ulong KnifeId { get; set; } + public required uint? TriggerIndex { get; set; } + public required uint? GlowIndex { get; set; } + public required uint? RelayIndex { get; set; } + public bool IsDropped { get; set; } = false; + public QAngle? InitialLook { get; set; } = null; + public Timer? Timer { get; set; } = null; + } + + public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8f108f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = true, bool needsTeammates = false, string requiredPermission = "", bool friendlyFire = false, int damage = 9999) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission) + { + public bool FriendlyFire { get; set; } = friendlyFire; + public int Damage { get; set; } = damage; } } } \ No newline at end of file diff --git a/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs b/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs index b0cfc08..2ddad5c 100644 --- a/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs +++ b/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs @@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Utils; using src.utils; using System.Collections.Concurrent; -using System.Runtime.InteropServices; using static src.jRandomSkills; namespace src.player.skills @@ -12,51 +11,39 @@ namespace src.player.skills public class ToxicSmoke : ISkill { private const Skills skillName = Skills.ToxicSmoke; - private static readonly ConcurrentDictionary players = []; - private static readonly ConcurrentDictionary triggers = []; - - private const string triggerName = "toxic_smoke"; + private static readonly ConcurrentDictionary smokes = []; public static void LoadSkill() { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color")); + SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color")); } public static void NewRound() { - players.Clear(); - triggers.Clear(); + smokes.Clear(); } - public static void EnableSkill(CCSPlayerController player) + public static void SmokegrenadeDetonate(EventSmokegrenadeDetonate @event) { - SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade); + var player = @event.Userid; + if (player == null || !player.IsValid) return; + + var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill != skillName) return; + + smokes.TryAdd(new Vector(@event.X, @event.Y, @event.Z), 0); } - public static void OnTriggerEnter(CBaseTrigger trigger, CBaseEntity entity) + public static void SmokegrenadeExpired(EventSmokegrenadeExpired @event) { - if (!trigger.Globalname.StartsWith(triggerName) || entity.DesignerName != "player") return; + var player = @event.Userid; + if (player == null || !player.IsValid) return; - CCSPlayerPawn playerPawn = new(entity.Handle); - if (playerPawn == null || playerPawn.Controller?.Value == null)return; + var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); + if (playerInfo?.Skill != skillName) return; - CCSPlayerController player = playerPawn.Controller.Value.As(); - if (player == null) return; - - players.TryAdd(player, 0); - } - - public static void OnTriggerExit(CBaseTrigger trigger, CBaseEntity entity) - { - if (!trigger.Globalname.StartsWith(triggerName) || entity.DesignerName != "player") return; - - CCSPlayerPawn playerPawn = new(entity.Handle); - if (playerPawn == null || playerPawn.Controller?.Value == null) return; - CCSPlayerController player = playerPawn.Controller.Value.As(); - if (player == null) return; - - players.TryRemove(player, out _); + foreach (var smoke in smokes.Keys.Where(v => v.X == @event.X && v.Y == @event.Y && v.Z == @event.Z)) + smokes.TryRemove(smoke, out _); } public static void OnEntitySpawned(CEntityInstance entity) @@ -85,30 +72,28 @@ namespace src.player.skills }); } - public static void SmokegrenadeDetonate(EventSmokegrenadeDetonate @event) + public static void OnTick() { - var player = @event.Userid; - if (player == null || !player.IsValid) return; - var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != skillName) return; + int tick = SkillsInfo.GetValue(skillName, "tickCooldown"); + if (Server.TickCount % tick != 0) return; - var trigger = SkillUtils.CreateTrigger(triggerName, SkillsInfo.GetValue(skillName, "smokeRadius"), new Vector(@event.X, @event.Y, @event.Z)); - if (trigger == null) return; - triggers.TryAdd(trigger, 0); + float smokeRadius = SkillsInfo.GetValue(skillName, "smokeRadius"); + int smokeDamage = SkillsInfo.GetValue(skillName, "smokeDamage"); + + foreach (Vector smokePos in smokes.Keys) + foreach (var player in Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive)) + { + var pawn = player.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) continue; + + if (SkillUtils.GetDistance(smokePos, pawn.AbsOrigin) <= smokeRadius) + AddHealth(pawn, -smokeDamage); + } } - public static void SmokegrenadeExpired(EventSmokegrenadeExpired @event) + public static void EnableSkill(CCSPlayerController player) { - var player = @event.Userid; - if (player == null || !player.IsValid) return; - var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID); - if (playerInfo?.Skill != skillName) return; - - foreach (var trigger in triggers.Keys.Where(t => t.AbsOrigin?.X == @event.X && t.AbsOrigin?.Y == @event.Y && t.AbsOrigin?.Z == @event.Z)) - { - triggers.TryRemove(trigger, out _); - trigger.AcceptInput("Kill"); - } + SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade); } private static void AddHealth(CCSPlayerPawn player, int health) @@ -124,20 +109,11 @@ namespace src.player.skills player.CommitSuicide(false, true); } - public static void OnTick() - { - if (Server.TickCount % 17 != 0) return; - foreach (var player in players.Keys) - { - if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid || !player.PawnIsAlive) return; - AddHealth(player.PlayerPawn.Value, -SkillsInfo.GetValue(skillName, "smokeDamage")); - } - } - - 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 smokeDamage = 2, float smokeRadius = 180) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission) + 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 smokeDamage = 2, float smokeRadius = 180, int tickCooldown = 17) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission) { public int SmokeDamage { get; set; } = smokeDamage; public float SmokeRadius { get; set; } = smokeRadius; + public int TickCooldown { get; set; } = tickCooldown; } } } \ No newline at end of file diff --git a/jRandomSkills - SRC Files/src/utils/Config.cs b/jRandomSkills - SRC Files/src/utils/Config.cs index 94ea3db..c3af6d1 100644 --- a/jRandomSkills - SRC Files/src/utils/Config.cs +++ b/jRandomSkills - SRC Files/src/utils/Config.cs @@ -109,7 +109,7 @@ namespace src.utils AlternativeSkillButton = null; SkillTimeBeforeStart = 7; SkillHudDuration = -1; - SkillDescriptionDuration = -1; + SkillDescriptionDuration = 7; DisplayAlwaysDescription = false; FlashingHtmlHudFix = true; CS2TraceRayDebug = false; @@ -137,7 +137,7 @@ namespace src.utils HtmlHudCustomisation = new HtmlHudCustomisation { HeaderLineColor = "#FFFFFF", - HeaderLineSize = "ml", + HeaderLineSize = "", SkillLineSize = "l", InfoLineColor = "#FFFFFF", InfoLineSize = "sm", diff --git a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs index dbc5fc0..45dd42e 100644 --- a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs +++ b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs @@ -75,6 +75,24 @@ namespace src.utils return Math.Sqrt(Math.Pow(vector2.X - vector1.X, 2) + Math.Pow(vector2.Y - vector1.Y, 2) + Math.Pow(vector2.Z - vector1.Z, 2)); } + public static float Distance(this Vector vector1, Vector vector2) + { + return (float)GetDistance(vector1, vector2); + } + + public static float Dot(this Vector vector1, Vector vector2) + { + return (vector1.X * vector2.X) + (vector1.Y * vector2.Y) + (vector1.Z * vector2.Z); + } + + public static Vector Normalize(this Vector vector) + { + float length = vector.Length(); + if (length > 0) + return new Vector(vector.X / length, vector.Y / length, vector.Z / length); + return Vector.Zero; + } + public static string SecondsToTimer(int totalSeconds) { if (totalSeconds <= 0) return "00:00"; @@ -330,7 +348,9 @@ namespace src.utils Dictionary> list = []; foreach (var item in items) - list.TryAdd(isIlliterate ? Illiterate.GetRandomText(item.Item1) : item.Item1, (p, option) => + list.TryAdd(isIlliterate + ? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(item.Item1)!) + : System.Net.WebUtility.HtmlEncode(item.Item1), (p, option) => { jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { item.Item2 }]); manager.CloseMenu(p); @@ -360,13 +380,17 @@ namespace src.utils ? "" : $"{your_skill}:
"; - string skillLine = $"{player.GetSkillName(skillData.Skill)}
"; + string skillLine = Illiterate.CheckIlliterateSkill(player) + ? $"{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}
" + : $"{player.GetSkillName(skillData.Skill)}
"; var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLower()}_select_info"); string remainingLine = string.IsNullOrWhiteSpace(skill_select_info) ? "" : $"{skill_select_info}
"; + + var hudContent = infoLine + skillLine + remainingLine; string controllsLine = @@ -381,13 +405,17 @@ namespace src.utils IWasdMenu menu = manager.CreateMenu(hudContent, itemText, itemHoverText, controllsLine); foreach (var enemy in enemies) - menu.Add(isIlliterate ? Illiterate.GetRandomText(enemy.Item1) : enemy.Item1, (p, option) => + menu.Add(isIlliterate + ? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(enemy.Item1)!) + : System.Net.WebUtility.HtmlEncode(enemy.Item1), (p, option) => { jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { enemy.Item2 }]); manager.CloseMenu(p); }); if (lastElement != null) - menu.Add(isIlliterate ? Illiterate.GetRandomText(lastElement.Value.Item1) : lastElement.Value.Item1, (p, option) => + menu.Add(isIlliterate + ? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(lastElement.Value.Item1)!) + : System.Net.WebUtility.HtmlEncode(lastElement.Value.Item1), (p, option) => { jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]); if (lastElement.Value.Item3) diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll index 683217e..d9e5906 100644 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json index 3a0631f..8499a7d 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json @@ -1,4 +1,5 @@ { + "ConfigName": "Default", "GameMode": 3, "YourSkillChatInfo": true, "KillerSkillChatInfo": true, @@ -7,8 +8,8 @@ "DebugMode": false, "AlternativeSkillButton": null, "SkillTimeBeforeStart": 7.0, - "SkillHudDuration": 999.0, - "SkillDescriptionDuration": 999.0, + "SkillHudDuration": -1.0, + "SkillDescriptionDuration": 7.0, "DisplayAlwaysDescription": false, "DisableSpectateHUD": false, "FlashingHtmlHudFix": true, @@ -35,6 +36,14 @@ "IsoCodes": "DE, AT, CH, LI, LU, BE", "FileName": "de" }, + { + "IsoCodes": "TR", + "FileName": "tr" + }, + { + "IsoCodes": "CZ", + "FileName": "cs" + }, { "IsoCodes": "PL", "FileName": "pl" @@ -47,7 +56,7 @@ }, "HtmlHudCustomisation": { "HeaderLineColor": "#FFFFFF", - "HeaderLineSize": "ml", + "HeaderLineSize": "", "SkillLineSize": "l", "InfoLineColor": "#FFFFFF", "InfoLineSize": "sm", @@ -90,6 +99,18 @@ "Alias": "heal, ulecz, curar, tratar, 治疗, 治愈", "Permissions": "@jRandomSkills/admin" }, + "HealthCommand": { + "Alias": "sethealth, set_health, health", + "Permissions": "@jRandomSkills/admin" + }, + "PlantedBomb": { + "Alias": "plantedbomb, planted_bomb, bomb", + "Permissions": "@jRandomSkills/admin" + }, + "BotPlace": { + "Alias": "botplace, bot_place", + "Permissions": "@jRandomSkills/admin" + }, "ConsoleCommand": { "Alias": "console, sv, 控制台, 服务器", "Permissions": "@jRandomSkills/owner" diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/playersLanguage.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/playersLanguage.json deleted file mode 100644 index 326b788..0000000 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/playersLanguage.json +++ /dev/null @@ -1 +0,0 @@ -{"0":"en","76561199562070178":"en","76561198150092992":"pt-br"} \ No newline at end of file diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json index d39d9bd..d999a49 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json @@ -8,6 +8,24 @@ "Name": "Zeus", "RequiredPermission": "" }, + { + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#384728", + "Active": true, + "Name": "WildThrow", + "RequiredPermission": "" + }, + { + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#8f6dc9", + "Active": true, + "Name": "Weightless", + "RequiredPermission": "" + }, { "Cooldown": 30.0, "NeedsTeammates": false, @@ -41,6 +59,7 @@ { "SmokeDamage": 2, "SmokeRadius": 180.0, + "TickCooldown": 17, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -49,6 +68,17 @@ "Name": "ToxicSmoke", "RequiredPermission": "" }, + { + "FriendlyFire": false, + "Damage": 9999, + "NeedsTeammates": false, + "DisableOnFreezeTime": true, + "OnlyTeam": 0, + "Color": "#8f108f", + "Active": true, + "Name": "ThrowingKnife", + "RequiredPermission": "" + }, { "HealthTakenScale": 0.3, "NeedsTeammates": false, @@ -79,6 +109,8 @@ "RequiredPermission": "" }, { + "ChanceFrom": 0.5, + "ChanceTo": 0.6, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -109,9 +141,7 @@ "RequiredPermission": "" }, { - "Cooldown": 5.0, - "CTSoundEvent": "c4.disarmstart", - "TSoundEvent": "C4.PlantSoundB", + "Cooldown": 2, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -140,6 +170,15 @@ "Name": "SniperElite", "RequiredPermission": "" }, + { + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#b5ab8f", + "Active": true, + "Name": "Smoker", + "RequiredPermission": "" + }, { "NeedsTeammates": false, "DisableOnFreezeTime": false, @@ -489,6 +528,7 @@ }, { "Cooldown": 30.0, + "CooldownWhenStuck": 5.0, "Duration": 2.0, "NeedsTeammates": false, "DisableOnFreezeTime": true, @@ -513,6 +553,7 @@ { "ExplosionRadius": 500.0, "ExplosionDamage": 999, + "DmgReductionForTeamates": 0.5, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -530,6 +571,16 @@ "Name": "MoneySwap", "RequiredPermission": "" }, + { + "DetonationRange": 130.0, + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#adf542", + "Active": true, + "Name": "Miner", + "RequiredPermission": "" + }, { "HealthToAdd": 50, "HealthShotLimit": 3, @@ -552,8 +603,30 @@ "Name": "Magnifier", "RequiredPermission": "" }, + { + "Radius": 100.0, + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#f081ec", + "Active": true, + "Name": "Magneto", + "RequiredPermission": "" + }, + { + "TriggerRadius": 180.0, + "Strenght": 30.0, + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#81f0c4", + "Active": true, + "Name": "MagneticDecoy", + "RequiredPermission": "" + }, { "MaxDistance": 4096.0, + "FriendlyFire": false, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -564,6 +637,7 @@ }, { "MaxDistance": 4096.0, + "FriendlyFire": true, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -583,6 +657,7 @@ }, { "FlashDuration": 1.0, + "FriendlyFire": true, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -657,6 +732,32 @@ "Name": "Impostor", "RequiredPermission": "" }, + { + "Cooldown": 30.0, + "DurationRun": 5.0, + "DurationCrouch": 12.0, + "YourTeamDamage": 10, + "EnemyTeamDamage": 20, + "NeedsTeammates": false, + "DisableOnFreezeTime": true, + "OnlyTeam": 0, + "Color": "#42f5ef", + "Active": true, + "Name": "Illusionist", + "RequiredPermission": "" + }, + { + "MaximumFuel": 150.0, + "FuelConsumption": 0.64, + "Refuelling": 0.1, + "NeedsTeammates": false, + "DisableOnFreezeTime": true, + "OnlyTeam": 0, + "Color": "#1466F5", + "Active": true, + "Name": "Illiterate", + "RequiredPermission": "" + }, { "Cooldown": 30.0, "Duration": 10.0, @@ -668,6 +769,29 @@ "Name": "Iana", "RequiredPermission": "" }, + { + "Cooldown": 1.0, + "Damage": 2, + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 3, + "Color": "#baf081", + "Active": true, + "Name": "HotBomb", + "RequiredPermission": "" + }, + { + "Strength": 150.0, + "MaxVelocity": 2000.0, + "DetonationRange": 130.0, + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#384728", + "Active": true, + "Name": "HomingNades", + "RequiredPermission": "" + }, { "DamageMultiplier": 2.0, "DamageRadiusMultiplier": 2.0, @@ -680,7 +804,7 @@ "RequiredPermission": "" }, { - "HealthToAdd": 25, + "HealthToAdd": 100, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -692,6 +816,7 @@ { "SmokeHeal": 1, "SmokeRadius": 180.0, + "TickCooldown": 16, "NeedsTeammates": false, "DisableOnFreezeTime": false, "OnlyTeam": 0, @@ -700,6 +825,18 @@ "Name": "HealingSmoke", "RequiredPermission": "" }, + { + "Amount": 3, + "Heal": 2, + "TickCooldown": 16, + "NeedsTeammates": false, + "DisableOnFreezeTime": false, + "OnlyTeam": 0, + "Color": "#b5ab8f", + "Active": true, + "Name": "HealingChicken", + "RequiredPermission": "" + }, { "NeedsTeammates": false, "DisableOnFreezeTime": false, @@ -1167,6 +1304,18 @@ "Name": "Anomaly", "RequiredPermission": "" }, + { + "Cooldown": 20.0, + "Duration": 0.3, + "Offset": 0.0, + "NeedsTeammates": false, + "DisableOnFreezeTime": true, + "OnlyTeam": 0, + "Color": "#fa7b48", + "Active": true, + "Name": "AimLock", + "RequiredPermission": "" + }, { "NeedsTeammates": false, "DisableOnFreezeTime": false, diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll index 9c3bce8..dd03173 100644 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json index 161f149..f06a831 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss", + "aimlock": "Aim-Lock", + "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren", + "anomaly": "Anomalie", "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück", @@ -21,6 +24,7 @@ "areareaper_select_info": "Standort zum Deaktivieren auswählen:", "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!", "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.", + "areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!", "armored": "Gepanzert", "armored_desc": "Du hast einen zufälligen Schadensmultiplikator", @@ -186,9 +190,22 @@ "holyhandgrenade": "Heilige Handgranate", "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite", + "homingnades": "Zielsuchende Granaten", + "homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen", + + "hotbomb": "Heiße Bombe", + "hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu", + "hotbomb_hint": "Vorsicht, die Bombe ist heiß!", + "iana": "Hologramm", "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern", + "illiterate": "Analphabet", + "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen", + + "illusionist": "Illusionist", + "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft", + "impostor": "Betrüger", "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell", @@ -234,6 +251,12 @@ "longzeus": "Langer Zeus", "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden", + "magneticdecoy": "Magnetischer Köder", + "magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran", + + "magneto": "Magneto", + "magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen", + "magnifier": "Lupe", "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld", "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!", @@ -243,6 +266,9 @@ "medic": "Sanitäter", "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt", + "miner": "Bomben-Miner", + "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist", + "bankrupt": "Bankrott", "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird", "bankrupt_enemy_info": "Du bist bankrott.", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung", "pilot": "Pilot", - "pilot_desc": "Fliege für eine begrenzte Zeit. Halte [USE - E] gedrückt, um zu fliegen", + "pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen", "pilot_hud_info": "Treibstoff", "planter": "Freier Planter", "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.", + "planter_planting": "Bombe wird gelegt ({0})...", "poison": "Gift", "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt", @@ -369,8 +396,11 @@ "silent": "Leise", "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos", + "smoker": "Smoker", + "smoker_desc": "Deine Rauchgranaten gehen nie aus", + "sniperelite": "Sniper Elite", - "sniperelite_customname": "Sniper Elite-Fähigkeit", + "sniperelite_customname": "Sniper-Elite-Skill", "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen", "soldier": "Soldat", @@ -387,7 +417,8 @@ "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen", "teleporter": "Teleporter", - "teleporter_desc": "Du tauschst mit dem getroffenen Gegner die Plätze", + "teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen", + "teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%", "thief": "Dieb", "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen", @@ -402,6 +433,9 @@ "thorns": "Dornen", "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat", + "throwingknife": "Wurfmesser", + "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht", + "toxicsmoke": "Giftiger Rauch", "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden", @@ -417,6 +451,14 @@ "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", + "weightless": "Schwerelosigkeit", + "weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller", + + "wildthrow": "Wilder Wurf", + "wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird", + "wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen", + "wildthrow_select_info": "Wähle einen Spieler aus:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 lädt sich sofort wieder auf", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json index d55af0b..80f90d1 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Every bullet you hit counts as a headshot", + "aimlock": "Aim Lock", + "aimlock_desc": "Click [css_useSkill] to lock your aim on the nearest enemy", + "anomaly": "Anomaly", "anomaly_desc": "You rewind a few seconds back in time", @@ -21,6 +24,7 @@ "areareaper_select_info": "Select site to deactivate:", "areareaper_site_disabled": "Bomb site {0} has been deactivated - no bombs can be planted there!", "areareaper_used_info": "Your skill has already been used.", + "areareaper_bombsite_disabled": "This bombsite has been disabled!", "armored": "Armored", "armored_desc": "You have a random damage taken multiplier", @@ -175,7 +179,7 @@ "godmode_on": "Immortality enabled", "grenadier": "Grenadier", - "grenadier_desc": "You have infinite hegranade", + "grenadier_desc": "You have infinite hegrenade", "healingsmoke": "Healing Smoke", "healingsmoke_desc": "Your smoke grenades heal", @@ -186,9 +190,22 @@ "holyhandgrenade": "Holy Hand Grenade", "holyhandgrenade_desc": "Your HE grenades deal double damage and have double range", + "homingnades": "Homing Grenades", + "homingnades_desc": "Your grenades (except smokes) are attracted to enemies", + + "hotbomb": "Hot Bomb", + "hotbomb_desc": "As long as you are alive, the bomb deals damage to its carrier", + "hotbomb_hint": "Careful, the bomb is hot!", + "iana": "Hologram", "iana_desc": "Click [css_useSkill] to control your hologram for a few seconds", + "illiterate": "Illiterate", + "illiterate_desc": "As long as you are alive, your enemies cannot read", + + "illusionist": "Illusionist", + "illusionist_desc": "Click [css_useSkill] to deploy a replica that walks straight ahead", + "impostor": "Impostor", "impostor_desc": "You start the round with an enemy player model", @@ -234,6 +251,12 @@ "longzeus": "Long Zeus", "longzeus_desc": "Zeus deals damage regardless of distance", + "magneticdecoy": "Magnetic Decoy", + "magneticdecoy_desc": "Your decoy attracts nearby players towards itself", + + "magneto": "Magneto", + "magneto_desc": "All enemy grenades are repelled away from you", + "magnifier": "Magnifier", "magnifier_desc": "Forces the enemy's screen to zoom in, reducing their field of view", "magnifier_enemy_info": "Your field of view has been distorted!", @@ -243,6 +266,9 @@ "medic": "Medic", "medic_desc": "Click [css_useSkill] to use a healing charge that restores 50 health", + "miner": "Bomb Miner", + "miner_desc": "Your HE grenade only explode when there is an enemy nearby", + "bankrupt": "Bankrupt", "bankrupt_desc": "Choose the player who will lose all their money", "bankrupt_enemy_info": "You have gone bankrupt.", @@ -290,6 +316,7 @@ "planter": "Free Planter", "planter_desc": "You can plant the bomb anywhere, with a detonation time of 60 seconds.", + "planter_planting": "Planting ({0})...", "poison": "Poison", "poison_desc": "Choose a player who will take damage every few seconds", @@ -390,7 +417,8 @@ "swapposition_desc": "Click [css_useSkill] to swap places with a random enemy", "teleporter": "Teleporter", - "teleporter_desc": "You swap places with the hit enemy", + "teleporter_desc": "You have the chance to swap places with a hit enemy", + "teleporter_desc2": "Your chances of swapping places after a hit: {0}%", "thief": "Thief", "thief_desc": "You can steal a skill from a chosen player", @@ -405,6 +433,9 @@ "thorns": "Thorns", "thorns_desc": "Your opponent will receive a portion of the damage that they inflicted on you", + "throwingknife": "Throwing Knife", + "throwingknife_desc": "Click [css_useSkill] to throw a knife. But watch out for others", + "toxicsmoke": "Toxic Smoke", "toxicsmoke_desc": "Your smoke grenades deal damage", @@ -420,6 +451,14 @@ "weaponsswap_desc": "Click [css_useSkill] to swap weapons with a random enemy", "weaponsswap_hud_info2": "You have no weapon to swap", + "weightless": "Weightlessness", + "weightless_desc": "Your grenades are not affected by gravity and fly faster", + + "wildthrow": "Wild Throws", + "wildthrow_desc": "Choose a player who will have trouble throwing grenades", + "wildthrow_player_info": "Player '{0}' has forgotten all their lineups", + "wildthrow_select_info": "Select a player:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 instantly recharges", @@ -476,54 +515,5 @@ "menu_controlls_scroll": "W/S - Scroll", "menu_controlls_padding": " | ", - "menu_controlls_select": "E - Select", - - - - - - - - - - - - - - - - "aimlock": "Aim Lock", - "aimlock_desc": "Click [css_useSkill] to lock your aim on the nearest enemy", - - "homingnades": "Homing Grenades", - "homingnades_desc": "Your grenades (except smokes) are attracted to enemies", - - "hotbomb": "Hot Bomb", - "hotbomb_desc": "As long as you are alive, the bomb deals damage to its carrier", - "hotbomb_hint": "Careful, the bomb is hot!", - - "illiterate": "Illiterate", - "illiterate_desc": "As long as you are alive, your enemies cannot read", - - "illusionist": "Illusionist", - "illusionist_desc": "Click [css_useSkill] to deploy a replica that walks straight ahead", - - "magneticdecoy": "Magnetic Decoy", - "magneticdecoy_desc": "Your decoy attracts nearby players towards itself", - - "magneto": "Magneto", - "magneto_desc": "All enemy grenades are repelled away from you", - - "weightless": "Weightlessness", - "weightless_desc": "Your grenades are not affected by gravity and fly faster", - - "wildthrow": "Wild Throws", - "wildthrow_desc": "Choose a player who will have trouble throwing grenades", - "wildthrow_player_info": "Player '{0}' has forgotten all their lineups", - "wildthrow_select_info": "Select a player:", - - "throwingknife": "Throwing Knife", - "throwingknife_desc": "Click [css_useSkill] to throw a knife. But watch out for others", - - "planter_planting": "Planting ({0})..." + "menu_controlls_select": "E - Select" } \ No newline at end of file diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json index 91cfcd7..d648e66 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Chaque balle que vous touchez compte comme un headshot", + "aimlock": "Verrouillage de visée", + "aimlock_desc": "Cliquez sur [css_useSkill] pour verrouiller votre visée sur l'ennemi le plus proche", + "anomaly": "Anomalie", "anomaly_desc": "Vous revenez quelques secondes en arrière dans le temps", @@ -21,6 +24,7 @@ "areareaper_select_info": "Sélectionnez un site à désactiver :", "areareaper_site_disabled": "Le site de bombe {0} a été désactivé – aucune bombe ne peut y être posée !", "areareaper_used_info": "Votre compétence a déjà été utilisée.", + "areareaper_bombsite_disabled": "Ce site de bombe a été désactivé !", "armored": "Blindé", "armored_desc": "Vous avez un multiplicateur de dégâts subis aléatoire", @@ -186,9 +190,22 @@ "holyhandgrenade": "Grenade Sacrée", "holyhandgrenade_desc": "Vos grenades HE infligent le double de dégâts et ont une portée doublée", + "homingnades": "Grenades à tête chercheuse", + "homingnades_desc": "Vos grenades (sauf les fumigènes) sont attirées par les ennemis", + + "hotbomb": "Bombe brûlante", + "hotbomb_desc": "Tant que vous êtes en vie, la bombe inflige des dégâts à son porteur", + "hotbomb_hint": "Attention, la bombe est brûlante !", + "iana": "Hologramme", "iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes", + "illiterate": "Illettré", + "illiterate_desc": "Tant que vous êtes en vie, vos ennemis ne mogą pas lire", + + "illusionist": "Illusionniste", + "illusionist_desc": "Cliquez sur [css_useSkill] pour déployer une réplique qui marche droit devant", + "impostor": "Imposteur", "impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi", @@ -234,6 +251,12 @@ "longzeus": "Zeus Longue Portée", "longzeus_desc": "Le Zeus inflige des dégâts quelle que soit la distance", + "magneticdecoy": "Leurre magnétique", + "magneticdecoy_desc": "Votre leurre attire les joueurs à proximité vers lui", + + "magneto": "Magneto", + "magneto_desc": "Toutes les grenades ennemies są repoussées loin de vous", + "magnifier": "Loupe", "magnifier_desc": "Force l’écran de l’ennemi à zoomer, réduisant son champ de vision", "magnifier_enemy_info": "Votre champ de vision a été déformé !", @@ -243,6 +266,9 @@ "medic": "Médecin", "medic_desc": "Appuyez sur [css_useSkill] pour utiliser une charge de soin qui restaure 50 PV", + "miner": "Poseur de mines", + "miner_desc": "Votre grenade HE n'explose que lorsqu'un ennemi est à proximité", + "bankrupt": "Faillite", "bankrupt_desc": "Choisissez le joueur qui perdra tout son argent", "bankrupt_enemy_info": "Vous êtes en faillite.", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "{0} secondes restantes pour désamorcer", "pilot": "Pilote", - "pilot_desc": "Volez pendant un temps limité. Maintenez [UTILISER - E] pour voler", + "pilot_desc": "Volez pendant un temps limité. Double-cliquez sur saut pour voler", "pilot_hud_info": "Carburant", "planter": "Poseur Libre", "planter_desc": "Vous pouvez planter la bombe n’importe où, avec un temps de détonation de 60 secondes.", + "planter_planting": "Amorçage ({0})...", "poison": "Poison", "poison_desc": "Choisissez un joueur qui subira des dégâts toutes les quelques secondes", @@ -369,6 +396,9 @@ "silent": "Silencieux", "silent_desc": "Vos pas et vos sauts sont silencieux pour les AUTRES joueurs", + "smoker": "Fumeur", + "smoker_desc": "Vos grenades fumigènes sont illimitées", + "sniperelite": "Sniper d’Élite", "sniperelite_customname": "Compétence Sniper d’Élite", "sniperelite_desc": "Appuyez sur [css_useSkill] pour échanger votre arme actuelle contre un AWP", @@ -387,7 +417,8 @@ "swapposition_desc": "Appuyez sur [css_useSkill] pour échanger de place avec un ennemi aléatoire", "teleporter": "Téléporteur", - "teleporter_desc": "Vous échangez de place avec l’ennemi touché", + "teleporter_desc": "Vous avez une chance d'échanger votre place avec un ennemi touché", + "teleporter_desc2": "Vos chances d'échanger votre place après un coup : {0}%", "thief": "Voleur", "thief_desc": "Vous pouvez voler la compétence d’un joueur choisi", @@ -402,6 +433,9 @@ "thorns": "Épines", "thorns_desc": "Votre adversaire recevra une partie des dégâts qu’il vous a infligés", + "throwingknife": "Couteau de lancer", + "throwingknife_desc": "Cliquez sur [css_useSkill] pour lancer un couteau. Mais attention aux autres", + "toxicsmoke": "Fumée Toxique", "toxicsmoke_desc": "Vos grenades fumigènes infligent des dégâts", @@ -417,6 +451,14 @@ "weaponsswap_desc": "Appuyez sur [css_useSkill] pour échanger vos armes avec un ennemi aléatoire", "weaponsswap_hud_info2": "Vous n’avez aucune arme à échanger", + "weightless": "Apesanteur", + "weightless_desc": "Vos grenades ne sont pas affectées par la gravité et volent plus vite", + + "wildthrow": "Lancers sauvages", + "wildthrow_desc": "Choisissez un joueur qui aura des difficultés à lancer des grenades", + "wildthrow_player_info": "Le joueur '{0}' a oublié tous ses alignements (lineups)", + "wildthrow_select_info": "Sélectionnez un joueur :", + "zeus": "Zeus", "zeus_desc": "Le Zeus x27 se recharge instantanément", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json index 3063468..2570ed2 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json @@ -24,6 +24,7 @@ "areareaper_select_info": "Wybierz strefę do dezaktyw.:", "areareaper_site_disabled": "Strefa detonacji {0} została dezaktywowana - nie można na niej podłożyć bomby!", "areareaper_used_info": "Twoja moc została już wykorzystana.", + "areareaper_bombsite_disabled": "Ten bombsite został wyłączony!", "armored": "Gruby", "armored_desc": "Masz losowy mnożnik otrzymywanych obrażeń", @@ -189,17 +190,21 @@ "holyhandgrenade": "Święty Granat Ręczny", "holyhandgrenade_desc": "Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg", - "homingnades": "Namierzające Granaty", - "homingnades_desc": "Twoje granaty (oprócz dymnych) są przyciągane do wrogów", + "homingnades": "Naprowadzane Granaty", + "homingnades_desc": "Twoje granaty (z wyjątkiem dymnych) są przyciągane do wrogów", "hotbomb": "Gorąca Bomba", - "hotbomb_desc": "Póki żyjesz, bomba zadaje obrażenia nosicielowi", + "hotbomb_desc": "Dopóki żyjesz, bomba zadaje obrażenia osobie, która ją niesie", + "hotbomb_hint": "Ostrożnie, bomba parzy!", "iana": "Hologram", "iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund", "illiterate": "Analfabeta", - "illiterate_desc": "Dopóki żyjesz, twoi wrogowie nie potrafią czytać", + "illiterate_desc": "Dopóki żyjesz, Twoi wrogowie nie potrafią czytać", + + "illusionist": "Iluzjonista", + "illusionist_desc": "Naciśnij [css_useSkill], aby wypuścić replikę idącą prosto przed siebie", "impostor": "Szpieg", "impostor_desc": "Na początku rundy otrzymujesz model postaci przeciwnika", @@ -246,11 +251,11 @@ "longzeus": "Długi Zeus", "longzeus_desc": "Zeus zadaje obrażenia niezależnie od odległości", - "magneticdecoy": "Magnetyczny Decoy", - "magneticdecoy_desc": "Twój wabik przyciąga graczy wokół siebie", + "magneticdecoy": "Magnetyczny Wabik", + "magneticdecoy_desc": "Twój wabik przyciąga pobliskich graczy do siebie", "magneto": "Magneto", - "magneto_desc": "Wszystkie granaty przeciwnika są odpychane od ciebie", + "magneto_desc": "Wszystkie granaty wroga są odpychane od Ciebie", "magnifier": "Lupa", "magnifier_desc": "Przybiżasz ekran wybranemu przeciwnikowi", @@ -261,6 +266,9 @@ "medic": "Medyk", "medic_desc": "Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia", + "miner": "Bomberman", + "miner_desc": "Twoje granaty HE wybuchają tylko wtedy, gdy w pobliżu jest wróg", + "moneyswap": "Skarbówka", "moneyswap_desc": "Wybierasz gracza, z którym chcesz zamienić się pieniędzmi", "moneyswap_enemy_info": "Urząd skarbowy cię dopadł.", @@ -303,11 +311,12 @@ "psychicdefusing_hud_info": "Pozostało {0} sekund do rozbrojenia", "pilot": "Pilot", - "pilot_desc": "Latanie przez określony czas. Kliknij dwukrotnie skok, aby latać", + "pilot_desc": "Lataj przez ograniczony czas. Kliknij dwa razy skok, aby lecieć", "pilot_hud_info": "Paliwo", "planter": "Samowolka", "planter_desc": "Bombę można podłożyć w dowolnym miejscu, a czas detonacji wynosi 60 sekund.", + "planter_planting": "Plantowanie ({0})...", "poison": "Trutka", "poison_desc": "Wybierasz gracza, który co kilka sekund będzie otrzymywał obrażenia", @@ -408,7 +417,8 @@ "swapposition_desc": "Kliknij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem", "teleporter": "Teleporter", - "teleporter_desc": "Zamieniasz się miejscami z trafionym przeciwnikiem", + "teleporter_desc": "Masz szansę na zamianę miejsc z trafionym wrogiem", + "teleporter_desc2": "Szansa na zamianę miejsc po trafieniu: {0}%", "thief": "Złodziej", "thief_desc": "Możesz ukraść supermoc wybranemu graczowi", @@ -424,7 +434,7 @@ "thorns_desc": "Twój przeciwnik otrzymuje część obrażeń, które zadał ci", "throwingknife": "Nóż do Rzucania", - "throwingknife_desc": "Kliknij [css_useSkill], aby rzucić nożem. Ale uważaj na innych", + "throwingknife_desc": "Naciśnij [css_useSkill], aby rzucić nożem. Ale uważaj na innych", "toxicsmoke": "Toksyczny Dym", "toxicsmoke_desc": "Twoje granaty dymny zadają obrażenia", @@ -441,10 +451,10 @@ "weaponsswap_desc": "Kliknij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem", "weaponsswap_hud_info2": "Nie posiadasz broni na zamiane", - "weightless": "Stan Nieważkości", + "weightless": "Nieważkość", "weightless_desc": "Twoje granaty nie podlegają grawitacji i lecą szybciej", - "wildthrow": "Dzikie rzuty", + "wildthrow": "Dzikie Rzuty", "wildthrow_desc": "Wybierz gracza, który będzie miał trudności z rzucaniem granatami", "wildthrow_player_info": "Gracz '{0}' zapomniał wszystkie lineup'y", "wildthrow_select_info": "Wybierz gracza:", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json index 99de67a..2e53cab 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Toda bala que você acertar conta como um hs", + "aimlock": "Aim Lock", + "aimlock_desc": "Clique em [css_useSkill] para travar a mira no inimigo mais próximo", + "anomaly": "Máquina do Tempo", "anomaly_desc": "Você volta alguns segundos no tempo", @@ -21,6 +24,7 @@ "areareaper_select_info": "Escolha o bomb p/ desativar:", "areareaper_site_disabled": "Bombsite {0} foi desativado - nenhuma bomba pode ser plantada lá!", "areareaper_used_info": "Seu poder já foi usado.", + "areareaper_bombsite_disabled": "Este local de bomba foi desativado!", "armored": "Super Tiro", "armored_desc": "Seu dano é multiplicado por um valor aleatório", @@ -152,6 +156,7 @@ "gambler_desc": "Selecione uma habilidade da lista.", "gambler_select_info": "Escolha sua habilidade:", "gambler_more": "#00FF00|Atualizar por ${0}", + "gambler_no_money": "Yetersiz bakiye.", "ghost": "Fantasma", "ghost_desc": "Você é completamente invisível", @@ -185,9 +190,22 @@ "holyhandgrenade": "Granada Obesa", "holyhandgrenade_desc": "HEs causam dano dobrado e têm alcance dobrado", + "homingnades": "Granadas Teleguiadas", + "homingnades_desc": "Suas granadas (exceto fumaça) são atraídas por inimigos", + + "hotbomb": "Bomba Quente", + "hotbomb_desc": "Enquanto você estiver vivo, a bomba causa dano ao portador", + "hotbomb_hint": "Cuidado, a bomba está quente!", + "iana": "Holograma", "iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos", + "illiterate": "Analfabeto", + "illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler", + + "illusionist": "Ilusionista", + "illusionist_desc": "Clique em [css_useSkill] para enviar uma réplica que caminha em frente", + "impostor": "Impostor", "impostor_desc": "Você começa a rodada vestido do time inimigo", @@ -233,6 +251,12 @@ "longzeus": "Zeus Longo", "longzeus_desc": "Zeus causa dano independentemente da distância", + "magneticdecoy": "Decoy Magnético", + "magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo", + + "magneto": "Magneto", + "magneto_desc": "Todas as granadas inimigas są repelidas para longe de você", + "magnifier": "Lupa", "magnifier_desc": "Força a tela do inimigo a dar um zoom, reduzindo seu campo de visão", "magnifier_enemy_info": "Seu campo de visão foi distorcido!", @@ -242,6 +266,9 @@ "medic": "Médico", "medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida", + "miner": "Mineiro de Bombas", + "miner_desc": "Sua granada HE só explode quando há um inimigo por perto", + "moneyswap": "Troca de Grana", "moneyswap_desc": "Escolha um jogador para trocar de dinheiro com ele", "moneyswap_enemy_info": "Você provavelmente virou classe B", @@ -284,11 +311,12 @@ "psychicdefusing_hud_info": "{0} segundos restantes para desarmar", "pilot": "Jetpack", - "pilot_desc": "Voe por um tempo limitado. Segure [USE - E] para voar", + "pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar", "pilot_hud_info": "Combustível", "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_planting": "Plantando ({0})...", "poison": "Veneno", "poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos", @@ -367,10 +395,14 @@ "silent": "Shhhiu!", "silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores", + + "smoker": "Tiryaki", + "smoker_desc": "Sis bombalarınız asla bitmez", "sniperelite": "Sniper do BOPE", "sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP", - + "sniperelite_customname": "Keskin Nişancı Elit Yeteneği", + "soldier": "Soldado", "soldier_desc": "Seus tiros causam mais dano", "soldier_desc2": "Seu multiplicador de dano é: {0}x", @@ -385,7 +417,8 @@ "swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório", "teleporter": "Teletransportador", - "teleporter_desc": "Você troca de lugar com o inimigo que acertar", + "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}%", "thief": "Lula", "thief_desc": "Você pode roubar uma habilidade de um jogador escolhido", @@ -400,6 +433,9 @@ "thorns": "Porco Espinho", "thorns_desc": "Seu oponente receberá uma parte do dano que causou a você", + "throwingknife": "Faca de Arremesso", + "throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros", + "toxicsmoke": "Smoke Tóxica", "toxicsmoke_desc": "Suas smokes causam dano", @@ -415,6 +451,14 @@ "weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório", "weaponsswap_hud_info2": "Você não tem arma para trocar", + "weightless": "Gravidade Zero", + "weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido", + + "wildthrow": "Arremesso Selvagem", + "wildthrow_desc": "Escolha um jogador que terá problemas para lançar granadas", + "wildthrow_player_info": "O jogador '{0}' esqueceu todos os seus lineups", + "wildthrow_select_info": "Selecione um jogador:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 recarrega instantaneamente", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json index 29a150f..fddcada 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json @@ -5,6 +5,9 @@ "aimbot": "Aimbot", "aimbot_desc": "Vurduğun her mermi kafadan vuruş (headshot) sayılır", + "aimlock": "Nişan Kilidi", + "aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın", + "anomaly": "Anomali", "anomaly_desc": "Zamanı birkaç saniye geriye alırsın", @@ -21,6 +24,7 @@ "areareaper_select_info": "Devre dışı bırakılacak alanı seçin:", "areareaper_site_disabled": "Bomba alanı {0} devre dışı bırakıldı - buraya bomba kurulamaz!", "areareaper_used_info": "Yeteneğin zaten kullanıldı.", + "areareaper_bombsite_disabled": "Bu bomba alanı devre dışı bırakıldı!", "armored": "Zırhlı", "armored_desc": "Rastgele bir hasar alma çarpanına sahip olursun", @@ -186,9 +190,22 @@ "holyhandgrenade": "Kutsal El Bombası", "holyhandgrenade_desc": "El bombaların iki kat hasar verir ve iki kat menzile sahiptir", + "homingnades": "Güdümlü El Bombaları", + "homingnades_desc": "El bombalarınız (sis hariç) düşmanlara yönelir", + + "hotbomb": "Sıcak Bomba", + "hotbomb_desc": "Siz hayatta olduğunuz sürece, bomba taşıyıcısına hasar verir", + "hotbomb_hint": "Dikkatli ol, bomba çok sıcak!", + "iana": "Hologram", "iana_desc": "Hologramını birkaç saniyeliğine kontrol etmek için E tuşuna bas", + "illiterate": "Okuryazar Olmayan", + "illiterate_desc": "Siz hayatta olduğunuz sürece, düşmanlarınız yazıları okuyamaz", + + "illusionist": "İllüzyonist", + "illusionist_desc": "Düz ilerleyen bir kopya oluşturmak için [css_useSkill] tuşuna basın", + "impostor": "Sahtekar", "impostor_desc": "Raunda düşman oyuncu modeliyle başlarsın", @@ -234,6 +251,12 @@ "longzeus": "Uzak Zeus", "longzeus_desc": "Zeus mesafeden bağımsız olarak hasar verir", + "magneticdecoy": "Manyetik Yanıltıcı", + "magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker", + + "magneto": "Magneto", + "magneto_desc": "Tüm düşman el bombaları sizden uzaklaştırılır", + "magnifier": "Büyüteç", "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!", @@ -243,6 +266,9 @@ "medic": "Sıhhiye", "medic_desc": "50 can yenileyen bir iyileştirme yükü kullanmak için E tuşuna bas", + "miner": "Bomba Madencisi", + "miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar", + "bankrupt": "İflas", "bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç", "bankrupt_enemy_info": "İflas ettin.", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "İmha için {0} saniye kaldı", "pilot": "Pilot", - "pilot_desc": "Sınırlı bir süre uç. Uçmak için [USE - E] tuşuna basılı tut", + "pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın", "pilot_hud_info": "Yakıt", "planter": "Serbest Kurucu", "planter_desc": "Bombayı her yere kurabilirsin, patlama süresi 60 saniyedir.", + "planter_planting": "Kuruluyor ({0})...", "poison": "Zehir", "poison_desc": "Birkaç saniyede bir hasar alacak bir oyuncu seç", @@ -369,6 +396,9 @@ "silent": "Sessiz", "silent_desc": "Ayak seslerin ve zıplamaların DİĞER oyunculara duyulmaz", + "smoker": "Tiryaki", + "smoker_desc": "Sis bombalarınız asla bitmez", + "sniperelite": "Keskin Nişancı", "sniperelite_customname": "Keskin Nişancı Yeteneği", "sniperelite_desc": "Mevcut silahını bir AWP ile değiştirmek için E tuşuna bas", @@ -387,7 +417,8 @@ "swapposition_desc": "Rastgele bir düşmanla yer değiştirmek için E tuşuna bas", "teleporter": "Işınlayıcı", - "teleporter_desc": "Vurduğun düşmanla yer değiştirirsin", + "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}", "thief": "Hırsız", "thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin", @@ -402,6 +433,9 @@ "thorns": "Dikenler", "thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır", + "throwingknife": "Fırlatma Bıçağı", + "throwingknife_desc": "Bıçak fırlatmak için [css_useSkill] tuşuna basın. Ama başkalarına dikkat edin", + "toxicsmoke": "Zehirli Sis", "toxicsmoke_desc": "Sis bombaların hasar verir", @@ -417,6 +451,14 @@ "weaponsswap_desc": "Rastgele bir düşmanla silahları takas etmek için E tuşuna bas", "weaponsswap_hud_info2": "Takas edilecek silahın yok", + "weightless": "Yerçekimsiz", + "weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve daha hızlı uçar", + + "wildthrow": "Vahşi Atış", + "wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin", + "wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu", + "wildthrow_select_info": "Bir oyuncu seçin:", + "zeus": "Zeus", "zeus_desc": "Zeus x27 anında şarj olur", @@ -474,4 +516,4 @@ "menu_controlls_scroll": "W/S - Kaydır", "menu_controlls_padding": " | ", "menu_controlls_select": "E - Seç" -} +} \ No newline at end of file diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json index 245438e..c42ef7c 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json @@ -5,6 +5,9 @@ "aimbot": "自动瞄准", "aimbot_desc": "你击中的每颗子弹都算作爆头", + "aimlock": "自瞄锁定", + "aimlock_desc": "点击 [css_useSkill] 锁定距离最近的敌人", + "anomaly": "异常", "anomaly_desc": "你会倒退几秒钟的时间", @@ -21,6 +24,7 @@ "areareaper_select_info": "选择你想禁用的炸弹点:", "areareaper_site_disabled": "炸弹点 {0} 已被禁用 - 无法在此放置炸弹!", "areareaper_used_info": "你的能力已被使用。", + "areareaper_bombsite_disabled": "该炸弹安置点已被禁用!", "armored": "装甲", "armored_desc": "你有随机受到伤害的倍率", @@ -186,9 +190,22 @@ "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": "回合开始时你获得敌方玩家模型", @@ -234,6 +251,12 @@ "longzeus": "长宙斯", "longzeus_desc": "宙斯电击枪无论距离多远都能造成伤害", + "magneticdecoy": "磁性诱饵", + "magneticdecoy_desc": "你的诱饵弹会将附近的玩家吸引到自己身边", + + "magneto": "万磁王", + "magneto_desc": "所有敌方手雷都会被你弹开", + "magnifier": "放大镜", "magnifier_desc": "强制敌方屏幕放大,缩小其视野范围", "magnifier_enemy_info": "你的视野已被扭曲!", @@ -243,6 +266,9 @@ "medic": "医务兵", "medic_desc": "点击 [css_useSkill] 使用治疗装置恢复50点生命值", + "miner": "炸弹矿工", + "miner_desc": "你的高爆手雷仅在附近有敌人时才会爆炸", + "moneyswap": "税务员", "moneyswap_desc": "选择一个玩家以交换金钱", "moneyswap_enemy_info": "税务局找上你了。", @@ -285,11 +311,12 @@ "psychicdefusing_hud_info": "拆除还剩 {0} 秒", "pilot": "飞行员", - "pilot_desc": "在有限时间内飞行。按住 [USE - E] 飞行", + "pilot_desc": "限时飞行。双击跳跃键开始飞行", "pilot_hud_info": "燃料", "planter": "自由种植者", "planter_desc": "你可以在任何地方放置炸弹,引爆时间为60秒。", + "planter_planting": "安放炸弹中 ({0})...", "poison": "毒药", "poison_desc": "选择一个玩家,每隔几秒受到伤害", @@ -369,6 +396,9 @@ "silent": "无声", "silent_desc": "你的脚步和跳跃对其他玩家无声", + "smoker": "烟雾使者", + "smoker_desc": "你的烟雾弹永远用不完", + "sniperelite": "狙击精英", "sniperelite_customname": "狙击精英技能", "sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP", @@ -387,7 +417,8 @@ "swapposition_desc": "点击 [css_useSkill] 与随机敌人交换位置", "teleporter": "传送者", - "teleporter_desc": "你与被击中的敌人交换位置", + "teleporter_desc": "击中敌人后你有机会与其交换位置", + "teleporter_desc2": "击中后交换位置的概率为:{0}%", "thief": "小偷", "thief_desc": "你可以从选定玩家那里偷取技能", @@ -402,6 +433,9 @@ "thorns": "荊棘", "thorns_desc": "你的對手將承受其對你造成傷害的一部分", + "throwingknife": "投掷飞刀", + "throwingknife_desc": "点击 [css_useSkill] 扔出飞刀。但要小心其他人", + "toxicsmoke": "毒烟", "toxicsmoke_desc": "你的烟雾弹会造成伤害", @@ -417,6 +451,14 @@ "weaponsswap_desc": "点击 [css_useSkill] 与随机敌人交换武器", "weaponsswap_hud_info2": "你没有可交换的武器", + "weightless": "失重状态", + "weightless_desc": "你的手雷不受重力影响,且飞行速度更快", + + "wildthrow": "乱扔手雷", + "wildthrow_desc": "选择一名丢雷会遇到麻烦的玩家", + "wildthrow_player_info": "玩家 '{0}' 已经忘记了所有投掷角度", + "wildthrow_select_info": "选择一名玩家:", + "zeus": "宙斯", "zeus_desc": "宙斯x27立即充能",