[ROZWIĄZANE] Task - problem z wyświetlanie...
Najlepsza odpowiedź sebul 08.07.2013 00:00
1. Nigdy nie wczytuj cvarów w plugin_init.
2. Nigdy nie wczytuj wartości cvara w środku pętli, jeśli można to zrobić przed nią.
3. Pętla po graczach w plugin_init? A w życiu... właśnie też na początku nie miało prawa to działać, bo sprawdzałeś, czy gracz był na serwerze.
4. Zawsze staraj się pisać jak najkrótszy kod.
5.
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <ColorChat>
#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN"
new const prefix[] = "[RSF]";
new pcvar_rate;
new pcvar_cmdbackup;
new pcvar_cmdrate;
new pcvar_updaterate;
new pcvar_interp;
new pcvar_hud_show;
new pcvar_hud_showtype;
new pcvar_hud_time;
new hudhandle;
public plugin_init(){
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "raty", 1);
register_dictionary("rsf.txt")
pcvar_rate = register_cvar("rsf_rate", "25000")
pcvar_cmdbackup = register_cvar("rsf_cmdbackup", "2")
pcvar_cmdrate = register_cvar("rsf_cmdrate", "101")
pcvar_updaterate = register_cvar("rsf_updaterate", "101")
pcvar_interp = register_cvar("rsf_interp", "0.01")
pcvar_hud_show = register_cvar("rsf_hud_show", "1")
pcvar_hud_showtype = register_cvar("rsf_hud_showtype", "0")
pcvar_hud_time = register_cvar("rsf_hud_time", "120.0")
hudhandle = CreateHudSyncObj();
}
public plugin_cfg(){
new cfgDir[64]
get_configsdir(cfgDir, 63)
server_cmd("exec %s/rsf.cfg", cfgDir)
}
public raty(id){
if(!is_user_connected(id)) return;
client_cmd(id, "rate %d", get_pcvar_num(pcvar_rate))
client_cmd(id, "cl_cmdbackup %d", get_pcvar_num(pcvar_cmdbackup))
client_cmd(id, "cl_cmdrate %d", get_pcvar_num(pcvar_cmdrate))
client_cmd(id, "cl_updaterate %d",get_pcvar_num(pcvar_updaterate))
client_cmd(id, "ex_interp ^"%.2f^"", get_pcvar_float(pcvar_interp)+0.0001)
if(get_pcvar_num(pcvar_hud_show) == 1) {
new Float:ttime = get_pcvar_float(pcvar_hud_time);
if(ttime > 0) {
if(!task_exists(id)) set_task(ttime, "hudmsg", id, _, _, "b")
}
else {
hudmsg(id);
}
}
}
public hudmsg(id){
if(!is_user_connected(id)) {
remove_task(id);
return;
}
new htype = get_pcvar_num(pcvar_hud_showtype);
if(htype != 1){
set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4))
ShowSyncHudMsg(id, hudhandle, "%L", LANG_PLAYER, "RSF_INFO")
}
if(htype)
ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO")
}
Coś takiego chyba się nada.
Przejdź do postu
Filip1512
07.07.2013
Cześć,
jak to dość często bywa u mnie, po raz kolejny mam problem z taskami (już nawet nie wiem, który raz ).
Wyświetlanie wiadomości w hudzie/czacie nie działa, jesli cvar "rsf_hud_time" jest ustawiony na inną wartość niż "0". Cały czas kombinuje w sma, więc kod się cały czas zmienia, ale na obecną chwilę mam już tak:
BlackPerfum
07.07.2013
Łap
#include <amxmodx> #include <amxmisc> #include <hamsandwich> #include <ColorChat> #define PLUGIN "Rate'y + HUDMSG" #define VERSION "2.0" #define AUTHOR "Filip / `NN" #define TaskHud 781232 new maxplayers; new prefix[] = "[RSF]"; new pcvar_rate; new pcvar_cmdbackup; new pcvar_cmdrate; new pcvar_updaterate; new pcvar_interp; new pcvar_hud_show; new pcvar_hud_showtype; new pcvar_hud_time; public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) RegisterHam(Ham_Spawn, "player", "raty", 1); register_dictionary("rsf.txt") pcvar_rate = register_cvar("rsf_rate", "25000") pcvar_cmdbackup = register_cvar("rsf_cmdbackup", "2") pcvar_cmdrate = register_cvar("rsf_cmdrate", "101") pcvar_updaterate = register_cvar("rsf_updaterate", "101") pcvar_interp = register_cvar("rsf_interp", "0.01") pcvar_hud_show = register_cvar("rsf_hud_show", "1") pcvar_hud_showtype = register_cvar("rsf_hud_showtype", "0") pcvar_hud_time = register_cvar("rsf_hud_time", "120.0") maxplayers = get_maxplayers() for(new id=0; id<=maxplayers; id++) if(get_pcvar_float(pcvar_hud_time) > 0 && get_pcvar_num(pcvar_hud_show) == 1) set_task(get_pcvar_float(pcvar_hud_time), "hudmsg", id+TaskHud, _, _, "b") // Lepiej uważaj z id w task`ach } /* public plugin_cfg(){ new cfgDir[64] get_configsdir(cfgDir, 63) server_cmd("exec %s/rsf.cfg", cfgDir) }*/ //Po co ci to ? public raty(id){ client_cmd(id, "rate %d", get_pcvar_num(pcvar_rate)) client_cmd(id, "cl_cmdbackup %d", get_pcvar_num(pcvar_cmdbackup)) client_cmd(id, "cl_cmdrate %d", get_pcvar_num(pcvar_cmdrate)) client_cmd(id, "cl_updaterate %d",get_pcvar_num(pcvar_updaterate)) client_cmd(id, "ex_interp ^"%f^"", get_pcvar_float(pcvar_interp)) if(get_pcvar_num(pcvar_hud_show) == 1 && get_pcvar_float(pcvar_hud_time) == 0) hudmsg(id); } public hudmsg(idt){ new id = idt-TaskHud if(!is_user_connected(id)) return 0; // Inaczej dla graczy których niema na serwerze też się to wykona if(get_pcvar_num(pcvar_hud_showtype) == 0) { set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4)) ShowSyncHudMsg(id, CreateHudSyncObj(), "%L", LANG_PLAYER, "RSF_INFO") } else if(get_pcvar_num(pcvar_hud_showtype) == 1) ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO") else //Dlaczego bez sprawdzania czy typ msg jest 2 bo jak by ktoś w cvar`ze wybrał inną liczbę to by się wogóle nie pokazało { set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4)) ShowSyncHudMsg(id, CreateHudSyncObj(), "%L", LANG_PLAYER, "RSF_INFO") ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO") } return 0; }
DarkGL
07.07.2013
Konstrukcje z TaskHud dodawanie i odejmowanie całkowicie nie potrzebne usuń je
BlackPerfum
07.07.2013
Nic się nie stanie jak użyje id gracza ??
Nigdy w pluginie nie widziałem aby w tasku było id gracza tzn. bynajmniej nie sprawdzałem czy może być.
Filip1512
07.07.2013
@Black - ja już nie raz używałem id w tasku i działało.
/* public plugin_cfg(){ new cfgDir[64] get_configsdir(cfgDir, 63) server_cmd("exec %s/rsf.cfg", cfgDir) }*/ //Po co ci to ?
Bo cvary są czytane z oddzielnego pliku, nie z amxx.cfg.
Czyli tak?
Filip1512
07.07.2013
Dziwne, bo dopiero z id + task hudem działa, a bez niego nie...
Twój kod Black działa.
Dark - a Ty jak byś to zrobił?
Najlepsza odpowiedź
sebul
08.07.2013
1. Nigdy nie wczytuj cvarów w plugin_init.
2. Nigdy nie wczytuj wartości cvara w środku pętli, jeśli można to zrobić przed nią.
3. Pętla po graczach w plugin_init? A w życiu... właśnie też na początku nie miało prawa to działać, bo sprawdzałeś, czy gracz był na serwerze.
4. Zawsze staraj się pisać jak najkrótszy kod.
5.
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <ColorChat>
#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN"
new const prefix[] = "[RSF]";
new pcvar_rate;
new pcvar_cmdbackup;
new pcvar_cmdrate;
new pcvar_updaterate;
new pcvar_interp;
new pcvar_hud_show;
new pcvar_hud_showtype;
new pcvar_hud_time;
new hudhandle;
public plugin_init(){
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "raty", 1);
register_dictionary("rsf.txt")
pcvar_rate = register_cvar("rsf_rate", "25000")
pcvar_cmdbackup = register_cvar("rsf_cmdbackup", "2")
pcvar_cmdrate = register_cvar("rsf_cmdrate", "101")
pcvar_updaterate = register_cvar("rsf_updaterate", "101")
pcvar_interp = register_cvar("rsf_interp", "0.01")
pcvar_hud_show = register_cvar("rsf_hud_show", "1")
pcvar_hud_showtype = register_cvar("rsf_hud_showtype", "0")
pcvar_hud_time = register_cvar("rsf_hud_time", "120.0")
hudhandle = CreateHudSyncObj();
}
public plugin_cfg(){
new cfgDir[64]
get_configsdir(cfgDir, 63)
server_cmd("exec %s/rsf.cfg", cfgDir)
}
public raty(id){
if(!is_user_connected(id)) return;
client_cmd(id, "rate %d", get_pcvar_num(pcvar_rate))
client_cmd(id, "cl_cmdbackup %d", get_pcvar_num(pcvar_cmdbackup))
client_cmd(id, "cl_cmdrate %d", get_pcvar_num(pcvar_cmdrate))
client_cmd(id, "cl_updaterate %d",get_pcvar_num(pcvar_updaterate))
client_cmd(id, "ex_interp ^"%.2f^"", get_pcvar_float(pcvar_interp)+0.0001)
if(get_pcvar_num(pcvar_hud_show) == 1) {
new Float:ttime = get_pcvar_float(pcvar_hud_time);
if(ttime > 0) {
if(!task_exists(id)) set_task(ttime, "hudmsg", id, _, _, "b")
}
else {
hudmsg(id);
}
}
}
public hudmsg(id){
if(!is_user_connected(id)) {
remove_task(id);
return;
}
new htype = get_pcvar_num(pcvar_hud_showtype);
if(htype != 1){
set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4))
ShowSyncHudMsg(id, hudhandle, "%L", LANG_PLAYER, "RSF_INFO")
}
if(htype)
ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO")
}
Coś takiego chyba się nada.
sebul
08.07.2013
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL