Problema nVault/fVault

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
robbencsgo
Membru, skill 0
Membru, skill 0
Posts: 96
Joined: 31 Aug 2019, 19:14
Detinator Steam: Da
CS Status: aimer
SteamID: an prevat
Fond eXtream: 0
Has thanked: 9 times
Been thanked: 11 times
Contact:

21 Dec 2020, 09:54

Code: Select all

public plugin_end() 
{
    new id;
    for(id = 1; id <= g_iMaxPlayers; id++)
    {
        if(is_user_connected(id))
        {
            _SaveData(id);
        }
    }
    ArrayDestroy(g_aRankName);
    ArrayDestroy(g_aRankKills);
}

public client_putinserver(id) 
{
    get_user_name(id, g_szName[id], charsmax(g_szName));

    _LoadData(id);
}

public client_disconnected(id) 
{
    _SaveData(id);
}

_SaveData(id)
{
	new Data[576];
	new infobuff[64];
	formatex(infobuff, charsmax(infobuff), "%i,%i", g_iUserKills[id], g_iUserRank[id]);
    formatex(Data, charsmax(Data), "%s", infobuff);
	fvault_set_data(g_Vault, g_szName[id], Data);

    return PLUGIN_HANDLED;
}

_LoadData(id)
{
    new Data[576];
	new Timestamp;
	if (fvault_get_data(g_Vault, g_szName[id], Data, charsmax(Data)))
	{
		new buffer[64];
		new userData[2][16];
		strtok(Data, buffer, charsmax(buffer), Data, charsmax(Data), ',');
		for(new i = 0; i <= 2; i++)
			strtok(buffer, userData[i], 15, buffer, charsmax(buffer), ',');

		g_iUserKills[id] = str_to_num(userData[0]);
		g_iUserRank[id] = str_to_num(userData[1]);
	}
	return 0;
}
Am acest cod, cand schimb mapa nu imi salveaza datele, mi le seteaza pe 0, nu stiu de ce, cand ies/intru de pe server totul este ok dar cand schimb mapa se reseteaza vault-ul, am incercat sa fac aceeasi chestie si prin fvault si nvault

Edit:

Update, imi da si aceste erori in consola

Code: Select all

12/21/2020 - 09:58:08: [AMXX] Run time error 4: index out of bounds
12/21/2020 - 09:58:08: [AMXX] [0] testplugin.sma::_LoadData (line 180)
12/21/2020 - 09:58:08: [AMXX] [1] testplugin.sma::client_putinserver (line 151)
Daca te-am ajutat, lasa si tu un +1
RoyalServer 2
Shadows Adi
Membru, skill +1
Membru, skill +1
Posts: 349
Joined: 26 Jan 2020, 18:52
Detinator Steam: Da
CS Status: 0x416469
SteamID: shadowsadi120
Fond eXtream: 0
Has thanked: 14 times
Been thanked: 50 times

21 Dec 2020, 11:26

Salvarea datelor in interiorul forward-ului plugin_end() este inutila, pentru ca functia este apelata inainte de oprirea serverului / schimbarea hartii. http://www.amxmodx.org/api/amxmodx/plugin_end.
Ce spui tu ca nu-ti salveaza datele cand schimbi harta, nu este posibil. Cand se schimba harta, jucatorul se deconecteaza si se reconecteaza pe server. Doar daca repornesti serverul o sa pierzi datele.

Iar in legatura cu eroarea din functia _LoadData()

Code: Select all

for(new i = 0; i <= 2; i++)
-->>
for(new i = 0; i < sizeof(userData); i++) // sizeof(userData) = 2 || daca vrei sa schimbi o valoare pe viitor, o poti face mult mai usor.
User avatar
robbencsgo
Membru, skill 0
Membru, skill 0
Posts: 96
Joined: 31 Aug 2019, 19:14
Detinator Steam: Da
CS Status: aimer
SteamID: an prevat
Fond eXtream: 0
Has thanked: 9 times
Been thanked: 11 times
Contact:

21 Dec 2020, 13:33

Shadows Adi wrote:
21 Dec 2020, 11:26
Salvarea datelor in interiorul forward-ului plugin_end() este inutila, pentru ca functia este apelata inainte de oprirea serverului / schimbarea hartii. http://www.amxmodx.org/api/amxmodx/plugin_end.
Ce spui tu ca nu-ti salveaza datele cand schimbi harta, nu este posibil. Cand se schimba harta, jucatorul se deconecteaza si se reconecteaza pe server. Doar daca repornesti serverul o sa pierzi datele.

Iar in legatura cu eroarea din functia _LoadData()

Code: Select all

for(new i = 0; i <= 2; i++)
-->>
for(new i = 0; i < sizeof(userData); i++) // sizeof(userData) = 2 || daca vrei sa schimbi o valoare pe viitor, o poti face mult mai usor.
Am modificat ce mi-ai zis, si am aceeasi eroare

Code: Select all

12/21/2020 - 12:31:27: [AMXX] Run time error 4: index out of bounds
12/21/2020 - 12:31:27: [AMXX] [0] testplugin.sma::_LoadData (line 180)
12/21/2020 - 12:31:27: [AMXX] [1] testplugin.sma::client_putinserver (line 151)
Si nu stiu de ce imi face chestia aia, poate fi de la server? Cand ma conectez/deconectez fara sa schimb mapa merge, cand schimb mapa imi pleaca toate datele.
Daca te-am ajutat, lasa si tu un +1
Shadows Adi
Membru, skill +1
Membru, skill +1
Posts: 349
Joined: 26 Jan 2020, 18:52
Detinator Steam: Da
CS Status: 0x416469
SteamID: shadowsadi120
Fond eXtream: 0
Has thanked: 14 times
Been thanked: 50 times

21 Dec 2020, 16:54

Posteaza linia 180 din _LoadData()
User avatar
robbencsgo
Membru, skill 0
Membru, skill 0
Posts: 96
Joined: 31 Aug 2019, 19:14
Detinator Steam: Da
CS Status: aimer
SteamID: an prevat
Fond eXtream: 0
Has thanked: 9 times
Been thanked: 11 times
Contact:

21 Dec 2020, 21:19

Code: Select all

for(new i = 0; i <= sizeof(userData); i++)
        {
            strtok(buffer, userData[i], 32, buffer, 32, ',');
        }
ar fi asta
Daca te-am ajutat, lasa si tu un +1
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 920
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 72 times
Been thanked: 136 times

22 Dec 2020, 13:20

Code: Select all

for(new i = 0; i <= sizeof(userData)-1; i++)
        {
            strtok(buffer, userData[i], 32, buffer, 32, ',');
        }
User avatar
robbencsgo
Membru, skill 0
Membru, skill 0
Posts: 96
Joined: 31 Aug 2019, 19:14
Detinator Steam: Da
CS Status: aimer
SteamID: an prevat
Fond eXtream: 0
Has thanked: 9 times
Been thanked: 11 times
Contact:

24 Dec 2020, 19:39

Up, cineva?
Daca te-am ajutat, lasa si tu un +1
User avatar
robbencsgo
Membru, skill 0
Membru, skill 0
Posts: 96
Joined: 31 Aug 2019, 19:14
Detinator Steam: Da
CS Status: aimer
SteamID: an prevat
Fond eXtream: 0
Has thanked: 9 times
Been thanked: 11 times
Contact:

29 Dec 2020, 19:59

am rezolvat, se poate da t/c.
Daca te-am ajutat, lasa si tu un +1
ZackChoi
Membru, skill +1
Membru, skill +1
Posts: 162
Joined: 28 Dec 2019, 01:39
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Has thanked: 1 time
Been thanked: 7 times

04 Jan 2021, 12:44

Pentru cine nu stie, index out of bounds -> trebuie facuta verificarea is_user_valid

#define is_user_valid(%0) (1 <= %0 <= get_maxplayers())
Shadows Adi
Membru, skill +1
Membru, skill +1
Posts: 349
Joined: 26 Jan 2020, 18:52
Detinator Steam: Da
CS Status: 0x416469
SteamID: shadowsadi120
Fond eXtream: 0
Has thanked: 14 times
Been thanked: 50 times

04 Jan 2021, 13:51

ZackChoi wrote:
04 Jan 2021, 12:44
Pentru cine nu stie, index out of bounds -> trebuie facuta verificarea is_user_valid

#define is_user_valid(%0) (1 <= %0 <= get_maxplayers())
Cat timp persoana a specificat ca linia 180 este asta:
robbencsgo wrote:
21 Dec 2020, 21:19

Code: Select all

for(new i = 0; i <= sizeof(userData); i++)
        {
            strtok(buffer, userData[i], 32, buffer, 32, ',');
        }
ar fi asta
Nu trebuie verificat daca jucatorul tinta este in range, pentru ca datele sunt deja preluate, deci singura problema poate fi de la index-ul multimii, adica trece peste numarul de celule rezervate in memorie.
ZackChoi
Membru, skill +1
Membru, skill +1
Posts: 162
Joined: 28 Dec 2019, 01:39
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Has thanked: 1 time
Been thanked: 7 times

04 Jan 2021, 14:03

Shadows Adi wrote:
04 Jan 2021, 13:51
ZackChoi wrote:
04 Jan 2021, 12:44
Pentru cine nu stie, index out of bounds -> trebuie facuta verificarea is_user_valid

#define is_user_valid(%0) (1 <= %0 <= get_maxplayers())
Cat timp persoana a specificat ca linia 180 este asta:
robbencsgo wrote:
21 Dec 2020, 21:19

Code: Select all

for(new i = 0; i <= sizeof(userData); i++)
        {
            strtok(buffer, userData[i], 32, buffer, 32, ',');
        }
ar fi asta
Nu trebuie verificat daca jucatorul tinta este in range, pentru ca datele sunt deja preluate, deci singura problema poate fi de la index-ul multimii, adica trece peste numarul de celule rezervate in memorie.

Code: Select all

public plugin_end() 
{
    new id;
    for(id = 1; id <= g_iMaxPlayers; id++)
    {
        if(is_user_connected(id))
        {
            _SaveData(id);
        }
    }
    ArrayDestroy(g_aRankName);
    ArrayDestroy(g_aRankKills);
}
De aici provine problema, nu de unde spui tu!
Daca indexul e out of range cum sa functioneze alte functii?
Aplica ce am zis eu si dupa mai vorbim ;))
Shadows Adi
Membru, skill +1
Membru, skill +1
Posts: 349
Joined: 26 Jan 2020, 18:52
Detinator Steam: Da
CS Status: 0x416469
SteamID: shadowsadi120
Fond eXtream: 0
Has thanked: 14 times
Been thanked: 50 times

04 Jan 2021, 14:13

ZackChoi wrote:
04 Jan 2021, 14:03
Shadows Adi wrote:
04 Jan 2021, 13:51
ZackChoi wrote:
04 Jan 2021, 12:44
Pentru cine nu stie, index out of bounds -> trebuie facuta verificarea is_user_valid

#define is_user_valid(%0) (1 <= %0 <= get_maxplayers())
Cat timp persoana a specificat ca linia 180 este asta:
robbencsgo wrote:
21 Dec 2020, 21:19

Code: Select all

for(new i = 0; i <= sizeof(userData); i++)
        {
            strtok(buffer, userData[i], 32, buffer, 32, ',');
        }
ar fi asta
Nu trebuie verificat daca jucatorul tinta este in range, pentru ca datele sunt deja preluate, deci singura problema poate fi de la index-ul multimii, adica trece peste numarul de celule rezervate in memorie.

Code: Select all

public plugin_end() 
{
    new id;
  [b]  for(id = 1; id <= g_iMaxPlayers; id++)[/b]
    {
        if(is_user_connected(id))
        {
            _SaveData(id);
        }
    }
    ArrayDestroy(g_aRankName);
    ArrayDestroy(g_aRankKills);
}
De aici provine problema, nu de unde spui tu!
Daca indexul e out of range cum sa functioneze alte functii?
Aplica ce am zis eu si dupa mai vorbim ;))
Acesta este codul pentru functia salvarii datelor.
Iar acolo se face deja verificarea daca entitatea este deja jucator:

for(id = 1; id <= g_iMaxPlayers; id++)

get_maxplayers() = 32 in counter strike 1.6.
g_iMaxPlayers este foarte probabil rezultatul nativei get_maxplayers() sau folosind fakemeta: global_get(glb_maxClients)
robbencsgo wrote:
21 Dec 2020, 09:54

Code: Select all

Update, imi da si aceste erori in consola

[code]12/21/2020 - 09:58:08: [AMXX] Run time error 4: index out of bounds
12/21/2020 - 09:58:08: [AMXX] [0] testplugin.sma::_LoadData (line 180)
12/21/2020 - 09:58:08: [AMXX] [1] testplugin.sma::client_putinserver (line 151)
Problema era la incarcarea datelor.
Last edited by levin on 05 Jan 2021, 18:41, edited 1 time in total.
Reason: wrong
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 7 guests