• Если вы испытываете проблемы с пополнением баланса, свяжитесь с @WOLF SPIRIT.

Бесплатное SkinDropsAPI 0.4

Нет прав для скачивания
Языки
  1. Русский
  2. Английский
Данный плагин вам позволит удобно интегрировать возможности SkinDrops в ваш плагин, без необходимости в каждом новом плагине реализовывать API и разбираться в этом, за вас уже все сделали.

Данный плагин подходит в основном для разработчиков.

Для работы с плагином необходимо добавить референс непосредственно в заголовке .cs файла (там где вы обычно подключаете юзинги), сделать это можно таким образом:
1732812631883.png

В первую очередь нам нужен клиент с которым мы будем работать (их может быть неограниченное количество):
C#:
// Requires: SkinDropsAPI
namespace Oxide.Plugins
{
    public class MySkinDropsPlugin : RustPlugin
    {
        private SkinDropsAPI.Client client;

        //секретный ключ вы можете вручную вписать, или же загрузить из конфигурации
        private void Loaded() => client = new SkinDropsAPI.Client("secret");
    }
}

Теперь когда у нас есть клиент, можно приступать к работе, для начала надо проверить, какой статус у клиента с данным токеном:
C#:
private void OnServerInitialized()
{
    client.Status(result =>
    {
        if (result.Success) Puts($"Успешно, баланс пользователя: {result.User.Balance}");
        else Puts($"Не удалось проверить статус аккаунта, проверьте токен!");
    });
}

Остальные методы клиента будут описаны ниже:
Получить предметы, которые в данный момент есть в инвентаре бота:
C#:
void GetBotItems(double minPrice, double maxPrice, Action<BotItems> items, int pageSize = 25, int pageNumber = 0)
Получить определенный предмет по его id:
C#:
void GetBotItem(ulong id, Action<ItemData> result)

Отправить трейд оффер пользователю стим:
C#:
void SendTradeOffer(string tradeUrl, string item, Action<Offer> result)
Получить все трейд офферы:
C#:
void GetTradeOffers(Action<OfferList> result)
Получить определенный трейд оффер:
C#:
void GetTradeOffer(ulong id, Action<OfferData> result)


Плагин с примером использования API ниже, так же как и видео работы плагина-примера:
C#:
// Requires: SkinDropsAPI
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using static Oxide.Plugins.SkinDropsAPI;

namespace Oxide.Plugins
{
    [Info("SkinDropsAPITest", "MaltrzD", "0.1")]
    public class SkinDropsAPITest : RustPlugin
    {
        [PluginReference] private Plugin ImageLibrary;
        SkinDropsAPI.Client client = new SkinDropsAPI.Client("secret");

        [ChatCommand("c")]
        private void Test(BasePlayer player)
        {
            CuiElementContainer container = new CuiElementContainer();

            container.Add(new CuiPanel
            {
                RectTransform =
                {
                    AnchorMin = "0.202381 0.2619047",
                    AnchorMax = "0.7976192 0.7380952"
                },
                Image =
                {
                    Color = "0.4 0.4 0.4 1"
                }
            }, "Overlay", "Panel");
            container.Add(new CuiElement()
            {
                Parent = "Panel",
                Name = "Text",
                Components =
                {
                    new CuiRectTransformComponent()
                    {
                         AnchorMin = "0.25 0.8060001",
                         AnchorMax = "0.7969998 0.9020001"
                    },
                    new CuiTextComponent()
                    {
                         Align = TextAnchor.MiddleCenter,
                         FontSize = 16,
                         Text = "Загрузка...",
                         Color = "0 1 0 1"
                    }
                }
            });
            container.Add(new CuiElement()
            {
                Parent = "Panel",
                Name = "Image",
                Components =
                {
                    new CuiRectTransformComponent()
                    {
                         AnchorMin = "0.3749999 0.25",
                         AnchorMax = "0.6250001 0.7500001"
                    },
                    new CuiRawImageComponent() { }
                }
            });

            CuiHelper.AddUi(player, container);

            client.GetBotItems(0, 0.5, items =>
            {
                if (items.Success && items.Count != 0)
                {
                    var uniqueItems = items.Items
                        .GroupBy(item => item.Name)
                        .Select(group => group.First()).ToList();

                    ServerMgr.Instance.StartCoroutine(LoadImages(uniqueItems, 10, 1,
                        () => { ServerMgr.Instance.StartCoroutine(RollRoulette(player, uniqueItems)); }));
                }
                else
                {
                    Puts("Не удалось получить список скинов бота!");
                }
            }, pageSize: 40);
        }

        private IEnumerator RollRoulette(BasePlayer player, List<BotItem> items, float updateRate = 1)
        {
            string GetItemName(string name) => name.Replace(' ', '_');


            int count = 1;
            foreach (var item in items)
            {
                string text = $"<color=yellow>{item.Name}</color> - <color=red>{item.Price}$</color>";
                if (count >= items.Count)
                {
                    // тут уже можете встроить отправку трейд оффера игроку, или продать например скин обратно
                    text = "Ваш выигрыш: " + text;
                }

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiElement()
                {
                    Parent = "Panel",
                    Name = "Image",
                    Update = true,
                    Components =
                    {
                    new CuiRectTransformComponent()
                    {
                         AnchorMin = "0.3749999 0.25",
                         AnchorMax = "0.6250001 0.7500001"
                    },
                    new CuiRawImageComponent()
                    {
                        Png = (string)ImageLibrary.Call("GetImage", GetItemName(item.Name))
                    }
                }
                });
                container.Add(new CuiElement()
                {
                    Parent = "Panel",
                    Name = "Text",
                    Update = true,
                    Components =
                    {
                    new CuiRectTransformComponent()
                    {
                         AnchorMin = "0.25 0.8060001",
                         AnchorMax = "0.7969998 0.9020001"
                    },
                    new CuiTextComponent()
                    {
                         Align = TextAnchor.MiddleCenter,
                         FontSize = 20,
                         Text = text
                    }
                }
                });
                CuiHelper.AddUi(player, container);

                count++;
                yield return new WaitForSeconds(updateRate);
            }

            yield return new WaitForSeconds(5);
            CuiHelper.DestroyUi(player, "Panel");
            yield break;
        }
        private IEnumerator LoadImages(List<BotItem> items, int tryCount, float checkInterval, Action loaded)
        {
            int count = 0;
            bool startLoading = false;

            string GetItemName(string name) => name.Replace(' ', '_');
         

            while (true)
            {
                if (!startLoading)
                {
                    foreach (var img in items)
                    {
                        if (!ImageLibrary.Call<bool>("HasImage", GetItemName(img.Name)))
                            ImageLibrary.Call("AddImage", img.Image, GetItemName(img.Name));
                    }

                    startLoading = true;
                }
                else
                {
                    foreach (var img in items)
                    {
                        if (!ImageLibrary.Call<bool>("HasImage", GetItemName(img.Name)))
                        {
                            yield return new WaitForSeconds(checkInterval);
                        }
                        else
                        {
                            loaded?.Invoke();
                            yield break;
                        }
                    }
                }


                if (count >= tryCount)
                {
                    break;
                }

                count++;
                yield return new WaitForSeconds(checkInterval);
            }

            loaded?.Invoke();
            yield break;
        }
    }
}
  • Мне нравится
Реакции: MrFallen
Иконка ресурса
Плагин (библиотека) для удобной работы с SkinDrops
677 Просмотры
18 Скачивания
Первый выпуск
Обновление
0.00 звёзд 0 оценок
7.4 KB / .cs Размер

Другие ресурсы MaltrzD

Последние обновления

  1. Обновление

    Добавил параметр pageNumber в метод GetBotItems: void GetBotItems(double minPrice, double...
  2. Оптимизация | обновление

    Код стал более читаемым, убрано повторение кода. Теперь все классы с ответами по типу...
  3. Fix

    Ошибка, при которой указание минимальной цены не учитывалась, и была все равно 0.
  4. ApiUpdate

    https://oxide-russia.ru/threads/6490/page-22#post-79029 Добавлено в Offer: public int Partner {...