Поиск ночная VIP

Статус
В этой теме нельзя размещать новые ответы.

eac

Заблокированные
Пользователь
Регистрация
8 Апр 2019
Сообщения
18
Симпатии
0
Всем привет
ребят подскажите плагин который дает вип от начала времени до окончание времени всем игрокам, нужен рабочий способ без баг
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
eac, Плагины не выдают вип. Плагины выдают флаги для доступа к чему-либо, в том числе к вип-меню.
Выбор варианта реализации вашего желания зависит от списка плагинов, от возможности ваших плагинов адекватно реагировать на изменения извне.
Вариант, который работает с нормальными загрузчиками админов (после смены карты)
Код:
#include <amxmodx>

new const szStartTime[] = "00:00";    // Начало выдачи флагов
new const szEndTime[] = "08:00";    // Окончание выдачи флагов
new const szAddFlags[] = "prt";        //Флаги для выдачи

public plugin_cfg()
{
    if(parse_time(szStartTime, "%H:%M") <= get_systime() <= parse_time(szEndTime, "%H:%M"))
        set_cvar_string("amx_default_access", szAddFlags);
}
 
K

kapangaIII

Загрузчики то все нормальные, код должен быть асинхронным там где это нужно, в частности при работе с базами данных/файлами(кроме моментов записи в файл, здесь все должно быть синхронным по хорошему), для этого они предоставляют форварды, в которых как раз и стоит задавать флаги.
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
Загрузчики то все нормальные
Взял первый попавшийся.
Код:
#define PLUGIN_VERSION "3.5"
    register_plugin("Admin Loader", PLUGIN_VERSION, "neygomon");
Кэширует
C++:
ReadCvars()
{
    get_cvar_string("amx_password_field", g_szPassField, charsmax(g_szPassField));
#if defined CUSTOM_DEF_FLAG
    new szDefaultAccess[32];
    get_cvar_string("amx_default_access", szDefaultAccess, charsmax(szDefaultAccess));
Дальнейшие мечты о нормальности сразу улетучились... А о запросах и речи не было. Многие плагины не понимают, что "квары" на то и "переменные", чтобы их можно было менять в любое время.
 
K

kapangaIII

Понянто, показалось что речь шла о подгрузке.
Но опять же, не понятно о чем конкретно речь, о том что они сбрасывают уже выданные флаги после подгрузки из БД?
 
  • Мне нравится
Симпатии: eac

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
не понятно о чем конкретно речь
Я показал простейший код для выдачи определенных флагов в определенное время и уточнил, что такой способ, не смотря на свою простоту, не будет поддерживаться лоадерами, написанными абы как. В данном случае, когда лоадер кэширует дефолтные флаги, то их изменение не даст никакого результата... Ну, это лирика..
 
K

kapangaIII

Понятно о чем ты.
Не стоит брать в расчет идиотов, пишущих плагины лишь для количественных показателей.
Можно в любом случае получать ptr и им манипулировать, но отсутствие какой-либо логики в их мозгу им не позволит сделать это.
 

makcumoc

Пользователь
Регистрация
10 Июл 2017
Сообщения
117
Симпатии
21
Пол
Мужской
eac,
Код:
#include <amxmodx>
 
#define PLUGIN   "Auto-Give Privileges"
#define VERSION   "1.0"
#define AUTHOR   "SerGrib" // аж стыдно. Не такой уж и серьезный плагин
 
#define START   22   // Время, начиная с которого будут выдаваться флаги
#define END      9      // Время, когда флаги прекратят выдаваться
#define FLAGS   "s"      // Флаги которые необходимо выдать игроку (если у него нету его). Можно сочитать, например: "bt"
#define PL_PAUSE      // Ставить плагин на паузу, если время не подходит?
 
#if !defined PL_PAUSE
new bool:trigger = true;
#endif
new g_bFlags;                                       
 
public plugin_init()
{                                                                       
   register_plugin(PLUGIN, VERSION, AUTHOR);
    
   new hour;
   time(hour);                                 
    
   if (!(START <= hour < END || START > END && !(START > hour >= END))) // Умнее пока в голову ничего не приходит...
   #if defined PL_PAUSE
      pause("ad");
   #else
      trigger = false;
   #endif
    
   g_bFlags = read_flags(FLAGS);
}
 
public client_putinserver(id)
{
#if !defined PL_PAUSE
   if (!trigger) return PLUGIN_CONTINUE;
#endif
    
   if ((get_user_flags(id) & g_bFlags) == g_bFlags)
      return PLUGIN_CONTINUE;
    
   set_user_flags(id, g_bFlags);
    
   return PLUGIN_CONTINUE;
}
 
  • Мне нравится
Симпатии: eac

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
686
Симпатии
196
Пол
Мужской
ВКонтакте
e1337ace
Прошу сильно НЕ пинать)
C++:
#include <amxmodx>
#tryinclude <reapi>

#if !defined MAX_CLIENTS
    const MAX_CLIENTS = 32
#endif
#if !defined MAX_NAME_LENGTH
    const MAX_NAME_LENGTH = 32
#endif
#if !defined MAX_USER_INFO_LENGTH
    const MAX_USER_INFO_LENGTH = 256
#endif

#if AMXX_VERSION_NUM < 183
    new MaxClients
    #include <colorchat>
    #define engine_changelevel(%0) server_cmd("changelevel %s", %0)
#endif

#define START 21                     /* Начало ночного режима. */
#define END 06                         /* Конец ночного режима. */
#define AUTORR 10                     /* Авто-рестарт карты (sv_restart 1) каждые n раундов. Установите 0 для отключения. */
#define AUTO_SWAP_TEAMS                 /* Автоматическая смена сторон. (Только если AUTORR > 0) */
//#define STEAM_VIP                     /* Выдавать флаги только стим игрокам. */

new const FLAGS[2][] =
{
    "t", "fj"                     /* 1) Выдаваемые флаги. 2) Какие флаги забираем на время ночного режима. */
}
new const SET_MAP[2][] =
{
    "de_dust2", "de_inferno"             /* 1) Карта ночного режима. 2) Карта которая будет после ночного режима. */
}

#define BLOCK_COMMANDS                     /* Блок команд чата или консоли в ночном режиме. */
#if defined BLOCK_COMMANDS
new const block_commands[][] =
{
    "say rtv", "say_team rtv",
    "say /rtv", "say_team rtv", "amx_rtv"
}
#endif

//#define STOP_PLUGS                     /* Ставим плагины на паузу во время ночного режима. */
#if defined STOP_PLUGS
new g_arPlugins[][] =
{
    "aknife.amxx"
}
#endif

#define NIGHT_MODE_INFORMER                 /* Информер ночного режима. */
#if defined NIGHT_MODE_INFORMER
new const HUD_COLOR[3] = {0, 100, 0}             /* Цвет сообщения в формате R, G, B */
new const Float:HUD_POSITION[2] = {-1.0, 0.0}         /* Позиция сообщения по оси X, Y */
#endif

#if !defined _reapi_included
#if defined AUTO_SWAP_TEAMS
#include <fakemeta>
const PDATA_SAFE = 2
const OFFSET_LINUX = 5
#if cellbits == 32
const OFFSET_TEAMS = 114
#else
const OFFSET_TEAMS = 139
#endif
#endif
#endif

#if AUTORR > 0
new g_iRound
#endif

new FW_START, FW_END, FW_Result, szCurMap[MAX_NAME_LENGTH],
CurHour, bool:g_bNight, g_pTimeLimit, g_iOldTime, Float:g_flResetTime

public plugin_init()
{
    #if AMXX_VERSION_NUM < 183
    MaxClients = get_maxplayers()
    #endif

    #if defined BLOCK_COMMANDS
    for (new i = 0; i < sizeof(block_commands); i ++)
        register_clcmd(block_commands[i], "BlockHook")
    #endif

    #if defined NIGHT_MODE_INFORMER
    set_task(1.0, "night_informer", _, _, _, "b")
    #endif

    g_pTimeLimit = get_cvar_pointer("mp_timelimit")
    register_event("HLTV", "EventStartRound", "a", "1=0", "2=0")
    register_event("TextMsg", "EventRestartRound", "a", "2=#Game_Commencing", "2=#Game_will_restart_in")
    FW_START = CreateMultiForward("night_mode_start_event", ET_CONTINUE)
    FW_END = CreateMultiForward("night_mode_end_event", ET_CONTINUE)
    register_plugin("Lite Night Mode", "1.0", "neugomon ?")
}

public client_putinserver(id)
{
    if (!g_bNight)
        return PLUGIN_CONTINUE

    if ((get_user_flags(id) & read_flags(FLAGS[0])) == read_flags(FLAGS[0]))
        return PLUGIN_CONTINUE

    remove_user_flags(id, read_flags(FLAGS[1]))

    #if defined STEAM_VIP
    if (!is_user_steam(id))
        return PLUGIN_CONTINUE
    #endif

    set_user_flags(id, read_flags(FLAGS[0]))
    return PLUGIN_CONTINUE
}

public plugin_end()
{
    if (g_iOldTime)
        set_pcvar_num(g_pTimeLimit, g_iOldTime)
}

public EventStartRound()
{
    time(CurHour)
    #if START > END
    if (CurHour >= START || CurHour < END)
    #else
    if (START <= CurHour < END)
    #endif
    {
        if (!szCurMap[0])
            get_mapname(szCurMap, charsmax(szCurMap))
        if (!equal(szCurMap, SET_MAP[0]))
            engine_changelevel(SET_MAP[0])
        else if (!g_bNight)
        {
            g_bNight = true
            ExecuteForward(FW_START, FW_Result)
            #if defined STOP_PLUGS
            PluginController(1)
            #endif
            RemovePlayersFlags()
            g_iOldTime = get_pcvar_num(g_pTimeLimit)
            set_pcvar_num(g_pTimeLimit, 0)
        }
        #if AUTORR > 0
        static iRound
        iRound = AUTORR - ++ g_iRound + 1
        if (iRound > 0)
            client_print_color(0, print_team_default, "^1[^4Night Mode^1] Через ^3%d раундов ^1авто-рестарт карты. ^1[^4Тек. раунд: ^3%d^1|^4Всего: ^3%d^1]", iRound, g_iRound, AUTORR)
        else
        {
            #if defined AUTO_SWAP_TEAMS
            #if !defined _reapi_included
            SwapTeams()
            #else
            rg_swap_all_players()
            #endif
            #endif
            server_cmd("sv_restart 1")
        }
        #endif
    }
    else if (g_bNight)
    {
        set_pcvar_num(g_pTimeLimit, floatround(get_gametime() - g_flResetTime) / 60 +5)
        g_bNight = false
        ExecuteForward(FW_END, FW_Result)
        #if defined STOP_PLUGS
        PluginController(0)
        #endif
        engine_changelevel(SET_MAP[1])
    }
}

public EventRestartRound()
{
    #if AUTORR > 0
    g_iRound = 0
    #endif
    g_flResetTime = get_gametime()
}

RemovePlayersFlags()
{
    static players[MAX_CLIENTS], pcount
    get_players(players, pcount, "ch")
    for (new i; i < pcount; i ++)
    {
        client_putinserver(players[i])
        remove_user_flags(players[i], read_flags(FLAGS[1]))
    }
}

#if defined STOP_PLUGS
PluginController(stop)
{
    for (new i; i < sizeof g_arPlugins; i ++)
    {
        if (stop) pause ("ac", g_arPlugins[i])
        else unpause ("ac", g_arPlugins[i])
    }
}
#endif

#if defined BLOCK_COMMANDS
public BlockHook(id)
{
    if (!g_bNight) return PLUGIN_CONTINUE
    client_print_color(id, print_team_default, "^1[^4Night Mode^1] данная ^4команда отключена ^1в ночном режиме.")
    return PLUGIN_HANDLED
}
#endif

#if defined NIGHT_MODE_INFORMER
public night_informer()
{
    if (!g_bNight)
        return PLUGIN_CONTINUE

    static id, SyncHudMsg
    static buffer[192], len

    if (!SyncHudMsg)
        SyncHudMsg = CreateHudSyncObj()

    trim(buffer)
    for (id = 1; id <= MaxClients; id ++)
    {
        if (!is_user_connected(id))
            return PLUGIN_CONTINUE

        ClearSyncHud(id, SyncHudMsg)
        len += format(buffer, charsmax(buffer), "[Ночной режим]^n[с %d часов до %d часов утра]^n", START, END)
        set_hudmessage(HUD_COLOR[0], HUD_COLOR[1], HUD_COLOR[2], HUD_POSITION[0], HUD_POSITION[1], 0, 0.0, 1.0, _, _, -1)
        ShowSyncHudMsg(id, SyncHudMsg, "%s", buffer)
    }
    return PLUGIN_HANDLED
}
#endif

#if !defined _reapi_included
#if defined AUTO_SWAP_TEAMS
public SwapTeams()
{
    new players[MAX_CLIENTS], pnum
    get_players(players, pnum, "h")
    for (new i; i < pnum; i ++)
    {
        if (is_user_connected(players[i]))
        {
            switch(fm_get_user_team(players[i]))
            {
                case 1: fm_set_user_team(players[i], 2)
                case 2: fm_set_user_team(players[i], 1)
            }
        }
    }
}

stock fm_get_user_team(index)
    return get_pdata_int(index, OFFSET_TEAMS, OFFSET_LINUX)

stock fm_set_user_team(index, team)
{
    if (!(1 <= index <= MaxClients) || pev_valid(index) != PDATA_SAFE)
        return 0

    if (fm_get_user_team(index) != team)
    {
        set_pdata_int(index, OFFSET_TEAMS, team, OFFSET_LINUX)
        dllfunc(DLLFunc_ClientUserInfoChanged, index, engfunc(EngFunc_GetInfoKeyBuffer, index))
    }
    return 1
}
#endif

#if defined STEAM_VIP
stock bool:is_user_steam(id)
{
    server_cmd("dp_clientinfo %d", id); server_exec()
    return get_pcvar_num(get_cvar_pointer("dp_r_id_provider")) == 2 ? true : false
}
#endif
#endif
 

r1nk0

Пользователь
Регистрация
3 Окт 2018
Сообщения
258
Симпатии
53

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
530
Симпатии
105
Пол
Мужской
прописал в этом плагине, вот так время:
C-like:
#define START 00                     /* Начало ночного режима. */
#define END 09                         /* Конец ночного режима. */
но отображает вот
1565025655860.png
 

r1nk0

Пользователь
Регистрация
3 Окт 2018
Сообщения
258
Симпатии
53

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
530
Симпатии
105
Пол
Мужской
ну дак допиши в строке где HUD :00
уже разобрался!) так и сделал, как ты выше советовал!) ;)
ещё бы сюда не одну карту для ночного режима, а парочку карт(2-3) с заданным по времени карты игры на той или иной карте, как в map on time. имею ввиду чтобы в ночном режими было задано время той или иной карты и менялась с другой картой, по очередностью, но с заданным по времени карты, например активировался ночной режим карта поменялась на de_dust2_2x2 или другая карта, играется эта карта (заданное время карта допустим с 23-00 минут до 23-30, или 23-00 01-00) будет 30 минут и т.д. игратся будет эта карта, как время карты этой закончилось или подошло время для смены на другую карты, то происходит смена карты на другую карту и играется другая карта, тоже определённое время(как будет заданно её время), а затем снова меняется на другую карту и т.д., а как режим ночной випки заканчивается(отключиться должен после смены карты), то меняется на ту карту, которая в исходнике была прописана, после ночного режима, :)
 

GIT

Пользователь
Регистрация
9 Июн 2017
Сообщения
147
Симпатии
7
Пол
Мужской
Здесь нет гадалок, создавайте тему
Приветствую , подскажи куда прикрутить сообщение "Приветствую НИК ИГРОКА , тебе выдали бесплатный вип в связи с Ночным режимом", данное сообщение нужно показывалось 1 раз при заходе в игру? И еще вопрос как он взаимодействует с Map Manager там же тоже есть ночной режим, нудно ли его отключать?
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
959
Симпатии
682
Пол
Мужской
GIT, Не занимайся некропостингом.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу