Глобальная переменная или функция

sith999

Участник
Сообщения
2
Реакции
0
Здравствуйте уважаемые форумчани.
Мне требуется помощь в объявлении глобальной переменной или функции.
Суть такова.
Сделал плагин авторизации из бд. В данном плагине есть переменная,которая объявлена перед всеми функциями
PHP:
/* Plugin Template generated by Pawn Studio */

#include <sourcemod>

new Bool:IsClientLogin[MAXPLAYERS] //Переменная для проверки авторизации
new IsClientTryL[MAXPLAYERS]

public OnClientConnectd(client)
{
	IsClientLogin[client] = false;
	IsClientTryL[client] = 0;
}
Теперь мне нужно сделать ее доступной для остальных плагинов. В них будет проверка на 'IsClientLogin'
Я нашел,при поиске, что это можно сделать через NameFile.inc.И через 'Консольные переменные'.Но это не то,наверное.
NameFile.inc - я не понял как через это можно сделать,если там все стоковое(т.е. менять нельзя).
'Консольные переменные' - Это вариант к которому я склоняюсь.
Но хотел бы узнать у вас как можно это реализовать.
У меня есть вариант через public функцию сделать
PHP:
public GetIsClientLogin(client)
{
	return IsClientLogin[client];
}
Но как подключить этот плагин к другим.
Вообщем жду ваших советов.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
sith999, https://wiki.alliedmods.net/Creating_Natives_(SourceMod_Scripting)

PHP:
public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
{
	CreateNative("IsClientLogin", Native_IsClientLogin);
	return APLRes_Success;
}

public Native_IsClientLogin(Handle:plugin, numParams)
{
	new iClient = GetNativeCell(1);
	if(0 < iClient <= MaxClients && IsClientInGame(iClient))
	{
		return IsClientLogin[iClient];
	}

	ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index (%i)", iClient);
	return false;
}

inc файл

PHP:
native bool:IsClientLogin(iClient);
 

sith999

Участник
Сообщения
2
Реакции
0
R1KO, Что-то нифига не понял."Курил вики,курил видео урок на youtube".Может я не понял,а может и вы не поняли,что мне нужно.
Мне нужно хранить значение переменной пока включен сервер. То есть игрок заходит на сервер.В консоле пишет команду "login nickname password". После этого отправляются запросы в бд. Если такой пользователь найден и пароль совпадает,то значение переменной "IsClientLogin[client] = true", если не найден, то соответственно "IsClientLogin[client] = false". После этого при использовании команды из другого плагина, там должна быть проверка на эту переменную. Если true, то выполняется. Вопрос как раз таки и заключается в передаче это переменной со значением.
Сам плагин реализован, но как переменную передать я не знаю.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
sith999, в плагине, который получает данные из бд и хранит переменную:
PHP:
new bool:g_bIsClientLogin[MAXPLAYERS+1]; // твоя переменная

/*
Тут получаешь из бд и устанавливаешь значения
*/

public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
{
	CreateNative("IsClientLogin", Native_IsClientLogin); // регистрирует глобальную ф-ю

	return APLRes_Success;
}

public Native_IsClientLogin(Handle:plugin, numParams) // Обрабатываем её при вызове
{
/*
Ф-я будет иметь вид bool:IsClientLogin(iClient);
*/
	new iClient = GetNativeCell(1); // получаем 1-й агрумент в ф-и (у нас всего 1)
	if(0 < iClient <= MaxClients && IsClientInGame(iClient)) // проверяем валиден ли игрок
	{
		return g_bIsClientLogin[iClient]; // Возвращаем значение твоей переменной
	}

	ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index (%i)", iClient);
	return false;
}

в inc файл пишем

PHP:
native bool:IsClientLogin(iClient);
Назовем его my_plug.inc

В другом плагине пишем

PHP:
#include <my_plug> // подключам твой inc


// Далее просто в нужный момент проверяем:
if(IsClientLogin(iClient))
{
	// ...
}

Ф-я IsClientLogin(iClient) будет возвращать значение твоей переменной в любом плагине
 
Сверху Снизу