Другое DaysBonus 1.0

Выдача бонуса раз в сутки

  1. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Пользователь BreakSharp разместил новый ресурс:

    DaysBonus v0.9B - Выдача бонуса раз в сутки

    Узнать больше об этом ресурсе...
     
    All, snorrie, tikki и 2 другим нравится это.
  2. Kr1kuzya

    Kr1kuzya В поисках той самой Супермодератор

    Сообщения:
    4.594
    Симпатии:
    3.918
    PHP:
       ConVar cvar;
       (
    cvar CreateConVar("day_enable""1""1 - включить | 0 - выключить плагин",_true0.0true1.0)).AddChangeHook(Cvar_Enable);
       
    g_bEnabled cvar.BoolValue;
       (
    cvar CreateConVar("day_gift_vip""1""1 - включить | 0 - выключить выдачу VIP",_true0.0true1.0)).AddChangeHook(Cvar_VEnable);
       
    g_bEnabledVip cvar.BoolValue;
       (
    cvar CreateConVar("day_gift_vipgroup""Basic""VIP группа для выдачи в ежеднемном бонусе")).AddChangeHook(Cvar_Group);
       
    cvar.GetString(g_szVipGroupsizeof(g_szVipGroup));
       (
    cvar CreateConVar("day_gift_vip_min""1""0 - минимальное значение | Минимальный порог подарка в минутах",_true0.0)).AddChangeHook(Cvar_MinTime);
       
    g_iMinTime cvar.IntValue;
       (
    cvar CreateConVar("day_gift_vip_max""10""0 - минимальное значение | Максимальный порог подарка в минутах",_true1.0)).AddChangeHook(Cvar_MaxTime);
       
    g_iMaxTime cvar.IntValue;
       (
    cvar CreateConVar("day_gift_shop""1""1 - включить | 0 - выключить выдачу Кредитов",_true0.0true1.0)).AddChangeHook(Cvar_CrEnable);
       
    g_bEnabledCredits cvar.BoolValue;
       (
    cvar CreateConVar("day_gift_shop_min""1""0 - минимальное значение | Минимальный порог подарка в кредитах",_true0.0)).AddChangeHook(Cvar_MinCr);
       
    g_iMinCr cvar.IntValue;
       (
    cvar CreateConVar("day_gift_shop_max""10""0 - минимальное значение | Максимальный порог подарка в кредитах",_true1.0)).AddChangeHook(Cvar_MaxCr);
       
    g_iMaxCr cvar.IntValue;
    В чём смысл не хранить хендлы конваров глобально? Тем более порой значения из авто-конфига прогружаются позже, чем плагин запускается. И значения оных можно достать только из события OnConfigsExecuted() нормально.

    PHP:
    public Action Cmd_Gift(int clientint args)
    {
       if(!
    IsTrueClient(client))   return Plugin_Stop;
       
       if(!
    g_bEnabled)   return Plugin_Stop;
    Лучше Plugin_Handled. Некоторые движки не "переваривают" Stop. Тем более CS:GO, от которой можно ожидать что угодно.

    PHP:
       if(g_iEnd[client]> GetTime())
       {
           
    hMenu.AddItem("bonus1""Время еще не пришло"ITEMDRAW_DISABLED);
       }
       if(
    g_iEnd[client]<= GetTime())
       {
           
    hMenu.AddItem("bonus2""Получить бонус"ITEMDRAW_DEFAULT);
       }
    Зачем так много данных передавать в меню, и уж тем более плодить два условия, когда можно обойтись конструкцией if-else? Тем более, игрок даже при всём желании не сможет нажать на выключенный пункт.
    PHP:
       if(g_iEnd[client]> GetTime())
           
    hMenu.AddItem(NULL_STRING"Время еще не пришло"ITEMDRAW_DISABLED);
        else
           
    hMenu.AddItem(NULL_STRING"Получить бонус"ITEMDRAW_DEFAULT);
    Тогда каллбек преобразуется:
    PHP:
    public int MenuHandler_Gift(Menu hMenuMenuAction actionint clientint option) {
      if (
    action == MenuAction_End) {
        
    delete hMenu;
        return;
      }

      if (
    action != MenuAction_Select)
        return;

      
    // учитывая, что мы ничего не передали на пункт, можно просто вызвать нужную функцию.
      
    Random_Item(client);
    }
    Функция Random_Item() у меня вызвала шок...
    Зачем switch?!?
    PHP:
    public void Random_Item(int client) {
      if (
    g_bEnabled == false || (g_bEnabledCredits == false && g_bEnabledVip == false))
        return;

      if(
    g_bEnabledCredits && g_bEnabledVip)
        
    RandomAllItems(client);
      else if(
    g_bEnabledCredits && !g_bEnabledVip)
        
    RandomOnlyCredits(client);
      else if(!
    g_bEnabledCredits && g_bEnabledVip)
        
    RandomOnlyVip(client);
    }
    RandomAllItems() так же можно упростить:
    PHP:
    void RandomAllItems(int client) {
      switch(
    GetRandomInt(13)) {
        case 
    1RandomOnlyVip(client);
        case 
    2RandomOnlyCredits(client);
        default: 
    CGOPrintToChat(client"%t""Gift_zero");
      }

      
    SendPrice(client);
    }

    А вообще, switch() не эффективенесли всего два возможных случаяДоказано бенчмарками.
    [
    PHP]public int MenuHandler_reGift(Menu hQueMenuAction actionint clientint option)
    {
      if (
    action == MenuAction_Select)
        
    RandomOnlyCredits(client);
      else if (
    action == MenuAction_End)
        
    delete hQue;
    }
    PHP:
       if(g_iRandomValue[client]==1)  {
           
    FormatEx(szQuerysizeof(szQuery), "INSERT INTO daysbonus (auth, time_start, time_end, day, gift) VALUES ('%s', '%i', '%i', '%i', '%s')"steamidGetTime(), g_iEnd[client], 1"credits");
       }
       else if(
    g_iRandomValue[client]==2){
           
    FormatEx(szQuerysizeof(szQuery), "INSERT INTO daysbonus (auth, time_start, time_end, day, gift) VALUES ('%s', '%i', '%i', '%i', '%s')"steamidGetTime(), g_iEnd[client], 1"vip");
       }
    -->
    PHP:
    char szGiftType[8];
    if (
    g_iRandomValue[client] == 1)
      
    szGiftType "credits";
    else if (
    g_iRandomValue[client] == 2)
      
    szGiftType "vip";
    else
      return;

    FormatEx(szQuerysizeof(szQuery), "INSERT INTO daysbonus (auth, time_start, time_end, day, gift) VALUES ('%s', '%i', '%i', '%i', '%s')"steamidGetTime(), g_iEnd[client], 1szGiftType);
    А вот IsTrueClient() упрощается до одной строки, но я разобью на три строки, чтобы было вообще понятно, что и как:
    PHP:
    bool IsTrueClient(int client) {
      return (
    client && client <= MaxClients &&
        
    IsClientInGame(client) &&
        !
    IsFakeClient(client) && !IsClientSourceTV(client)
      );
    }
    --- Добавлено позже ---
    P.S.: И версию ресурса, пожалуйста, указывайте в предназначенном для этого поле. Не надо туда дату вписывать, а версию - в название.
     
    Danyas, Xoma, d4Ck и ещё 1-му нравится это.
  3. BossKotoriiNeSmok

    BossKotoriiNeSmok

    Сообщения:
    422
    Симпатии:
    59
    Было б круто,если б ты сделал,типо игрок играет, типо если он заходил подряд например 7 дн и за это ему какой то вау подарок дается:D
    Ну или каждый день увеличивать кол-во кредитов например, и на определенный день выдаешь какой нибудь нормальный подарок.
     
    Tomich нравится это.
  4. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Говнокод не порок, а так правок с кодом ожидается много, в релизе.
    Банальный GetRandomInt(1, 3) не лучший вариант для рандомности итемов... куда лучше процент выпадения

    С версией затупил, впредь буду внимательней.
     
    All нравится это.
  5. ZeaZon

    ZeaZon

    Сообщения:
    107
    Симпатии:
    6
    Что сиё творение от меня конкретно требует?
    Errors:
    DaysBonus.smx (Days Bonus): Could not find required plugin "keys_core"
     
  6. HaloShadoW

    HaloShadoW

    Сообщения:
    29
    Симпатии:
    1
    Говорит, что не нашел требуемого плагина Ядро плагина - [Keys] Core
     
  7. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Достаточно загрузить keys_core.
     
    Последнее редактирование: 6 апр 2018
    All нравится это.
  8. Kr1kuzya

    Kr1kuzya В поисках той самой Супермодератор

    Сообщения:
    4.594
    Симпатии:
    3.918
    @BreakSharp, а ничего, что виртуальная машина SM вообще не использует папку scripting, включая include в ней?
     
    Rostu нравится это.
  9. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Пользователь BreakSharp обновил ресурс DaysBonus новой записью:

    MicroUPD

    Узнать больше об этом обновлении...
     
    All нравится это.
  10. marlboro

    marlboro

    Сообщения:
    113
    Симпатии:
    28
    Добавь еще бонусы для smrpg
     
  11. Saniiro58

    Saniiro58

    Сообщения:
    35
    Симпатии:
    1
    Возможно ли тут реализовать бонус для THC RPG?
     
  12. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Какие? Кредиты, xp, lvl или все сразу?

    С THC не имею дело с 2015
     
    All нравится это.
  13. ZeaZon

    ZeaZon

    Сообщения:
    107
    Симпатии:
    6
    @BreakSharp, поднимаю старое сообщение в этом топике. Сделайте пожалуйста возможность получать игрокам бонусы в зависимости от количества дней, которое они подряд заходили. Например чтобы 6 дней они получали 100, 200, 300, 400, 500, 600 кредитов, а на 7 день получили VIP на 2 часа, потом опять 700, 800, 900..... кредитов и на 14 день VIP но уже другого уровня на 2 часа. И все это настраивалось. Один день пропустил - всё с начала. Если сделаете - цены вам не будет!
     
    Последнее редактирование: 8 апр 2018
    Tomich нравится это.
  14. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Это, скорей, идея другого плагина, возможно даже, не для паблика.
     
    All нравится это.
  15. marlboro

    marlboro

    Сообщения:
    113
    Симпатии:
    28
    да я думаю хватит и кредитов
     
  16. Normalek_10RUS

    Normalek_10RUS Гость

    Подскажите! На CSSv89 есть такой плагин? или только на ГО...
     
    Saniiro58 нравится это.
  17. Ozzy

    Ozzy

    Сообщения:
    132
    Симпатии:
    5
    • Использование тега "Оффтоп" не по назначению
    В какую строку то писать "daysbonus" в самом databses.cfg ? у меня там 6 столбов. куда бы не писал 0 эмоций. не появляется файл в cfg
    --- Добавлено позже ---
    Вот как у меня, куда мне написать "daysbonus" что бы сгенерировался в cfg нужный файл для изменения параметров и внесения вип группы?
    Код:
    "Databases"
    {
        "driver_default"        "mysql"
      
        // When specifying "host", you may use an IP address, a hostname, or a socket file path
        "sourcebans"
        {
            "driver"            "mysql"
            "host"                "185.25.60.221"
            "database"            "c1920_sb"
            "user"                "c1920_sb"
            "pass"                "X2o9H4x3"
            "port"                "3306"
        }
      
        "sourcecomms"
        {
            "driver"            "mysql"
            "host"                "185.25.60.221"
            "database"            "c1920_sb"
            "user"                "c1920_sb"
            "pass"                "X2o9H4x3"
            "port"                "3306"
        }
      
        "default"
        {
            "driver"            "default"
            "host"                "localhost"
            "database"            "sourcemod"
            "user"                "root"
            "pass"                ""
            //"timeout"            "0"
            //"port"            "0"
        }
      
        "storage-local"
        {
            "driver"            "sqlite"
            "database"            "sourcemod-local"
        }
    
        "clientprefs"
        {
            "driver"            "sqlite"
            "host"                "localhost"
            "database"            "clientprefs-sqlite"
            "user"                "root"
            "pass"                ""
            //"timeout"            "0"
            //"port"            "0"
        }
    
        "daysbonus"
    
    }
    
    
     
    Последнее редактирование модератором: 13 май 2018
  18. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Код:
    "daysbonus"
    {
    "driver" "mysql"
    "host" "host"
    "database" "db_name"
    "user" "db_user"
    "pass" "db_pass"
    }
    
     
    All нравится это.
  19. Ozzy

    Ozzy

    Сообщения:
    132
    Симпатии:
    5
    Сделал как в спойлере. Ничего не появляется в cfg.
     
  20. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    331
    Симпатии:
    154
    Конфиг создается автоматически при загрузке плагина по пути: cfg/day_bonus.cfg
    Если данного не произошло - читайте error логи, там все описано.