C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Facepunch;
using Newtonsoft.Json.Linq;
using System.Text.RegularExpressions;
using System;
using Oxide.Plugins.XDStatisticsExtensionMethods;
using UnityEngine.UI;
using Oxide.Core.Plugins;
using System.Linq;
using UnityEngine.Networking;
using System.Collections.Generic;
using Newtonsoft.Json;
using Rust;
using System.Text;
using Oxide.Core.Libraries;
using UnityEngine;
using Oxide.Core;
using System.Collections;
using Oxide.Game.Rust.Cui;
namespace Oxide.Plugins {
[Info("XDStatistics", "anfunny", "2.1.3")]
class XDStatistics : RustPlugin {
protected override void LoadDefaultConfig() {
UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR = new Configuration();
}
public const string XPUQENMXXVHBDRSGGLPMFPZFIPLXQLTRZVZGDKWSGCBRN = "INTERFACE_STATS";
private bool IsWeaponFree(BasePlayer player) {
List<Item> items = Pool.Get<List<Item>>();
try {
player.inventory.GetAllItems(items);
foreach (Item item in items) {
if (item.info.category == ItemCategory.Weapon && !UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.settingsIgnore.itemsToIgnoreList.Any(itemToIgnore => string.Equals(itemToIgnore, item.info.shortname, StringComparison.OrdinalIgnoreCase))) {
return false;
}
}
return true;
}
finally {
Pool.Free(ref items);
}
}
private static class TimeHelper {
public static string FormatTime(TimeSpan time, int OANJYTWQHEACGWHXWONNIUEPGNXFFSYYZYJYYVVEJLECS = 5, string GAGZSLAVHTWXDKVRLOGCDHMIZASIDXPCWPHXYFZMYERQCA = "ru") {
return GAGZSLAVHTWXDKVRLOGCDHMIZASIDXPCWPHXYFZMYERQCA == "ru" ? FormatTimeRussian(time, OANJYTWQHEACGWHXWONNIUEPGNXFFSYYZYJYYVVEJLECS) : FormatTimeDefault(time);
}
private static string FormatTimeRussian(TimeSpan time, int OANJYTWQHEACGWHXWONNIUEPGNXFFSYYZYJYYVVEJLECS) {
List<string> substrings = new List<string>();
if (time.Days != 0 && substrings.Count < OANJYTWQHEACGWHXWONNIUEPGNXFFSYYZYJYYVVEJLECS) {
substrings.Add(Format(time.Days, "д"));
}
if (time.Hours != 0 && substrings.Count < OANJYTWQHEACGWHXWONNIUEPGNXFFSYYZYJYYVVEJLECS) {
substrings.Add(Format(time.Hours, "ч"));
}
if (time.Minutes != 0 && substrings.Count < OANJYTWQHEACGWHXWONNIUEPGNXFFSYYZYJYYVVEJLECS) {
substrings.Add(Format(time.Minutes, "м"));
}
if (time.Days == 0 && time.Seconds != 0 && substrings.Count < OANJYTWQHEACGWHXWONNIUEPGNXFFSYYZYJYYVVEJLECS) {
substrings.Add(Format(time.Seconds, "с"));
}
if (substrings.Count == 0) {
substrings.Add("0с");
}
return string.Join(" ", substrings);
}
private static string FormatTimeDefault(TimeSpan time) {
List<string> parts = new List<string>();
if (time.Days > 0) {
parts.Add($"{time.Days} day{(time.Days == 1 ? string.Empty : "s")}");
}
if (time.Hours > 0) {
parts.Add($"{time.Hours} hour{(time.Hours == 1 ? string.Empty : "s")}");
}
if (time.Minutes > 0) {
parts.Add($"{time.Minutes} minute{(time.Minutes == 1 ? string.Empty : "s")}");
}
if (time.Seconds > 0) {
parts.Add($"{time.Seconds} second{(time.Seconds == 1 ? string.Empty : "s")}");
}
if (parts.Count == 0) {
parts.Add("0 seconds");
}
return string.Join(", ", parts);
}
private static string Format(int KISZQWQNYNYASTRRKDTBODXSFOTDYQWFYHHZLXZGFBIKAFH, string form) {
return $"{KISZQWQNYNYASTRRKDTBODXSFOTDYQWFYHHZLXZGFBIKAFH}{form}";
}
}
private void TVWVNOHLATFVPEOUUSRVNRJFVHQFAARQNJMUOXGUVHQIODB(BasePlayer player, ulong target = 0, int FPPFENCONQQUIMSVSNSUWFYRVGVRWLLYJTEUMEANLNNADFCZS = 0) {
var WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX = new CuiElementContainer();
PlayerInfo NQTPCNLUUHJBIKUJGLJZAUTCIYMIOXZLFUXGBMGTTMWOXPZNJ = PlayerInfo.GetOrCreate(target == 0 ? player.userID : target);
if (FPPFENCONQQUIMSVSNSUWFYRVGVRWLLYJTEUMEANLNNADFCZS == 0) {
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Name = "CRATE_STAT", Parent = KGLAUXRDHYKTOOAOGWCZYPHFFFJUTWVNZJIIRNZPG, Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "btn_panel_width")
}
, new CuiRectTransformComponent {
AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-210.146 151.391", OffsetMax = "-13.974 197.429"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiLabel {
RectTransform = {
AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "48.359 -7.014", OffsetMax = "176.509 8.414"
}
, Text = {
Text = "STAT_UI_CRATE_OPEN".GetAdaptedMessage(player.UserIDString, NQTPCNLUUHJBIKUJGLJZAUTCIYMIOXZLFUXGBMGTTMWOXPZNJ.MiscStats.OARKFNZFJXEXIHSTIHOSMAPDGKHVIYIZDZMHRDGKJTABVGS), Font = "robotocondensed-regular.ttf", FontSize = 10, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
}
}
, "CRATE_STAT");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "CRATE_STAT", Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "CrateImage")
}
, new CuiRectTransformComponent {
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-88.5 -16.5", OffsetMax = "-55.5 16.5"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Name = "BARREL_STAT", Parent = KGLAUXRDHYKTOOAOGWCZYPHFFFJUTWVNZJIIRNZPG, Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "btn_panel_width")
}
, new CuiRectTransformComponent {
AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-210.146 99.171", OffsetMax = "-13.974 145.209"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiLabel {
RectTransform = {
AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "48.359 -7.014", OffsetMax = "176.509 8.414"
}
, Text = {
Text = "STAT_UI_BARREL_KILL".GetAdaptedMessage(player.UserIDString, NQTPCNLUUHJBIKUJGLJZAUTCIYMIOXZLFUXGBMGTTMWOXPZNJ.MiscStats.BarrelsDestroyed), Font = "robotocondensed-regular.ttf", FontSize = 10, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
}
}
, "BARREL_STAT");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "BARREL_STAT", Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "BarrelImage")
}
, new CuiRectTransformComponent {
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-88.5 -16.5", OffsetMax = "-55.5 16.5"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Name = "ANIMALKILL_STAT", Parent = KGLAUXRDHYKTOOAOGWCZYPHFFFJUTWVNZJIIRNZPG, Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "btn_panel_width")
}
, new CuiRectTransformComponent {
AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-210.146 46.951", OffsetMax = "-13.974 92.989"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiLabel {
RectTransform = {
AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "48.359 -7.014", OffsetMax = "176.509 8.414"
}
, Text = {
Text = "STAT_UI_ANIMAL_KILL".GetAdaptedMessage(player.UserIDString, NQTPCNLUUHJBIKUJGLJZAUTCIYMIOXZLFUXGBMGTTMWOXPZNJ.PlayerPvpStats.KillsAnimal), Font = "robotocondensed-regular.ttf", FontSize = 10, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
}
}
, "ANIMALKILL_STAT");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "ANIMALKILL_STAT", Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "AnimalImage")
}
, new CuiRectTransformComponent {
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-88.5 -16.5", OffsetMax = "-55.5 16.5"
}
}
}
);
}
else {
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Name = "Heli_STAT", Parent = KGLAUXRDHYKTOOAOGWCZYPHFFFJUTWVNZJIIRNZPG, Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "btn_panel_width")
}
, new CuiRectTransformComponent {
AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-210.146 151.391", OffsetMax = "-13.974 197.429"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiLabel {
RectTransform = {
AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "48.359 -7.014", OffsetMax = "176.509 8.414"
}
, Text = {
Text = "STAT_UI_HELI_KILL".GetAdaptedMessage(player.UserIDString, NQTPCNLUUHJBIKUJGLJZAUTCIYMIOXZLFUXGBMGTTMWOXPZNJ.PlayerPvpStats.QQTZBLYEIKWCKECWFGGTPOAFHWVBXVLINBHBHDQXWDHB), Font = "robotocondensed-regular.ttf", FontSize = 10, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
}
}
, "Heli_STAT");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "Heli_STAT", Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "HeliImage")
}
, new CuiRectTransformComponent {
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-88.5 -16.5", OffsetMax = "-55.5 16.5"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Name = "BRADLEY_STAT", Parent = KGLAUXRDHYKTOOAOGWCZYPHFFFJUTWVNZJIIRNZPG, Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "btn_panel_width")
}
, new CuiRectTransformComponent {
AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-210.146 99.171", OffsetMax = "-13.974 145.209"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiLabel {
RectTransform = {
AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "48.359 -7.014", OffsetMax = "176.509 8.414"
}
, Text = {
Text = "STAT_UI_BRADLEY_KILL".GetAdaptedMessage(player.UserIDString, NQTPCNLUUHJBIKUJGLJZAUTCIYMIOXZLFUXGBMGTTMWOXPZNJ.PlayerPvpStats.DVZVLEDBGVBQOREQWHNZOPJWAPBPIXLGZZDAVGLRHG), Font = "robotocondensed-regular.ttf", FontSize = 10, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
}
}
, "BRADLEY_STAT");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "BRADLEY_STAT", Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "BradleyImage")
}
, new CuiRectTransformComponent {
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-88.5 -16.5", OffsetMax = "-55.5 16.5"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Name = "NPCKILL_STAT", Parent = KGLAUXRDHYKTOOAOGWCZYPHFFFJUTWVNZJIIRNZPG, Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "btn_panel_width")
}
, new CuiRectTransformComponent {
AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-210.146 46.951", OffsetMax = "-13.974 92.989"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiLabel {
RectTransform = {
AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "48.359 -7.014", OffsetMax = "176.509 8.414"
}
, Text = {
Text = "STAT_UI_NPC_KILL".GetAdaptedMessage(player.UserIDString, NQTPCNLUUHJBIKUJGLJZAUTCIYMIOXZLFUXGBMGTTMWOXPZNJ.PlayerPvpStats.XTVCVMJJMLNBOPVALBOEHVZDGVXLPTTKKASRURWXVJGQIDUK), Font = "robotocondensed-regular.ttf", FontSize = 10, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"
}
}
, "NPCKILL_STAT");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Name = "NPC_IMG_USER", Parent = "NPCKILL_STAT", Components = {
new CuiRawImageComponent {
Color = "1 1 1 1", Png = (string) LoadingImages.Call("GetImage", "NpcImage")
}
, new CuiRectTransformComponent {
AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-88.5 -16.5", OffsetMax = "-55.5 16.5"
}
}
}
);
}
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiButton {
Button = {
Color = "1 1 1 0.1", Command = $"UI_HandlerStat ShowMoreStat {target} {FPPFENCONQQUIMSVSNSUWFYRVGVRWLLYJTEUMEANLNNADFCZS}"
}
, Text = {
Text = "STAT_UI_BTN_MORE".GetAdaptedMessage(player.UserIDString), Font = "robotocondensed-regular.ttf", FontSize = 10, Align = TextAnchor.MiddleCenter, Color = "0.8538514 0.8491456 0.8867924 1"
}
, RectTransform = {
AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-210.146 22.951", OffsetMax = "-13.974 39.989"
}
}
, KGLAUXRDHYKTOOAOGWCZYPHFFFJUTWVNZJIIRNZPG, "SHOW_MORE_STAT");
CuiHelper.DestroyUi(player, "SHOW_MORE_STAT");
CuiHelper.DestroyUi(player, "CRATE_STAT");
CuiHelper.DestroyUi(player, "BARREL_STAT");
CuiHelper.DestroyUi(player, "NPCKILL_STAT");
CuiHelper.DestroyUi(player, "Heli_STAT");
CuiHelper.DestroyUi(player, "BRADLEY_STAT");
CuiHelper.DestroyUi(player, "ANIMALKILL_STAT");
CuiHelper.AddUi(player, WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX);
}
private void CJCIMIXXDRUIPHEWADFJCRITIKEACZCOWDLCZYPGRODRBVG() {
if (UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.GUVZZRQAIUVDDTZFIPOBAHSCKIYYHEAVASVQVUFNGW.Count == 0) {
UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.GUVZZRQAIUVDDTZFIPOBAHSCKIYYHEAVASVQVUFNGW = new Dictionary<string, float> {
["wood"]
= 0.3f, ["stones"] = 0.6f, ["metal.ore"] = 1, ["sulfur.ore"] = 1.5f, ["hq.metal.ore"] = 2,
}
;
}
if (UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.VKVCUSYYWTNEFOQONEBFZBLQTEEXXOBLTWQRHIEGE.Count == 0) {
UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.VKVCUSYYWTNEFOQONEBFZBLQTEEXXOBLTWQRHIEGE = new Dictionary<string, float> {
["explosive.timed"]
= 2, ["explosive.satchel"] = 0.7f, ["grenade.beancan"] = 0.3f, ["grenade.f1"] = 0.1f, ["ammo.rocket.basic"] = 1, ["ammo.rocket.hv"] = 0.5f, ["ammo.rocket.fire"] = 0.7f, ["ammo.rifle.explosive"] = 0.02f,
}
;
}
if (UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.HVTABPNLBDXNWTAEUCRUJMXKFLXWDGOMALWRFCDTHSMZOXF.CFOJWHTLLAKBVULWTZUCBLMDQVDQTIFEPEKWIOVTK && UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.HVTABPNLBDXNWTAEUCRUJMXKFLXWDGOMALWRFCDTHSMZOXF.PrizeByCategory.Count > 0) {
foreach (KeyValuePair<string, List<Configuration.SettingsPrize.Reward>> pbc in UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.HVTABPNLBDXNWTAEUCRUJMXKFLXWDGOMALWRFCDTHSMZOXF.PrizeByCategory) if (Enum.TryParse(pbc.Key, out CatType categoryType)) UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.HVTABPNLBDXNWTAEUCRUJMXKFLXWDGOMALWRFCDTHSMZOXF.rewardsCategoryList.Add(categoryType);
else PrintError($"[Configuration Reward ERROR] Invalid category type: {pbc.Key}.Removing from list.\nAvailable types: {string.Join(", ", Enum.GetNames(typeof(CatType)))}");
}
ProcessCategories(UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.chatMessage.MZOXBIHIRPVCMYONVAZAJYHNCPTSERFHBYTSNWPEJUJXLK, UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.chatMessage.chatCategories, UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.chatMessage._chatCategories);
ProcessCategories(UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.KDKUAIASBDZUVANNJSLEZBZAKWQDLLXWGIMSYLZVCCMHMF.AQSNWNHQMZBKFSPKQWBQYSTNYNTTRZZKBYBESZRIJUHHYXTSL, UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.KDKUAIASBDZUVANNJSLEZBZAKWQDLLXWGIMSYLZVCCMHMF.discordCategories, UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.KDKUAIASBDZUVANNJSLEZBZAKWQDLLXWGIMSYLZVCCMHMF._discordCategories);
return;
void ProcessCategories(bool condition, List<string> categories, ICollection<CatType> targetList) {
if (!condition || categories.Count == 0) return;
foreach (string category in categories) {
if (Enum.TryParse(category, out CatType categoryType)) {
targetList.Add(categoryType);
}
else {
PrintError($"[Configuration] Invalid category type: {category}.Removing from list.\nAvailable types: {string.Join(", ", Enum.GetNames(typeof(CatType)))}");
}
}
}
}
private bool IVLQJQKSPGQYSHQMVDUUMTWTAWKORFUWPKJBASWSFYHP(ulong userID) {
object playerId = ObjectCache.Get(userID);
BasePlayer player = (Duel is not null || Duelist is not null) ? BasePlayer.FindByID(userID) : null;
return EventAtEvent(playerId) || IsPlayerOnBattle(playerId) || IsPlayerOnActiveDuel(player) || InEvent(player) || IsOnTournament(playerId);
bool EventAtEvent(object id) => EventHelper?.Call("EMAtEvent", id) is true;
bool IsPlayerOnBattle(object id) => Battles?.Call<bool>("IsPlayerOnBattle", id) == true;
bool IsPlayerOnActiveDuel(BasePlayer pl) => Duel?.Call<bool>("IsPlayerOnActiveDuel", pl) == true;
bool InEvent(BasePlayer pl) => Duelist?.Call<bool>("inEvent", pl) == true;
bool IsOnTournament(object id) => ArenaTournament?.Call<bool>("IsOnTournament", id) == true;
}
private bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
private static readonly Regex CleanUpRegex = new Regex("<.*?>|{.*?}", RegexOptions.Compiled);
private const string PermReset = "XDStatistics.reset";
private static class ObjectCache {
private static readonly object True = true;
private static readonly object False = false;
private static class StaticObjectCache<T> {
private static readonly Dictionary<T, object> CacheByValue = new Dictionary<T, object>();
public static object Get(T IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY) {
object cachedObject;
if (!CacheByValue.TryGetValue(IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY, out cachedObject)) {
cachedObject = IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY;
CacheByValue[IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY] = cachedObject;
}
return cachedObject;
}
}
public static object Get<T>(T IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY) {
return StaticObjectCache<T>.Get(IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY);
}
public static object Get(bool IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY) {
return IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY ? True : False;
}
}
private void ZBUZOLLKSBPJQMUOZHSEWAARRFOCJBJMJSFAADVRGLDP() {
_prizePlayerData.Clear();
Dictionary<CatType, Dictionary<ulong, CashedData>> TopPlayers = GetTopPlayersByAllCategories(UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.HVTABPNLBDXNWTAEUCRUJMXKFLXWDGOMALWRFCDTHSMZOXF.rewardsCategoryList);
foreach (KeyValuePair<CatType, Dictionary<ulong, CashedData>> topPlayer in TopPlayers) {
if (!UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.HVTABPNLBDXNWTAEUCRUJMXKFLXWDGOMALWRFCDTHSMZOXF.PrizeByCategory.TryGetValue(topPlayer.Key.ToString(), out List<Configuration.SettingsPrize.Reward> rewards) || !rewards.Any()) continue;
foreach ((KeyValuePair<ulong, CashedData> player, int index) in topPlayer.Value.Select((IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY, index) => (IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY, index))) {
if (!_prizePlayerData.ContainsKey(player.Key)) {
_prizePlayerData[player.Key] = new List<PrizePlayer>();
}
_prizePlayerData[player.Key].Add(new PrizePlayer {
PEOYTINBABVUICSXIIDGOMWBVTGDKRCITCWRQPBTBFPKTCC = topPlayer.Key, IYODSVDCHNDZCKRIYMBGFBGTHKFIXMHSRCVLCZPYY = player.Value.FullValue(), top = index + 1
}
);
rewards.FirstOrDefault(x => x.top == index + 1)?.RewardPlayer(player.Key.ToString());
if (index + 1 >= rewards.Count) break;
}
}
PFKNJZHYEEAAQOUOVUBRSZKTXMSVTTDQFMRSZWFRVSSAPH();
if (UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.settings.WPJULTCMTCTMHRWLZMJEVHQNAJYRXCKSBRXEMLFBKGZAQOWVG) ClearData();
}
private void Unload() {
if (IsObjectNull(Instance)) return;
SaveDataFiles();
CGNOYQWQWUQJMMXUFTTECTNTFBZNLCYGUMWZRBMVUSD();
PFKNJZHYEEAAQOUOVUBRSZKTXMSVTTDQFMRSZWFRVSSAPH();
foreach (BasePlayer player in BasePlayer.activePlayerList) CuiHelper.DestroyUi(player, XPUQENMXXVHBDRSGGLPMFPZFIPLXQLTRZVZGDKWSGCBRN);
PlayerInfo._players = new Dictionary<ulong, PlayerInfo>();
Instance = null;
}
public const string FAOKPRBLRPZJVFBJNQMKYSESJRTSGZMEYLQHDFSJ = "TOP_TEN_USER";
private void VXINRMSNWIFEYWGJGRWXKMTVYUOIZMUWVZWDHLCECSJJ(BasePlayer player, int FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC = 0) {
string OCTLRRGICIQUZENVWBXXJFRDVKJOTFIXDWJQKGSZNKEQV = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 0 ? "1 1 1 1" : "1 1 1 0.2";
string YHDLGDVMEJKQPGHROWZTRDUXLPJYKZABHLLCKHYECRR = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 0 ? "0.929 0.882 0.847 0.75" : "0.7 0.7 0.7 0.2";
var WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX = new CuiElementContainer();
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiPanel {
CursorEnabled = false, Image = {
Color = "1 1 1 0"
}
, RectTransform = {
AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = "0 -60", OffsetMax = "0 0"
}
}
, XPUQENMXXVHBDRSGGLPMFPZFIPLXQLTRZVZGDKWSGCBRN, TYLWTFYOIHPOHPCOHLBPBIRLDVOWGDNISTVNLTSOSLMSQP);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiPanel {
RectTransform = {
AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "5 5", OffsetMax = "-5 -5"
}
, Image = {
Color = "0 0 0 0"
}
}
, TYLWTFYOIHPOHPCOHLBPBIRLDVOWGDNISTVNLTSOSLMSQP, "BUTTONS_MAIN");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "BUTTONS_MAIN", Name = "MY_STAT_BUTTON", Components = {
new CuiRawImageComponent {
Png = (string) LoadingImages.Call("GetImage", "btn_ctg"), Color = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 0 ? "1 1 1 1" : "1 1 1 0.2"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "26 0", OffsetMax = "173 51"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiButton {
RectTransform = {
AnchorMin = "0 0", AnchorMax = "1 1"
}
, Button = {
Command = $"UI_HandlerStat Page_swap 0", Color = "0 0 0 0"
}
, Text = {
Text = "STAT_UI_MY_STAT".GetAdaptedMessage(player.UserIDString), FontSize = 20, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter, Color = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 0 ? "0.929 0.882 0.847 0.75" : "0.7 0.7 0.7 0.2"
}
}
, "MY_STAT_BUTTON");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "BUTTONS_MAIN", Name = "TOPTEN_BUTTON", Components = {
new CuiRawImageComponent {
Png = (string) LoadingImages.Call("GetImage", "btn_ctg"), Color = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 1 ? "1 1 1 1" : "1 1 1 0.2"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "181 0", OffsetMax = "327 51"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiButton {
RectTransform = {
AnchorMin = "0 0", AnchorMax = "1 1"
}
, Button = {
Command = $"UI_HandlerStat Page_swap 1", Color = "0 0 0 0"
}
, Text = {
Text = "STAT_UI_TOP_TEN".GetAdaptedMessage(player.UserIDString), FontSize = 20, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter, Color = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 1 ? "0.929 0.882 0.847 0.75" : "0.7 0.7 0.7 0.2"
}
}
, "TOPTEN_BUTTON");
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiElement {
Parent = "BUTTONS_MAIN", Name = "SEARCH_BUTTON", Components = {
new CuiRawImageComponent {
Png = (string) LoadingImages.Call("GetImage", "btn_ctg"), Color = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 2 ? "1 1 1 1" : "1 1 1 0.2"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = $"336 0", OffsetMax = $"481 51"
}
}
}
);
WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX.Add(new CuiButton {
RectTransform = {
AnchorMin = "0 0", AnchorMax = "1 1"
}
, Button = {
Command = $"UI_HandlerStat Page_swap 2", Color = "0 0 0 0"
}
, Text = {
Text = "STAT_UI_SEARCH".GetAdaptedMessage(player.UserIDString), FontSize = 20, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter, Color = FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 2 ? "0.929 0.882 0.847 0.75" : "0.7 0.7 0.7 0.2"
}
}
, "SEARCH_BUTTON");
CuiHelper.DestroyUi(player, TYLWTFYOIHPOHPCOHLBPBIRLDVOWGDNISTVNLTSOSLMSQP);
CuiHelper.AddUi(player, WTXUOHVLKGQBZKHSLOQCAKZHRPYOMKCAJIRJONXUMYAYLXPVX);
if (FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 0) NJYNZUVFFSEZVTKQOQZYXRSHGTTLRZWPPGVZAMDHYJM(player);
else if (FXBZUGAWDXCSTIZGPKURICIOIEMSJKCJFAOCARTZLMLLCXFC == 1) KIXXAVTWPGZVWKWMQGYYYBLAIALNCODVTAHLJZKCG(player);
else UPOTBTMJMAIDNPWYKNJOIJZACBUPSUSCKTDFZOXT(player);
}
private string CleanUpString(string input) {
return CleanUpRegex.Replace(input, string.Empty);
}
private void CGNOYQWQWUQJMMXUFTTECTNTFBZNLCYGUMWZRBMVUSD() => Interface.Oxide.DataFileSystem.WriteObject("XDStatistics/IgnoredPlayers", ignoreReservedPlayer);
private void OnPlayerDeath(BasePlayer player, HitInfo hitInfo) {
if(player == null) return;
if (player.IsPlayer()) {
if(!UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.settingsIgnore.countSleepingPlayerKills && !player.IsConnected) return;
if(!UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.settingsIgnore.countKillsWithoutWeapons && IsWeaponFree(player)) return;
PlayerInfo XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU = PlayerInfo.GetOrCreate(player.userID);
if (hitInfo?.InitiatorPlayer != null) {
BasePlayer attacker = hitInfo.InitiatorPlayer;
if (attacker.userID == player.userID || hitInfo.damageTypes.GetMajorityDamageType() is DamageType.Suicide or DamageType.Fall) {
XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithSuicides().WithDeaths(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.GGXQVBQYLKTDTYUPBKFHJSXELMUACSTAWRKTXMVAHNPXVV, scoreAdd : false);
return;
}
if (attacker.IsPlayer()) {
PlayerInfo playerAttacker = PlayerInfo.GetOrCreate(attacker.userID);
if (JDALJCAAXZZZFKQKTDVGBFMHPGWUZCZUDAPZNHTPXLNP(attacker.userID, player.userID) || NDNYMZFJDKEQSVCFGAUZFWFURWMJFJPRXVCCJVMDULZP(attacker.UserIDString, player.UserIDString) || IVLQJQKSPGQYSHQMVDUUMTWTAWKORFUWPKJBASWSFYHP(attacker.userID)) return;
XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithDeaths(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.KJYZHKSGOJSEJHPWTQSGBOBRPOFAWDAIQHKRESMQD, scoreAdd : false);
playerAttacker.AddOrUpdateWeapon(hitInfo, true);
playerAttacker.UpdatePvpStats(builder => builder.WithKills(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.YYAKRIICFOZEODVRNLCVITBGEYYYYZXFTYGNAMQAEFVPFW);
}
else {
XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithDeaths(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.KJYZHKSGOJSEJHPWTQSGBOBRPOFAWDAIQHKRESMQD, scoreAdd : false);
}
}
else if(hitInfo?.Initiator != null) {
XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithDeaths(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.KJYZHKSGOJSEJHPWTQSGBOBRPOFAWDAIQHKRESMQD, scoreAdd : false);
}
else {
if (playersWounded.Remove(player, out HitInfo info)) {
OnPlayerDeath(player, info);
return;
}
if (hitInfo != null) {
switch (hitInfo.damageTypes.GetMajorityDamageType()) {
case DamageType.Cold : case DamageType.Drowned : case DamageType.ElectricShock : case DamageType.Radiation : XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithDeaths(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.KJYZHKSGOJSEJHPWTQSGBOBRPOFAWDAIQHKRESMQD, scoreAdd : false);
break;
case DamageType.Suicide : case DamageType.Fall : XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithSuicides().WithDeaths(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.GGXQVBQYLKTDTYUPBKFHJSXELMUACSTAWRKTXMVAHNPXVV, scoreAdd : false);
break;
}
return;
}
XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithSuicides().WithDeaths(), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.GGXQVBQYLKTDTYUPBKFHJSXELMUACSTAWRKTXMVAHNPXVV, scoreAdd : false);
}
}
else {
if (hitInfo != null && hitInfo.InitiatorPlayer != null) {
BasePlayer attacker = hitInfo.InitiatorPlayer;
if(!attacker.IsPlayer()) return;
PlayerInfo XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU = PlayerInfo.GetOrCreate(attacker.userID);
XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.UpdatePvpStats(builder => builder.WithKillsNpc().WithKills(UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.settings.npsDeathUseKils ? 1 : 0), score : Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.HMUDIHRKULIQTFMFWCVFITMPPELAWIJMIADFBYDWGIVGW);
if (UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.settings.GZRIIQDGBPLAZEEPGJZIOQYCDMUJCLLIWCBVWZHFI) XAKOYTTMWLUFZOUSBTOWWCJHAJTTIZXYSDKUFGLROSLCU.AddOrUpdateWeapon(hitInfo, true);
}
}
}
public const string HPRUPPXOLGATXQBIFTGVOTPDNTNXPVZUNSGHOIXTV = "USER_STAT";
private class PlayerInfo : SplitDatafile<PlayerInfo> {
private const string BaseFolder = "XDStatistics" + "/" + "Players" + "/";
public static PlayerInfo Save(ulong userId) => Save(BaseFolder, userId);
public static void Delete (ulong userId) => Delete(BaseFolder, userId);
public static PlayerInfo Get(ulong userId) => Get(BaseFolder, userId);
public static PlayerInfo Load(ulong userId) => Load(BaseFolder, userId);
public static PlayerInfo Clear(ulong userId) => ClearAndSave(BaseFolder, userId);
public static PlayerInfo GetOrLoad(ulong userId) => GetOrLoad(BaseFolder, userId);
public static PlayerInfo GetOrCreate(ulong userId) => GetOrCreate(BaseFolder, userId);
public static string[] GetFiles() => GetFiles(BaseFolder);
[JsonIgnore]
public bool IsFake;
[JsonIgnore]
public bool IsIgnore;
[JsonIgnore]
public bool IsChanged = false;
public string Name = string.Empty;
public bool JDMCQQOGLGAWYHRVWIQVFVFKIAPFFZXDILRDHFTOTQAARVD;
internal string GetPlayerName(ulong steamId) => string.IsNullOrWhiteSpace(Name) ? Instance.covalence.Players.FindPlayerById(steamId.ToString())?.Name ?? "UNKNOWN" : Name;
public float Score;
internal string ScoreFormatted() => Score.ToString("F2");
private void AddScore(float score) => Score += score;
private void RemoveScore(float score) => Score -= score;
public Dictionary<string, int> CropGrowthStats {
get;
}
= new();
public int TotalCropsGrown {
get;
set;
}
public void AddOrUpdateCrop(string shortName, int FQQOZNNSMXNZCINVGODCWOAMSDNWHCRQUMXTVVFMEFEW, float score = 0) {
if (!CropGrowthStats.TryAdd(shortName, FQQOZNNSMXNZCINVGODCWOAMSDNWHCRQUMXTVVFMEFEW)) {
CropGrowthStats[shortName] += FQQOZNNSMXNZCINVGODCWOAMSDNWHCRQUMXTVVFMEFEW;
}
TotalCropsGrown += FQQOZNNSMXNZCINVGODCWOAMSDNWHCRQUMXTVVFMEFEW;
AddScore(score);
}
public Dictionary<string, int> ExplosiveUsageStats {
get;
}
= new() {
["explosive.timed"]
= 0, ["explosive.satchel"] = 0, ["grenade.beancan"] = 0, ["grenade.f1"] = 0, ["ammo.rocket.basic"] = 0, ["ammo.rocket.hv"] = 0, ["ammo.rocket.fire"] = 0, ["ammo.rifle.explosive"] = 0
}
;
public int TotalExplosivesUsed {
get;
set;
}
public void AddOrUpdateExplosive(BaseEntity entity, string shortname = "") {
string weaponName = string.IsNullOrWhiteSpace(shortname) ? string.Empty : shortname;
if (entity != null) {
if (!Instance._prefabID2Item.TryGetValue(entity.prefabID, out weaponName)) {
Instance._prefabNameItem.TryGetValue(entity.ShortPrefabName, out weaponName);
}
}
if (!string.IsNullOrEmpty(weaponName)) {
if (ExplosiveUsageStats.ContainsKey(weaponName) && !Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.VKFIMTRRVGDOCWHHKSESKLJJNBWYSBEBCQSRLGCLJEHT.Contains(weaponName)) {
ExplosiveUsageStats[weaponName]++;
TotalExplosivesUsed++;
if (Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.VKVCUSYYWTNEFOQONEBFZBLQTEEXXOBLTWQRHIEGE.TryGetValue(weaponName, out float scoreValue)) AddScore(scoreValue);
}
}
}
private static readonly Dictionary<string, string> ResourceMappings = new() {
{
"stones", "stones"
}
, {
"wood", "wood"
}
, {
"metal.ore", "metal.ore"
}
, {
"metal.fragments", "metal.ore"
}
, {
"sulfur.ore", "sulfur.ore"
}
, {
"sulfur", "sulfur.ore"
}
, {
"hq.metal.ore", "hq.metal.ore"
}
, {
"metal.refined", "hq.metal.ore"
}
, {
"scrap", "scrap"
}
}
;
public Dictionary<string, int> ResourceGatheringStats {
get;
}
= new() {
["wood"]
= 0, ["stones"] = 0, ["metal.ore"] = 0, ["sulfur.ore"] = 0, ["hq.metal.ore"] = 0, ["scrap"] = 0,
}
;
public int TotalResourcesGathered {
get;
set;
}
public void AddOrUpdateResource(string shortName, int FQQOZNNSMXNZCINVGODCWOAMSDNWHCRQUMXTVVFMEFEW, bool isGiveScore = false) {
if (Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.VKFIMTRRVGDOCWHHKSESKLJJNBWYSBEBCQSRLGCLJEHT.Contains(shortName)) return;
if (ResourceMappings.TryGetValue(shortName, out string mappedName)) {
ResourceGatheringStats.TryGetValue(mappedName, out int currentCount);
ResourceGatheringStats[mappedName] = currentCount + FQQOZNNSMXNZCINVGODCWOAMSDNWHCRQUMXTVVFMEFEW;
TotalResourcesGathered += FQQOZNNSMXNZCINVGODCWOAMSDNWHCRQUMXTVVFMEFEW;
if (isGiveScore) if (mappedName == "scrap") AddScore(Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.HPPSWRCZORDGYCSORTRTDUZDLYJKOKBVDBLMUPCHFE);
else if (Instance.UJDPVBAZFIADRKJYCLQLJVMWBCVXNBHWUQWNFDFKFHSR.WCVDWNDXIAPMAAVPNOPILSFIGDMYCFJUDNDLKBQSEFESI.GUVZZRQAIUVDDTZFIPOBAHSCKIYYHEAVASVQVUFNGW.TryGetValue(mappedName, out float scoreValue)) AddScore(scoreValue);
}
}
public Dictionary<string, WeaponInfo> IUXPJRTIYESNDSKLOFXYAPQJSIUAYQBFWDNYCWLUYVYLIAE {
get;
}
= new();
public class WeaponInfo {
public int Kills {
get;
set;
}
public int DNLSMASSDNWBXTKIDMQAFLISUCZEREBSEIXKEITVLUVP {
get;
set;
}
public int KXFLPIVJEGRETYJAOBZMEXOVZDUTVPLQTSJFTSBWFJZCFGKKJ {
get;
set;
}
}
public void AddOrUpdateWeapon(HitInfo hitinfo, bool kill = false) {
if (hitinfo?.WeaponPrefab == null) return;
string weaponName = null;
if (hitinfo.Weapon != null && hitinfo.Weapon.GetCachedItem() != null && hitinfo.Weapon.GetCachedItem().info != null) {
weaponName = hitinfo.Weapon.GetCachedItem().info.shortname;
}
else {
if (!Instance._prefabID2Item.TryGetValue(hitinfo.WeaponPrefab.prefabID, out weaponName)) {
Instance._prefabNameItem.TryGetValue(hitinfo.WeaponPrefab.ShortPrefabName, out weaponName);
}
}
if (string.IsNullOrEmpty(weaponName)) return;
weaponName = weaponName switch {
"rifle.ak.ice" or "rifle.ak.diver" => "rifle.ak", _ => weaponName
}
;
if (!IUXPJRTIYESNDSKLOFXYAPQJSIUAYQBFWDNYCWLUYVYLIAE.TryGetValue(weaponName, out WeaponInfo weaponInfo)) {
weaponInfo = new WeaponInfo();
IUXPJRTIYESNDSKLOFXYAPQJSIUAYQBFWDNYCWLUYVYLIAE[weaponName] = weaponInfo;
}
weaponInfo.KXFLPIVJEGRETYJAOBZMEXOVZDUTVPLQTSJFTSBWFJZCFGKKJ++;
if (hitinfo.isHeadshot) weaponInfo.DNLSMASSDNWBXTKIDMQAFLISUCZEREBSEIXKEITVLUVP++;
if (kill) weaponInfo.Kills++;
}
public PvpStats PlayerPvpStats {
get;
private set;
}
= new();
internal class PvpStatsBuilder {
private readonly PvpStats _stats;
public PvpStatsBuilder(PvpStats stats) {
_stats = stats ?? new PvpStats();
}
public PvpStatsBuilder WithKills(int kill = 1) {
_stats.Kills += kill;
return this;
}
public PvpStatsBuilder WithKillsNpc() {
_stats.XTVCVMJJMLNBOPVALBOEHVZDGVXLPTTKKASRURWXVJGQIDUK++;
return this;
}
public PvpStatsBuilder WithKillsAnimal() {
_stats.KillsAnimal++;
return this;
}
public PvpStatsBuilder WithDeaths() {
_stats.FUJWENBUSVAPXUSSDROWDGUERIXOIUCAMEKYJNFMQW++;
return this;
}
public PvpStatsBuilder WithSuicides() {
_stats.VWHYPNXEMGNDZAFFVQNLXSACSJUIQLBGGDYHJKHA++;
return this;
}
public PvpStatsBuilder WithShots() {
_stats.KXFLPIVJEG
// ... [Code preview truncated due to length. Full source in attached file] ...