Перейти к содержимому


Фотография

Вопрос по плагину для привязки ника к Steam ID (я в тупике)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 1scull1

1scull1

    Новичок

  • Пользователь
  • Pip
  • 3 сообщений

Отправлено 12 Октябрь 2022 - 5:43

Всем привет, если есть те, кто может помочь, буду благодарен.
Начну с того что надо: Клиент "steam id" "ник"  "команда" которого указаны в const_name.ini заходит на сервер, ник указанный в файле устанавливается игроку, название команды устанавливается префиксом. Так же хочу, чтобы если у игрока совпадает название команды из файла с названием одной из команд в игре, этот игрок сразу без выбора попадает в эту команду. Если указано в формате "Steam ID" "ник" и без команды, он попадает в спектров. Так же необходимо, чтобы если отсутствует Steam ID игрока в файле, то игрока не пускает на сервер.
Описание того, что пытался делать и что получалось, и соответственно проблем:
Присутствует файл const_name.ini следующего вида
"SteamId" "Nick" "Team Name"
Необходимо, чтобы клиент который указан в этом файле мог заходить на сервер и если его Steamm Id совпадает с тем, что в файле он дает ему имя на сервере, указанное в файле, и применяет к нему так же префикс с названием команды. Реализовано было вот так. (В public void OnClientPutInServer(int client)).

#pragma semicolon 1


#define DEBUG

#define PLUGIN_AUTHOR "JDie-"
#define PLUGIN_VERSION "1.00"

#include <sourcemod>
#include <sdktools>
#include <cstrike>


#pragma newdecls required

ConVar sm_removemessages_changename;
bool changename;

public Plugin myinfo = 
{
	name = "Changer Names",
	author = PLUGIN_AUTHOR,
	description = "",
	version = PLUGIN_VERSION,
	url = ""
};


public void OnPluginStart()
{
	sm_removemessages_changename = CreateConVar("sm_removemessages_changename",       "1",            "[(1)Вкл/(0)Выкл] Удаление сообщений о смене ников.", _, true, 0.0, true, 1.0);
	
	HookUserMessage(GetUserMessageId("SayText2"), SayText2, true);

	//HookEvent("player_connect", eV_player_connect);
	
	AutoExecConfig(true, "remove_messages", "sourcemod");
	
	RegConsoleCmd("sm_test", TestNameChanger);
	
	

}

public void OnConfigsExecuted()
{
	changename = sm_removemessages_changename.BoolValue;
}

public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{
	if (convar == sm_removemessages_changename)
    {
        changename = convar.BoolValue;
    }
}

public Action SayText2(UserMsg msg_id, Handle bf, players[], int playersNum, bool reliable, bool init)
{
    if(changename)
	{
        if(!reliable)
        {
            return Plugin_Continue;
        }

        char buffer[25];

        if(GetUserMessageType() == UM_Protobuf)
        {
            PbReadString(bf, "msg_name", buffer, sizeof(buffer));

            if(StrEqual(buffer, "#Cstrike_Name_Change"))
            {
                return Plugin_Handled;
            }
        }
    }
    return Plugin_Continue;
}

public void OnClientPutInServer(int client)
{
	char s_SteamId[64];
	char g_Filename[255];
	
	GetClientAuthId(client, AuthId_Steam2, s_SteamId, sizeof(s_SteamId));
	
	BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/constant_names.ini");

	File file = OpenFile(g_Filename, "rt");
	while (!file.EndOfFile())
	{
		char line[255];
		if (!file.ReadLine(line, sizeof(line)))
			break;
		
		//Trim comments
		int len = strlen(line);
		bool ignoring = false;
		for (int i=0; i<len; i++)
		{
			if (ignoring)
			{
				if (line[i] == '"')
					ignoring = false;
			} else {
				if (line[i] == '"')
				{
					ignoring = true;
				} else if (line[i] == ';') {
					line[i] = '\0';
					break;
				} else if (line[i] == '/'
							&& i != len - 1
							&& line[i+1] == '/')
				{
					line[i] = '\0';
					break;
				}
			}
		}

		TrimString(line);
		
		if ((line[0] == '/' && line[1] == '/')
			|| (line[0] == ';' || line[0] == '\0'))
		{
			continue;
		}
		
		int idx, cur_idx;
		char auth[64];
		if ((cur_idx = BreakString(line, auth, sizeof(auth))) == -1)
		{
			return;
		}
		idx = cur_idx;
		char nickname[MAX_NAME_LENGTH];
		char f_SteamID[64];
		char newTag[12];
		char info[40];
		char teamCT[12], teamT[12];

		BreakString(line, f_SteamID, sizeof(f_SteamID));

		cur_idx = BreakString(line[idx], nickname, sizeof(nickname));
		idx += cur_idx;

		BreakString(line[idx], newTag, sizeof(newTag));
		GetTeamName(3, teamCT, 12);
		GetTeamName(2, teamT, 12);
		
		//CreateTimer(1.0, TestTimer, client, TIMER_FLAG_NO_MAPCHANGE);
		
		if (!strcmp(s_SteamId, f_SteamID, true))
		{
			SetClientName(client, nickname);
			FormatEx(info, sizeof(info), "%s", newTag);
			CS_SetClientClanTag(client, info);
		}
	}
	
	file.Close();
	
}

/*public Action TestTimer(Handle timer, any client)
{
	char teamCT[12], teamT[12];
	char tag[12];
	char newTag[12];
	char info[40];
	
	GetTeamName(3, teamCT, 12);
	GetTeamName(2, teamT, 12);
	tag = "Underdogs";
	newTag = "test";
	if (!strcmp(teamCT, tag, true))
		{
			ChangeClientTeam(client, 2);
			FormatEx(info, sizeof(info), "%t", "REPLAY", newTag);
			CS_SetClientClanTag(client, info);
		} else {
			ChangeClientTeam(client, 3);
			FormatEx(info, sizeof(info), "%t", "REPLAY", tag);
			CS_SetClientClanTag(client, info);
}*/
 
В коде в виде закоменченных  //CreateTimer(1.0, TestTimer, client, TIMER_FLAG_NO_MAPCHANGE); и /*public Action TestTimer(Handle timer, any client) ... */ находится то, через что я пытался сделать установку префикса игрокам, но как только применялся префикс тестовый из кода, он через пару секунд пропадал, пытался реализовать в public void OnClientPutInServer(int client) установку префикса, вообще не менялся он у игроков. Пытался реализовать перекидывания игрока в команду с определенным именем через FindTeamByName(const char[] name), но если я передаю в FindTeamByName переменную команды он отдает -1, т.е. из описания функции "-1" это не найдена команда, в данной случае, есть я давал команде CT имя "Test" а в файле название команды игрока было "Test", то получал "-1" вместо "Test". Если эта команда выдает не название "Test", а значение "0" при успешном выполнении, то все равно не получается. В любых случаях "-1", кроме случая если я не передаю в FindTeamByName СЕ или T, тогда все ок.
Уже голову поломал как сделать установку префикса, почему он не устанавливается. Как кидать игрока только в ту команду, у которой указано то же название команды, что и у него в файле.
Заранее спасибо, если кто-то сможет хотя бы с чем-то помочь. Просто если делаю одно, умирает второе и наоборот.
 
UPD:
Пытался еще через OnClientConnected реализовать присвоение префикса очень хорошо работает, но на ботах. Игрокам так же не выдает префиксов

Сообщение отредактировал 1scull1: 15 Октябрь 2022 - 7:15


#2 Kakoin

Kakoin

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 8 969 сообщений

Отправлено 14 Октябрь 2022 - 17:14

Всем привет, если есть те, кто может помочь, буду благодарен.
Начну с того что надо: Клиент "steam id" "ник"  "команда" которого указаны в const_name.ini заходит на сервер, ник указанный в файле устанавливается игроку, название команды устанавливается префиксом. Так же хочу, чтобы если у игрока совпадает название команды из файла с названием одной из команд в игре, этот игрок сразу без выбора попадает в эту команду. Если указано в формате "Steam ID" "ник" и без команды, он попадает в спектров. Так же необходимо, чтобы если отсутствует Steam ID игрока в файле, то игрока не пускает на сервер.
Описание того, что пытался делать и что получалось, и соответственно проблем:
Присутствует файл const_name.ini следующего вида

Скрытый текст


А зачем ты каждый раз при входе делаешь BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/constant_names.ini"); ? Это делается один раз при плагина.

File file = OpenFile(g_Filename, "rt"); вроде тоже можно в глобальную переменную засунуть

В твоем примере указана привязать по steamid вида 32 (STEAM_x:y:z) Как ты записываешь это в файле ?

Идея конечно прикольная но на этапе разработке будет куча проблем, к примеру: с закрытием окна выбора команды игроку.

P.s вообще по хорошему тебе лучше написать на форму где сидят скриптеры sourcemod

#3 1scull1

1scull1

    Новичок

  • Пользователь
  • Pip
  • 3 сообщений

Отправлено 14 Октябрь 2022 - 19:35

А зачем ты каждый раз при входе делаешь BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/constant_names.ini"); ? Это делается один раз при плагина.

File file = OpenFile(g_Filename, "rt"); вроде тоже можно в глобальную переменную засунуть

В твоем примере указана привязать по steamid вида 32 (STEAM_x:y:z) Как ты записываешь это в файле ?

Идея конечно прикольная но на этапе разработке будет куча проблем, к примеру: с закрытием окна выбора команды игроку.

P.s вообще по хорошему тебе лучше написать на форму где сидят скриптеры sourcemod

Да, пока ждал ответа уже разобрался с BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/constant_names.ini"); и т.д. Это все уже делается не при каждом заходе. Сделал разрешение входа тем кто в списке, даю им имя и тег. Теперь понять пытаюсь как получить название команды T и CT. Например название CT пусть будет "Cat", а у T "Lost". Не могу получить название команды, чтобы кидать игрока в ту команду, которая указана у него в файле. GetTeamName выдает всегда CT или TERRORIST.



#4 Kakoin

Kakoin

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 8 969 сообщений

Отправлено 14 Октябрь 2022 - 19:43

Да, пока ждал ответа уже разобрался с BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/constant_names.ini"); и т.д. Это все уже делается не при каждом заходе. Сделал разрешение входа тем кто в списке, даю им имя и тег. Теперь понять пытаюсь как получить название команды T и CT. Например название CT пусть будет "Cat", а у T "Lost". Не могу получить название команды, чтобы кидать игрока в ту команду, которая указана у него в файле. GetTeamName выдает всегда CT или TERRORIST.

А можно ещё понятнее объяснить? Я вот лично ничего не понял. 



#5 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 15 Октябрь 2022 - 15:01

 

Всем привет, если есть те, кто может помочь, буду благодарен.
Начну с того что надо: Клиент "steam id" "ник"  "команда" которого указаны в const_name.ini заходит на сервер, ник указанный в файле устанавливается игроку, название команды устанавливается префиксом. Так же хочу, чтобы если у игрока совпадает название команды из файла с названием одной из команд в игре, этот игрок сразу без выбора попадает в эту команду. Если указано в формате "Steam ID" "ник" и без команды, он попадает в спектров. Так же необходимо, чтобы если отсутствует Steam ID игрока в файле, то игрока не пускает на сервер.
Описание того, что пытался делать и что получалось, и соответственно проблем:
Присутствует файл const_name.ini следующего вида
"SteamId" "Nick" "Team Name"
Необходимо, чтобы клиент который указан в этом файле мог заходить на сервер и если его Steamm Id совпадает с тем, что в файле он дает ему имя на сервере, указанное в файле, и применяет к нему так же префикс с названием команды. Реализовано было вот так. (В public void OnClientPutInServer(int client)).

#pragma semicolon 1


#define DEBUG

#define PLUGIN_AUTHOR "JDie-"
#define PLUGIN_VERSION "1.00"

#include <sourcemod>
#include <sdktools>
#include <cstrike>


#pragma newdecls required

ConVar sm_removemessages_changename;
bool changename;

public Plugin myinfo = 
{
	name = "Changer Names",
	author = PLUGIN_AUTHOR,
	description = "",
	version = PLUGIN_VERSION,
	url = ""
};


public void OnPluginStart()
{
	sm_removemessages_changename = CreateConVar("sm_removemessages_changename",       "1",            "[(1)Вкл/(0)Выкл] Удаление сообщений о смене ников.", _, true, 0.0, true, 1.0);
	
	HookUserMessage(GetUserMessageId("SayText2"), SayText2, true);

	//HookEvent("player_connect", eV_player_connect);
	
	AutoExecConfig(true, "remove_messages", "sourcemod");
	
	RegConsoleCmd("sm_test", TestNameChanger);
	
	

}

public void OnConfigsExecuted()
{
	changename = sm_removemessages_changename.BoolValue;
}

public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{
	if (convar == sm_removemessages_changename)
    {
        changename = convar.BoolValue;
    }
}

public Action SayText2(UserMsg msg_id, Handle bf, players[], int playersNum, bool reliable, bool init)
{
    if(changename)
	{
        if(!reliable)
        {
            return Plugin_Continue;
        }

        char buffer[25];

        if(GetUserMessageType() == UM_Protobuf)
        {
            PbReadString(bf, "msg_name", buffer, sizeof(buffer));

            if(StrEqual(buffer, "#Cstrike_Name_Change"))
            {
                return Plugin_Handled;
            }
        }
    }
    return Plugin_Continue;
}

public void OnClientPutInServer(int client)
{
	char s_SteamId[64];
	char g_Filename[255];
	
	GetClientAuthId(client, AuthId_Steam2, s_SteamId, sizeof(s_SteamId));
	
	BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/constant_names.ini");

	File file = OpenFile(g_Filename, "rt");
	while (!file.EndOfFile())
	{
		char line[255];
		if (!file.ReadLine(line, sizeof(line)))
			break;
		
		//Trim comments
		int len = strlen(line);
		bool ignoring = false;
		for (int i=0; i<len; i++)
		{
			if (ignoring)
			{
				if (line[i] == '"')
					ignoring = false;
			} else {
				if (line[i] == '"')
				{
					ignoring = true;
				} else if (line[i] == ';') {
					line[i] = '\0';
					break;
				} else if (line[i] == '/'
							&& i != len - 1
							&& line[i+1] == '/')
				{
					line[i] = '\0';
					break;
				}
			}
		}

		TrimString(line);
		
		if ((line[0] == '/' && line[1] == '/')
			|| (line[0] == ';' || line[0] == '\0'))
		{
			continue;
		}
		
		int idx, cur_idx;
		char auth[64];
		if ((cur_idx = BreakString(line, auth, sizeof(auth))) == -1)
		{
			return;
		}
		idx = cur_idx;
		char nickname[MAX_NAME_LENGTH];
		char f_SteamID[64];
		char newTag[12];
		char info[40];
		char teamCT[12], teamT[12];

		BreakString(line, f_SteamID, sizeof(f_SteamID));

		cur_idx = BreakString(line[idx], nickname, sizeof(nickname));
		idx += cur_idx;

		BreakString(line[idx], newTag, sizeof(newTag));
		GetTeamName(3, teamCT, 12);
		GetTeamName(2, teamT, 12);
		
		//CreateTimer(1.0, TestTimer, client, TIMER_FLAG_NO_MAPCHANGE);
		
		if (!strcmp(s_SteamId, f_SteamID, true))
		{
			SetClientName(client, nickname);
			FormatEx(info, sizeof(info), "%s", newTag);
			CS_SetClientClanTag(client, info);
		}
	}
	
	file.Close();
	
}

/*public Action TestTimer(Handle timer, any client)
{
	char teamCT[12], teamT[12];
	char tag[12];
	char newTag[12];
	char info[40];
	
	GetTeamName(3, teamCT, 12);
	GetTeamName(2, teamT, 12);
	tag = "Underdogs";
	newTag = "test";
	if (!strcmp(teamCT, tag, true))
		{
			ChangeClientTeam(client, 2);
			FormatEx(info, sizeof(info), "%t", "REPLAY", newTag);
			CS_SetClientClanTag(client, info);
		} else {
			ChangeClientTeam(client, 3);
			FormatEx(info, sizeof(info), "%t", "REPLAY", tag);
			CS_SetClientClanTag(client, info);
}*/
 
В коде в виде закоменченных  //CreateTimer(1.0, TestTimer, client, TIMER_FLAG_NO_MAPCHANGE); и /*public Action TestTimer(Handle timer, any client) ... */ находится то, через что я пытался сделать установку префикса игрокам, но как только применялся префикс тестовый из кода, он через пару секунд пропадал, пытался реализовать в public void OnClientPutInServer(int client) установку префикса, вообще не менялся он у игроков. Пытался реализовать перекидывания игрока в команду с определенным именем через FindTeamByName(const char[] name), но если я передаю в FindTeamByName переменную команды он отдает -1, т.е. из описания функции "-1" это не найдена команда, в данной случае, есть я давал команде CT имя "Test" а в файле название команды игрока было "Test", то получал "-1" вместо "Test". Если эта команда выдает не название "Test", а значение "0" при успешном выполнении, то все равно не получается. В любых случаях "-1", кроме случая если я не передаю в FindTeamByName СЕ или T, тогда все ок.
Уже голову поломал как сделать установку префикса, почему он не устанавливается. Как кидать игрока только в ту команду, у которой указано то же название команды, что и у него в файле.
Заранее спасибо, если кто-то сможет хотя бы с чем-то помочь. Просто если делаю одно, умирает второе и наоборот.
 
UPD:
Пытался еще через OnClientConnected реализовать присвоение префикса очень хорошо работает, но на ботах. Игрокам так же не выдает префиксов

 

Используйте OnClientPostAdminCheck место OnClientPutInServer!
Так как в OnClientPutInServer игрок регистрируется ещё без STEAM ID. А в OnClientPostAdminCheck уже получены эти данные

 

int iTeam = event.GetInt("team");
switch (iTeam)
{
     case 1: Афк
     case 2: CT //(могу ошибаться)
     case 3: T  //(могу ошибаться)
}

Сообщение отредактировал dr_lex: 15 Октябрь 2022 - 15:09


#6 1scull1

1scull1

    Новичок

  • Пользователь
  • Pip
  • 3 сообщений

Отправлено 15 Октябрь 2022 - 18:08

 

Используйте OnClientPostAdminCheck место OnClientPutInServer!
Так как в OnClientPutInServer игрок регистрируется ещё без STEAM ID. А в OnClientPostAdminCheck уже получены эти данные

 

int iTeam = event.GetInt("team");
switch (iTeam)
{
     case 1: Афк
     case 2: CT //(могу ошибаться)
     case 3: T  //(могу ошибаться)
}

Спасибо за совет учту, уже пока ждал ответа все что мне необходимо смог сделать, разобрался. Отмучался так сказать. Пришлось не спать ночами, но я добил все это дерьмо xD. Всем кто пытался помочь спасибо, все равно.



#7 Kakoin

Kakoin

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 8 969 сообщений

Отправлено 15 Октябрь 2022 - 20:31

int iTeam = event.GetInt("team");
switch (iTeam)
{
     case 1: Афк
     case 2: CT //(могу ошибаться)
     case 3: T  //(могу ошибаться)
}

#define CS_TEAM_NONE        0   /**< No team yet. */
#define CS_TEAM_SPECTATOR   1   /**< Spectators. */
#define CS_TEAM_T           2   /**< Terrorists. */
#define CS_TEAM_CT          3   /**< Counter-Terrorists. */



#8 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 16 Октябрь 2022 - 9:27

#define CS_TEAM_NONE        0   /**< No team yet. */
#define CS_TEAM_SPECTATOR   1   /**< Spectators. */
#define CS_TEAM_T           2   /**< Terrorists. */
#define CS_TEAM_CT          3   /**< Counter-Terrorists. */


Я же пометил что могу ошибаться, так как я не держу CS сервера) Но другим кто будет искать такое думаю будет полезно =)
 
 

 

 

 

Используйте OnClientPostAdminCheck место OnClientPutInServer!
Так как в OnClientPutInServer игрок регистрируется ещё без STEAM ID. А в OnClientPostAdminCheck уже получены эти данные

 

int iTeam = event.GetInt("team");
switch (iTeam)
{
     case 1: Афк
     case 2: CT //(могу ошибаться)
     case 3: T  //(могу ошибаться)
}

Спасибо за совет учту, уже пока ждал ответа все что мне необходимо смог сделать, разобрался. Отмучался так сказать. Пришлось не спать ночами, но я добил все это дерьмо xD. Всем кто пытался помочь спасибо, все равно.

 

Я редко смотрю темы других игр, так как держатель l4d2 сервера.

Мне обратились с помощью с кодом на основе этого) По этому решил ответить и тут.

В плане принудительно выбора команды. Я бы сделал базу на основе KeyValues и там уже перенаправлял игрока и проверял попытки его смены примерно так)

 

#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required

char sg_file[160];

int ig_player[MAXPLAYERS+1];

public void OnPluginStart()
{
	HookEvent("player_team", Event_PlayerTeam);
	
	BuildPath(Path_SM, sg_file, sizeof(sg_file)-1, "data/reserveteam.txt");
}

public void Event_PlayerTeam(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(event.GetInt("userid"));
	if (client)
	{
		int iTeam = event.GetInt("team");
		if (iTeam != ig_player[client])
		{
			ChangeClientTeam(client, ig_player[client]);
		}
	}
}

public void OnClientPostAdminCheck(int client)
{
	if (!IsFakeClient(client))
	{
		CreateTimer(5.0, TimerClientList, client, TIMER_FLAG_NO_MAPCHANGE);
	}
}

public Action TimerClientList(Handle timer, any client)
{
	if (IsClientInGame(client))
	{
		if (GetClientTeam(client) == 2)
		{
			KeyValues hGM = new KeyValues("data");
			hGM.ImportFromFile(sg_file);
			
			char s1[32];
			GetClientAuthId(client, AuthId_Steam2, s1, sizeof(s1)-1);
			
			if (hGM.JumpToKey(s1))
			{
				ig_player[client] = hGM.GetNum("team", 0);
				
				ChangeClientTeam(client, ig_player[client]);
			}
			delete hGM;
		}
	}
	return Plugin_Stop;
}

+ если нужно было мне добавить нужный ник игрока, я бы добавил уже в готовую базу  в эту. И при проверки Steam id игрока на команду брало бы и ник который нужен

Код как пример, учитывая разные игры может на CS это по другому нужно)


Сообщение отредактировал dr_lex: 16 Октябрь 2022 - 9:37


#9 Kakoin

Kakoin

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 8 969 сообщений

Отправлено 16 Октябрь 2022 - 11:56

Я же пометил что могу ошибаться, так как я не держу CS сервера) Но другим кто будет искать такое думаю будет полезно =)


Ну так я же без претензий. Просто поправил.
 
 

Я редко смотрю темы других игр, так как держатель l4d2 сервера.

Мне обратились с помощью с кодом на основе этого) По этому решил ответить и тут.

В плане принудительно выбора команды. Я бы сделал базу на основе KeyValues и там уже перенаправлял игрока и проверял попытки его смены примерно так)

Скрытый текст

+ если нужно было мне добавить нужный ник игрока, я бы добавил уже в готовую базу  в эту. И при проверки Steam id игрока на команду брало бы и ник который нужен

Код как пример, учитывая разные игры может на CS это по другому нужно)

 

 

Ну и опять же остается вопрос с блокировкой меню выбора команды (интерфейс). Я вижу что многие пытались это сделать, но получилось или нет непонятно.


Сообщение отредактировал Kakoin: 16 Октябрь 2022 - 11:59


#10 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 16 Октябрь 2022 - 15:15

Ну так я же без претензий. Просто поправил.
 
 

 

Ну и опять же остается вопрос с блокировкой меню выбора команды (интерфейс). Я вижу что многие пытались это сделать, но получилось или нет непонятно.

По идеи в моем коде идет автовыбор, и если будет попытка изменить команду это не должно получится, так как событие player_team срабатывает каждый раз когда делается смена команды.

Но по идеи можно сделать так

 

public void OnPluginStart()
{
    AddCommandListener(OnJointeam, "jointeam");
}

public Action OnJointeam(int client, const char[] command, int argc)
{
    return Plugin_Stop;
}

Без тестов это сложно узнать, если это кто-то проверит то дайте знать. Думаю это будет полено многим


Сообщение отредактировал dr_lex: 16 Октябрь 2022 - 15:16


#11 Kakoin

Kakoin

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 8 969 сообщений

Отправлено 16 Октябрь 2022 - 15:32

По идеи в моем коде идет автовыбор, и если будет попытка изменить команду это не должно получится, так как событие player_team срабатывает каждый раз когда делается смена команды.

Но по идеи можно сделать так
 

public void OnPluginStart()
{
    AddCommandListener(OnJointeam, "jointeam");
}

public Action OnJointeam(int client, const char[] command, int argc)
{
    return Plugin_Stop;
}

Без тестов это сложно узнать, если это кто-то проверит то дайте знать. Думаю это будет полено многим

Было бы все так легко... 


Этим ты заблочил команду, а само окно выбора команды - нет. 



#12 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 16 Октябрь 2022 - 23:52

Было бы все так легко... 


Этим ты заблочил команду, а само окно выбора команды - нет. 

Так авто-выбор команды сработал, или окно не пропадает после ChangeClientTeam ?



#13 Kakoin

Kakoin

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 8 969 сообщений

Отправлено 17 Октябрь 2022 - 6:20

Так авто-выбор команды сработал, или окно не пропадает после ChangeClientTeam ?

Как точно код отработает я не могу сказать, нужно проверять. 


  • dr_lex это нравится


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных