←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Set_task opóżnienie

  • +
  • -
xCiacho - zdjęcie 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
}
Odpowiedz

  • +
  • -
lexar - zdjęcie 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ć ;)

Odpowiedz

  • +
  • -
xCiacho - zdjęcie 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 :/

Odpowiedz

  • +
  • -
lexar - zdjęcie 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 xD

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 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
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
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 02.07.2014

Wystarczy trzymać gdzieś czy dane zostały wczytane wtedy zapisuj ;)

Odpowiedz

  • +
  • -
xCiacho - zdjęcie 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
}
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie 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

Odpowiedz

  • +
  • -
szelbi - zdjęcie 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ć.

Odpowiedz

  • +
  • -
xCiacho - zdjęcie xCiacho 02.07.2014

Nie chciałbym już nie zepsuć ... bo szkoda mi już czasu na to

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie 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;
}
Odpowiedz

  • +
  • -
xCiacho - zdjęcie 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
}
Odpowiedz