root | Дата: Воскресенье, 03.02.2013, 01:59 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
| Создают переменные обычно сразу же после включение скрипта (событие 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);
Код bool:hasMin - будет ли ConVar имеет минимальное значение Float:min - минимально допустимое значение ConVar'а, если hasMin true bool:hasMax - будет ли ConVar имеет максимальное значение Float:max - максимально допустимое значение ConVar'а, если hasMax true
Флаги:
Код #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, например, пароль.
Пример:
Код #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); }
В результате должно выдать:
Код 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"), создайте глобальную переменную:
Код #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);
Код replicate - Если true, то новое значение ConVar будет установлено на всех клиентах. Это будет работать только если ConVar имеет FCVAR_REPLICATED флаг и если такой клиентский cvar существует.
notify - Если true, то клиенты будут уведомлены, что ConVar изменился. Это будет работать только если ConVar имеет FCVAR_NOTIFY флаг.
Можете создать файл cstrike/cfg/xz.cfg с вашими переменными, и после того, как они были созданы (CreateConVar) в вашем скрипте, сделать: ServerCommand("exec xz.cfg"); чтобы изменить значения на те, что в вашем xz.cfg.
CreateConVar("x", "1"); выглядит в файле .cfg так:
|
|
| |