Из константы в cvar

Сообщения
486
Реакции
89
Помог
5 раз(а)
И снова всем Здравствуйте :) Хотел бы узнать, как из
Код:
new const Float:g_health_level[3] = {100.0, 200.0, 300.0}
вывести в виде
Код:
g_health_level[0] = register_cvar("player_health1_cost","1625")
g_health_level[1] = register_cvar("player_health2_cost","3250")
g_health_level[2] = register_cvar("player_health3_cost","6500")
Пытался примерно так:
Код:
new g_health_level[3];
но встал в ступор увидев
Код:
if(cs_get_user_money(id) < g_health_level[iLevel])
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
C++:
if(cs_get_user_money(id) < get_pcvar_num(g_health_level[iLevel]))
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
zhorzh78, ой, забыл дописать
Код:
get_pcvar_num
ошибка именно в том, что при указании
Код:
g_health_level[0] = register_cvar("player_health1_cost","1625")
выводит в чат, что у меня недостаточно $, но при этом, у меня 16000$
17 Окт 2018
Все, разобрался сам, благодарю :)
 
Сообщения
219
Реакции
184
Помог
3 раз(а)
WILL_BE, я извиняюсь, а зачем ты 1. INT сохраняешь в FLOAT. 2. кэшируешь идентификатор квара и думаешь, что там значение квара?
 

AcE

Сообщения
31
Реакции
4
если нужно получить число в нутри g_health_level то sizeof юзай если конкретно то гугл в помощь) тут либо за бабки помогуют либо дают советы одним словом типа sizeof и тогдалее а дальше думай сам) лично мне дали такой совет) я додумал) справишься ли ты))) удачи)
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
gyxoBka, вот так вот теперь плагины и пишет новое поколение) Зачем разбираться что к чему? Ctrl+C Ctrl+V и в паблик)
 
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
Sonyx, зачем объяснять подробно, если можно продать и дать одно слово "намёк", вместо того, чтобы объяснить... ?Это я так вижу.. и это не есть гуд. Словно с барского плеча слово оборонили, а человек даже вопрос правильно поставить не может.

WILL_BE, сомневаюсь, что ты разобрался. AcE, и ты в принципе тоже.

Описываю: Как это должно работать.

Если хотите создать квары, значение которого в любой момент сможете использовать в коде то вам нужно:
1. Создать квар;
2. Сохранить указатель (pointer) созданного квара в переменную (глобальную);
3. Забрать в нужный момент данные из квара по указателю и использовать их.

Это всё, что необходимо.
Квар создать вы можете нативами: register_cvar, create_cvar. Сохранить их указатель - Просто:
Код:
new g_pCvar_1;

punlic plugin_init()
{
    g_pCvar_1 = register_cvar("moy_cvar_1", "12345");
}
Как итог, в глобальную переменную g_pCvar_1 мы сохраняем указатель на квар (список кваров
большой, и чтобы быстро его находить нужные указатели), который в последствии можем использовать.

Указатель - это всего лишь адрес квара в общем списке кваров. Указатель не хранит значения квара. Поэтому, нам прийдётся с этим работать и брать по адресу указателя (pointer'a) значение.

Как это делается:
Код:
{
    if(get_pcvar_num(g_pCvar_1) == 12345)
    {
        server_print("Наш квар содержит значение: 12345");
    }
}
Так как данных кварах у нас могут храниться различные (на самом деле лишь строка, но не об этом сейчас) - то и забирать их нужно разными способами: get_pcvar_num, get_pcvar_float, get_pcvar_string.

p.s: get_pcvar_* расшифровывать как Get pointer-CVar. То есть, получить значение квара по указателю.

Есть ещё get_cvar_* и его применять нужно в весьма специфичных случаях.
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
wopox1337, я сделал так, как понимаю, и все вполне работает :) Думаю, это самое главное
18 Окт 2018
gyxoBka, если можно, то поподробнее :)
18 Окт 2018
Итог примерно такой:
Код:
new g_HEALTHCOST[2]

g_HEALTHCOST[0] = register_cvar("health_cost","1000")
g_HEALTHCOST[1] = register_cvar("health_cost_n","2000")

if(cs_get_user_money(id) < get_pcvar_num(g_HEALTHCOST[iHealthCount]))
{
    client_print_color(id, print_team_default, "%L", id, "ERROR_MONEY", get_pcvar_num(g_HEALTHCOST[iHealthCount]))
    emit_sound(id, 0, error_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
  
    return
}
Далее вывел в cfg
Код:
public plugin_cfg()
{
   new configsdir[128]
   get_localinfo("amxx_configsdir", configsdir, 127)
   server_cmd("exec %s/health.cfg", configsdir)
}
И в самом cfg
Код:
health_cost "1000"
health_cost_n "1000"
18 Окт 2018
AcE, поддерживаю gyxoBka, не понимаю к чему тут sizeof
 
Сообщения
289
Реакции
251
Помог
7 раз(а)
Как вариант ещё

C++:
new g_HEALTHCOST[CVARS];

enum _:CVARS{

NAME1,
NAME2
};
g_HEALTHCOST[NAME1] = register_cvar("health_cost","1000");
g_HEALTHCOST[NAME2] = register_cvar("health_cost_n","2000");
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Если можно, хотел бы поподробнее узнать, как все таки правильнее это делать :blush2: Одно дело когда работает, другое дело когда работает как нужно. Отдельно про квар - это я понял wopox1337 :good2:Но в случае с несколькими? Т.е. выше описывал
g_HEALTHCOST[0] = register_cvar("health_cost","1000")
g_HEALTHCOST[1] = register_cvar("health_cost_n","2000")
Но, если у меня, допустим, 10 уровней жизней, а отлавливать каждый не хочется, я создаю iHealthLevel
И беру данные из plugin_init
get_pcvar_num(g_HEALTHCOST[iHealthLevel]))
7 Ноя 2018
И хотел бы узнать, кто из них правильнее написал:
Код:
new Float:iDamage = float(get_pcvar_num(gDamage));
-----------------------ИЛИ--------------------------
new Float:damage
damage = get_pcvar_float(pDamage);
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
Если не можешь решить, то всегда можно сделать вот так :)
#define DAMAGE get_pcvar_float(pDamage)
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
WILL_BE,
Код:
new Float:iDamage = float(get_pcvar_num(gDamage));
Сначала переведет в INT, потом в FLOAT, соответственно будет произведено округление величины (string) "2.1" -> (int) 2 -> (float) 2.0
Код:
new Float:damage
damage = get_pcvar_float(pDamage);
тут сразу получается FLOAT (string) "2.1" -> (float) 2.1
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Sonyx, благодарю, теперь ясность полная по этому вопросу. Осталось
Если можно, хотел бы поподробнее узнать, как все таки правильнее это делать :blush2: Одно дело когда работает, другое дело когда работает как нужно. Отдельно про квар - это я понял @wopox1337 :good2:Но в случае с несколькими? Т.е. выше описывал
Код:
g_HEALTHCOST[0] = register_cvar("health_cost","1000")
g_HEALTHCOST[1] = register_cvar("health_cost_n","2000")
Но, если у меня, допустим, 10 уровней жизней, а отлавливать каждый не хочется, я создаю iHealthLevel
И беру данные из plugin_init
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу