Set_task opóżnienie
xCiacho
02.07.2014
Witam serdecznie czy jest możliwość opóźnienia set_tasku na początku rundy?
do poniższego kodu chciałbym dodać taska aby po 10-15 sekundach dopiero wczytało lvl tylko czy to nie popsuje jeżeli gracz wejdzie i w ciągu tych np 5 sekundach wyjdzie serwera to zapisze mu lvl tak jak dobrze rozumeim?
public client_connect( id ) { PXP[ id ] = 0 LoadData( id ) } public client_disconnect( id ) { SaveData( id ) PXP[ id ] = 0 PLEVEL[ id ] = 0 PKS[ id ] = 0 }
lexar
02.07.2014
To po prostu robisz taska na załadowanie się levela który włączy się po upłynięciu 15 sekund
set_task(15.0, "client_connect")
Z disconnectem nie musisz nic robić
xCiacho
02.07.2014
No ale co się stanie jeżeli przed upływem 15 sekund gracz wyjdzie z serwera? zapisze mu się jako lvl 1
lexar
02.07.2014
No jak? Gracz wchodzi na serwer i wybiera klase z 1 lvlem, po 15 sekundach plugin wczytuje wszystkie lvle i gracz już ma lvl który miał przedtem. Jeżeli wyjdzie z gry do 15 sekund od wejścia na serwer to będzie miał 1 lvl na każdej klasie bo plugin wczyta wszystkie lvle dopiero po 15 sekundach od wejścia na serwer. Myślę, że to wszystko tak się potoczy
BlackPerfum
02.07.2014
Tego niestety wiedziec nie możesz ;D Obawy autora tematu są uzasadnione. Prosimy o pokazanie kodu zapisu danych a powiemy ci czy musisz sie bać. Możesz wczytac dane wcześniej np. w client_connect ale pokazać je graczu dopiero po 10~15 sekundach ;D
No jak? Gracz wchodzi na serwer i wybiera klase z 1 lvlem, po 15 sekundach plugin wczytuje wszystkie lvle i gracz już ma lvl który miał przedtem. Jeżeli wyjdzie z gry do 15 sekund od wejścia na serwer to będzie miał 1 lvl na każdej klasie bo plugin wczyta wszystkie lvle dopiero po 15 sekundach od wejścia na serwer. Myślę, że to wszystko tak się potoczy
xCiacho
02.07.2014
o tak wygląda zapis i odczyt
public SaveData(id) { new nick[32]; get_user_name(id, nick, 31); new vaultkey[64],vaultdata[256] format(vaultkey,63,"%s-Mod",nick) format(vaultdata,255,"%i#%i#",PXP[id],PLEVEL[id]) nvault_set(g_vault,vaultkey,vaultdata) nvault_set(g_vault2,vaultkey,vaultdata) return PLUGIN_CONTINUE } public LoadData(id) { new nick[32]; get_user_name(id, nick, 31); new vaultkey[64],vaultdata[256] format(vaultkey,63,"%s-Mod",nick) format(vaultdata,255,"%i#%i#",PXP[id],PLEVEL[id]) nvault_get(g_vault,vaultkey,vaultdata,255) replace_all(vaultdata, 255, "#", " ") new playerxp[32], playerlevel[32] parse(vaultdata, playerxp, 31, playerlevel, 31) PXP[id] = str_to_num(playerxp) PLEVEL[id] = str_to_num(playerlevel) return PLUGIN_CONTINUE }
BlackPerfum
02.07.2014
W takim wypadku dobrze że sie o to martwiłeś bo zapisało by ci 1 lvl . Wyjście z sytuacji:
Wystarczy trzymać gdzieś czy dane zostały wczytane wtedy zapisuj
lub
Możesz wczytac dane wcześniej np. w client_connect ale pokazać je graczu dopiero po 10~15 sekundach ;D
szelbi
02.07.2014
Wystarczy zrobić najzwyklejszą zmienną i przy wczytaniu ustawić na true, a kiedy gracz wychodzi i jest ustawiona na true to zapisać i zmienić na false, a jeśli nie to po prostu nic nie robić.
GwynBleidD
02.07.2014
new data_loaded[33];
if (data_loaded[id]) { // Zapisz tutaj dane }
// Po załadowaniu danych ORAZ gdy danych w nvault nie znaleziono: data_loaded[id] = true;
public client_connect(id) { data_loaded[id] = false; }
xCiacho
02.07.2014
Wybacz GwynBlade wywala function "SaveData" should return a value
public client_connect( id ) { data_loaded[id] = false; } public SaveData(id) { if (data_loaded[id]) { new nick[32]; get_user_name(id, nick, 31); new vaultkey[64],vaultdata[256] format(vaultkey,63,"%s-Mod",nick) format(vaultdata,255,"%i#%i#",PXP[id],PLEVEL[id]) nvault_set(g_vault,vaultkey,vaultdata) nvault_set(g_vault2,vaultkey,vaultdata) return PLUGIN_CONTINUE } } public LoadData(id) { new nick[32]; get_user_name(id, nick, 31); new vaultkey[64],vaultdata[256] format(vaultkey,63,"%s-Mod",nick) format(vaultdata,255,"%i#%i#",PXP[id],PLEVEL[id]) nvault_get(g_vault,vaultkey,vaultdata,255) replace_all(vaultdata, 255, "#", " ") new playerxp[32], playerlevel[32] parse(vaultdata, playerxp, 31, playerlevel, 31) PXP[id] = str_to_num(playerxp) PLEVEL[id] = str_to_num(playerlevel) data_loaded[id] = true; return PLUGIN_CONTINUE }