Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 11
Форум » SourceMod - Counter Strike Source && CS GO » Уроки SourceMod (SourcePawn) Скриптинга » Серверные Переменные (Как создать, получить, изменить)
Серверные Переменные
_wS_ Дата: Пятница, 13.01.2012, 23:26:53 | Сообщение # 1
Создают переменные обычно сразу же после включение скрипта (событие OnPluginStart).

native Handle:CreateConVar(const String:name[], const String:значение[], const String:описание[]="", флаги=0, bool:hasMin=false, Float:min=0.0, bool:hasMax=false, Float:max=0.0);

Code
bool:hasMin - будет ли ConVar имеет минимальное значение
Float:min - минимально допустимое значение ConVar'а, если hasMin true
bool:hasMax - будет ли ConVar имеет максимальное значение
Float:max - максимально допустимое значение ConVar'а, если hasMax true


Флаги:

Code
#define FCVAR_NONE   0  /**< The default, no flags at all */
#define FCVAR_UNREGISTERED  (1<<0)    /**< If this is set, don't add to linked list, etc. */
#define FCVAR_LAUNCHER   (1<<1)    /**< Defined by launcher. */
#define FCVAR_GAMEDLL   (1<<2)    /**< Defined by the game DLL. */
#define FCVAR_CLIENTDLL   (1<<3)    /**< Defined by the client DLL. */
#define FCVAR_MATERIAL_SYSTEM    (1<<4)    /**< Defined by the material system. */
#define FCVAR_PROTECTED   (1<<5)    /**< It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value. */
#define FCVAR_SPONLY   (1<<6)    /**< This cvar cannot be changed by clients connected to a multiplayer server. */
#define    FCVAR_ARCHIVE   (1<<7)    /**< Set to cause it to be saved to vars.rc */
#define    FCVAR_NOTIFY   (1<<8)    /**< Notifies players when changed. */
#define    FCVAR_USERINFO   (1<<9)    /**< Changes the client's info string. */
#define FCVAR_PRINTABLEONLY  (1<<10)    /**< This cvar's string cannot contain unprintable characters (e.g., used for player name, etc.) */
#define FCVAR_UNLOGGED   (1<<11)    /**< If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log */
#define FCVAR_NEVER_AS_STRING    (1<<12)    /**< Never try to print that cvar. */
#define FCVAR_REPLICATED  (1<<13)    /**< Server setting enforced on clients. */
#define FCVAR_CHEAT    (1<<14)    /**< Only useable in singleplayer / debug / multiplayer & sv_cheats */
#define FCVAR_STUDIORENDER  (1<<15)    /**< Defined by the studiorender system. */
#define FCVAR_DEMO    (1<<16)    /**< Record this cvar when starting a demo file. */
#define FCVAR_DONTRECORD  (1<<17)    /**< Don't record these command in demo files. */
#define FCVAR_PLUGIN   (1<<18)    /**< Defined by a 3rd party plugin. */
#define FCVAR_DATACACHE   (1<<19)    /**< Defined by the datacache system. */
#define FCVAR_TOOLSYSTEM  (1<<20)    /**< Defined by an IToolSystem library */
#define FCVAR_FILESYSTEM  (1<<21)    /**< Defined by the file system. */
#define FCVAR_NOT_CONNECTED  (1<<22)    /**< Cvar cannot be changed by a client that is connected to a server. */
#define FCVAR_SOUNDSYSTEM  (1<<23)    /**< Defined by the soundsystem library. */
#define FCVAR_ARCHIVE_XBOX  (1<<24)    /**< Cvar written to config.cfg on the Xbox. */
#define FCVAR_INPUTSYSTEM  (1<<25)    /**< Defined by the inputsystem DLL. */
#define FCVAR_NETWORKSYSTEM  (1<<26)    /**< Defined by the network system. */
#define FCVAR_VPHYSICS   (1<<27)    /**< Defined by vphysics. */


Самое главное при создании переменной, это два первых значения 'name' и 'значение' - именно с помощью них создается серверная переменная с каким-то значением (остальные параметры не обязательны).

Например, если установить FCVAR_NOTIFY, то игрокам будет отправлено уведомление, если значение переменной было изменено. FCVAR_NOT_CONNECTED - Cvar не может быть изменен клиентом, который подключен к серверу. FCVAR_PROTECTED - Защищенный Cvar, например, пароль.

Пример:

Code
#include <sourcemod>     

public OnPluginStart()
{
     CreateConVar("x", "1");      
     CreateConVar("y", "7.5");      
     CreateConVar("nick", "wS");

     GetVars1();
}

GetVars1()
{
     new x = GetConVarInt(FindConVar("x"));
     new Float:y = GetConVarFloat(FindConVar("y"));
     decl String:nick[15];
     GetConVarString(FindConVar("nick"), nick, sizeof(nick));

     PrintToServer("GetVars1:");
     PrintToServer("x = %d, y = %.1f, nick = %s", x, y, nick);

     GetVars2();
}

GetVars2()
{
     // Меняем значения
     SetConVarInt(FindConVar("x"), 3);
     SetConVarFloat(FindConVar("y"), 3.0);
     SetConVarString(FindConVar("nick"), "3_wS_3");

     // Показываем новые
     new x = GetConVarInt(FindConVar("x"));
     new Float:y = GetConVarFloat(FindConVar("y"));
     decl String:nick[15];
     GetConVarString(FindConVar("nick"), nick, sizeof(nick));

     PrintToServer("GetVars2:");
     PrintToServer("x = %d, y = %.1f, nick = %s", x, y, nick);
}


В результате должно выдать:

Code
GetVars1:
x = 1, y = 7.5, nick = wS
GetVars2:
x = 3, y = 3.0, nick = 3_wS_3


FindConVar("var") - находит 'var' и возвращает его Handle.
CreateConVar("var", "var_value"); - создает переменную и возвращает её Handle.

Чтобы часто не использовать функцию FindConVar("var"), создайте глобальную переменную:

Code
#include <sourcemod>

new Handle:xzVar = INVALID_HANDLE;

public OnPluginStart()
{
     xzVar = CreateConVar("x", "1");
     go();
}

go
{
     PrintToServer("x = %d", GetConVarInt(xzVar));
     SetConVarInt(xzVar, 9);
     PrintToServer("x = %d", GetConVarInt(xzVar));
}


SetConVarInt(Handle:convar, value, bool:replicate=false, bool:notify=false);

Code
replicate - Если true, то новое значение ConVar будет установлено на всех клиентах. Это будет работать только если ConVar имеет FCVAR_REPLICATED флаг и если такой клиентский cvar существует.

notify - Если true, то клиенты будут уведомлены, что ConVar изменился. Это будет работать только если ConVar имеет FCVAR_NOTIFY флаг.
 
_wS_ Дата: Суббота, 14.01.2012, 00:26:06 | Сообщение # 2
Можете создать файл cstrike/cfg/xz.cfg с вашими переменными, и после того, как они были созданы (CreateConVar) в вашем скрипте, сделать: ServerCommand("exec xz.cfg"); чтобы изменить значения на те, что в вашем xz.cfg.

CreateConVar("x", "1"); выглядит в файле .cfg так:

Code
x "1"
 
Vitaminoz Дата: Среда, 22.01.2014, 19:10:32 | Сообщение # 3
Сообщений: 135
Репутация: 1 [ +/- ]
В каких случаях лучше использовать ServerCommand или SetConVar*
 
TEIN Дата: Среда, 22.01.2014, 19:33:18 | Сообщение # 4
Сообщений: 551
Репутация: 73 [ +/- ]
С помощью SetConVar* можно скрыть уведомление о смене переменной
 
Vitaminoz Дата: Среда, 22.01.2014, 19:42:35 | Сообщение # 5
Сообщений: 135
Репутация: 1 [ +/- ]
А больше различий нету ?
Например что быстрее реагирует и прочее.
 
Форум » SourceMod - Counter Strike Source && CS GO » Уроки SourceMod (SourcePawn) Скриптинга » Серверные Переменные (Как создать, получить, изменить)
Страница 1 из 11
Поиск: