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

Ровный Кент

Участник
Сообщения
703
Реакции
121
Всем привет, подскажите пожалуйста пример :

1. Подсчет игроков на сервере (%игроков)

2. Начало раунда и текст в чат :

plugin : На сервере %игроков, некоторые функции недоступны.

С меня "мне нравиться" (если конечно пример будет рабочим...) :)
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Всем привет, подскажите пожалуйста пример :

1. Подсчет игроков на сервере (%игроков)

2. Начало раунда и текст в чат :

plugin : На сервере %игроков, некоторые функции недоступны.

С меня "мне нравиться" (если конечно пример будет рабочим...) :)

1.
C++:
int GetConnectedPlayersCount() {
    int count;
    for(int i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsClientInGame(i)) count++;
    return count;
}

2.
C++:
#include <sdktools>

public void OnPluginStart() {
    HookEvent("round_start", RoundStart, EventHookMode_PostNoCopy);
}

public Action RoundStart(Event event, const char[] name, bool dontbroadcast) {
    PrintToChatAll("Количество подключенных игроков %i", GetConnectedPlayersCount());
}

int GetConnectedPlayersCount() {
    int count;
    for(int i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsClientInGame(i)) count++;
    return count;
}
 

FokS

Участник
Сообщения
422
Реакции
52
1.
C++:
int GetConnectedPlayersCount() {
    int count;
    for(int i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsClientInGame(i)) count++;
    return count;
}

2.
C++:
#include <sdktools>

public void OnPluginStart() {
    HookEvent("round_start", RoundStart, EventHookMode_PostNoCopy);
}

public Action RoundStart(Event event, const char[] name, bool dontbroadcast) {
    PrintToChatAll("Количество подключенных игроков %i", GetConnectedPlayersCount());
}

int GetConnectedPlayersCount() {
    int count;
    for(int i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsClientInGame(i)) count++;
    return count;
}
А как сделать, чтобы source tv не считало за игрока ?
 

Ровный Кент

Участник
Сообщения
703
Реакции
121
1.
C++:
int GetConnectedPlayersCount() {
    int count;
    for(int i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsClientInGame(i)) count++;
    return count;
}

2.
C++:
#include <sdktools>

public void OnPluginStart() {
    HookEvent("round_start", RoundStart, EventHookMode_PostNoCopy);
}

public Action RoundStart(Event event, const char[] name, bool dontbroadcast) {
    PrintToChatAll("Количество подключенных игроков %i", GetConnectedPlayersCount());
}

int GetConnectedPlayersCount() {
    int count;
    for(int i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsClientInGame(i)) count++;
    return count;
}

А как сделать типа того (это не код а пример, типа 10 либо равно 10 то текст1 если меньше 10 то текст2) :

C-подобный:
if (GetConnectedPlayersCoun >= 10)
 {
 PrintToChatAll : "на сервере 10 либо больше игроков, все функции доступны";
}
else (GetConnectedPlayersCoun < 10)
{
PrintToChatAll : "на сервере меньше 10 игроков, некоторые функции ограничены";
}
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
А как сделать, чтобы source tv не считало за игрока ?
Добавить условие !IsClientSourceTV(i).
Сообщения автоматически склеены:

А как сделать типа того (это не код а пример, типа 10 либо равно 10 то текст1 если меньше 10 то текст2) :
C++:
public Action RoundStart(Event event, const char[] name, bool dontbroadcast) {
    if(GetConnectedPlayersCount() >= 10) PrintToChatAll("на сервере 10 либо больше игроков, все функции доступны");
    else PrintToChatAll("на сервере меньше 10 игроков, некоторые функции ограничены");
}
 
Последнее редактирование:

HooLIGUN

MatchMaking CS:S / RGMIX.ru
Сообщения
1,062
Реакции
267
Может кто помочь с плагином?
Нужна функция "Поменять игроков местами в командах" - то бишь выбрать 2 игрока из разных команд и одновременно поменять их местами
Есть плагин аля teamswitch , но там сначала одного игрока перекидываешь, затем тоже самое проделываешь для другого.
Задумка:
В админке есть пункт "Поменять местами игроков", в нем сначала игроки одной команды (например Т), выбираешь игрока которого хочешь переместить за КТ, затем открывается список другой команды (КТ), выбираешь игрока которого хочешь переместить за Т,
После выбора двух игроков появляется пункт "Когда переместить" и режимы "Сразу" ,"В конце раунда", "После смерти обоих"

Желаемая структура меню:
C-подобный:
-Админ меню:
            -Управление игроками:
                                    Поменять местами:
                                                    - Команта Т (выбор игрока):
                                                    Terrorist_nick_1
                                                    Terrorist_nick_2
                                                    Terrorist_nick_3
                                                    Terrorist_nick_4
                                                    И т.д.
                                                    - Команда КТ (выбор игрока):
                                                    CT_nick_1
                                                    CT_nick_2
                                                    CT_nick_3
                                                    CT_nick_4
                                                                - Когда переместить:
                                                                Сразу
                                                                В конце раунда
                                                                После смерти обоих
Игра CS:S Steam, SM 1.9
 

Black_

Участник
Сообщения
48
Реакции
5
Можете сделать пожалуйста:
-Чтобы вначале раунда запрет на глок был,после 5 мин разрешен был.
Спасибо,нужно очень.
 

Amirsz

Релаксируем... Ну хотя бы пытаемся
Сообщения
261
Реакции
81

StrAnn1k

Участник
Сообщения
237
Реакции
23
Попробуй, но я такой себе кодер
Смотри вы не так понял и я не так обяснил мне нужно типо разрешается запрещено оружие чел купил запреть сделали когда меньше игроков стало и у чела авп остался пока его не убют оно не пропадет
 

Amirsz

Релаксируем... Ну хотя бы пытаемся
Сообщения
261
Реакции
81
Смотри вы не так понял и я не так обяснил мне нужно типо разрешается запрещено оружие чел купил запреть сделали когда меньше игроков стало и у чела авп остался пока его не убют оно не пропадет
Можно поставить знаки препинания. А то нифига не понял...
 

The_C@t

Слабоумие и отвага
Сообщения
272
Реакции
142
Ребята! Появилась необходимость выдавать всем игрокам при входе ADMFLAG_CUSTOM1, нашел на АМ такой вариант, но не пашет зараза...
Кто может подсобить, я не кодер)

C-подобный:
#pragma semicolon 1
#include <sourcemod>

public Plugin myinfo = {
    name        = "[ANY] Give Admin Flag",
    author      = "Sgt. Gremulock",
    description = "Gives players that join an admin flag.",
    version     = "1.0",
    url         = "sourcemod.net"
};

public void OnPluginStart()
{
    CreateConVar("sm_giveadminflag_version", "1.0", "Plugin's version.", FCVAR_NOTIFY);
    
    for (int i = 1; i <= MaxClients; i++)
    {
        if (IsValidClient(i))
        {
            OnClientPostAdminCheck(i);
        }
    }
}

public void OnClientPostAdminCheck(int client)
{
    if (!CheckCommandAccess(client, "sm_admin", ADMFLAG_CUSTOM1, false))
    {
        AdminId Client_Admin = GetUserAdmin(client);
        Client_Admin.SetFlag(Admin_Custom1, true);
    }
}

bool IsValidClient(int client)
{
    if (client <= 0 || client > MaxClients || !IsClientConnected(client))
    {
        return false;
    }
    
    return IsClientInGame(client);
}
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Ребята! Появилась необходимость выдавать всем игрокам при входе ADMFLAG_CUSTOM1, нашел на АМ такой вариант, но не пашет зараза...
Кто может подсобить, я не кодер)

C-подобный:
#pragma semicolon 1
#include <sourcemod>

public Plugin myinfo = {
    name        = "[ANY] Give Admin Flag",
    author      = "Sgt. Gremulock",
    description = "Gives players that join an admin flag.",
    version     = "1.0",
    url         = "sourcemod.net"
};

public void OnPluginStart()
{
    CreateConVar("sm_giveadminflag_version", "1.0", "Plugin's version.", FCVAR_NOTIFY);
   
    for (int i = 1; i <= MaxClients; i++)
    {
        if (IsValidClient(i))
        {
            OnClientPostAdminCheck(i);
        }
    }
}

public void OnClientPostAdminCheck(int client)
{
    if (!CheckCommandAccess(client, "sm_admin", ADMFLAG_CUSTOM1, false))
    {
        AdminId Client_Admin = GetUserAdmin(client);
        Client_Admin.SetFlag(Admin_Custom1, true);
    }
}

bool IsValidClient(int client)
{
    if (client <= 0 || client > MaxClients || !IsClientConnected(client))
    {
        return false;
    }
   
    return IsClientInGame(client);
}
C++:
#include <sdktools>

public void OnClientPostAdminCheck(int client) {
    AdminId adminid = GetUserAdmin(client);
    if(adminid == INVALID_ADMIN_ID) {
        adminid = CreateAdmin("");
        SetUserAdmin(client, adminid, true);
        adminid.SetFlag(Admin_Custom1, true);
    }
}
 

EZZY

Участник
Сообщения
377
Реакции
74
Доброго времени, знаю что для кс го есть плагин Headshot Only, а можно ли дописать его чтобы onlyHS были на определенных картах?
 
Сверху Снизу