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

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
d4Ck, правда?
PHP:
public void OnPluginStart()
{
    PrintToServer("\n<Cycle check>");
    for(int i = 1; i <= MaxClients; i++)
    {
        PrintToServer("  #%i", i);
        return;
    }
    PrintToServer("</Cycle check>\n ");
}
Выдаёт вот это:
C-подобный:
[BotNames] Names loaded: 46

<Cycle check>
  #1

Weapons with infinite clip allowed:
 

d4Ck

Урегулированный
Сообщения
730
Реакции
562
d4Ck, правда?
PHP:
public void OnPluginStart()
{
    PrintToServer("\n<Cycle check>");
    for(int i = 1; i <= MaxClients; i++)
    {
        PrintToServer("  #%i", i);
        return;
    }
    PrintToServer("</Cycle check>\n ");
}
Ты какой-то тугой:ac:
Никто же не говорит, что цикл правильно функционирует.
 

mar1q

Участник
Сообщения
13
Реакции
1
Ну раз написал, значит не работает :D
все верно, не работает... Там проблема из-за дм'a, после рестарта сервера ничего не происходит... Тупо очки за убийства не даются... Надо сделать так чтоб раз в час в консоль прописывалась данная команда, mp_restartgame 1..
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Как работает FindEntityByClassname? а именно для info_player_terrorist / info_player_counterterrorist
При

PHP:
    if (FindEntityByClassname (-1, "info_player_terrorist") <= 0 && FindEntityByClassname (-1, "info_player_counterterrorist") <= 0)
    {   
        if (GetTeamClientCount(2) == GetTeamClientCount(3))             
            PrintToChatAll("есть два")
        else if (GetTeamClientCount(3) < GetTeamClientCount(2))     
            PrintToChatAll("есть т2")
        else if (GetTeamClientCount(2) < GetTeamClientCount(3))     
            PrintToChatAll("есть кт2")
    }
    if (FindEntityByClassname (-1, "info_player_terrorist") <= 0)       
        PrintToChatAll("есть т")
    if (FindEntityByClassname (-1, "info_player_counterterrorist") <= 0)    
        PrintToChatAll("есть кт")
пишет в чат следущее:
43768


Если задать > 0, то обще не пишет, тестил на карте mg_100traps, где доступна только кт команда.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Так функция возвращает -1, если энтити совсем не найдено.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Так функция возвращает -1, если энтити совсем не найдено.
Ну так ентити есть, и даже не одна, но когда ставлю ">= 0", то ничего не происходит.
Сообщения автоматически склеены:

Какой лимит каналов для ShowHudText? И правда что канал не должен соотвествовать каналу худа ( m_iHideHud )? Просто проблема выходит, что иногда мерцает другой ShowHudText, когда появляется ещё один.
43769
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
6 каналов одновременно на экране максимум
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
6 каналов одновременно на экране максимум
А если сделать так, мол каждый худ включается по таймеру, и имеют различия в старте между временем и будет служить "паузой", то-есть худ будет отключён как минимум 1 секунду, за это время есть шанс обновить другой худ. Что бы худ не моргал, ставим ему значение ~1.2 для
SetHudTextParams, в holdTime
При таком раскладе есть возможность обойти лимит?
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
6 каналов на экране одномоментно
7-й канал заменяет собой 1 из предыдущих
учитывается даже те, что создаются картой
 

gtixon

Участник
Сообщения
1,078
Реакции
401
Можно ли как то изменить систему получения очков в табе, или изменить фильтрацию таба, сделать фильтр по киллам?
 

alexmy

Участник
Сообщения
284
Реакции
13
Вообщем такая проблема. Пытаюсь с помощью цикла всем включать меню. Такое вообще возможно всем и сразу?
PHP:
public void EventTankHook(Event event, const char[] name, bool dontBroadcast)
{
    if(!GetConVarInt(g_iEnable_Weapon) || (g_stop_weapon))return;
    {
        GetCurrentMap(maps, sizeof(maps));
        if(IsGameMaps())
        {
            //switch(GetRandomInt(0, 1))
            //{
                //case 0: random_weapon();
            //    case 1:
            //    {
                    for (int i = 1; i <= MaxClients; ++i) if (IsClientInGame(i) && !IsFakeClient(i))
                    {
                        IsWeaponMenu(i);
                        PrintToChat(i, "\x03Появился заблокированный \x05Tанк\x01... \x03Выжившим предоставлен \x05выбор оружия\x01!!!");
                    }
            //    }
            //}
            g_stop_weapon = true;
        }
    }
}

stock void IsWeaponMenu(int client)
{
    Handle menu = CreateMenu(MenuHandler);
    SetMenuTitle(menu, "Weapons Menu");
    AddMenuItem(menu, "option1", "Rifle");
    AddMenuItem(menu, "option2", "Hunting Rifle");
    AddMenuItem(menu, "option3", "Auto Shotgun");
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 15);
}
Сообщения автоматически склеены:


Сообщения автоматически склеены:

Появляется одна реклама и всё.
 

RudikS

Участник
Сообщения
130
Реакции
61
Вообщем такая проблема. Пытаюсь с помощью цикла всем включать меню. Такое вообще возможно всем и сразу?
PHP:
public void EventTankHook(Event event, const char[] name, bool dontBroadcast)
{
    if(!GetConVarInt(g_iEnable_Weapon) || (g_stop_weapon))return;
    {
        GetCurrentMap(maps, sizeof(maps));
        if(IsGameMaps())
        {
            Handle menu = CreateMenu(MenuHandler);
            SetMenuTitle(menu, "Weapons Menu");
            AddMenuItem(menu, "option1", "Rifle");
            AddMenuItem(menu, "option2", "Hunting Rifle");
            AddMenuItem(menu, "option3", "Auto Shotgun");
            SetMenuExitButton(menu, true);
            //switch(GetRandomInt(0, 1))
            //{
                //case 0: random_weapon();
            //    case 1:
            //    {
                    for (int i = 1; i <= MaxClients; ++i) if (IsClientInGame(i) && !IsFakeClient(i))
                    {
                        DisplayMenu(menu, i, 15);
                        PrintToChat(i, "\x03Появился заблокированный \x05Tанк\x01... \x03Выжившим предоставлен \x05выбор оружия\x01!!!");
                    }
            //    }
            //}
            g_stop_weapon = true;
        }
    }
}
А если так?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
alexmy, а для чего ты при каждом событии получаешь имя карты? Она что, может поменяться м/у событиями?
Лучше же при старте карты это имя получить
Да и меню можно создать при старте плагина, а потом отсылать его игрокам при необходимости
Вот как-то так:
PHP:
Menu hWpnMenu;
bool bEnableMenu;

public void OnPluginStart()
{
    hWpnMenu = new Menu(Handler_WpnMenu);
    hWpnMenu.SetTitle("Weapons Menu");
    hWpnMenu.AddItem("option1", "Rifle");
    hWpnMenu.AddItem("option2", "Hunting Rifle");
    hWpnMenu.AddItem("option3", "Auto Shotgun");
    hWpnMenu.ExitButton = true;
}

public void OnMapStart()
{
    char map[64];
    GetCurrentMap(map, sizeof(map));
    bEnableMenu = IsGameMaps();
}

public void EventTankHook(Event event, const char[] name, bool dontBroadcast)
{
    if(!bEnableMenu || !GetConVarInt(g_iEnable_Weapon) || g_stop_weapon)
        return;

    for(int i = 1; i <= MaxClients; ++i)
        if(IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
        {
            DisplayMenu(hWpnMenu, client, 15);
            PrintToChat(i, "\x03Появился заблокированный \x05Tанк\x01...\n\x03Выжившим предоставлен \x05выбор оружия\x01!!!");
        }
    g_stop_weapon = true;
}
Только я не помню номер команды выживших в L4D2
 

alexmy

Участник
Сообщения
284
Реакции
13
Неа, также одна реклама и всё.
Сообщения автоматически склеены:

alexmy, а для чего ты при каждом событии получаешь имя карты? Она что, может поменяться м/у событиями?
Лучше же при старте карты это имя получить
Да и меню можно создать при старте плагина, а потом отсылать его игрокам при необходимости
Вот как-то так:
PHP:
Menu hWpnMenu;
bool bEnableMenu;

public void OnPluginStart()
{
    hWpnMenu = new Menu(Handler_WpnMenu);
    hWpnMenu.SetTitle("Weapons Menu");
    hWpnMenu.AddItem("option1", "Rifle");
    hWpnMenu.AddItem("option2", "Hunting Rifle");
    hWpnMenu.AddItem("option3", "Auto Shotgun");
    hWpnMenu.ExitButton = true;
}

public void OnMapStart()
{
    char map[64];
    GetCurrentMap(map, sizeof(map));
    bEnableMenu = IsGameMaps();
}

public void EventTankHook(Event event, const char[] name, bool dontBroadcast)
{
    if(!bEnableMenu || !GetConVarInt(g_iEnable_Weapon) || g_stop_weapon)
        return;

    for(int i = 1; i <= MaxClients; ++i)
        if(IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
        {
            DisplayMenu(hWpnMenu, client, 15);
            PrintToChat(i, "\x03Появился заблокированный \x05Tанк\x01...\n\x03Выжившим предоставлен \x05выбор оружия\x01!!!");
        }
    g_stop_weapon = true;
}
Только я не помню номер команды выживших в L4D2
Ну потому что, код работает на определенных
alexmy, а для чего ты при каждом событии получаешь имя карты? Она что, может поменяться м/у событиями?
Лучше же при старте карты это имя получить
Да и меню можно создать при старте плагина, а потом отсылать его игрокам при необходимости
Вот как-то так:
PHP:
Menu hWpnMenu;
bool bEnableMenu;

public void OnPluginStart()
{
    hWpnMenu = new Menu(Handler_WpnMenu);
    hWpnMenu.SetTitle("Weapons Menu");
    hWpnMenu.AddItem("option1", "Rifle");
    hWpnMenu.AddItem("option2", "Hunting Rifle");
    hWpnMenu.AddItem("option3", "Auto Shotgun");
    hWpnMenu.ExitButton = true;
}

public void OnMapStart()
{
    char map[64];
    GetCurrentMap(map, sizeof(map));
    bEnableMenu = IsGameMaps();
}

public void EventTankHook(Event event, const char[] name, bool dontBroadcast)
{
    if(!bEnableMenu || !GetConVarInt(g_iEnable_Weapon) || g_stop_weapon)
        return;

    for(int i = 1; i <= MaxClients; ++i)
        if(IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
        {
            DisplayMenu(hWpnMenu, client, 15);
            PrintToChat(i, "\x03Появился заблокированный \x05Tанк\x01...\n\x03Выжившим предоставлен \x05выбор оружия\x01!!!");
        }
    g_stop_weapon = true;
}
Только я не помню номер команды выживших в L4D2
спасибо, я попробую)
картах
 
Последнее редактирование:

alexmy

Участник
Сообщения
284
Реакции
13
да я понял уже. Просто код давным давно писал. Так и оставил не стал переписывать. Вообщем меню так и не появилось, можно из-за меню админки включенного?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
в L4D2 само меню какое-то глючное: у меня бывало, что вместо меню отображался только мелкий прямоугольник фона, при том, что кнопки меню работали
 

alexmy

Участник
Сообщения
284
Реакции
13
Главное в ручную, пробовал через команду работает всё. Также пробовал циклом вводить через FakeClientCommand команду также ноль эмоции. Неохота рекламу крутить чтоб сами игроки вводили команду.
 

Mr_panica

XenForo one 💖
Сообщения
921
Реакции
435
Пункт 2.1.8
Возможно ли добавить определённому игроку иконку в табе?
 

Вложения

  • 1563907074307.png
    1563907074307.png
    324.2 КБ · Просмотры: 80
Последнее редактирование модератором:
Сверху Снизу