Иконка ресурса

[VIP] Free SWAP 1.3.0

hanson

Участник
Сообщения
303
Реакции
15
TolikCorp, очень прошу вас ввести команду, при написании в чат котрой будет производиться перемещение в наблюдатели, например !spec

Добавлено через 4 минуты
R1KO, быть может вы сможете это реализовать? Очень полезная вещь, ибо в кс го, чтобы зайти за наблюдателей приходится делать лишние телодвижения. Очень надеюсь на вашу помощь.
 
Последнее редактирование:

hanson

Участник
Сообщения
303
Реакции
15
AlmazON, спасибо тебе большое. Как всегда, спасаешь.

Такой вопрос
C-подобный:
	RegConsoleCmd("[B]sm_swap[/B]", Command_Swap);
	RegConsoleCmd("[B]sm_spec[/B]", Command_Spec);

я так понимаю, эти команды можно изменить на свои, например, sm_tm и sm_sp?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #23
переписал плагин, выложу сначала в теме для теста. Потом тут обновлю.

hanson, можно
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #24
AlmazON, админы тут вообще не при чем. Но видимо прийдется добавить.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #25
AlmazON, это всё есть. Вот только нет форварда удаления випа. Сделаю в обнове.

Но для постоянной вроверки есть натив:

PHP:
/**
 *	Получает наличие VIP прав у игрока.
 *	-
 * @param iClient			Индекс игрока для проверки.
 *	-
 * @return	Возвращает true в случае если у игрока имеются VIP права, иначе false.
*/
native bool:VIP_IsClientVIP(iClient);
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
native bool:VIP_IsClientVIP(iClient);
Не, это итак применяется.
нет форварда удаления випа
Вот, чтобы обратный вызов приходил, когда игрок получает VIP или он у него истёк/отобран. А не этой проверкой... Я бы тогда спокойно приравнял VIPа с админом к true в массиве, обойдясь всего 1 общей проверкой.
Очень оптимально, когда условия для прав плагина 2 и более, как здесь.
Так, что ли?
PHP:
new bool:g_bAccess[MAXPLAYERS+1];

public OnClientPostAdminCheck(client) g_bAccess[client] = GetUserFlagBits(client) & ADMFLAG_ROOT ? true:false;

public VIP_OnVIPClientLoaded(client) g_bAccess[client] = true;
public VIP_OnVIPClientExpired(client) g_bAccess[client] = false;
Больше ничего не нашёл.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #27
AlmazON, да, это он.
Только хочу его расиширить.

Вот мой. Допили его. Делаем одну нормальную версию.

PHP:
public OnClientPostAdminCheck(client) g_bAccess[client] = GetUserFlagBits(client) & ADMFLAG_ROOT ? true:false;

Это уже лишний if

public OnClientPostAdminCheck(client) g_bAccess[client] = (IsFakeClient(client) == false && GetUserFlagBits(client) & ADMFLAG_ROOT);

Если будет ругаться на несоответствие тегов просто добавить bool:
 

Вложения

  • VIP_FreeSwapTeam_1.0.1.sp
    1.7 КБ · Просмотры: 22

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #28
Не понял смысла в public Action:Command_JoinTeam(iClient, const String:sCommand[], args) - зачем плагином там вообще манипулировать?
Это свободная смена команды. Ему не будет писать что много людей в команде и т.д.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #29
public OnClientPostAdminCheck(iClient) вызывается до или после public VIP_OnVIPClientLoaded(iClient)?

Сразу после него.

PHP:
#pragma semicolon 1
#include <sourcemod>
#include <vip_core>
#include <sdktools>

public Plugin:myinfo = 
{
	name = "[VIP] FreeSwapTeam",
	author = "R1KO",
	version = "1.0.1"
};

new bool:g_bAccess[MAXPLAYERS+1],
	g_CVAR_iAdminFlag;

public OnPluginStart() 
{
	decl Handle:hCvar, String:sBuffer[32];

	HookConVarChange((hCvar = CreateConVar("sm_vip_fst_admin_flag", "z", "Флаг админа, необходимый чтобы иметь свободную смену команды. (\"\" - Отключено)", FCVAR_PLUGIN)), OnAdminFlagChange);
	GetConVarString(hCvar, sBuffer, sizeof(sBuffer)); 
	g_CVAR_iAdminFlag = ReadFlagString(sBuffer);

	AutoExecConfig(true, "vip_fst", "vip");

	CloseHandle(hCvar);
	
	AddCommandListener(Command_JoinTeam, "jointeam");
	HookEvent("player_say", Event_PlayerSay);
}

public OnAdminFlagChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
	decl i, String:sBuffer[32];
	GetConVarString(hCvar, sBuffer, sizeof(sBuffer)); 
	g_CVAR_iAdminFlag = ReadFlagString(sBuffer);
	
	for (new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i)) OnClientPostAdminCheck(iClient);
	}
}

public OnClientPostAdminCheck(iClient)
{
	if(g_CVAR_iAdminFlag > 0)
	{
		g_bAccess[iClient] = bool:(GetUserFlagBits(iClient) & g_CVAR_iAdminFlag;
		return;
	}
	g_bAccess[iClient] = false;
}

public VIP_OnVIPClientLoaded(iClient) g_bAccess[iClient] = true;
public VIP_OnVIPClientExpired(iClient) g_bAccess[iClient] = false;

public Action:Command_JoinTeam(iClient, const String:sCommand[], args)
{
	if(g_bAccess[iClient] && IsClientInGame(iClient))
	{
		decl String:sTeam[2];
		GetCmdArg(1, sTeam, sizeof(sTeam));
		ChangeClientTeam(iClient, StringToInt(sTeam));

		return Plugin_Stop;
	}

	return Plugin_Continue;
}

public Event_PlayerSay(Handle:hEvent, const String:sEvName[], bool:bDontBroadcast)
{
	decl iClient;
	if(g_bAccess[(iClient = GetClientOfUserId(GetEventInt(hEvent, "userid")))]) 
	{
		decl String:sText[192], iTeam, index;
		GetEventString(hEvent, "text", sText, sizeof(sText));
		index = sText[0] == '!' || sText[0] == '/' 1:0;
		if(strcmp(sText[index], "ct", false) == 0 || strcmp(sText[index], "кт", false) == 0)
		{
			iTeam = 3;
		}
		else if(strcmp(sText[index], "t", false) == 0 || strcmp(sText[index], "т", false) == 0)
		{
			iTeam = 2;
		}
		else if(strcmp(sText[index], "spec", false) == 0 || strcmp(sText[index], "спек", false) == 0)
		{
			iTeam = 1;
		}
		else
		{
			return;
		}
		
		if(iTeam != GetClientTeam(iClient))
		{
			ChangeClientTeam(iClient, iTeam);
		}
		else
		{
			PrintToChat(iClient,"[VIP] Вы уже в этой команде!");
		}
	}
}
 

hanson

Участник
Сообщения
303
Реакции
15
Я один не понимаю при чем тут админы и зачем им давать возможность менять команду, как вип-игрокам?

Добавлено через 3 минуты
или я что-то не так понял?
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #31
hanson, да я сам не понимаю поэтому и сделал возможность отключения этого (точнее включения, т.к. по дефолту отключено)
 

hanson

Участник
Сообщения
303
Реакции
15
R1KO, так зачем же вы тогда это делаете? Ведь это модуль для вип-игроков. Возможность для админов может быть и интересная, но можно ведь сделать это в отдельном плагине, и устанавливать его отдельно от вип-плагина. Зачем путать это все вместе?

Кстати, возможность менять команду и выходить в наблюдатели в помощью команды в чат намного удобнее, ибо в ксго для смены команды сначала нужно выйти в меню, выбрать "Сменить команду" и только потом выбрать... Это же ведь не удобно проводить такие манипуляции.

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #33
decl в массиве и условии хуже, чем new
подробнее и аргументы?


Увлекся тоже им, как я посмотрю)
Просто решил попробывать

Я вот думаю оставить как есть для всех випов или же сделать как везде с выдачей доступа кому нужно.
 

hanson

Участник
Сообщения
303
Реакции
15
R1KO, как знаете, просто объясню, как я себе представляю. Фун-я беспрепятственной смены команды и выхода в наблюдатели очень и очень полезная. НО, в отдельном плагине, с отдельным конфигом для выдачи по флагам или по стим ид. Но вип-модуль он сделан для випов. Зачем перемешивать все в одну кучу? Моя политика такова...
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
А всё начиналось с двадцати простейших строк и одной не корректной проверки...
 

hanson

Участник
Сообщения
303
Реакции
15
Давайте направим авторов на путь истинный.
 

hanson

Участник
Сообщения
303
Реакции
15
AlmazON, я хотел именно тот, где смена команд и переход в наблюдатели производится по команде в чат. Это тот?
 
Сверху Снизу