В амхх с версии 183 (вроде бы, может даже 182) компилятор может читать "неявные" параметры. Параметры, которые если не указать, то компилятор их пропустит (если не указан префикс & перед переменной). Старые версии всегда требовали указание всех параметров (без any...).По поводу:
-set_task( 1.0, "InfoMsg", id, _, _, "b" )
+set_task( 1.0, "InfoMsg", id, .flags = "b" )
разница в чем??????
На самом деле лучше в client_putinserver засылать таск для каждого игрока отдельно, в client_disconnected удалять его. Снизится нагрузка на кадр.Albertio, нет, он убрал вот эти строки из кода
и добавилКод:public client_connect( id ) { set_task( 1.0, "InfoMsg", id, _, _, "b" ) } public client_disconnected( id ) { remove_task( id ) }
set_task( 1.0, "InfoMsg", id, _, _, "b" )
вpublic plugin_init( )
и все вроде как.
@bizon,ты хочешь сказать что посылать задачу каждому игроку здесь уместно?
Я в общем, если помимо посыла мессаги всем был бы какой-то цикл с обработкой всех игроков, то вместо цикла таск для каждого игрока будет правильнее.Хоть здесь это и не нужно, но я про ситуацию в целом.
#include <amxmodx>
new g_szMapName[64], g_szHostname[64];
new g_iHudSyncObj;
public plugin_init()
{
register_plugin("Info Message HUD", "1.0", "Blizzard");
get_mapname(g_szMapName, charsmax(g_szMapName));
bind_pcvar_string(get_cvar_pointer("hostname"), g_szHostname, charsmax(g_szHostname));
g_iHudSyncObj = CreateHudSyncObj();
set_task(1.0, "InfoMsg", .flags = "b");
}
public InfoMsg()
{
new iPlayers[MAX_PLAYERS], iNumPlayers;
get_players(iPlayers, iNumPlayers, "ch");
for(new i; i < iNumPlayers; i++)
{
new szTimeLeft[256];
format_time(szTimeLeft, charsmax(szTimeLeft), "Осталось времени до конца карты: %M:%S", get_timeleft());
add(szTimeLeft, charsmax(szTimeLeft), fmt(" %s | %s", g_szHostname, g_szMapName));
set_hudmessage(255, 255, 255, -1.0, 0.0, 0, 6.0, 1.0);
ShowSyncHudMsg(iPlayers[i], g_iHudSyncObj, "%s", szTimeLeft);
}
}
format_time(szTimeLeft, charsmax(szTimeLeft), "Осталось времени до конца карты: %M:%S", get_timeleft());
add(szTimeLeft, charsmax(szTimeLeft), fmt(" %s | %s", g_szHostname, g_szMapName));
#include <amxmodx>
#define IM_TASK_INDEX 1488
new g_szMapName[64], g_szHostname[64];
new g_iHudSyncObj;
public plugin_init()
{
register_plugin("Info Message HUD", "1.0", "Blizzard");
get_mapname(g_szMapName, charsmax(g_szMapName));
bind_pcvar_string(get_cvar_pointer("hostname"), g_szHostname, charsmax(g_szHostname));
g_iHudSyncObj = CreateHudSyncObj();
}
public client_putinserver(id)
{
set_task(1.0, "InfoMsg", id + IM_TASK_INDEX, .flags = "b");
}
public client_disconnected(id)
{
remove_task(id - IM_TASK_INDEX);
}
public InfoMsg(taskid)
{
new id = taskid - IM_TASK_INDEX;
if(!is_user_connected(id))
{
return;
}
new szTimeLeft[256];
format_time(szTimeLeft, charsmax(szTimeLeft), "Осталось времени до конца карты: %M:%S", get_timeleft());
add(szTimeLeft, charsmax(szTimeLeft), fmt(" %s | %s", g_szHostname, g_szMapName));
set_hudmessage(255, 255, 255, -1.0, 0.0, 0, 6.0, 1.0);
ShowSyncHudMsg(id, g_iHudSyncObj, "%s", szTimeLeft);
}
чёзаписать в массив название карты и передать таском
plugin_init
получаете название карты, запускаете таск и в 4й параметр название карты. В таске получаете название карты, составляете сообщение и отображает через ShowSyncHudMsg
(или шо там у вас) с 0 таргетом(1й аргумент)