C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Oxide.Plugins {
[Info("zEcoLootUI", "EcoSmile", "1.3.12")]
class zEcoLootUI : RustPlugin {
string perm = "zecolootui.edit";
Dictionary<string, string> prefabcontaner = new Dictionary<string, string>() {
["assets/bundled/prefabs/radtown/crate_basic.prefab"]
= "Маленький деревянный ящик", ["assets/bundled/prefabs/radtown/crate_elite.prefab"] = "Элитный ящик", ["assets/bundled/prefabs/radtown/crate_mine.prefab"] = "Ящик из пещер", ["assets/bundled/prefabs/radtown/crate_tools.prefab"] = "Ящик с инструментами", ["assets/bundled/prefabs/radtown/crate_normal.prefab"] = "Зеленый военный ящик", ["assets/bundled/prefabs/radtown/crate_normal_2.prefab"] = "Обычный деревянный ящик", ["assets/bundled/prefabs/radtown/crate_normal_2_food.prefab"] = "Ящик с едой", ["assets/bundled/prefabs/radtown/crate_normal_2_medical.prefab"] = "Ящик с медециной", ["assets/bundled/prefabs/radtown/crate_underwater_advanced.prefab"] = "Большой подводный ящик", ["assets/bundled/prefabs/radtown/crate_underwater_basic.prefab"] = "Малый подводный ящик", ["assets/bundled/prefabs/radtown/foodbox.prefab"] = "Корзинка с едой", ["assets/bundled/prefabs/radtown/loot_barrel_1.prefab"] = "Синяя бочка у дорог", ["assets/bundled/prefabs/radtown/loot_barrel_2.prefab"] = "Ржавая бочка у дорог", ["assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-1.prefab"] = "Ржавая бочка на РТ", ["assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-2.prefab"] = "Синяя бочка на РТ", ["assets/bundled/prefabs/radtown/minecart.prefab"] = "Тележка с углем", ["assets/prefabs/npc/m2bradley/bradley_crate.prefab"] = "Бредли ящик", ["assets/bundled/prefabs/radtown/oil_barrel.prefab"] = "Нефтяная бочка", ["assets/prefabs/npc/patrol helicopter/heli_crate.prefab"] = "Вертолетный ящик", ["assets/prefabs/deployable/chinooklockedcrate/codelockedhackablecrate.prefab"] = "Ящик с электронным замком", ["assets/prefabs/misc/supply drop/supply_drop.prefab"] = "Аир дроп", ["assets/bundled/prefabs/autospawn/resource/loot/trash-pile-1.prefab"] = "Корзинка с припасами", ["assets/bundled/prefabs/radtown/vehicle_parts.prefab"] = "Ящик с частями", ["assets/prefabs/deployable/chinooklockedcrate/codelockedhackablecrate_oilrig.prefab"] = "Ящик с электронным замком с Нефтевышки", ["assets/prefabs/misc/xmas/sleigh/presentdrop.prefab"] = "Новогодний дроп", ["assets/bundled/prefabs/radtown/dmloot/dm ammo.prefab"] = "DM AMMO", ["assets/bundled/prefabs/radtown/dmloot/dm c4.prefab"] = "DM C4", ["assets/bundled/prefabs/radtown/dmloot/dm construction tools.prefab"] = "DM CONSTRUCTION TOOLS", ["assets/bundled/prefabs/radtown/dmloot/dm res.prefab"] = "DM RES", ["assets/bundled/prefabs/radtown/dmloot/dm food.prefab"] = "DM FOOD", ["assets/bundled/prefabs/radtown/dmloot/dm tier1 lootbox.prefab"] = "DM TIER1 LOOTBOX", ["assets/bundled/prefabs/radtown/dmloot/dm tier2 lootbox.prefab"] = "DM TIER2 LOOTBOX", ["assets/bundled/prefabs/radtown/dmloot/dm tier3 lootbox.prefab"] = "DM TIER3 LOOTBOX", ["assets/bundled/prefabs/radtown/loot_component_test.prefab"] = "LOOT_COMPONENT_TEST", ["assets/content/props/roadsigns/roadsign1.prefab"] = "ROADSIGN 1", ["assets/content/props/roadsigns/roadsign2.prefab"] = "ROADSIGN 2", ["assets/content/props/roadsigns/roadsign3.prefab"] = "ROADSIGN 3", ["assets/content/props/roadsigns/roadsign4.prefab"] = "ROADSIGN 4", ["assets/content/props/roadsigns/roadsign5.prefab"] = "ROADSIGN 5", ["assets/content/props/roadsigns/roadsign6.prefab"] = "ROADSIGN 6", ["assets/content/props/roadsigns/roadsign7.prefab"] = "ROADSIGN 7", ["assets/content/props/roadsigns/roadsign8.prefab"] = "ROADSIGN 8", ["assets/content/props/roadsigns/roadsign9.prefab"] = "ROADSIGN 9", ["assets/prefabs/misc/xmas/giftbox/giftbox_loot.prefab"] = "GIFTBOX_LOOT", ["assets/prefabs/resource/diesel barrel/diesel_barrel_world.prefab"] = "DIESEL_BARREL_WORLD", ["assets/scripts/entity/misc/visualstoragecontainer/visualshelvestest.prefab"] = "VISUALSHELVESTEST", ["assets/bundled/prefabs/radtown/underwater_labs/crate_medical.prefab"] = "Подводный ящик с Медециной", ["assets/bundled/prefabs/radtown/underwater_labs/crate_food_1.prefab"] = "Подводный ящик с Едой 1", ["assets/bundled/prefabs/radtown/underwater_labs/crate_food_2.prefab"] = "Подводный ящик с Едой 2", ["assets/bundled/prefabs/radtown/underwater_labs/vehicle_parts.prefab"] = "Подводный ящик с запчастями", ["assets/bundled/prefabs/radtown/underwater_labs/crate_ammunition.prefab"] = "Подводный ящик с Амуницией", ["assets/bundled/prefabs/radtown/underwater_labs/crate_fuel.prefab"] = "Подводный ящик с Топливом", ["assets/bundled/prefabs/radtown/underwater_labs/crate_tools.prefab"] = "Инструментальный подводный ящик", ["assets/bundled/prefabs/radtown/underwater_labs/crate_elite.prefab"] = "Элитный подводный ящик", ["assets/bundled/prefabs/radtown/underwater_labs/tech_parts_2.prefab"] = "Подводный ящик с Тех.Деталями 2", ["assets/bundled/prefabs/radtown/underwater_labs/crate_normal.prefab"] = "Военный подводный ящик", ["assets/bundled/prefabs/radtown/underwater_labs/crate_normal_2.prefab"] = "Подводный Синий ящик", ["assets/bundled/prefabs/radtown/underwater_labs/tech_parts_1.prefab"] = "Подводный ящик с Тех.Деталями 1",
}
;
PluginConfig config;
public class CustomItem {
public string ShortName;
public ulong SkinID;
public string CustomName;
public int MaxAmount;
public int MinAmount;
public int DropChance;
}
public class PluginConfig {
[JsonProperty("Пресеты кастомных предметов")]
public List<CustomItem> customItems;
[JsonProperty("Настройка контейнеров")]
public Dictionary<string, LootSetting> crateSetting;
}
public class LootSetting {
[JsonProperty("Исключить данный тип ящиков из заполнения?")]
public bool DisableCrate = false;
[JsonProperty("Рандомить количество слотов в ящике? (false - будет браться максимум)")]
public bool RandomItemAmount;
[JsonProperty("Максимум слотов")]
public int MaxItemInCrate;
[JsonProperty("Минимум слотов")]
public int MinItemInCrate;
[JsonProperty("Удалять ящик если не был залутан до конца?")]
public bool DeleteCrate;
[JsonProperty("Интервал удаления ящика (минуты)")]
public int DeleteTimer;
}
Dictionary<string, LootSetting> ConfigSetup() {
Dictionary<string, LootSetting> setting = new Dictionary<string, LootSetting>();
foreach (var value in prefabcontaner.Values) {
setting.Add(value, new LootSetting() {
DisableCrate = false, RandomItemAmount = false, MaxItemInCrate = 4, MinItemInCrate = 4, DeleteCrate = true, DeleteTimer = 5
}
);
}
return setting;
}
protected override void LoadDefaultConfig() {
config = new PluginConfig() {
customItems = new List<CustomItem>() {
new CustomItem() {
ShortName = "", SkinID = 0, CustomName = "", MinAmount = 0, MaxAmount = 1, DropChance = 0
}
, new CustomItem() {
ShortName = "", SkinID = 0, CustomName = "", MinAmount = 0, MaxAmount = 1, DropChance = 0
}
,
}
, crateSetting = ConfigSetup()
}
;
}
protected override void LoadConfig() {
base.LoadConfig();
config = Config.ReadObject<PluginConfig>();
foreach (KeyValuePair<string, string> value in prefabcontaner.Where(x => !config.crateSetting.ContainsKey(x.Value))) {
PrintWarning($"Added New crate {value.Value}");
config.crateSetting.Add(value.Value, new LootSetting() {
DisableCrate = false, RandomItemAmount = false, MaxItemInCrate = 4, MinItemInCrate = 4, DeleteCrate = true, DeleteTimer = 5
}
);
}
if (config.customItems == null) {
config.customItems = new List<CustomItem>() {
new CustomItem() {
ShortName = "", SkinID = 0, CustomName = "", MinAmount = 1, MaxAmount = 1, DropChance = 0
}
, new CustomItem() {
ShortName = "", SkinID = 0, CustomName = "", MinAmount = 1, MaxAmount = 1, DropChance = 0
}
,
}
;
}
SaveConfig();
}
protected override void SaveConfig() => Config.WriteObject(config);
bool init = false;
Dictionary<string, List<ItemSetting>> lootSettings = new Dictionary<string, List<ItemSetting>>();
void OnServerInitialized() {
version = $"{this.Version.Major}_{this.Version.Minor}_{this.Version.Patch}";
ChekNewItem();
GetDefaultLoot();
RestoreBase();
LootTimer();
permission.RegisterPermission(perm, this);
PrintWarning($"Registered permission {perm}");
var containers = BaseNetworkable.serverEntities.OfType<LootContainer>();
filling = ServerMgr.Instance.StartCoroutine(FirsLoad(containers));
}
Coroutine filling;
IEnumerator FirsLoad(IEnumerable<LootContainer> containers) {
PrintWarning($"Started Initialize Loot table!!!");
yield return null;
foreach (var data in prefabcontaner) {
if (Interface.Oxide.DataFileSystem.ExistsDatafile($"zEcoLootUI/{data.Value}")) yield return lootSettings[data.Key] = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{data.Value}");
else yield return null;
}
foreach (var container in containers) {
if (!prefabcontaner.ContainsKey(container.PrefabName)) {
PrintWarning($"Container not found {container.PrefabName}");
continue;
}
if (!lootSettings.ContainsKey(container.PrefabName)) {
yield return lootSettings[container.PrefabName] = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefabcontaner[container.PrefabName]}");
}
}
int initProcess = 0;
float cdTime = UnityEngine.Time.realtimeSinceStartup;
foreach (var container in containers) {
yield return ServerMgr.Instance.StartCoroutine(FillContaner(container));
initProcess++;
if (cdTime < UnityEngine.Time.realtimeSinceStartup) {
PrintWarning($"Initialize loot table please wait! [{initProcess}/{containers.Count()}]");
cdTime = UnityEngine.Time.realtimeSinceStartup + 1f;
}
}
PrintWarning($"Initialize loot table please wait! [{initProcess}/{containers.Count()}]");
PrintWarning($"Initialize Loot table has been ended!!!");
init = true;
}
string version = $"";
private Dictionary<BasePlayer, bool> visionImage = new Dictionary<BasePlayer, bool>();
void RestoreBase() {
foreach (var prefab in prefabcontaner) {
List<ItemSetting> itemlist = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefab.Value}");
foreach (var loot in itemlist) {
if (loot.version == $"{this.Version.Major}_{this.Version.Minor}_{this.Version.Patch}") continue;
loot.version = version;
var it = ItemManager.FindItemDefinition(loot.shortname);
if (it.condition.enabled && (loot.Condition == 0f || loot.Condition > 100f)) {
var fraction = UnityEngine.Random.Range(it.condition.foundCondition.fractionMin, it.condition.foundCondition.fractionMax);
var condition = fraction * 100f;
loot.Condition = condition;
}
loot.HasCondition = it.condition.enabled;
}
Interface.Oxide.DataFileSystem.WriteObject($"zEcoLootUI/{prefab.Value}", itemlist);
}
}
bool isUloading = false;
void Unload() {
isUloading = true;
if (filling != null) ServerMgr.Instance.StopCoroutine(filling);
foreach (var pl in BasePlayer.activePlayerList) {
CuiHelper.DestroyUi(pl, "zEcoLootUI.Main.UI");
}
foreach(var ent in BaseNetworkable.serverEntities.OfType<LootContainer>()) {
ent.SpawnLoot();
}
}
void OnHammerHit(BasePlayer player, HitInfo info) {
if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, perm)) return;
if (!(info.HitEntity is LootContainer)) return;
CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI");
var container = new CuiElementContainer();
container.Add(new CuiElement() {
Parent = "Overlay", Name = "zEcoLootUI.Main.UI", Components = {
new CuiImageComponent {
Color = "0 0 0 0.85", Sprite = "assets/content/ui/ui.background.transparent.radial.psd", Material = "assets/content/ui/uibackgroundblur.mat"
}
, new CuiNeedsCursorComponent {
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "1 1",
}
}
}
);
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI", Name = $"zEcoLootUI.Main.UI.text", Components = {
new CuiTextComponent {
Text = $"Редактируется:\n{(prefabcontaner.ContainsKey(info.HitEntity.PrefabName) ? prefabcontaner[info.HitEntity.PrefabName] : info.HitEntity.ShortPrefabName)}", Align = TextAnchor.MiddleCenter, FontSize = 22
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "-1 1"
}
, new CuiRectTransformComponent {
AnchorMin = $"0.5 0.9", AnchorMax = $"0.5 0.9", OffsetMin = $"-250 -64", OffsetMax = $"250 80",
}
}
}
);
CuiHelper.AddUi(player, container);
DrawPanel(player, info.HitEntity.PrefabName);
}
void DrawPanel(BasePlayer player, string prefab) {
if (coroutine != null) ServerMgr.Instance.StopCoroutine(coroutine);
var container = new CuiElementContainer();
CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI.BG");
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI", Name = "zEcoLootUI.Main.UI.BG", Components = {
new CuiImageComponent {
Color = "0 0 0 0.0"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "1 1",
}
}
}
);
CuiHelper.AddUi(player, container);
DrawCrateitem(player, prefab);
}
void DrawCrateitem(BasePlayer player, string prefab, int page = 0) {
ServerMgr.Instance.StartCoroutine(DrawCrateItem(player, prefab, page));
}
Coroutine coroutine;
[PluginReference]
Plugin ImageLibrary;
[ConsoleCommand("AddSlot")]
void AddSlot(ConsoleSystem.Arg arg) {
var player = arg.Player();
var prefab = string.Join(" ", arg.Args.Skip(1));
var type = arg.Args[0];
if (!prefabcontaner.ContainsKey(prefab)) {
PrintError($"Not Fount (AddSlot): {prefab}");
return;
}
if (type == "min") {
config.crateSetting[prefabcontaner[prefab]].MinItemInCrate++;
if (config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate < config.crateSetting[prefabcontaner[prefab]].MinItemInCrate) config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate = config.crateSetting[prefabcontaner[prefab]].MinItemInCrate;
Config.WriteObject(config);
}
else if (type == "max") {
config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate++;
Config.WriteObject(config);
}
CuiHelper.DestroyUi(player, type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText");
var container = new CuiElementContainer();
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText", Components = {
new CuiTextComponent {
Text = type == "min" ? $"{config.crateSetting[prefabcontaner[prefab]].MinItemInCrate}" : $"{config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "-1 1"
}
, new CuiRectTransformComponent {
AnchorMin = type == "min" ? $"0.15 0.98" : "0.15 0.935", AnchorMax =type == "min" ? $"0.15 0.98" : "0.15 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
}
}
}
);
CuiHelper.AddUi(player, container);
}
[ConsoleCommand("RemSlot")]
void RemSlot(ConsoleSystem.Arg arg) {
var player = arg.Player();
var prefab = string.Join(" ", arg.Args.Skip(1));
if (!prefabcontaner.ContainsKey(prefab)) {
PrintError($"Not Fount (RemSlot): {prefab}");
return;
}
var type = arg.Args[0];
if (type == "min") {
config.crateSetting[prefabcontaner[prefab]].MinItemInCrate--;
if (config.crateSetting[prefabcontaner[prefab]].MinItemInCrate < 1) config.crateSetting[prefabcontaner[prefab]].MinItemInCrate = 1;
Config.WriteObject(config);
}
else if (type == "max") {
config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate--;
if (config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate < 1) config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate = 1;
if (config.crateSetting[prefabcontaner[prefab]].MinItemInCrate > config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate) config.crateSetting[prefabcontaner[prefab]].MinItemInCrate = config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate;
}
CuiHelper.DestroyUi(player, type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText");
var container = new CuiElementContainer();
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText", Components = {
new CuiTextComponent {
Text = type == "min" ? $"{config.crateSetting[prefabcontaner[prefab]].MinItemInCrate}" : $"{config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "-1 1"
}
, new CuiRectTransformComponent {
AnchorMin = type == "min" ? $"0.15 0.98" : "0.15 0.935", AnchorMax = type == "min" ? $"0.15 0.98" : "0.15 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
}
}
}
);
CuiHelper.AddUi(player, container);
}
IEnumerator DrawCrateItem(BasePlayer player, string prefab, int page = 0) {
CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI.BG");
if (!visionImage.ContainsKey(player)) visionImage.Add(player, false);
//List<ItemSetting> itemlist = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefabcontaner[prefab]}");
if (!lootSettings.ContainsKey(prefab)) {
PrintWarning($"Повторная загрузка: zEcoLootUI/{prefabcontaner[prefab]}.json");
yield return lootSettings[prefab] = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefabcontaner[prefab]}");
}
var itemList = lootSettings[prefab];
var container = new CuiElementContainer();
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI", Name = "zEcoLootUI.Main.UI.BG", Components = {
new CuiImageComponent {
Color = "0 0 0 0.0"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "1 1",
}
}
}
);
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = "Close.btn", Components = {
new CuiButtonComponent {
Sprite = "assets/icons/close.png", Close = "zEcoLootUI.Main.UI"
}
, new CuiRectTransformComponent {
AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-45 -45", OffsetMax = "-15 -15"
}
}
}
);
container.Add(new CuiButton() {
Button = {
Command = $"AddSlot min {prefab}", Color = "0 1 0 0.3"
}
, Text = {
Text = "+Slot", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.1 0.98", AnchorMax = "0.1 0.98", OffsetMin = "-30 -15", OffsetMax = "30 15"
}
}
, "zEcoLootUI.Main.UI.BG", "AddSlot");
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot.MinText", Components = {
new CuiTextComponent {
Text = $"{config.crateSetting[prefabcontaner[prefab]].MinItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "-1 1"
}
, new CuiRectTransformComponent {
AnchorMin = $"0.15 0.98", AnchorMax = $"0.15 0.98", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
}
}
}
);
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot", Components = {
new CuiTextComponent {
Text = $"MIN: ", Align = TextAnchor.MiddleCenter, FontSize = 22
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "-1 1"
}
, new CuiRectTransformComponent {
AnchorMin = $"0.05 0.98", AnchorMax = $"0.05 0.98", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
}
}
}
);
container.Add(new CuiButton() {
Button = {
Command = $"RemSlot min {prefab}", Color = "0 1 0 0.3"
}
, Text = {
Text = "-Slot", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.2 0.98", AnchorMax = "0.2 0.98", OffsetMin = "-30 -15", OffsetMax = "30 15"
}
}
, "zEcoLootUI.Main.UI.BG", "RemSlot");
//////////////////////////////////////////////////////////////////////////////////////////////
///
container.Add(new CuiButton() {
Button = {
Command = $"AddSlot max {prefab}", Color = "0 1 0 0.3"
}
, Text = {
Text = "+Slot", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.1 0.935", AnchorMax = "0.1 0.935", OffsetMin = "-30 -15", OffsetMax = "30 15"
}
}
, "zEcoLootUI.Main.UI.BG", "AddSlot");
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot.MaxText", Components = {
new CuiTextComponent {
Text = $"{config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "-1 1"
}
, new CuiRectTransformComponent {
AnchorMin = $"0.15 0.935", AnchorMax = $"0.15 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
}
}
}
);
container.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot", Components = {
new CuiTextComponent {
Text = $"MAX: ", Align = TextAnchor.MiddleCenter, FontSize = 22
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "-1 1"
}
, new CuiRectTransformComponent {
AnchorMin = $"0.05 0.935", AnchorMax = $"0.05 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
}
}
}
);
container.Add(new CuiButton() {
Button = {
Command = $"RemSlot max {prefab}", Color = "0 1 0 0.3"
}
, Text = {
Text = "-Slot", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.2 0.935", AnchorMax = "0.2 0.935", OffsetMin = "-30 -15", OffsetMax = "30 15"
}
}
, "zEcoLootUI.Main.UI.BG", "RemSlot");
//////////////////////////////////////////////////////////////////////////////////
container.Add(new CuiButton() {
Button = {
Command = $"Add {prefab}", Color = "0 1 0 0.3"
}
, Text = {
Text = "ДОБАВИТЬ", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.4 0.05", AnchorMax = "0.4 0.05", OffsetMin = "-60 -15", OffsetMax = "60 15"
}
}
, "zEcoLootUI.Main.UI.BG", "AddBtn");
container.Add(new CuiButton() {
Button = {
Command = $"hidelootimage {prefab}", Color = "1 1 1 0.3"
}
, Text = {
Text = visionImage.ContainsKey(player) ? visionImage[player] ? "Показать картинки" : "Скрыть картинки" : "Скрыть картинки", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.5 0.05", AnchorMax = "0.5 0.05", OffsetMin = "-60 -20", OffsetMax = "40 20"
}
}
, "zEcoLootUI.Main.UI.BG", "HideImageBtn");
container.Add(new CuiButton() {
Button = {
Command = $"AddInv {prefab}", Color = "1 1 1 0.2"
}
, Text = {
Text = "ДОБАВИТЬ ИЗ ИНВЕТАРЯ", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.6 0.05", AnchorMax = "0.6 0.05", OffsetMin = "-80 -15", OffsetMax = "80 15"
}
}
, "zEcoLootUI.Main.UI.BG", "AddBtn");
container.Add(new CuiButton() {
Button = {
Command = $"clearall {prefab}", Color = "1 0 0 0.3"
}
, Text = {
Text = "Очистить полностью", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.4 0.05", AnchorMax = "0.4 0.05", OffsetMin = "-215 -15", OffsetMax = "-65 15"
}
}
, "zEcoLootUI.Main.UI.BG", "ClearBtn");
CuiHelper.AddUi(player, container);
var starthorisontal = 0.05f;
var startvertical = 0.8f;
var horisontal = starthorisontal;
var vertical = startvertical;
var widthBtn = 32;
var hightBtn = 32;
int count = 0;
int i = page == 0 ? 0 : page * 60;
foreach (var item in itemList.Skip(page * 60).Take(60)) {
var itemContainer = new CuiElementContainer();
if (!visionImage[player]) {
itemContainer.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}", Components = {
new CuiRawImageComponent {
Png = GetItemImage(item.shortname, item.skin)
}
, new CuiRectTransformComponent {
AnchorMin = $"{horisontal} {vertical}", AnchorMax = $"{horisontal} {vertical}", OffsetMin = $"-{widthBtn} -{hightBtn}", OffsetMax = $"{widthBtn} {hightBtn}",
}
}
}
);
}
else {
itemContainer.Add(new CuiElement() {
Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}", Components = {
new CuiImageComponent {
Color = "1 1 1 0.1"
}
, new CuiRectTransformComponent {
AnchorMin = $"{horisontal} {vertical}", AnchorMax = $"{horisontal} {vertical}", OffsetMin = $"-{widthBtn} -{hightBtn}", OffsetMax = $"{widthBtn} {hightBtn}",
}
}
}
);
}
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Delete", Components = {
new CuiButtonComponent {
Color = "1 0 0 0.4", Command = $"Delete {page} {i} {prefab}"
}
, new CuiRectTransformComponent {
AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-20 -16", OffsetMax = "0 0"
}
}
}
);
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Delete", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Delete.Txt", Components = {
new CuiTextComponent {
Text = "Del", Align = TextAnchor.MiddleCenter, FontSize = 12
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "1 1"
}
}
}
);
if (item.IsBp) itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.IsBP", Components = {
//new CuiRawImageComponent{Png = GetItemImage("blueprintbase") },
new CuiRawImageComponent {
Sprite ="assets/icons/blueprint.png"
}
, new CuiRectTransformComponent {
AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "0 -20", OffsetMax = "20 0"
}
}
}
);
else {
if (item.HasCondition) {
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Components = {
new CuiImageComponent {
Color = "1 1 1 0.5"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "1 1", OffsetMax = "5 62"
}
}
}
);
var cond = 62 * item.Condition / 100f;
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition", Components = {
new CuiImageComponent {
Color = "0 0.5 0 1"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "0 0", OffsetMax = $"4 {cond}"
}
}
}
);
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Components = {
new CuiButtonComponent {
Color = "1 1 1 0.3", Command = $"condition {page} {i} {prefab}"
}
, new CuiRectTransformComponent {
AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "1 -11", OffsetMax = "25 -1"
}
}
}
);
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition.Txt", Components = {
new CuiTextComponent {
Text = "cond", Align = TextAnchor.MiddleCenter, FontSize = 9, Color = "1 1 1 1"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "1 1"
}
}
}
);
}
}
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.text", Components = {
new CuiTextComponent {
Text = string.IsNullOrEmpty(item.custonname) ? ItemManager.FindItemDefinition(item.shortname).displayName.english : item.custonname, Align = TextAnchor.MiddleCenter
}
, new CuiRectTransformComponent {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+5} -40", OffsetMax = $"{widthBtn+5} -5",
}
}
}
);
itemContainer.Add(new CuiButton() {
Button = {
Command = $"BPChange {page} {i} {prefab}", Color = "1 1 1 0.3"
}
, Text = {
Text = "BP", Align = TextAnchor.MiddleCenter, FontSize = 8
}
, RectTransform = {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 41", OffsetMax = $"66 50",
}
}
, $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMinBP.{i}");
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.textmin", Components = {
new CuiTextComponent {
Text = $"min - {item.minamount}" , Align = TextAnchor.MiddleRight, FontSize = 9
}
, new CuiRectTransformComponent {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+10} 15", OffsetMax = $"{widthBtn+10} 35",
}
}
}
);
itemContainer.Add(new CuiButton() {
Button = {
Command = $"editfeil {page} {i} minminus {prefab}", Color = "1 1 1 0.3"
}
, Text = {
Text = "edit", Align = TextAnchor.MiddleCenter, FontSize = 8
}
, RectTransform = {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 21", OffsetMax = $"66 30",
}
}
, $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMinMinus.{i}");
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.textmax", Components = {
new CuiTextComponent {
Text = $"max - {item.maxamount}" , Align = TextAnchor.MiddleRight, FontSize = 9
}
, new CuiRectTransformComponent {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+10} 5", OffsetMax = $"{widthBtn+10} 25",
}
}
}
);
itemContainer.Add(new CuiButton() {
Button = {
Command = $"editfeil {page} {i} maxminus {prefab}", Color = "1 1 1 0.3"
}
, Text = {
Text = "edit", Align = TextAnchor.MiddleCenter, FontSize = 8
}
, RectTransform = {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 10", OffsetMax = $"66 19",
}
}
, $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMaxMinus.{i}");
itemContainer.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.textchance", Components = {
new CuiTextComponent {
Text = $"chance - {item.chansedrop}%" , Align = TextAnchor.MiddleRight, FontSize = 9
}
, new CuiRectTransformComponent {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+10} -10", OffsetMax = $"{widthBtn+10} 15",
}
}
}
);
itemContainer.Add(new CuiButton() {
Button = {
Command = $"editfeil {page} {i} chanceminus {prefab}", Color = "1 1 1 0.3"
}
, Text = {
Text = "edit", Align = TextAnchor.MiddleCenter, FontSize = 8
}
, RectTransform = {
AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 -1", OffsetMax = $"66 8",
}
}
, $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMaxChanceMinus.{i}");
horisontal += 0.08f;
if (horisontal > 0.95) {
horisontal = starthorisontal;
vertical -= 0.15f;
}
count++;
i++;
CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}");
CuiHelper.AddUi(player, itemContainer);
yield return null;
}
if (count == 0 && page > 0) {
page--;
if (coroutine != null) ServerMgr.Instance.StopCoroutine(coroutine);
DrawCrateitem(player, prefab, page);
yield break;
}
if (page > 0) {
var continerBack = new CuiElementContainer();
continerBack.Add(new CuiButton() {
Button = {
Command = $"pages {prefab} {page - 1}", Color = "1 1 1 0.5"
}
, Text = {
Text = "Назад", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.02 0.02", AnchorMax = "0.02 0.02", OffsetMax = "60 30"
}
}
, "zEcoLootUI.Main.UI.BG", "ButtonBack");
CuiHelper.AddUi(player, continerBack);
}
if (count == 60) {
var continerNext = new CuiElementContainer();
continerNext.Add(new CuiButton() {
Button = {
Command = $"pages {prefab} {page + 1}", Color = "1 1 1 0.5"
}
, Text = {
Text = "Далее", Align = TextAnchor.MiddleCenter
}
, RectTransform = {
AnchorMin = "0.98 0.02", AnchorMax = "0.98 0.02", OffsetMin = "-60 0", OffsetMax = "0 30"
}
}
, "zEcoLootUI.Main.UI.BG", "ButtonNext");
CuiHelper.AddUi(player, continerNext);
}
}
void RedrawItem(BasePlayer player, ItemSetting item, int i, string prefab, int page) {
CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI.Adding.BG");
CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.textmin");
CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.IsBP");
CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.textmax");
CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.condition.BG");
CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition");
CuiHelper.DestroyUi(player, $"ButtonMinMinus.{i}");
CuiHelper.DestroyUi(player, $"ButtonMaxMinus.{i}");
CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.textchance");
CuiHelper.DestroyUi(player, $"ButtonMaxChancePlus.{i}");
CuiHelper.DestroyUi(player, $"ButtonMaxChanceMinus.{i}");
CuiHelper.DestroyUi(player, $"ButtonMinBP.{i}");
var container = new CuiElementContainer();
if (item.IsBp) container.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.IsBP", Components = {
new CuiRawImageComponent {
Png = GetItemImage("blueprintbase")
}
, new CuiRectTransformComponent {
AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "0 -20", OffsetMax = "20 0"
}
}
}
);
else {
if (item.HasCondition) {
container.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Components = {
new CuiImageComponent {
Color = "1 1 1 0.5"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "1 1", OffsetMax = "5 62"
}
}
}
);
var cond = 62 * item.Condition / 100f;
container.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition", Components = {
new CuiImageComponent {
Color = "0 0.5 0 1"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "0 0", OffsetMax = $"4 {cond}"
}
}
}
);
container.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Components = {
new CuiButtonComponent {
Color = "1 1 1 0.3", Command = $"condition {page} {i} {prefab}"
}
, new CuiRectTransformComponent {
AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "1 -11", OffsetMax = "25 -1"
}
}
}
);
container.Add(new CuiElement() {
Parent = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition.Txt", Components = {
// ... [Code preview truncated due to length. Full source in attached file] ...