• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

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

Нет прав для скачивания
Языки
  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)
Получить определенный предмет по его 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)


Плагин с примером будет прикреплен файлом, так же как и видео работы плагина-примера:

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
132 Просмотры
6 Скачивания
Первый выпуск
Обновление
0.00 звёзд 0 оценок
10.7 KB / .cs Размер

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