Контакты Поиск

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Уроки 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);


Код
name - имя переменной
hasMin - будет ли она иметь минимальное значение
min - если да, то какое
bool:hasMax - будет ли она иметь максимальное значение
Float:max - если да, то какое


Самое главное это два первых параметра: 'name' и 'значение', остальное не обязательно.

Код
public OnPluginStart()
{
     CreateConVar("x", "1");      
     CreateConVar("y", "7.5");      
     CreateConVar("nick", "kot");

     GetVars1();
}

GetVars1()
{
    new Handle:h = FindConVar("x");
    new x = h ? GetConVarInt(h) : 0;

    new Float:y = (h = FindConVar("y")) ? GetConVarFloat(h) : 0.0;

    decl String:nick[32];
    if ((h = FindConVar("nick"))) {
        GetConVarString(h, nick, sizeof(nick));
    }
    else {
        nick[0] = 0;
    }

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

    GetVars2();
}

GetVars2()
{
    // Меняем значения
    SetConVarInt(FindConVar("x"), 3); // Здесь тоже нужно проверять был ли найден cvar, но для теста пишем так.
    SetConVarFloat(FindConVar("y"), 3.0);
    SetConVarString(FindConVar("nick"), "tod");

    // Показываем новые
    new x = GetConVarInt(FindConVar("x"));
    new Float:y = GetConVarFloat(FindConVar("y"));
    decl String:nick[32];
    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 = kot
GetVars2:
x = 3, y = 3.0, nick = tod


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

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

Код
new Handle:g_hVar;

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

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


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

Код
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
Сообщений: 142
Репутация: 1 [ +/- ]
В каких случаях лучше использовать ServerCommand или SetConVar*
 
TEIN Дата: Среда, 22.01.2014, 19:33:18 | Сообщение # 4
Сообщений: 568
Репутация: 78 [ +/- ]
С помощью SetConVar* можно скрыть уведомление о смене переменной
 
Vitaminoz Дата: Среда, 22.01.2014, 19:42:35 | Сообщение # 5
Сообщений: 142
Репутация: 1 [ +/- ]
А больше различий нету ?
Например что быстрее реагирует и прочее.
 
www22 Дата: Воскресенье, 09.06.2019, 18:47:45 | Сообщение # 6
Сообщений: 64
Репутация: -1 [ +/- ]
_wS_, у меня какая то проблема непонятная , почему то измененный конфиг , подхватывается со второй карты, после запуска сервера, то есть после смены карты. Мож есть какая тонкость , чтоб новый конфиг сразу после запуска подхватывался ?
Вот пример кода :
Код

public OnPluginStart()
{
    CreateConVar("sm_dod_xlog_version", PLUGIN_VERSION, "Extra weapon logging info version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
Здесь переменные созданные через CreateConVar

    HookEvent("dod_stats_player_damage", PlayerDamageEvent);
    
    AutoExecConfig(true, "pt_xlog_overlays_v2")
}

Да и есть один момент , там строчки связанны с материалы(vmt,vtf), мож это как то влияет на этот глюк ..

И Вот это немного не понятно : 2.
Цитата _wS_ ()
ServerCommand("exec xz.cfg");

Если конфиг у меня создается в "cfg/sourcemod" , нужно писать папку "cfg/" в команду на вызов конфига ?
А то думал мож ниже добавить ServerCommand , или же надо вообще в другом блоке это делать ?


Сообщение отредактировал www22 - Воскресенье, 09.06.2019, 18:49:55
 
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Серверные Переменные (Как создать, получить, изменить)
  • Страница 1 из 1
  • 1
Поиск: