From ba782a9a9d5dcd9eb8c0aad020dfc4638994776f Mon Sep 17 00:00:00 2001 From: _sega Date: Tue, 3 Feb 2026 12:51:53 +0300 Subject: [PATCH] =?UTF-8?q?FEAT:=20=D0=9F=D1=80=D0=BE=D1=81=D0=BC=D0=BE?= =?UTF-8?q?=D1=82=D1=80=20=D1=81=D1=87=D0=B5=D1=82=D1=87=D0=B8=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D1=81=D0=B0=D0=B9?= =?UTF-8?q?=D1=82-=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Fonts/NEW/NexaRegular COOL.asset | 2 +- Assets/Scenes/GameScene3D.unity | 50 +++++++++- Assets/Scripts/Combinator/SettingsActions.cs | 6 +- Assets/Scripts/FastCheckCounters.cs | 4 +- Assets/Scripts/Inputs/ComSystem/ComWrapper.cs | 4 +- Assets/Scripts/PrizeSystem/PrizeSystem.cs | 8 +- Assets/Scripts/Server/CountersCollector.cs | 99 +++++++++++++++++++ .../Scripts/Server/CountersCollector.cs.meta | 11 +++ Assets/Scripts/Server/HtmlBuilder.cs | 56 ++++++++++- 9 files changed, 226 insertions(+), 14 deletions(-) create mode 100644 Assets/Scripts/Server/CountersCollector.cs create mode 100644 Assets/Scripts/Server/CountersCollector.cs.meta diff --git a/Assets/Fonts/NEW/NexaRegular COOL.asset b/Assets/Fonts/NEW/NexaRegular COOL.asset index aac28fe..845435c 100644 --- a/Assets/Fonts/NEW/NexaRegular COOL.asset +++ b/Assets/Fonts/NEW/NexaRegular COOL.asset @@ -11349,7 +11349,7 @@ Material: - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} - _FaceColor: {r: 1, g: 1, b: 1, a: 1} - - _GlowColor: {r: 0, g: 1, b: 0.39179158, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0.017659903, a: 1} - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} - _OutlineColor: {r: 0.554717, g: 0.554717, b: 0.554717, a: 1} - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Scenes/GameScene3D.unity b/Assets/Scenes/GameScene3D.unity index a4c9033..3a573ce 100644 --- a/Assets/Scenes/GameScene3D.unity +++ b/Assets/Scenes/GameScene3D.unity @@ -14008,6 +14008,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 27edee241c0fb934ebe299af31cf6c77, type: 3} m_Name: m_EditorClassIdentifier: + adminPasswordFallback: 1234 + passwordFileName: admin_password.txt + settingActions: [] --- !u!4 &592995719 Transform: m_ObjectHideFlags: 0 @@ -14020,7 +14023,8 @@ Transform: m_LocalPosition: {x: 4.206707, y: 5.733204, z: 5.57958} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 918736948} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &599592677 @@ -25698,6 +25702,50 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 918319251} m_CullTransparentMesh: 1 +--- !u!1 &918736947 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 918736948} + - component: {fileID: 918736949} + m_Layer: 0 + m_Name: CountersCollector + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &918736948 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918736947} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 592995719} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &918736949 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918736947} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8335100aebab3444a89736e47c763b4, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &932301124 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Combinator/SettingsActions.cs b/Assets/Scripts/Combinator/SettingsActions.cs index 318807e..3eb3757 100644 --- a/Assets/Scripts/Combinator/SettingsActions.cs +++ b/Assets/Scripts/Combinator/SettingsActions.cs @@ -29,7 +29,7 @@ public class SettingsActions : MonoBehaviour public void ResetCoinsCounter() { - PlayerPrefs.SetInt(PrizeSystem.key_startsNul, 0); + PlayerPrefs.SetInt(PrizeSystem.key_cashNul, 0); RefreshUI(); } public void ResetPrizes() @@ -89,8 +89,8 @@ public class SettingsActions : MonoBehaviour { string valutaName = PlayerPrefs.GetString("ValutaName", "руб."); - starts.text = STARTS_BASE + UNNULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_starts) + " " + valutaName; - startsNul.text = STARTS_BASE + NULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_startsNul) + " " + valutaName; + starts.text = STARTS_BASE + UNNULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_cash) + " " + valutaName; + startsNul.text = STARTS_BASE + NULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_cashNul) + " " + valutaName; //prize.text = PRIZE_BASE + UNNULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_prizesgiven); //prizeNul.text = PRIZE_BASE + NULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_prizesgivenNul); diff --git a/Assets/Scripts/FastCheckCounters.cs b/Assets/Scripts/FastCheckCounters.cs index a5b46c7..acc8637 100644 --- a/Assets/Scripts/FastCheckCounters.cs +++ b/Assets/Scripts/FastCheckCounters.cs @@ -41,8 +41,8 @@ public class FastCheckCounters : MonoBehaviour } void RefreshUI() { - starts.text = STARTS_BASE + UNNULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_starts); - startsNul.text = STARTS_BASE + NULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_startsNul); + starts.text = STARTS_BASE + UNNULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_cash); + startsNul.text = STARTS_BASE + NULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_cashNul); prize.text = PRIZE_BASE + UNNULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_prizesgiven); prizeNul.text = PRIZE_BASE + NULLABLE + ": " + PlayerPrefs.GetInt(PrizeSystem.key_prizesgivenNul); diff --git a/Assets/Scripts/Inputs/ComSystem/ComWrapper.cs b/Assets/Scripts/Inputs/ComSystem/ComWrapper.cs index 4202afe..869d00e 100644 --- a/Assets/Scripts/Inputs/ComSystem/ComWrapper.cs +++ b/Assets/Scripts/Inputs/ComSystem/ComWrapper.cs @@ -69,8 +69,8 @@ public class ComWrapper : MonoBehaviour PlayerPrefs.SetInt("CoinsCount", Balance); //Счетчики выручки - PlayerPrefs.SetInt(PrizeSystem.key_starts, PlayerPrefs.GetInt(PrizeSystem.key_starts) + recieved); - PlayerPrefs.SetInt(PrizeSystem.key_startsNul, PlayerPrefs.GetInt(PrizeSystem.key_startsNul) + recieved); + PlayerPrefs.SetInt(PrizeSystem.key_cash, PlayerPrefs.GetInt(PrizeSystem.key_cash) + recieved); + PlayerPrefs.SetInt(PrizeSystem.key_cashNul, PlayerPrefs.GetInt(PrizeSystem.key_cashNul) + recieved); if (SettingsManager.GetString("BaseBotDifficulty", "Фиксированная") == "Повышенная") { diff --git a/Assets/Scripts/PrizeSystem/PrizeSystem.cs b/Assets/Scripts/PrizeSystem/PrizeSystem.cs index 4d23cb5..aef4cf6 100644 --- a/Assets/Scripts/PrizeSystem/PrizeSystem.cs +++ b/Assets/Scripts/PrizeSystem/PrizeSystem.cs @@ -17,8 +17,8 @@ public class PrizeSystem : MonoBehaviour [SerializeField] Notification prizeNotification; - public static string key_starts = "STARTS"; - public static string key_startsNul = "STARTSNUL"; + public static string key_cash = "STARTS"; + public static string key_cashNul = "STARTSNUL"; public static string key_prizesgiven = "PRIZESGIVEN"; public static string key_prizesgivenNul = "PRIZESGIVENNUL"; @@ -190,8 +190,8 @@ public class PrizeSystem : MonoBehaviour void InitCounters() { - if (!PlayerPrefs.HasKey(key_starts)) PlayerPrefs.SetInt(key_starts, 0); - if (!PlayerPrefs.HasKey(key_startsNul)) PlayerPrefs.SetInt(key_startsNul, 0); + if (!PlayerPrefs.HasKey(key_cash)) PlayerPrefs.SetInt(key_cash, 0); + if (!PlayerPrefs.HasKey(key_cashNul)) PlayerPrefs.SetInt(key_cashNul, 0); } private void SoundNotificationIfNeeds() diff --git a/Assets/Scripts/Server/CountersCollector.cs b/Assets/Scripts/Server/CountersCollector.cs new file mode 100644 index 0000000..c72bc67 --- /dev/null +++ b/Assets/Scripts/Server/CountersCollector.cs @@ -0,0 +1,99 @@ +using System.Collections.Concurrent; +using System.Collections.Generic; +using UnityEngine; + +public class CountersCollector : MonoBehaviour +{ + public static ConcurrentDictionary Counters = new(); + + void Awake() + { + InvokeRepeating("Refresh", 0, 5); + } + + private static readonly CounterData[] _counterConfigs = + { + // Призовые счетчики глобальные + new CounterData(PrizeSystem.HopperPrizeCounter, "Хоппер", 0), + new CounterData(PrizeSystem.TicketPrizeCounter, "Тикетник", 0), + new CounterData(PrizeSystem.MarblesPrizeCounter, "Марблс", 0), + new CounterData(PrizeSystem.SpecialPrizeCounter, "Суперприз", 0), + + // Призовые счетчики обнуляемые + new CounterData($"{PrizeSystem.HopperPrizeCounter}Nullable", "Хоппер (обнуляемый)", 0), + new CounterData($"{PrizeSystem.TicketPrizeCounter}Nullable", "Тикетник (обнуляемый)", 0), + new CounterData($"{PrizeSystem.MarblesPrizeCounter}Nullable", "Марблс (обнуляемый)", 0), + new CounterData($"{PrizeSystem.SpecialPrizeCounter}Nullable", "Суперприз (обнуляемый)", 0), + + // Выручка + new CounterData(PrizeSystem.key_cash, "Выручка", 0), + new CounterData(PrizeSystem.key_cashNul, "Выручка (обнуляемый)", 0), + + // Остаток призов + new CounterData(KeyVault.PRIZES_AVAILABLE, "Остаток призов", 0), + + // Цены + new CounterData("PricePVP", "Цена на двоих", 10), + new CounterData("PricePVE", "Цена против бота", 10), + new CounterData("PriceRevenge", "Цена реванша", 10), + + // Расчеты + new CounterData("ValutaName", "Название валюты", "руб."), + new CounterData("ValutaPerImpulse", "Валюта за импульс", 10), + + // Другое + new CounterData("Number", "Номер телефона", "<не указан>"), + new CounterData("SpecialPrize", "Суперприз", "<не указан>") + }; + + + void Refresh() + { + Counters.Clear(); + foreach (var config in _counterConfigs) + { + AddCounter(config); + } + } + void AddCounter(CounterData counterData) + { + string value = counterData.Type == SettingType.Int + ? PlayerPrefs.GetInt(counterData.PrefsKey, counterData.DefaultIntValue).ToString() + : PlayerPrefs.GetString(counterData.PrefsKey, counterData.DefaultStringValue); + + Counters[counterData.Alias] = value; + } + struct CounterData + { + public string PrefsKey; + public string Alias; + + public SettingType Type; + public string DefaultStringValue; + public int DefaultIntValue; + + + + /// Конструктор для строковых счетчиков + public CounterData(string prefsKey, string alias, string defaultValue) + { + PrefsKey = prefsKey; + Alias = alias; + + Type = SettingType.String; + DefaultStringValue = defaultValue; + DefaultIntValue = 0; + } + + /// Конструктор для целочисленных счетчиков + public CounterData(string prefsKey, string alias, int defaultValue) + { + PrefsKey = prefsKey; + Alias = alias; + + Type = SettingType.Int; + DefaultStringValue = string.Empty; + DefaultIntValue = defaultValue; + } + } +} diff --git a/Assets/Scripts/Server/CountersCollector.cs.meta b/Assets/Scripts/Server/CountersCollector.cs.meta new file mode 100644 index 0000000..2c6a7c6 --- /dev/null +++ b/Assets/Scripts/Server/CountersCollector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8335100aebab3444a89736e47c763b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Server/HtmlBuilder.cs b/Assets/Scripts/Server/HtmlBuilder.cs index d03becd..d5c91f7 100644 --- a/Assets/Scripts/Server/HtmlBuilder.cs +++ b/Assets/Scripts/Server/HtmlBuilder.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; @@ -76,6 +77,10 @@ public class HtmlBuilder sb.AppendLine("

Настройки фишки

"); + // === БЛОК: АКТИВНЫЕ ПАРАМЕТРЫ (CountersCollector.Counters) === + sb.AppendLine(GetActiveCountersBlock()); + + // === БЛОК: НАСТРОЙКИ === sb.AppendLine(@"
@@ -398,6 +403,55 @@ public class HtmlBuilder return res; } + private static string GetActiveCountersBlock() + { + var sb = new StringBuilder(); + + sb.AppendLine(@" +
+ Активные параметры +
+
+

Активные параметры

+"); + + // CountersCollector.Counters : ConcurrentDictionary + var dict = CountersCollector.Counters; + + if (dict == null || dict.IsEmpty) + { + sb.AppendLine("
Нет данных
"); + } + else + { + // Стабильный вывод: снимок + сортировка по ключу + var items = dict.ToArray() + .OrderBy(kv => kv.Key ?? "", StringComparer.Ordinal); + + foreach (var kv in items) + { + string key = kv.Key ?? ""; + string val = kv.Value ?? ""; + + sb.AppendLine(@" +
"); + sb.AppendLine($" "); + sb.AppendLine($"
{Escape(val)}
"); + sb.AppendLine("
"); + } + } + + sb.AppendLine(@" +
+
+
+"); + + return sb.ToString(); + } + + + private static string Escape(string s) { if (string.IsNullOrEmpty(s)) return "";