Написание плагинов

suicide_xD

Участник
Сообщения
212
Реакции
14
Всем привет) Имеется даст2 онли сервер (css v34) ... Смена карты каждые 2 часа. Возможно к этому коду добавить уведомление для игроков на сервере : что это последний раунд до смены карты? Надеюсь суть понятна)

public void OnMapStart()
{
CreateTimer(7200.0 + 60.0, OnTimer, _, TIMER_FLAG_NO_MAPCHANGE);
}

static Action OnTimer(Handle timer)
{
ForceChangeLevel("de_dust2", "");
return Plugin_Stop;
}
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Всем привет) Имеется даст2 онли сервер (css v34) ... Смена карты каждые 2 часа. Возможно к этому коду добавить уведомление для игроков на сервере : что это последний раунд до смены карты? Надеюсь суть понятна)

public void OnMapStart()
{
CreateTimer(7200.0 + 60.0, OnTimer, _, TIMER_FLAG_NO_MAPCHANGE);
}

static Action OnTimer(Handle timer)
{
ForceChangeLevel("de_dust2", "");
return Plugin_Stop;
}
Держи:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

bool bChange = false;

public void OnPluginStart()
{
    HookEvent("round_end", OnRoundEnd, EventHookMode_PostNoCopy);
}

void OnRoundEnd(Event event, const char[] name, bool dontBroadcast)
{
    if(bChange) ForceChangeLevel("de_dust2", "");
}

public void OnMapStart()
{
    bChange = false;
    CreateTimer(7200.0 + 60.0, OnTimer, _, TIMER_FLAG_NO_MAPCHANGE);
}

static Action OnTimer(Handle timer)
{
    bChange = true;
    PrintToChatAll("В конце раунда произойдет перезапуск карты!");
    return Plugin_Stop;
}
 
Последнее редактирование:

suicide_xD

Участник
Сообщения
212
Реакции
14
Держи:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

bool bChange = false;

public void OnMapStart()
{
    HookEvent("round_end", OnRoundEnd, EventHookMode_PostNoCopy);
}

void OnRoundEnd(Event event, const char[] name, bool dontBroadcast)
{
    if(bChange) ForceChangeLevel("de_dust2", "");
}

public void OnMapStart()
{
    bChange = false;
    CreateTimer(7200.0 + 60.0, OnTimer, _, TIMER_FLAG_NO_MAPCHANGE);
}

static Action OnTimer(Handle timer)
{
    bChange = true;
    PrintToChatAll("В конце раунда произойдет перезапуск карты!");
    return Plugin_Stop;
}
Спасибо, попробуем!
 

suicide_xD

Участник
Сообщения
212
Реакции
14
Заметил еще косяк, обновил
Информирование будет я так понял в последнем раунде? Если раунд начался и допустим осталось 30 сек до смены карты? Смена только после выигрыша любой из команд? Нужно чтобы это все учитывалось и отсчет был правильным до смены только по завершении 2 часов игры на карте (исключение: если осталось мало времени до смены и начался раунд, то дать сыграть до выигрыша любой из команд или просто завершится время раунда и карта сменится при ничьи! в server.cfg убрал все возможные mp_timelimit - mp_maxrounds - mp_fraglimit - mp_winlimit ----- на 0
 
Последнее редактирование:

syroviy

Участник
Сообщения
60
Реакции
2
Столкнулся с такой проблемой такая как ниже помогайте не пойму что ему не нрав...
Blocker_passes.smx (Blocker passes): Native "BfWriteByte" was not found
 

Туник

Участник
Сообщения
1,281
Реакции
263
Тем, что у тебя CSGO, а плагин заточен под CS:S (в плагине используется битбуфер, а в CS:GO вместо него используется протобуф)?
Подскажи где ошибка
Игроки не могут приседать, кроме тех у кого выдан флаг) хочу сделать чтобы быстрое приседание было у админов с этим флагом, а обычные как обычно приседали.
PHP:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

#define DEFAULT_DUCK_SPEED 6.023437

int    m_flDuckSpeed;

public Plugin myinfo =
{
    name = "[VIP] Duck Speed",
    author = "Wend4r",
    version = "1.0.0",
    url = "Discord: Wend4r#0001 | VK: vk.com/wend4r"
}

public void OnPluginStart()
{
    m_flDuckSpeed = FindSendPropInfo("CBasePlayer", "m_flDuckSpeed");
}

public void OnPlayerRunCmdPost(int iClient, int iButtons)
{
    static int iOldButtons[MAXPLAYERS + 1];

    bool bFlagO = !!(GetUserFlagBits(iClient) & ADMFLAG_CUSTOM1);
    if(iButtons & IN_DUCK && !(iOldButtons[iClient] & IN_DUCK))
    {
        SetEntDataFloat(iClient, m_flDuckSpeed, bFlagO ? DEFAULT_DUCK_SPEED : -1.0);
    }

    if(bFlagO) iOldButtons[iClient] = iButtons;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Подскажи где ошибка
Игроки не могут приседать, кроме тех у кого выдан флаг) хочу сделать чтобы быстрое приседание было у админов с этим флагом, а обычные как обычно приседали.
Попробуй вот так:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#define DUCK_SPEED    6.023437
#define ACCESS_FLAG    ADMFLAG_CUSTOM1

int m_flDuckSpeed;

public Plugin myinfo =
{
    name = "[VIP] Duck Speed",
    author = "Wend4r",
    version = "1.0.0_fix",
    url = "Discord: Wend4r#0001 | VK: vk.com/wend4r"
}

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    if((m_flDuckSpeed = FindSendPropInfo("CBasePlayer", "m_flDuckSpeed")) < 1)
    {
        FormatEx(error, err_max, "Can't find offset 'CBasePlayer::m_flDuckSpeed'!");
        return APLRes_Failure;
    }

    return APLRes_Success;
}

public void OnPlayerRunCmdPost(int client, int buttons)
{
    if(!(GetUserFlagBits(client) & ACCESS_FLAG))
        return;

    static bool in_duck[MAXPLAYERS + 1];
    if((in_duck[0] = !!(buttons & IN_DUCK)) && !in_duck[client]) SetEntDataFloat(client, m_flDuckSpeed, DUCK_SPEED);
    in_duck[client] = in_duck[0];
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@syroviy, без понятия. Я не пользовался этим плагином никогда.
 

rgba

Участник
Сообщения
132
Реакции
14
Может кто-нибудь добавить/переписать плагин, чтобы добавлялся пункт в vip и можно было вкл/откл клантег?
 

Туник

Участник
Сообщения
1,281
Реакции
263
@syroviy, без понятия. Я не пользовался этим плагином никогда.
Подскажи ещё 1 момент, не получается сделать вывод клантега Админ, использую 2 плагина для вывода тегов, 1 для вип игроков выдаю через флаг O, и второй для админов выдаю через B флаг.
Но премиум перебивает админ тег, что не так)? Хочу сделать если админ имеет флаг B то тег автоматом стоит Админ, если флага B нет то будет тег премиум.
PHP:
#pragma newdecls required
#pragma semicolon 1

#include <cstrike>

public void OnPluginStart()
{
    HookEvent("player_team", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("player_spawn", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("round_start", Event_CheckTag, EventHookMode_PostNoCopy);
}

public void OnClientPutInServer(int client)
{
    SetupTag(client);
}

void Event_CheckTag(Event event, char[] name, bool dontBroadcast)
{
    CreateTimer(0.1, DelayCheck, _, TIMER_FLAG_NO_MAPCHANGE);
}

Action DelayCheck(Handle timer)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) SetupTag(i);
    return Plugin_Continue;
}

void SetupTag(int client)
{
    if(IsFakeClient(client)) return;

    bool bFlagO = !!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1);
    if(CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC|ADMFLAG_ROOT))
    { 
        CS_SetClientClanTag(client, "ADMIN");
    }
    else
    {
        if(bFlagO) CS_SetClientClanTag(client, "PREMIUM");
    }

}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Подскажи ещё 1 момент, не получается сделать вывод клантега Админ, использую 2 плагина для вывода тегов, 1 для вип игроков выдаю через флаг O, и второй для админов выдаю через B флаг.
Но премиум перебивает админ тег, что не так)? Хочу сделать если админ имеет флаг B то тег автоматом стоит Админ, если флага B нет то будет тег премиум.
PHP:
#pragma newdecls required
#pragma semicolon 1

#include <cstrike>

public void OnPluginStart()
{
    HookEvent("player_team", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("player_spawn", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("round_start", Event_CheckTag, EventHookMode_PostNoCopy);
}

public void OnClientPutInServer(int client)
{
    SetupTag(client);
}

void Event_CheckTag(Event event, char[] name, bool dontBroadcast)
{
    CreateTimer(0.1, DelayCheck, _, TIMER_FLAG_NO_MAPCHANGE);
}

Action DelayCheck(Handle timer)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) SetupTag(i);
    return Plugin_Continue;
}

void SetupTag(int client)
{
    if(IsFakeClient(client)) return;

    bool bFlagO = !!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1);
    if(CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC|ADMFLAG_ROOT))
    {
        CS_SetClientClanTag(client, "ADMIN");
    }
    else
    {
        if(bFlagO) CS_SetClientClanTag(client, "PREMIUM");
    }

}
1674984844304.png

в чем прикол?
 

MagoG

Хочу быть как truyn
Сообщения
896
Реакции
608
Отрацание, отрицания 😂

И ещё вопрос тогда с ходу,

Почему не так?:
if(IsFakeClient(client)) return;
    if(CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC|ADMFLAG_ROOT))
    {
        CS_SetClientClanTag(client, "ADMIN");
    }
    else
    {
        if(!!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1))
            CS_SetClientClanTag(client, "PREMIUM");
    }

И зачем проверять доступ к команде, если можно в один bFlag засунуть проверку сразу на ADMFLAG_GENERIC, в ADMFLAG_ROOT уже входит он, так что не понимаю смысла от ADMFLAG_GENERIC|ADMFLAG_ROOT. Можно лишь GENERIC проверять ведь.
new:
void SetupTag(int client)
{
    if(IsFakeClient(client)) return;
   
    if (!!(GetUserFlagBits(client) & ADMFLAG_GENERIC) && !(!!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)))
        CS_SetClientClanTag(client, "ADMIN");
    else if (!!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1))
        if(bFlagO) CS_SetClientClanTag(client, "PREMIUM");
}
 
Последнее редактирование:

Туник

Участник
Сообщения
1,281
Реакции
263
Отрацание, отрицания 😂

И ещё вопрос тогда с ходу,

Почему не так?:
if(IsFakeClient(client)) return;
    if(CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC|ADMFLAG_ROOT))
    {
        CS_SetClientClanTag(client, "ADMIN");
    }
    else
    {
        if(!!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1))
            CS_SetClientClanTag(client, "PREMIUM");
    }

И зачем проверять доступ к команде, если можно в один bFlag засунуть проверку сразу на ADMFLAG_GENERIC, в ADMFLAG_ROOT уже входит он, так что не понимаю смысла от ADMFLAG_GENERIC|ADMFLAG_ROOT. Можно лишь GENERIC проверять ведь.
new:
void SetupTag(int client)
{
    if(IsFakeClient(client)) return;
  
    if (!!(GetUserFlagBits(client) & ADMFLAG_GENERIC) && !(!!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)))
        CS_SetClientClanTag(client, "ADMIN");
    else if (!!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1))
        if(bFlagO) CS_SetClientClanTag(client, "PREMIUM");
}
не работает и такой вариант)
Тег премиум перебивает
 

xstage

🏹
Сообщения
726
Реакции
754
не работает и такой вариант)
Тег премиум перебивает
C-подобный:
#pragma newdecls required
#pragma semicolon 1

#include <cstrike>

public void OnPluginStart()
{
    HookEvent("player_team", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("player_spawn", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("round_start", Event_CheckTag, EventHookMode_PostNoCopy);
}

public void OnClientPutInServer(int client)
{
    SetupTag(client);
}

void Event_CheckTag(Event event, char[] name, bool dontBroadcast)
{
    CreateTimer(0.1, DelayCheck, _, TIMER_FLAG_NO_MAPCHANGE);
}

Action DelayCheck(Handle timer)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) SetupTag(i);
    return Plugin_Continue;
}

void SetupTag(int client)
{
    if(IsFakeClient(client)) return;
    
    bool bFlagO = !!(GetUserFlagBits(client) & ADMFLAG_CUSTOM1);
    
    if(CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC))
    {
        CS_SetClientClanTag(client, "ADMIN");
    }
    else if(bFlagO)
    {
        CS_SetClientClanTag(client, "PREMIUM");
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Туник, проверяй:
C-подобный:
#pragma newdecls required
#pragma semicolon 1

#include <cstrike>

public void OnPluginStart()
{
    HookEvent("player_team",    Event_CheckTag);
    HookEvent("player_spawn",    Event_CheckTag);
    HookEvent("round_start",    Event_CheckTag, EventHookMode_PostNoCopy);
}

public void OnClientPutInServer(int client)
{
    SetupTag(client);
}

void Event_CheckTag(Event event, char[] name, bool dontBroadcast)
{
    CreateTimer(0.1, Timer_Check, name[0] == 'r' ? -1 : event.GetInt("userid"), TIMER_FLAG_NO_MAPCHANGE);
}

Action Timer_Check(Handle timer, int client)
{
    if(client == -1)
    {
        for(int i = 1; i <= MaxClients; i++) SetupTag(i);
    }
    else if((client = GetClientOfUserId(client))) SetupTag(client);

    return Plugin_Stop;
}

void SetupTag(int client)
{
    if(!IsClientInGame(client) || IsFakeClient(client))
        return;

    int flags = GetUserFlagBits(client);
    if(flags & (ADMFLAG_GENERIC|ADMFLAG_ROOT))
        CS_SetClientClanTag(client, "ADMIN");
    else if(flags & ADMFLAG_CUSTOM1)
        CS_SetClientClanTag(client, "PREMIUM");
}
 
Последнее редактирование:
Сверху Снизу