C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System;
using System.Linq;
using System.Collections;
using Oxide.Core.Plugins;
using Oxide.Core;
using UnityEngine;
using Newtonsoft.Json;
namespace Oxide.Plugins {
[Info("CustomTownVending", "ADMIN", "1.0.0")]
class CustomTownVending : RustPlugin {
private static bool vfNCvYrEpPmnmmLGheqMU = false;
private class njHTmnOYemIxFVxbnZcfSuUPRHizit {
[JsonProperty(PropertyName = "Игровое название магазина (не менять)")]
public string HhgpYTQDHmbHPDXQRLMnZ;
[JsonProperty(PropertyName = "Список товаров")]
public List<SellOrderEntry> PPOLjjMlIqHcvj = new List<SellOrderEntry>();
}
private class SellOrderEntry {
[JsonProperty(PropertyName = "Название покупаемого товара")]
public string pEBIhDpkxQnko;
[JsonProperty(PropertyName = "Количество покупаемого товара за раз")]
public int lvmbGclsoFCWMCKVqxL;
[JsonProperty(PropertyName = "Покупаемый товар это чертёж")]
public bool FMdNyEWtsYTnrvAcDZ;
[JsonProperty(PropertyName = "Название платёжного товара")]
public string PCOttYGcSBdu;
[JsonProperty(PropertyName = "Количество платёжного товара за раз")]
public int ERSIOuTzCKXABzCcCjbAPsiZBaJvtN;
[JsonProperty(PropertyName = "Платёжный товар это чертёж")]
public bool kCvNPLLsyLhVpAz;
}
private void Init() {
OkJAZeyzPwtOwq();
LoadDefaultMessages();
}
private void OnTerrainInitialized() => vfNCvYrEpPmnmmLGheqMU = true;
private void OnServerInitialized() {
bool eYrBxwoQUiAvOPhEYhmaxnL = false;
var wQgWcFYqezFlrwUVdt = UnityEngine.Object.FindObjectsOfType<NPCVendingMachine>().Where(x=> x!=null && !string.IsNullOrEmpty(x.shopName)).ToList();
if (vfNCvYrEpPmnmmLGheqMU || fhWDaPfPkVvniPGFEnPYM == null) {
if (fhWDaPfPkVvniPGFEnPYM == null) {
fhWDaPfPkVvniPGFEnPYM = new QfBsQviOXCqQMGojoJG {
hvOEgTyfbGcqvnCxdWpizxKeOe = new Dictionary<string, List<njHTmnOYemIxFVxbnZcfSuUPRHizit>>()
}
;
vfNCvYrEpPmnmmLGheqMU = true;
}
fhWDaPfPkVvniPGFEnPYM.hvOEgTyfbGcqvnCxdWpizxKeOe.Clear();
}
foreach(var MEzgmlaswoEDYOxmdSug in wQgWcFYqezFlrwUVdt.OrderBy(x=>x.shopName)) {
var daqFwjzwKkEz = KljIVkxGjnKy(MEzgmlaswoEDYOxmdSug.transform.position).Replace("\n", "");
if (vfNCvYrEpPmnmmLGheqMU) {
var dqqvhjkuyfcbOhMtlmoFOR = new njHTmnOYemIxFVxbnZcfSuUPRHizit();
dqqvhjkuyfcbOhMtlmoFOR.HhgpYTQDHmbHPDXQRLMnZ = MEzgmlaswoEDYOxmdSug.shopName;
foreach(var SUHjMyuFzHdFNEJJqwn in MEzgmlaswoEDYOxmdSug.vendingOrders.orders) {
var umCWZTUeaYnnxMM = new SellOrderEntry();
umCWZTUeaYnnxMM.pEBIhDpkxQnko = SUHjMyuFzHdFNEJJqwn.sellItem.shortname;
umCWZTUeaYnnxMM.lvmbGclsoFCWMCKVqxL = SUHjMyuFzHdFNEJJqwn.sellItemAmount;
umCWZTUeaYnnxMM.FMdNyEWtsYTnrvAcDZ = SUHjMyuFzHdFNEJJqwn.sellItemAsBP;
umCWZTUeaYnnxMM.PCOttYGcSBdu = SUHjMyuFzHdFNEJJqwn.currencyItem.shortname;
umCWZTUeaYnnxMM.ERSIOuTzCKXABzCcCjbAPsiZBaJvtN = SUHjMyuFzHdFNEJJqwn.currencyAmount;
umCWZTUeaYnnxMM.kCvNPLLsyLhVpAz = SUHjMyuFzHdFNEJJqwn.currencyAsBP;
dqqvhjkuyfcbOhMtlmoFOR.PPOLjjMlIqHcvj.Add(umCWZTUeaYnnxMM);
}
if (!fhWDaPfPkVvniPGFEnPYM.hvOEgTyfbGcqvnCxdWpizxKeOe.ContainsKey(daqFwjzwKkEz)) fhWDaPfPkVvniPGFEnPYM.hvOEgTyfbGcqvnCxdWpizxKeOe.Add(daqFwjzwKkEz, new List<njHTmnOYemIxFVxbnZcfSuUPRHizit>());
fhWDaPfPkVvniPGFEnPYM.hvOEgTyfbGcqvnCxdWpizxKeOe[daqFwjzwKkEz].Add(dqqvhjkuyfcbOhMtlmoFOR);
}
if (!XeKWeeEdufo.hvOEgTyfbGcqvnCxdWpizxKeOe.ContainsKey(daqFwjzwKkEz)) XeKWeeEdufo.hvOEgTyfbGcqvnCxdWpizxKeOe.Add(daqFwjzwKkEz, new List<njHTmnOYemIxFVxbnZcfSuUPRHizit>());
if (!XeKWeeEdufo.hvOEgTyfbGcqvnCxdWpizxKeOe[daqFwjzwKkEz].Exists(x=>x.HhgpYTQDHmbHPDXQRLMnZ==MEzgmlaswoEDYOxmdSug.shopName)) {
var PUxSiAvACzREUBjcbdZGIQmSXjmdo = new njHTmnOYemIxFVxbnZcfSuUPRHizit();
PUxSiAvACzREUBjcbdZGIQmSXjmdo.HhgpYTQDHmbHPDXQRLMnZ = MEzgmlaswoEDYOxmdSug.shopName;
foreach(var SUHjMyuFzHdFNEJJqwn in MEzgmlaswoEDYOxmdSug.vendingOrders.orders) {
var BQGTqfDhzTy = new SellOrderEntry();
BQGTqfDhzTy.pEBIhDpkxQnko = SUHjMyuFzHdFNEJJqwn.sellItem.shortname;
BQGTqfDhzTy.lvmbGclsoFCWMCKVqxL = SUHjMyuFzHdFNEJJqwn.sellItemAmount;
BQGTqfDhzTy.FMdNyEWtsYTnrvAcDZ = SUHjMyuFzHdFNEJJqwn.sellItemAsBP;
BQGTqfDhzTy.PCOttYGcSBdu = SUHjMyuFzHdFNEJJqwn.currencyItem.shortname;
BQGTqfDhzTy.ERSIOuTzCKXABzCcCjbAPsiZBaJvtN = SUHjMyuFzHdFNEJJqwn.currencyAmount;
BQGTqfDhzTy.kCvNPLLsyLhVpAz = SUHjMyuFzHdFNEJJqwn.currencyAsBP;
PUxSiAvACzREUBjcbdZGIQmSXjmdo.PPOLjjMlIqHcvj.Add(BQGTqfDhzTy);
}
XeKWeeEdufo.hvOEgTyfbGcqvnCxdWpizxKeOe[daqFwjzwKkEz].Add(PUxSiAvACzREUBjcbdZGIQmSXjmdo);
eYrBxwoQUiAvOPhEYhmaxnL = true;
}
else {
MEzgmlaswoEDYOxmdSug.ClearSellOrders();
MEzgmlaswoEDYOxmdSug.inventory.Clear();
foreach(var SUHjMyuFzHdFNEJJqwn in XeKWeeEdufo.hvOEgTyfbGcqvnCxdWpizxKeOe[daqFwjzwKkEz].FirstOrDefault(x=>x.HhgpYTQDHmbHPDXQRLMnZ==MEzgmlaswoEDYOxmdSug.shopName).PPOLjjMlIqHcvj) {
var drUCgGbYxRiOc = ItemManager.FindItemDefinition(SUHjMyuFzHdFNEJJqwn.pEBIhDpkxQnko);
if (drUCgGbYxRiOc == null) {
PrintWarning(IcwZHRumaAbnkkisXlFZb("WARNING.ITEM").Replace("{ITEM}", SUHjMyuFzHdFNEJJqwn.pEBIhDpkxQnko));
continue;
}
var DvTJoTFKRZvnMc = ItemManager.FindItemDefinition(SUHjMyuFzHdFNEJJqwn.PCOttYGcSBdu);
if (DvTJoTFKRZvnMc == null) {
PrintWarning(IcwZHRumaAbnkkisXlFZb("WARNING.ITEM").Replace("{ITEM}", SUHjMyuFzHdFNEJJqwn.PCOttYGcSBdu));
continue;
}
if (SUHjMyuFzHdFNEJJqwn.lvmbGclsoFCWMCKVqxL <= 0 || SUHjMyuFzHdFNEJJqwn.ERSIOuTzCKXABzCcCjbAPsiZBaJvtN <= 0) continue;
MEzgmlaswoEDYOxmdSug.AddItemForSale(drUCgGbYxRiOc.itemid, SUHjMyuFzHdFNEJJqwn.lvmbGclsoFCWMCKVqxL, DvTJoTFKRZvnMc.itemid, SUHjMyuFzHdFNEJJqwn.ERSIOuTzCKXABzCcCjbAPsiZBaJvtN, MEzgmlaswoEDYOxmdSug.GetBPState(SUHjMyuFzHdFNEJJqwn.FMdNyEWtsYTnrvAcDZ, SUHjMyuFzHdFNEJJqwn.kCvNPLLsyLhVpAz));
}
}
}
if (vfNCvYrEpPmnmmLGheqMU) bYWxEvPqfFklzROBASQApCP();
if (eYrBxwoQUiAvOPhEYhmaxnL) srTOWmHkcCLU(XeKWeeEdufo);
vfNCvYrEpPmnmmLGheqMU = false;
}
private string KljIVkxGjnKy(Vector3 qsJZaiEvunTIzCZlLxawLRqQSRPsD) {
var OKqodslXexlkHPleLHBacm = TerrainMeta.Path.Monuments.Where(x=> x != null).ToDictionary(x=>Vector3.Distance(x.transform.position, qsJZaiEvunTIzCZlLxawLRqQSRPsD), x=>x).OrderBy(x=>x.Key);
if (OKqodslXexlkHPleLHBacm.Count() == 0) return "N|A";
var OgNNclnxjVsRdc = OKqodslXexlkHPleLHBacm.FirstOrDefault();
return !string.IsNullOrEmpty(OgNNclnxjVsRdc.Value.displayPhrase.english) ? OgNNclnxjVsRdc.Value.displayPhrase.english : "N|A";
}
[ConsoleCommand("ctv.reset")]
private void aTXRKtIvAmSTlRE(ConsoleSystem.Arg KrxMmTTpHZxMXw) {
var OmrZGKbXrJmYcSAqXxHbP = KrxMmTTpHZxMXw?.Player();
if (OmrZGKbXrJmYcSAqXxHbP != null && !OmrZGKbXrJmYcSAqXxHbP.IsAdmin) return;
XeKWeeEdufo.hvOEgTyfbGcqvnCxdWpizxKeOe = fhWDaPfPkVvniPGFEnPYM.zeXOGeWSRvBcOuCRonfn();
OnServerInitialized();
srTOWmHkcCLU(XeKWeeEdufo);
var xRUPhMsjbiZ = IcwZHRumaAbnkkisXlFZb("INFO.RESET");
if (OmrZGKbXrJmYcSAqXxHbP != null) PrintToConsole(OmrZGKbXrJmYcSAqXxHbP, xRUPhMsjbiZ);
else Puts(xRUPhMsjbiZ);
}
private void LoadDefaultMessages() {
lang.RegisterMessages(new Dictionary<string, string> {
{
"INFO.RESET", "Товары из магазинов в NPC городах были востановлены до значений по умолчанию."
}
, {
"WARNING.ITEM", "Ошибка.Указанный в конфигурационном файле предмет не существует: '{ITEM}'."
}
}
, this);
}
private string IcwZHRumaAbnkkisXlFZb(string NAtxMvouDbjbtBpixeuVJAwuHeyDnH, string xeunnpDObqfMagBZaLWBhTPUOM = null) => lang.GetMessage(NAtxMvouDbjbtBpixeuVJAwuHeyDnH, this, xeunnpDObqfMagBZaLWBhTPUOM);
private static QfBsQviOXCqQMGojoJG XeKWeeEdufo;
private class QfBsQviOXCqQMGojoJG {
[JsonProperty(PropertyName = "Торговые автоматы в NPC городах")]
public Dictionary<string, List<njHTmnOYemIxFVxbnZcfSuUPRHizit>> hvOEgTyfbGcqvnCxdWpizxKeOe;
public Dictionary<string, List<njHTmnOYemIxFVxbnZcfSuUPRHizit>> zeXOGeWSRvBcOuCRonfn() => JsonConvert.DeserializeObject<Dictionary<string, List<njHTmnOYemIxFVxbnZcfSuUPRHizit>>>(JsonConvert.SerializeObject(hvOEgTyfbGcqvnCxdWpizxKeOe));
}
private void OkJAZeyzPwtOwq() => XeKWeeEdufo = Config.ReadObject<QfBsQviOXCqQMGojoJG>();
protected override void LoadDefaultConfig() {
XeKWeeEdufo = new QfBsQviOXCqQMGojoJG {
hvOEgTyfbGcqvnCxdWpizxKeOe = new Dictionary<string, List<njHTmnOYemIxFVxbnZcfSuUPRHizit>>()
}
;
srTOWmHkcCLU(XeKWeeEdufo);
timer.Once(0.1f, ()=>srTOWmHkcCLU(XeKWeeEdufo));
}
private void srTOWmHkcCLU(QfBsQviOXCqQMGojoJG sxQCoFNzWStxvQxwKKZZ) => Config.WriteObject(sxQCoFNzWStxvQxwKKZZ, true);
private QfBsQviOXCqQMGojoJG fhWDaPfPkVvniPGFEnPYM;
private void bYWxEvPqfFklzROBASQApCP() => Interface.GetMod().DataFileSystem.WriteObject("CustomTownVendingData", fhWDaPfPkVvniPGFEnPYM);
}
}
// Слив плагинов server-rust by Apolo YouGame