EverydayBonus

EverydayBonus v 1.3a

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
  • Автор ресурса
  • #1
Пользователь BreakSharp разместил новый ресурс:

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

Плагин выдает ежедневный бонус в виде кредитов или VIP игрокам
Более расширенный функционал появится в v1.0

Используется: csgo_colors
Цвета настраиваются в файле перевода.

Поддержка:
#ToDO
  • Генерация ключа, если у игрока есть VIP навсегда
  • Выдача флагов на время.

Узнать больше об этом ресурсе...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
PHP:
   ConVar cvar;
   (cvar = CreateConVar("day_enable", "1", "1 - включить | 0 - выключить плагин",_, true, 0.0, true, 1.0)).AddChangeHook(Cvar_Enable);
   g_bEnabled = cvar.BoolValue;
   (cvar = CreateConVar("day_gift_vip", "1", "1 - включить | 0 - выключить выдачу VIP",_, true, 0.0, true, 1.0)).AddChangeHook(Cvar_VEnable);
   g_bEnabledVip = cvar.BoolValue;
   (cvar = CreateConVar("day_gift_vipgroup", "Basic", "VIP группа для выдачи в ежеднемном бонусе")).AddChangeHook(Cvar_Group);
   cvar.GetString(g_szVipGroup, sizeof(g_szVipGroup));
   (cvar = CreateConVar("day_gift_vip_min", "1", "0 - минимальное значение | Минимальный порог подарка в минутах",_, true, 0.0)).AddChangeHook(Cvar_MinTime);
   g_iMinTime = cvar.IntValue;
   (cvar = CreateConVar("day_gift_vip_max", "10", "0 - минимальное значение | Максимальный порог подарка в минутах",_, true, 1.0)).AddChangeHook(Cvar_MaxTime);
   g_iMaxTime = cvar.IntValue;
   (cvar = CreateConVar("day_gift_shop", "1", "1 - включить | 0 - выключить выдачу Кредитов",_, true, 0.0, true, 1.0)).AddChangeHook(Cvar_CrEnable);
   g_bEnabledCredits = cvar.BoolValue;
   (cvar = CreateConVar("day_gift_shop_min", "1", "0 - минимальное значение | Минимальный порог подарка в кредитах",_, true, 0.0)).AddChangeHook(Cvar_MinCr);
   g_iMinCr = cvar.IntValue;
   (cvar = CreateConVar("day_gift_shop_max", "10", "0 - минимальное значение | Максимальный порог подарка в кредитах",_, true, 1.0)).AddChangeHook(Cvar_MaxCr);
   g_iMaxCr = cvar.IntValue;
В чём смысл не хранить хендлы конваров глобально? Тем более порой значения из авто-конфига прогружаются позже, чем плагин запускается. И значения оных можно достать только из события OnConfigsExecuted() нормально.

PHP:
public Action Cmd_Gift(int client, int 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 hMenu, MenuAction action, int client, int 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(1, 3)) {
    case 1: RandomOnlyVip(client);
    case 2: RandomOnlyCredits(client);
    default: CGOPrintToChat(client, "%t", "Gift_zero");
  }

  SendPrice(client);
}

А вообще, switch() не эффективен, если всего два возможных случая. Доказано бенчмарками.
[PHP]public int MenuHandler_reGift(Menu hQue, MenuAction action, int client, int option)
{
  if (action == MenuAction_Select)
    RandomOnlyCredits(client);
  else if (action == MenuAction_End)
    delete hQue;
}

PHP:
   if(g_iRandomValue[client]==1)  {
       FormatEx(szQuery, sizeof(szQuery), "INSERT INTO daysbonus (auth, time_start, time_end, day, gift) VALUES ('%s', '%i', '%i', '%i', '%s')", steamid, GetTime(), g_iEnd[client], 1, "credits");
   }
   else if(g_iRandomValue[client]==2){
       FormatEx(szQuery, sizeof(szQuery), "INSERT INTO daysbonus (auth, time_start, time_end, day, gift) VALUES ('%s', '%i', '%i', '%i', '%s')", steamid, GetTime(), 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(szQuery, sizeof(szQuery), "INSERT INTO daysbonus (auth, time_start, time_end, day, gift) VALUES ('%s', '%i', '%i', '%i', '%s')", steamid, GetTime(), g_iEnd[client], 1, szGiftType);

А вот IsTrueClient() упрощается до одной строки, но я разобью на три строки, чтобы было вообще понятно, что и как:
PHP:
bool IsTrueClient(int client) {
  return (client > 0 && client <= MaxClients &&
    IsClientInGame(client) &&
    !IsFakeClient(client) && !IsClientSourceTV(client)
  );
}
--- Добавлено позже ---
P.S.: И версию ресурса, пожалуйста, указывайте в предназначенном для этого поле. Не надо туда дату вписывать, а версию - в название.
 

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
Было б круто,если б ты сделал,типо игрок играет, типо если он заходил подряд например 7 дн и за это ему какой то вау подарок дается:D
Ну или каждый день увеличивать кол-во кредитов например, и на определенный день выдаешь какой нибудь нормальный подарок.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
  • Автор ресурса
  • #4
И версию ресурса, пожалуйста, указывайте в предназначенном для этого поле. Не надо туда дату вписывать, а версию - в название.
Говнокод не порок, а так правок с кодом ожидается много, в релизе.
Банальный GetRandomInt(1, 3) не лучший вариант для рандомности итемов... куда лучше процент выпадения

С версией затупил, впредь буду внимательней.
 
  • Мне нравится
Реакции: All

ZeaZon

Участник
Сообщения
117
Реакции
9
Что сиё творение от меня конкретно требует?
Errors:
DaysBonus.smx (Days Bonus): Could not find required plugin "keys_core"
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #8
@BreakSharp, а ничего, что виртуальная машина SM вообще не использует папку scripting, включая include в ней?
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
  • Автор ресурса
  • #9
  • Мне нравится
Реакции: All

Saniiro58

Участник
Сообщения
82
Реакции
12
Возможно ли тут реализовать бонус для THC RPG?
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
  • Автор ресурса
  • #12
  • Мне нравится
Реакции: All

ZeaZon

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

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
  • Автор ресурса
  • #14
@BreakSharp, поднимаю старое сообщение в этом топике. Сделайте пожалуйста возможность получать игрокам бонусы в зависимости от количества дней, которое они подряд заходили. Например чтобы 6 дней они получали 100, 200, 300, 400, 500, 600 кредитов, а на 7 день получили VIP на 2 часа, потом опять 700, 800, 900..... кредитов и на 14 день VIP но уже другого уровня на 2 часа. И все это настраивалось. Один день пропустил - всё с начала. Если сделаете - цены вам не будет!
Это, скорей, идея другого плагина, возможно даже, не для паблика.
 
  • Мне нравится
Реакции: All
N

Normalek_10RUS

Подскажите! На CSSv89 есть такой плагин? или только на ГО...
 

Tavian

Участник
Сообщения
1,184
Реакции
119
Использование тега "Оффтоп" не по назначению
В какую строку то писать "daysbonus" в самом databses.cfg ? у меня там 6 столбов. куда бы не писал 0 эмоций. не появляется файл в cfg
--- Добавлено позже ---
Вот как у меня, куда мне написать "daysbonus" что бы сгенерировался в cfg нужный файл для изменения параметров и внесения вип группы?
C-подобный:
"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"

}
 
Последнее редактирование модератором:

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
  • Автор ресурса
  • #18
В какую строку то писать "daysbonus" в самом databses.cfg ? у меня там 6 столбов. куда бы не писал 0 эмоций. не появляется файл в cfg
--- Добавлено позже ---
Вот как у меня, куда мне написать "daysbonus" что бы сгенерировался в cfg нужный файл для изменения параметров и внесения вип группы?
C-подобный:
"daysbonus"
{
"driver" "mysql"
"host" "host"
"database" "db_name"
"user" "db_user"
"pass" "db_pass"
}
 
  • Мне нравится
Реакции: All

Tavian

Участник
Сообщения
1,184
Реакции
119
Сделал как в спойлере. Ничего не появляется в cfg.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
  • Автор ресурса
  • #20
Сделал как в спойлере. Ничего не появляется в cfg.
Конфиг создается автоматически при загрузке плагина по пути: cfg/day_bonus.cfg
Если данного не произошло - читайте error логи, там все описано.
 

Похожие темы

Ответы
9
Просмотры
  • Закреплено
Ответы
Просмотры
419К
Сверху Снизу