Closed UnrealKaraulov closed 2 years ago
static pluginid; pluginid = -1;
@OciXCrom no, your variant will reset variable each call
@UnrealKaraulov у тебя проблема в коде ниже (оно не находит функцию и соотвественно индекс остаётся тем же самым), а не в статике. Ты блин достал уже всех капсом фигачить "спасите помогите". Никто тебя серьёзно не воспринимает. Не знаю, на какую помощь ты вообще надеешься.
stock rm_base_plugin_id()
{
static pluginid = -1
server_print("%i", pluginid)
pluginid = random_num(0, 5555)
}
результат
14:30:23 test
14:30:23 -1
14:30:24 test
14:30:24 2494
14:30:24 test
14:30:24 2178
14:30:24 test
14:30:24 4941
14:30:25 test
14:30:25 2352
14:30:25 test
14:30:25 3317
@Giferns если бы не находило, то плагины бы из https://c-s.net.ua/forum/topic92412s20.html#entry1145313 не работали. ( https://github.com/UnrealKaraulov/RERUNEMOD/blob/9ded4df867a6948a44fe5b780d37f2bbb2114c98/include/rm_api.inc#L46 ) так что не пиши глупости пока не разберешься
@OciXCrom not works
stock rm_base_plugin_id()
{
static pluginid; pluginid = -1;
if (pluginid != -1)
{
log_amx("USE STATIC! %d", pluginid);
return pluginid;
}
new num_of_plugins = get_pluginsnum()
for (new i = 0; i < num_of_plugins; ++i)
{
if (get_func_id("RM_RegisterPlugin",i) >= 0)
{
pluginid = i;
break;
}
}
return pluginid;
}
in your case pluginid anyway always == -1
from https://github.com/UnrealKaraulov/RERUNEMOD/blob/main/include/rm_api.inc
You're probably talking about caching across different plugins, aren't you?
You're probably talking about caching across different plugins, aren't you? Yes
inc :
stock rm_base_plugin_id()
{
static pluginid; pluginid = -1;
if (pluginid != -1)
{
log_amx("USE STATIC! %d", pluginid);
return pluginid;
}
new num_of_plugins = get_pluginsnum()
for (new i = 0; i < num_of_plugins; ++i)
{
if (get_func_id("RM_RegisterPlugin",i) >= 0)
{
pluginid = i;
break;
}
}
return pluginid;
}
In sma files:
call rm_base_plugin_id( );
I need do cache "pluginid" variable.
static variable not works in amxmodx :(
You may achieve that via xvars.
@UnrealKaraulov RU
Какие глупости я пишу? Это ты не объясняешь кейс использования. Разработчик, блин.
Залез к тебе в репозиторий рунмода. rm_base_plugin_id() ты используешь в rm_register_rune()
Ты судя по всему не понимаешь, как это работаеь. Каждый плагин, который использует rm_register_rune(), у тебя будет иметь свой собственный rm_base_plugin_id() со своим собственным static pluginid = -1;
Не одна переменная на всех. На каждый плагин своя переменная с данным именем. Она не одна общая на всех. Если бы была бы общей, тогда бы да, первый вызов у тебя определял индекс, и последующие вызовы использовали бы кеш.
Чтобы использовать одну переменную, нужен xvar, как выше написали. Но я тебе по секрету скажу, наворотил ты в этом рунмоде что-то страшное.
@Giferns понял уже, просто надеялся что статические переменные тут работают как в C++ каком-нибудь)
кстати если сделать так:
public pluginid;
public rm_base_plugin_id()
{
static pluginid = -1;
if (pluginid != -1)
{
log_amx("USE STATIC! %d", pluginid);
return pluginid;
}
new num_of_plugins = get_pluginsnum()
for (new i = 0; i < num_of_plugins; ++i)
{
if (get_func_id("RM_RegisterPlugin",i) >= 0)
{
pluginid = i;
break;
}
}
return pluginid;
}
То в 10% случаев переменная становится реально статической и плагин на некоторое время сохраняется в памяти. Хоть какая оптимизация 🤣 🤣 🤣 🤣 🤣 🤣 🤣 🤣
То есть добавить с таким же именем "public pluginid;" а в функции уже "static pluginid;") магия AMX MOD X ?))
@UnrealKaraulov https://forums.alliedmods.net/showthread.php?t=138880
Code inside .inc
I need cache pluginid value for speedup. But I can't see 'USE STATIC! ' message in console.
Why static not works as I need (like in c/c++ language)