Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 11
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » [ЗАДАЧА] Шанс выпадения товара (проценты)
[ЗАДАЧА] Шанс выпадения товара (проценты)
_wS_ Дата: Четверг, 09.01.2014, 17:57:02 | Сообщение # 1
Есть 4 серверные переменные (4 товара). Значение переменной - процент (шанс) выпадения товара.
В сумме (все 4 товара) имеют 100% - т.е. 1 товар выпадет 100%.

Для примера:
Код
Хлеб | 50% - выпадает чаще всего
Сахар | 25% - реже
Молоко | 15% - еще реже
Пельмени | 10% - очень редко

Это просто для примера. Ваша задача - создать функцию, которая будет возвращать случайный товар, но не просто случайный, а с учетом этих процентов, чтобы правильно расчитывался шанс выпадения товара.
 
_wS_ Дата: Четверг, 09.01.2014, 20:09:56 | Сообщение # 2
Я сначала думал думал, но в голову ничего не приходило) Вроде оно просто, но и запутаться в этом легко, сейчас добил (а то покоя не давало), вроде такой вариант нормальный:

Код
#pragma semicolon 1
#include <sourcemod>

enum Tovar
{
     Sahar,
     Maslo,
     Banan,
     Myaso
}

new const TovarPercent[Tovar] =  
{
     40, // чаще
     25, // реже
     25, // реже
     10  // очень редко
};

new const String:TovarName[Tovar][] =  
{
     "Сахар",
     "Масло",
     "Банан",
     "Мясо"
};

public OnPluginStart()
{
     RegConsoleCmd("q", qqq);
}

public Action:qqq(client, args)
{
     PrintToConsole(client, TovarName[Tovar:GetRandomTovar()]);
     return Plugin_Handled;
}

stock GetRandomTovar()
{
     new CurrPercent = GetRandomInt(1, 100);
     new x = 0, tvr = 4;
     while (tvr-- > 0)
     {
         x += TovarPercent[Tovar:tvr];
         if (x >= CurrPercent)
         {
             PrintToServer("CurrPercent: %d, tvr: %d", CurrPercent, tvr);
             return tvr;
         }
     }
     return tvr;
}
 
Форум » SourceMod - Counter Strike Source && CS GO » Уроки/Статьи/Функции/Задачи » [ЗАДАЧА] Шанс выпадения товара (проценты)
Страница 1 из 11
Поиск: