Помогите с рандомом

Newell

Новичок
Сообщения
22
Реакции
0
Дописал функцию выдачи подарка в плагин GameCMS_Present Coins Addon чтобы выдавалось не только на сайт но и очки Anew но рандом не работает почему-то.Может кто-то найдет ошибку? где накосячил!

#include <amxmodx>
#include <gamecms5>
#include <gamecms_present>
#include <reapi>
#include <army_ranks_ultimate>


#define PLUGIN "GameCMS_Present Coins Addon"
#define VERSION "1.1"
#define AUTHOR "zhorzh78"

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif


new Float:fMoney = 0.05; //сумма денег за монетку (на баланс сайта)
new fMoneye = 5;

new bool:g_API;
new coinPresentT, coinPresentCT;

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

register_event("DeathMsg", "EventDeathMessage", "a");
}

//Если основной плагин презентов не стартанул, останавливаем
public OnPresentCoreStopped()
pause("d");

//Проверяем, загружен ли API для выдачи денег
public OnAPIPluginLoaded(Handle:sqlTuple)
{
//добавляем презент "монета"
//указываем модель монеты "exp2_blue" без .mdl
coinPresentCT = CmsAddPresent(500, "монета", -1, -3, 0, "blue_mrd", 0); // выпадает у кт , подбирает тт
coinPresentT = CmsAddPresent(501, "монета", -1, -3, 0, "red_mrd", 0); // выпадает у тт , подбирает кт
g_API = true;
}


//Событие смерти игрока
public EventDeathMessage(killer, victim)
{
new killer = read_data(1);
new victim = read_data(2);

//если умер сам, не спавним монету
if(killer == victim)
return;

new Float:eek:rigin[3], sorigin[3]
get_user_origin(victim, sorigin, 0)

origin[0] = float(sorigin[0]);
origin[1] = float(sorigin[1]);
origin[2] = float(sorigin[2]);

//презент создаем только для киллера или для всех (зависит от настройки)
//спавним презент без стандартного уведомления в чат о его появлении (параметр true блокирует уведомление)
//зададим время до удаления монетки 15.0 сек
new iTeam = get_user_team(killer);
if(iTeam == 1 && coinPresentCT)
CmsSpawnPresentById(500, origin, true, -1, 7.0)
else if(iTeam == 2 && coinPresentT)
CmsSpawnPresentById(501, origin, true, -2, 7.0)

}

//событие попытки поднять презент
public OnTakePresent(id, itemId, iEntity)
{
//если API загружен и игрок- владелец монеты (киллер) (проверку игрока проверяет Core)
if(g_API)
{
if(itemId == 500 || itemId == 501)
{
if(random_num(0, 4) == 2)
{
//вернем "3" для запрета поднятия монетки и блокирования стандартного сообщения
//т.к. задаем свое сообщение
client_print_color(id, 0, "Манетка паламалась)) тибе аблом");
return 3;
}
else if(cmsapi_add_user_money(id, fMoney))
{
client_print_color(id, 0, "%L Ты получил награду %.2f рублей", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoney);
//вернем "2" для разрешения поднять монетку и блокировки стандартного сообщения о поднятии
//т.к. задали свое сообщение
return 2;
}
else if(ar_set_user_addxp(id, fMoneye))
{
client_print_color(id, 0, "%L Ты получил %.2f Авторитета", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoneye);
//вернем "2" для разрешения поднять монетку и блокировки стандартного сообщения о поднятии
//т.к. задали свое сообщение
return 2;
}

}
}

return 0;
}

public client_disconnected(id)
CmsRemovePresent(0, id)
 
Решение
Код:
#include <amxmodx>
#include <gamecms5>
#include <gamecms_present>
#include <reapi>
#include <army_ranks_ultimate>


#define PLUGIN "GameCMS_Present Coins Addon"
#define VERSION "1.1"
#define AUTHOR "zhorzh78"

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif


new Float:fMoney = 0.05;     //сумма денег за монетку (на баланс сайта)
new fMoneye = 5;

new bool:g_API;
new coinPresentT, coinPresentCT;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_event("DeathMsg", "EventDeathMessage", "a");
}

//Если основной плагин презентов не стартанул, останавливаем
public OnPresentCoreStopped()
    pause("d");

//Проверяем, загружен ли API для выдачи денег
public OnAPIPluginLoaded(Handle:sqlTuple)
{...
Поправил код
Код:
#include <amxmodx>
#include <gamecms5>
#include <gamecms_present>
#include <reapi>
#include <army_ranks_ultimate>


#define PLUGIN "GameCMS_Present Coins Addon"
#define VERSION "1.1"
#define AUTHOR "zhorzh78"

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif


new Float:fMoney = 0.05;     //сумма денег за монетку (на баланс сайта)
new fMoneye = 5;

new bool:g_API;
new coinPresentT, coinPresentCT;
                          
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
 
    register_event("DeathMsg", "EventDeathMessage", "a");
}

//Если основной плагин презентов не стартанул, останавливаем
public OnPresentCoreStopped()
    pause("d");

//Проверяем, загружен ли API для выдачи денег
public OnAPIPluginLoaded(Handle:sqlTuple)
{
    //добавляем презент "монета"
    //указываем модель монеты "exp2_blue" без .mdl
    coinPresentCT = CmsAddPresent(500, "монета", -1, -3, 0, "blue_mrd", 0); // выпадает у кт , подбирает тт
    coinPresentT = CmsAddPresent(501, "монета", -1, -3, 0, "red_mrd", 0); // выпадает у тт , подбирает кт
    g_API = true;
}
 

//Событие смерти игрока
public EventDeathMessage(killer, victim)
{
    new killer = read_data(1);
    new victim = read_data(2);

    //если умер сам, не спавним монету
    if(killer == victim)
        return;

    new Float:origin[3], sorigin[3]
    get_user_origin(victim, sorigin, 0)

    origin[0] = float(sorigin[0]);
    origin[1] = float(sorigin[1]);
    origin[2] = float(sorigin[2]);
 
    //презент создаем только для киллера или для всех (зависит от настройки)
    //спавним презент без стандартного уведомления в чат о его появлении (параметр true блокирует уведомление)
    //зададим время до удаления монетки 15.0 сек
    new iTeam;
    if(iTeam == 1 && coinPresentCT)
        CmsSpawnPresentById(500, origin, true, -get_user_team(killer), 7.0)
    else if(iTeam == 2 && coinPresentT)
        CmsSpawnPresentById(501, origin, true, -get_user_team(killer), 7.0)
    
}

//событие попытки поднять презент
public OnTakePresent(id, itemId, iEntity)
{
    //если API загружен и игрок- владелец монеты (киллер) (проверку игрока проверяет Core)
    if(g_API)
    {
        if(itemId == 500 || itemId == 501)
        {
            if(random_num(0, 4) == 2)
            {
                //вернем "3" для запрета поднятия монетки и блокирования стандартного сообщения
                //т.к. задаем свое сообщение
                client_print_color(id, 0, "Манетка паламалась)) тибе аблом");
                return 3;
            }
            else if(cmsapi_add_user_money(id, fMoney))
            {
                client_print_color(id, 0, "%L Ты получил награду %.2f рублей", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoney);
                //вернем "2" для разрешения поднять монетку и блокировки стандартного сообщения о поднятии
                //т.к. задали свое сообщение
                return 2;
            }
            else if(ar_set_user_addxp(id, fMoneye))
            {
                client_print_color(id, 0, "%L Ты получил %.2f Авторитета", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoneye);
                //вернем "2" для разрешения поднять монетку и блокировки стандартного сообщения о поднятии
                //т.к. задали свое сообщение
                return 2;
            }
            
        }
    }

    return 0;
}

public client_disconnected(id)
CmsRemovePresent(0, id)
 
@RockTheStreet,А как тогда?- если я хочу чтобы выпадала монетка при убийстве с бонусом и деньгами на сайт и это было рандомно!
Если плагин gamecms present позволяет только появление подарков в рандомном месте!
 
@RockTheStreet,Чтобы выдавалось при поднятие рандомно и что-то одно
Поднял монетку получил деньги
Потом поднял другую получил допустим anew
Поднял 3 монетку облом и.т.д для примера
Я же выше скинул код примера
Сообщение автоматически объединено:

@RockTheStreet,В коде выше написаны уже case!
Рандом почему-то не работает выдаёт только деньги
 
Попробуйте.
Но до сих пор понять не могу что требуется от плагина. Сделал как понял.

Код:
#include <amxmodx>
#include <gamecms5>
#include <gamecms_present>
#include <reapi>
#include <army_ranks_ultimate>


#define PLUGIN "GameCMS_Present Coins Addon"
#define VERSION "1.1"
#define AUTHOR "zhorzh78"

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif


new Float:fMoney = 0.05;     //сумма денег за монетку (на баланс сайта)
new fMoneye = 5;

new bool:g_API;
new coinPresentT, coinPresentCT;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_event("DeathMsg", "EventDeathMessage", "a");
}

//Если основной плагин презентов не стартанул, останавливаем
public OnPresentCoreStopped()
    pause("d");

//Проверяем, загружен ли API для выдачи денег
public OnAPIPluginLoaded(Handle:sqlTuple)
{
    //добавляем презент "монета"
    //указываем модель монеты "exp2_blue" без .mdl
    coinPresentCT = CmsAddPresent(500, "монета", -1, -3, 0, "blue_mrd", 0); // выпадает у кт , подбирает тт
    coinPresentT = CmsAddPresent(501, "монета", -1, -3, 0, "red_mrd", 0); // выпадает у тт , подбирает кт
    g_API = true;
}


//Событие смерти игрока
public EventDeathMessage(killer, victim)
{
    new killer = read_data(1);
    new victim = read_data(2);

    //если умер сам, не спавним монету
    if(killer == victim)
        return;

    new Float:origin[3], sorigin[3]
    get_user_origin(victim, sorigin, 0)

    origin[0] = float(sorigin[0]);
    origin[1] = float(sorigin[1]);
    origin[2] = float(sorigin[2]);

    //презент создаем только для киллера или для всех (зависит от настройки)
    //спавним презент без стандартного уведомления в чат о его появлении (параметр true блокирует уведомление)
    //зададим время до удаления монетки 15.0 сек
    new iTeam;
    if(iTeam == 1 && coinPresentCT)
        CmsSpawnPresentById(500, origin, true, -get_user_team(killer), 7.0)
    else if(iTeam == 2 && coinPresentT)
        CmsSpawnPresentById(501, origin, true, -get_user_team(killer), 7.0)

}

//событие попытки поднять презент
public OnTakePresent(id, itemId, iEntity)
{
    //если API загружен и игрок- владелец монеты (киллер) (проверку игрока проверяет Core)
    if(g_API)
    {
        if(itemId == 500 || itemId == 501) {
            switch(random_num(0, 2)) {
                case 0: {
                    client_print_color(id, 0, "Манетка паламалась)) тибе аблом");
                    return 0;
                }
                case 1: {
                    cmsapi_add_user_money(id, fMoney);
                    client_print_color(id, 0, "%L Ты получил награду %.2f рублей", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoney);
                    return 0;
                }
                case 2: {
                    ar_set_user_addxp(id, fMoneye);
                    client_print_color(id, 0, "%L Ты получил %.2f Авторитета", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoneye);
                    return 0;
                }
            }
        }
    }

    return 0;
}

public client_disconnected(id)
CmsRemovePresent(0, id)
 
Последнее редактирование:
@RockTheStreet,Плагин на выдачу монетки - но призы этой монетки выпадала только валюта на сайт в размере 0.05 рублей!
А я захотел сделать чтобы выпадала не только валюта на сайт но и внутриигровые функций (взято для примера addxp)
Получается игрок поднимет эту монетку и ему выдаст не только деньги на сайт.А что-то другое из доступного в функций плагина тот же опыт армий ну или просто пропадёт монетка (окажется пустышкой) - сейчас простестирую!
 
Принцип такой: при подборе подарка генерируется случайная цифра от 0 до 2.
0 - ничего не даётся
1 - деньги
2 - дополнительный опыт игрока(функция в этом плагине была, я сначала подумал что это anew. сейчас увидел что это дополнительный опыт)
 
До этого она падала?
Сообщение автоматически объединено:

Мне больше интересно что это такое. Изначально в плагине такого не было.

1699767016915.png
Сообщение автоматически объединено:

Тут Вы вообще проверяете переменную, в которой ничего нет.

1699767206212.png
 
@RockTheStreet,Это исправил.Вместо -get_user_team поставил -1 и -2 это функция означает на поднимание монеток только своей команде тт - могут поднимать монетку кт а кт только монетку тт
Сообщение автоматически объединено:

@RockTheStreet,Да падала - тестил на том варианте который предоставил для помощи!
 
Код:
#include <amxmodx>
#include <gamecms5>
#include <gamecms_present>
#include <reapi>
#include <army_ranks_ultimate>


#define PLUGIN "GameCMS_Present Coins Addon"
#define VERSION "1.1"
#define AUTHOR "zhorzh78"

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif


new Float:fMoney = 0.05;     //сумма денег за монетку (на баланс сайта)
new fMoneye = 5;

new bool:g_API;
new coinPresentT, coinPresentCT;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_event("DeathMsg", "EventDeathMessage", "a");
}

//Если основной плагин презентов не стартанул, останавливаем
public OnPresentCoreStopped()
    pause("d");

//Проверяем, загружен ли API для выдачи денег
public OnAPIPluginLoaded(Handle:sqlTuple)
{
    //добавляем презент "монета"
    //указываем модель монеты "exp2_blue" без .mdl
    coinPresentCT = CmsAddPresent(500, "монета", -1, -3, 0, "blue_mrd", 0); // выпадает у кт , подбирает тт
    coinPresentT = CmsAddPresent(501, "монета", -1, -3, 0, "red_mrd", 0); // выпадает у тт , подбирает кт
    g_API = true;
}


//Событие смерти игрока
public EventDeathMessage(killer, victim)
{
    new killer = read_data(1);
    new victim = read_data(2);

    //если умер сам, не спавним монету
    if(killer == victim)
        return;

    new Float:origin[3], sorigin[3]
    get_user_origin(victim, sorigin, 0)

    origin[0] = float(sorigin[0]);
    origin[1] = float(sorigin[1]);
    origin[2] = float(sorigin[2]);

    //презент создаем только для киллера или для всех (зависит от настройки)
    //спавним презент без стандартного уведомления в чат о его появлении (параметр true блокирует уведомление)
    //зададим время до удаления монетки 15.0 сек
    new iTeam;
    if(iTeam == 1 && coinPresentCT)
        CmsSpawnPresentById(500, origin, true, -get_user_team(killer), 7.0)
    else if(iTeam == 2 && coinPresentT)
        CmsSpawnPresentById(501, origin, true, -get_user_team(killer), 7.0)

}

//событие попытки поднять презент
public OnTakePresent(id, itemId, iEntity)
{
    //если API загружен и игрок- владелец монеты (киллер) (проверку игрока проверяет Core)
    if(g_API)
    {
        if(itemId == 500 || itemId == 501) {
            switch(random_num(0, 2)) {
                case 0: {
                    client_print_color(id, 0, "Манетка паламалась)) тибе аблом");
                    return 3;
                }
                case 1: {
                    cmsapi_add_user_money(id, fMoney);
                    client_print_color(id, 0, "%L Ты получил награду %.2f рублей", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoney);
                    return 2;
                }
                case 2: {
                    ar_set_user_addxp(id, fMoneye);
                    client_print_color(id, 0, "%L Ты получил %.2f Авторитета", LANG_SERVER, "CMS_PRESENT_PREFIX_CHAT", fMoneye);
                    return 2;
                }
            }
        }
    }

    return 0;
}

public client_disconnected(id)
CmsRemovePresent(0, id)
Сообщение автоматически объединено:

Вашу 'проверку' не исправлял. Поэтому, исправите сами.
 
Сверху
Назад