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

alexmy

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

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@alexmy, если я правильно понял.
C++:
int g_iCurrentPlayersCount;

// ...

public void OnEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast)
{
    g_iCurrentPlayersCount = GetClientCount(false);
}

// ...

public void OnAnotherEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast)
{
    // ... iClient - кому пишем.
    PrintToChat(iClient, "Кол-во игроков на сервере - %d", g_iCurrentPlayersCount);
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Loco, а тебе для чего его менять-то?
В плагине нет никаких параметров для изменения его размера (не уверен, что таковые вообще в игре имеются).
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@Loco, а тебе для чего его менять-то?
В плагине нет никаких параметров для изменения его размера (не уверен, что таковые вообще в игре имеются).
Для некоторых режимов требуется сделать луч поменьше в диаметре у игрока на экране. (в данном случае режим invis для csgo)
 

alexmy

Участник
Сообщения
284
Реакции
13
@alexmy, если я правильно понял.
C++:
int g_iCurrentPlayersCount;

// ...

public void OnEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast)
{
    g_iCurrentPlayersCount = GetClientCount(false);
}

// ...

public void OnAnotherEventTriggered(Handle hEvent, const char[] szEventName, bool bDontBroadcast)
{
    // ... iClient - кому пишем.
    PrintToChat(iClient, "Кол-во игроков на сервере - %d", g_iCurrentPlayersCount);
}
Вроде всё просто выглядит с виду, но я с такой функцией не работал. Можно чуть-чуть подробней.
 

skaeN

Участник
Сообщения
204
Реакции
108
1. Админ прослушка
2. Есть готовый плагин, но он работает на один раунд. Приходится каждый последующий - прописывать команды, чтобы прослушать голосовой чат. Можно ли сделать так, чтобы - если включил прослушку или другие команды, она работала до конца карты
 

Вложения

  • adminsentinel.sp
    26 КБ · Просмотры: 6

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@alexmy, с какой функцией? Она описана в API.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Подскажите что не так тут, на сервере при установки модели крашит сервер, часть кода взял с плагина personal_skins,
в SetEntityModel там была прописана модель не напрямую, SetEntityModel(client, model);
PHP:
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#include <gloves>

public OnPluginStart()
{  
    HookEvent("player_spawn", Event_team, EventHookMode_PostNoCopy);
}

public void Event_team(Event event, const char[] sEvName, bool bDontBroadcast)
{  
    int client = GetClientOfUserId(event.GetInt("userid"));
    if (!client || !IsPlayerAlive(client))
    {
        return;
    }
    CreateTimer(0.01, Timer_set, client);
}

public Action:Timer_set(Handle:hTimer, any client)
{  
    if(GetClientTeam(client)==3){
        SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_blue.mdl");
        Gloves_RegisterCustomArms(client, "models/weapons/ct_arms_sas.mdl");
    }
    else if(GetClientTeam(client)==2){
        SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_red.mdl");
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Loco, убери EventHookMode_PostNoCopy
и в таймер лучше передавать userid, а не индекс
Попробуй так:
PHP:
#include <sdktools_functions>
#include <gloves>

public void OnPluginStart()
{
	HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
	CreateTimer(0.0, Timer_set, event.GetInt("userid"));
}

public Action Timer_set(Handle timer, int client)
{
	static team;
	if(!(client = GetClientOfUserId(client)) || (team = GetClientTeam(client)) < 2) {}
	else if(team == 3)
	{
		SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_blue.mdl");
		Gloves_RegisterCustomArms(client, "models/weapons/ct_arms_sas.mdl");
	}
	else SetEntityModel(client, "models/player/custom_player/ktm/rocket_raccoon_red.mdl");
}
 

Boywlater

Участник
Сообщения
132
Реакции
32
Мог бы кто помочь написать простенький плагин.
Название: Vaomenu - vip auto opening menu
Суть
При заходе на сервер проверяется на наличие вип (by R!ko)
При наличие Вип у игрока открывается Вип меню с задержкой (таймером , н.п 1сек)
И также добавит отключение авто открывания меню при следующих заходах например командой !automenu.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@Loco, убери EventHookMode_PostNoCopy
и в таймер лучше передавать userid, а не индекс
Сделал так, если в плагине не указать PrecacheModel, то сервер крашит при установки этой модели, в случает рук, то их просто невидно.
PHP:
#include <sdktools_functions>
#include <gloves>
#define model_ct "models/player/custom_player/ktm/rocket_raccoon_blue.mdl"
#define arms     "models/player/custom_player/ktm/banana_joe_arms.mdl"
#define model_t "models/player/custom_player/ktm/rocket_raccoon_red.mdl"

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
    HookEvent("player_team", Event_Spawn);
}
public OnMapStart()
{
    PrecacheModel(model_ct, true);
    PrecacheModel(arms, true);
    PrecacheModel(model_t, true);
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    CreateTimer(0.001, Timer_set, event.GetInt("userid"));
}

public Action Timer_set(Handle timer, int client)
{
    Gloves_SetArmsModel(client, arms);
    if(GetClientTeam(client) == 3)
        SetEntityModel(client, model_ct);
    if(GetClientTeam(client) == 2)       
        SetEntityModel(client, model_t);
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Loco, убери HookEvent("player_team", Event_Spawn); или хотя бы добавь проверку жив ли игрок
 
Последнее редактирование:

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
Подскажите кодом, игрок вводит /lmute и он никого не слышит и /lunmute и слышит.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Всех игроков сразу одной командой.. не то что надо.. я его ставил
Вот обрезанный, только-что тестил на сервере, игрок который напишет, ему не будет слышно ни чата, ни голосового чата, и сообщения игрок не будет видно другим (он типо в домике)
Оффтоп
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

public OnPluginStart()
{  
    RegAdminCmd("sm_sm", selfMute, 0,"Mute player by typing");
    RegAdminCmd("sm_su", selfUnmute, 0, "Unmute player by typing");
}

public OnClientPutInServer(client)
{
    new maxplayers = GetMaxClients();
    for (new id = 1; id <= maxplayers ; id++){
        if (id != client && IsClientInGame(id)){
            SetListenOverride(id, client, Listen_Yes);
        }
    }
}

public Action:selfMute(client, args)
{
    new maxplayers = GetMaxClients();
    for (new id = 1; id <= maxplayers ; id++){
        if (id != client && IsClientInGame(id)){
            SetListenOverride(client, id, Listen_No);
        }
    }
}

public Action:selfUnmute(client, args)
{
    new maxplayers = GetMaxClients();
    for (new id = 1; id <= maxplayers ; id++){
        if (id != client && IsClientInGame(id)){
            SetListenOverride(client, id, Listen_Yes);
        }
    }
}
 

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
Вот обрезанный, только-что тестил на сервере, игрок который напишет, ему не будет слышно ни чата, ни голосового чата, и сообщения игрок не будет видно другим (он типо в домике)
Оффтоп
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

public OnPluginStart()
{ 
    RegAdminCmd("sm_sm", selfMute, 0,"Mute player by typing");
    RegAdminCmd("sm_su", selfUnmute, 0, "Unmute player by typing");
}

public OnClientPutInServer(client)
{
    new maxplayers = GetMaxClients();
    for (new id = 1; id <= maxplayers ; id++){
        if (id != client && IsClientInGame(id)){
            SetListenOverride(id, client, Listen_Yes);
        }
    }
}

public Action:selfMute(client, args)
{
    new maxplayers = GetMaxClients();
    for (new id = 1; id <= maxplayers ; id++){
        if (id != client && IsClientInGame(id)){
            SetListenOverride(client, id, Listen_No);
        }
    }
}

public Action:selfUnmute(client, args)
{
    new maxplayers = GetMaxClients();
    for (new id = 1; id <= maxplayers ; id++){
        if (id != client && IsClientInGame(id)){
            SetListenOverride(client, id, Listen_Yes);
        }
    }
}
а по адекватнее решение есть без циклов? нашел такое
SetClientListeningFlags(client, SPEAK_MUTED);

SetClientListeningFlags(client, SPEAK_NORMAL);
Это что делает?
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
а по адекватнее решение есть без циклов? нашел такое
SetClientListeningFlags(client, SPEAK_MUTED);

SetClientListeningFlags(client, SPEAK_NORMAL);
Это что делает?
Подредактируй, когда сделаю уже полноценный, залью его в ресурсы.
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
new sm[MAXPLAYERS+1];
new maxplayers;
#include <colors>

public OnPluginStart()
{  
    RegAdminCmd("sm_sm", selfMute, 0,"Mute player by typing");
}
// Фиск, ибо если не делать, и если игрок пропишет !sm, то ему все игроки размутяться, вместо того, что бы замутиться
public OnClientPutInServer(client)
{
    FakeClientCommand(client, "sm_sm");
}

public Action:selfMute(client, args)
{
      maxplayers = GetMaxClients();
    if (sm[client])
    {
        for (new id = 1; id <= maxplayers; id++)
        {
            if (IsClientInGame(id) && id != client)
            {
                SetListenOverride(client, id, Listen_No);
            }
        }      
        CPrintToChat(client, "{lime}[KTM] {darkred}Вы выключили чат");
        sm[client] = false;
    }
    else{
        for (new id = 1; id <= maxplayers; id++)
        {
            if (IsClientInGame(id) && id != client)
            {
                SetListenOverride(client, id, Listen_Yes);
            }
        }
        CPrintToChat(client, "{lime}[KTM] {green}Вы включили чат");
        sm[client] = true;
    }
}
 

Вложения

  • colors.inc
    25.3 КБ · Просмотры: 4
Сверху Снизу