[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Серверные Переменные (Как создать, получить, изменить)
Серверные Переменные
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 так: 

Код
x "1"
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Серверные Переменные (Как создать, получить, изменить)
  • Страница 1 из 1
  • 1
Поиск: