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

DarkerZ

Участник
Сообщения
395
Реакции
175
Опять таки сложно, у меня все в 2 проверки обошлось и в 1 строчку кода, а тут 9 строчек кода и 2 вывода текста вместо 1
ну раз говоришь у тебя подобные проверки много где идут... да и при желании ты можешь вообще убрать пробелы и перенос строки и будет в 1 строчку... зато везде где надо используешь конструкцию по типу PrintPhrase("Win",iWinner);
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
ну раз говоришь у тебя подобные проверки много где идут... да и при желании ты можешь вообще убрать пробелы и перенос строки и будет в 1 строчку... зато везде где надо используешь конструкцию по типу PrintPhrase("Win",iWinner);
Все равно не подходит, так как возни много, проще уж тогда мой вариант оставить с 2 проверками в 1 строке, нужно будет просто где нужно заменить условие и поменять название блока из перевода
 

DarkerZ

Участник
Сообщения
395
Реакции
175
Все равно не подходит, так как возни много, проще уж тогда мой вариант оставить с 2 проверками в 1 строке, нужно будет просто где нужно заменить условие и поменять название блока из перевода
и вообще смысл ты заморачиваешься с лишней проверкой, если юзаешь тот же самый CPrintToChatAll, хоть посмотри его реализацию...
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
и вообще смысл ты заморачиваешься с лишней проверкой, если юзаешь тот же самый CPrintToChatAll, хоть посмотри его реализацию...
Там проблема в том что у меня не выводится цвет {teamcolor}, он попросту не работает в CPrintToChatAll, вот и приходится мудрить
Сообщения автоматически склеены:

Всем добрый вечер, подскажите пожалуйста как можно это упросить (тут вариантов у меня нет)

КОД:
char sWeaponUsed[64];
    
    GetEventString(hEvent, "weapon", sWeaponUsed, sizeof(sWeaponUsed));
    if (StrEqual(sWeaponUsed, "knife") || StrEqual(sWeaponUsed, "hegrenade") || StrEqual(sWeaponUsed, "flashbang") || StrEqual(sWeaponUsed, "smokegrenade") || StrEqual(sWeaponUsed, "xm1014") || StrEqual(sWeaponUsed, "m3")) return;
 
Последнее редактирование:

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Всем доброго времени суток, подскажите пожалуйста, почему функция TE_SendToAll не прекращает свою работу если игроков меньше 10

Код:
public void Round_Start(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    int g_iPlayerInServer;
   
    for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i) && GetClientTeam(i) > 1) g_iPlayerInServer++;
    if (g_iPlayerInServer < 10) g_hTimer = CreateTimer(1.0, Set_Effect,_, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
   
    else
    {
        if(g_hTimer)
        {
            KillTimer(g_hTimer);
            g_hTimer = null;
        }
    }
}

public Action Set_Effect(Handle hTimer)
{
    char sMap[64];
    GetCurrentMap(sMap, sizeof(sMap));
   
    if (strcmp(sMap, "de_mirage_csgo") == 0)
    {
        for(int i = 0; i < sizeof fpos - 1; i++)
        {
            TE_SetupBeamPoints(de_mirageTT[i], de_mirageTT[i+1], g_iTexture, 0, 0, 0, 1.0, g_fSize[0], g_fSize[1], 0, 0.0, g_iColor, 10);
            TE_SendToAll();
        }
    }
}
 

khood

Участник
Сообщения
214
Реакции
51
Всем доброго времени суток, подскажите пожалуйста, почему функция TE_SendToAll не прекращает свою работу если игроков меньше 10

Код:
public void Round_Start(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    int g_iPlayerInServer;
 
    for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i) && GetClientTeam(i) > 1) g_iPlayerInServer++;
    if (g_iPlayerInServer < 10) g_hTimer = CreateTimer(1.0, Set_Effect,_, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
 
    else
    {
        if(g_hTimer)
        {
            KillTimer(g_hTimer);
            g_hTimer = null;
        }
    }
}

public Action Set_Effect(Handle hTimer)
{
    char sMap[64];
    GetCurrentMap(sMap, sizeof(sMap));
 
    if (strcmp(sMap, "de_mirage_csgo") == 0)
    {
        for(int i = 0; i < sizeof fpos - 1; i++)
        {
            TE_SetupBeamPoints(de_mirageTT[i], de_mirageTT[i+1], g_iTexture, 0, 0, 0, 1.0, g_fSize[0], g_fSize[1], 0, 0.0, g_iColor, 10);
            TE_SendToAll();
        }
    }
}
Проблема, возможно, связана с использованием TE_SendToAll() внутри цикла в функции Set_Effect. Функция TE_SendToAll() используется для отправки временного события (TE) всем подключенным клиентам. Однако её использование внутри цикла может привести к чрезмерной загрузке сети большим количеством сообщений TE, особенно если цикл выполняется часто.
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Проблема, возможно, связана с использованием TE_SendToAll() внутри цикла в функции Set_Effect. Функция TE_SendToAll() используется для отправки временного события (TE) всем подключенным клиентам. Однако её использование внутри цикла может привести к чрезмерной загрузке сети большим количеством сообщений TE, особенно если цикл выполняется часто.
И что тут можно сделать?
Сообщения автоматически склеены:

Всем доброго времени суток, подскажите пожалуйста, почему функция TE_SendToAll не прекращает свою работу если игроков меньше 10

Код:
public void Round_Start(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    int g_iPlayerInServer;
  
    for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i) && GetClientTeam(i) > 1) g_iPlayerInServer++;
    if (g_iPlayerInServer < 10) g_hTimer = CreateTimer(1.0, Set_Effect,_, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
  
    else
    {
        if(g_hTimer)
        {
            KillTimer(g_hTimer);
            g_hTimer = null;
        }
    }
}

public Action Set_Effect(Handle hTimer)
{
    char sMap[64];
    GetCurrentMap(sMap, sizeof(sMap));
  
    if (strcmp(sMap, "de_mirage_csgo") == 0)
    {
        for(int i = 0; i < sizeof fpos - 1; i++)
        {
            TE_SetupBeamPoints(de_mirageTT[i], de_mirageTT[i+1], g_iTexture, 0, 0, 0, 1.0, g_fSize[0], g_fSize[1], 0, 0.0, g_iColor, 10);
            TE_SendToAll();
        }
    }
}
Помогите пожалуйста, очень надо.
 
Последнее редактирование:

VeNoM`1K =))

Живи и ошибайся. В этом жизнь.
Сообщения
701
Реакции
267
Кто сможет помочь?) Сделать как на скрине, ниже исходник
--------------------------------------------------------------------------------
| Player Information |
--------------------------------------------------------------------------------
| ID | Ping | Rate | Update | CMD | Lerp | Name |
--------------------------------------------------------------------------------

|#1046 | 45 0 20 10 100.0 | игрок |
-------- ---------

--------------------------------------------------------------------------------
| Player Information |
--------------------------------------------------------------------------------
| Rate | Update | CMD |Steam ID | Name |
--------------------------------------------------------------------------------
| 30000 | 20 | |BOT | [БОТ]™Хам Е/\ЕоН™ |
| 30000 | 20 | |BOT | [БОТ]°˚BeTeRaHыч˚° |
| 30000 | 20 | |BOT | [БОТ]صƒǻƒǻص |
| 30000 | 20 | |BOT | [БОТ]••ЗаСрАнЕц |
| 0 | 20 | 10 |STEAM_0 | игрок |
 

Вложения

  • smrates.sp
    8.4 КБ · Просмотры: 11

DENZEL519

Работаю с AI !
Сообщения
417
Реакции
198
Кто может подсказать, есть ли плагин, который бы блокировал использование alias у клиентов?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Кто может подсказать, есть ли плагин, который бы блокировал использование alias у клиентов?
alias - это сугубо внутренняя команда клиента
как ты представляешь обнаружение их наличия серверными методами?
 

ден

Участник
Сообщения
48
Реакции
22
Мне нужно переписать плагин так, чтобы при входе игроков автоматически добавлялись боты. Я также хочу, чтобы боты не отображались в списке наблюдателей, но были видны только при просмотре сервера. Кроме того сколько ботов добавлять в зависимости от количества игроков, например, одного бота при наличии 4 игроков, двух ботов при 7 игроках и т.д. Имена ботов также должны выбираться случайным образом

PHP:
#pragma semicolon 1

#include <sdktools>

#define PL_VERSION "1.1.1"

static const String:FakeNames[][] = {"РандомЭэээ", "САНТЕХ НИК", "Катька", "ARI$TOKRAT", "Петруха", "Su4ka", "ext77", "Паша Техник", "quality", "Шторм", "ph34r", "1337sp34k", "HardPlayer", "StinG", "Immortal", "achmed", "benthas", "hmmmm", "LOLLOL", "HITM@N", "RUFA", "Metahander", "Meg", "Py6uH", "alyx", "Бутылка_Пива", "Эto_фuaско_брatan", "солдат", "Маршал", "CAT", "ПиздюК", "DoomThird"};

new IsNameUsed[MAXPLAYERS+1] = {-1, ...},
    iMaxBots,
    Float:fDelay;

public Plugin:myinfo =
{
    name        = "FakeClients",
    author        = "LouLoubizou(fixed by Grey83)",
    description    = "Put fake clients in server",
    version        = PL_VERSION,
    url            = "http://sourcemod.net/"
};

public OnPluginStart()
{
    CreateConVar("sm_fakeclients_version", PL_VERSION, "Version of FakeClients plugin", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);

    new Handle:cvar;
    cvar = CreateConVar("sm_fakeclients_players","1","Number of players to simulate", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, _, true, 32.0);
    iMaxBots = GetConVarInt(cvar);
    HookConVarChange(cvar, OnChange_MaxBots);

    cvar = CreateConVar("sm_fakeclients_delay","0.1","Delay after map change before fake clients join(seconds)", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, 0.1, true, 10.0);
    fDelay = GetConVarFloat(cvar);
    HookConVarChange(cvar, OnChange_Delay);
}

public OnChange_MaxBots(Handle:cvar, const String:oldValue[], const String:newValue[])
{
    iMaxBots = StringToInt(newValue);
}

public OnChange_Delay(Handle:cvar, const String:oldValue[], const String:newValue[])
{
    fDelay = StringToFloat(newValue);
}

public OnMapStart()
{
    new numPlayers = GetClientCount(true); // Получаем количество игроков, включая ботов

    if (numPlayers == 0) {
        // Если на сервере нет игроков (только боты), добавляем одного бота
        CreateTimer(fDelay, OnTimedCreateFakeClient, 0);
    }
}

public OnClientPutInServer(client)
{
    if(IsFakeClient(client))
        return;

    // Определяем текущее количество игроков на сервере
    new numPlayers = 0;
    for (new i = 1; i <= MaxClients; i++) {
        if (IsClientInGame(i) && !IsClientSourceTV(i)) {
            numPlayers++;
        }
    }

    if (numPlayers == 1) {
        // Если на сервере только вы, добавляем одного бота
        CreateTimer(fDelay, OnTimedCreateFakeClient, 0);
    }
}


public OnClientDisconnect(client)
{
    CreateTimer(0.1, OnTimedCreateFakeClient, client);
}

public Action:OnTimedCreateFakeClient(Handle:timer, any:client){
    new clientcount = GetClientCount(true);
    if(clientcount == MaxClients || clientcount >= iMaxBots)
        return Plugin_Handled;

    new NumberOfFakeClients;
    for(new i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsFakeClient(i) && !IsClientSourceTV(i)) NumberOfFakeClients++;
    if(NumberOfFakeClients >= iMaxBots)
        return Plugin_Handled;

    new RandomName;
    while(CheckName(RandomName)) RandomName = GetRandomInt(0, 31);
    IsNameUsed[CreateFakeClient(FakeNames[RandomName])] = RandomName;
    return Plugin_Handled;
}

bool:CheckName(num)
{
    for(new i = 1; i <= MaxClients; i++) if(IsNameUsed[i] == num) return true;
    return false;
}
актуально?
 

VeNoM`1K =))

Живи и ошибайся. В этом жизнь.
Сообщения
701
Реакции
267
Так же все

Надо добавить | ID | Ping | Rate | Update | CMD | Lerp | Name | (главное lerp)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Так же все

Надо добавить | ID | Ping | Rate | Update | CMD | Lerp | Name | (главное lerp)
я думал тебе ботов из списка убрать нужно
Сообщения автоматически склеены:

@VeNoM`1K =)), ты хоть уточни по какой команде это должно у тебя выводиться.
Потому что почти всё затребованное выводится по команде sm_allrates (доступно только админам), а ты похоже хочешь, чтобы это выводилось по команде sm_rate / sm_rates (любой может юзать эти команды).
 
Последнее редактирование:

VeNoM`1K =))

Живи и ошибайся. В этом жизнь.
Сообщения
701
Реакции
267
я думал тебе ботов из списка убрать нужно
Сообщения автоматически склеены:

@VeNoM`1K =)), ты хоть уточни по какой команде это должно у тебя выводиться.
Потому что почти всё затребованное выводится по команде sm_allrates (доступно только админам), а ты похоже хочешь, чтобы это выводилось по команде sm_rate / sm_rates (любой может юзать эти команды).
Меню sm_rate
В консоле sm_rates

То что я попросил, надо для консоли сделать sm_rates
 

Yurka_Bear

Участник
Сообщения
61
Реакции
4
Здравствуйте. Ребятушки, помогите пожалуйста поправить плагин. В плагине, фейверки взрываются очень высоко, И их вообще практически не видно. Переменна стоит (sm_fireworks_low_ceiling 1). Можно ли сделать их ниже, пускай будет на уровне выше головы игрока на пол корпуса. Надеюсь правильно пояснил.
 

Вложения

  • vog_fireworks_gungame.sp
    23.2 КБ · Просмотры: 11

DarkerZ

Участник
Сообщения
395
Реакции
175
Здравствуйте. Ребятушки, помогите пожалуйста поправить плагин. В плагине, фейверки взрываются очень высоко, И их вообще практически не видно. Переменна стоит (sm_fireworks_low_ceiling 1). Можно ли сделать их ниже, пускай будет на уровне выше головы игрока на пол корпуса. Надеюсь правильно пояснил.
возможно в 552 строчке меньше значение надо сделать
C-подобный:
vec2[2] = vec[2] + 300.0;
но код конечно... создавать переменную записывать туда статическое значение и использовать его 1 раз в функции...
 
Сверху Снизу