Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Bugujące się dane w fvault


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
11 odpowiedzi w tym temacie

#1 NwNwH

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
Offline

Napisano 02.08.2024 19:32

Witam, od czasu gdy przeniosłem inny plugin do silnika to rowniez jego zapis fvault przenioslem i aktualnie jedynie zmienne od Poziomu gracza oraz expa się bugują jakoś ze jak zmienie mape to inne liczby tam pisza, czasem się nawzajem zamieniają, inne zmienne są nienaruszone, macie jakąś teorie co mogło by powodować ten problem? Bo nie chciałbym za bardzo kodu wysyłać.

 

amx 1.9.0.5294


  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 584
Godlike

  • Postów:12 053
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 02.08.2024 21:53

Bez kodu nic nie da się sprawdzić


  • +
  • -
  • 0

#3 NwNwH

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
Offline

Napisano 06.08.2024 20:04

Bez kodu nic nie da się sprawdzić

chodzi mi o teoretyczne założenia, ale dobra mogę dać ten kod

public loadSystem(id){
	new name[33]
	get_user_name(id,name,32)	
	new szData[756];
	if( fvault_get_data(vault_system, name, szData, sizeof(szData) - 1) ){

	        new szMission1[7];
	        new szMission2[7];
	        new szMission3[7];
	        new szMission4[7];
	        new szMission5[7];
	        new szMission6[7];
	        new szMission7[7];
	        new szMission8[7];
	        new szMission9[7];
	        new szMission10[7];
                new szMission11[7];
                new szCase1[33];
                new szCase2[33];
                new szCase3[33];
                new szCase4[33];
                new szCase5[33];
                new szCase6[33];
                new szCash[33];
                new szHelp[33];
                new szPlayedAllTime[33];
                new szPlayerEXP[33];
                new szPlayerLevel[33];
                new szOther1[33];
                new szOther2[33];
                new szOther3[33];
                new szOther4[33];
                new szOther5[33];
                new szOther6[33];
                new szOther7[33];
                new szOther8[33];
                new szOther9[33];
                new szOther10[33];
                new szOther11[33];
                new szOther12[33];
                new szOther13[33];
                new szOther14[33];
                new szOther15[33];
                parse(szData,
		        szMission1,     sizeof(szMission1),
		        szMission2,    sizeof(szMission2),
		        szMission3,     sizeof(szMission3),
		        szMission4,    sizeof(szMission4),
		        szMission5,    sizeof(szMission5),
		        szMission6,   sizeof(szMission6),
		        szMission7,     sizeof(szMission7),
		        szMission8,    sizeof(szMission8),
		        szMission9,     sizeof(szMission9),
		        szMission10,    sizeof(szMission10),
                        szMission11,    sizeof(szMission11),
                        szCase1,              sizeof(szCase1),
                        szCase2,              sizeof(szCase2),
                        szCase3,              sizeof(szCase3),
                        szCase4,               sizeof(szCase4),
                        szCase5,               sizeof(szCase5),
                        szCase6,               sizeof(szCase6),
                        szCash,               sizeof(szCash),
                        szPlayedAllTime,      sizeof(szPlayedAllTime),
                        szPlayerEXP,         sizeof(szPlayerEXP),
                        szPlayerLevel,      sizeof(szPlayerLevel),
                        szOther1,              sizeof(szOther1),
                        szOther2,              sizeof(szOther2),
                        szOther3,              sizeof(szOther3),
                        szOther4,              sizeof(szOther4),
                        szOther5,              sizeof(szOther5),
                        szOther6,              sizeof(szOther6),
                        szOther7,              sizeof(szOther7),
                        szOther8,              sizeof(szOther8),
                        szOther9,              sizeof(szOther9),
                        szOther10,              sizeof(szOther10),
                        szOther11,              sizeof(szOther11),
                        szOther12,              sizeof(szOther12),
                        szOther13,              sizeof(szOther13),
                        szOther14,              sizeof(szOther14),
                        szOther15,              sizeof(szOther15)
                );
		Mission1[id]                =       str_to_num(szMission1);
		Mission2[id]               =       str_to_num(szMission2);
		Mission3[id]                =       str_to_num(szMission3);
		Mission4[id]               =       str_to_num(szMission4);
		Mission5[id]               =       str_to_num(szMission5);
		Mission6[id]              =       str_to_num(szMission6);
		Mission7[id]                =       str_to_num(szMission7);
		Mission8[id]               =       str_to_num(szMission8);
		Mission9[id]                =       str_to_num(szMission9);
		Mission10[id]               =       str_to_num(szMission10);
                Mission11[id]               =       str_to_num(szMission11);
                Case1[id]                     =       str_to_num(szCase1);
                Case2[id]                     =       str_to_num(szCase2);
                Case3[id]                     =       str_to_num(szCase3);
                Case4[id]                      =       str_to_num(szCase4);
                Case5[id]                      =       str_to_num(szCase5);
                Case6[id]                      =       str_to_num(szCase6);
                Cash[id]                      =       str_to_num(szCash);
                userHelp[id]		=	str_to_num(szHelp);
                PlayedAllTime[id]             =       str_to_num(szPlayedAllTime);
                PlayerEXP[id]                    =       str_to_num(szPlayerEXP);
                PlayerLevel[id]                 =       str_to_num(szPlayerLevel);
                Other1[id]                      =       str_to_num(szOther1);
                Other2[id]                   =       str_to_num(szOther2);
                Other3[id]                    =       str_to_num(szOther3);
                Other4[id]                 =       str_to_num(szOther4);
                Other5[id]                   =       str_to_num(szOther5);
                Other6[id]                   =       str_to_num(szOther6);
                Other7[id]                    =       str_to_num(szOther7);
                Other8[id]                   =       str_to_num(szOther8);
                Other9[id]                   =       str_to_num(szOther9);
                Other10[id]                   =       str_to_num(szOther10);
                Other11[id]                   =       str_to_num(szOther11);
                Other12[id]                     =     str_to_num(szOther12);
                Other13[id]                     =       str_to_num(szOther13);
                Other14[id]                   =       str_to_num(szOther14);
                Other15[id]                  =       str_to_num(szOther15);
	}else{
		Mission1[id]                =       0;
		Mission2[id]               =       0;
		Mission3[id]                =       0;
		Mission4[id]               =       0;
		Mission5[id]               =       0;
		Mission6[id]              =       0;
		Mission7[id]                =       0;
		Mission8[id]               =       0;
		Mission9[id]                =       0;
		Mission10[id]               =       0;
                Mission11[id]               =       0;
                Case1[id]                     =       0;
                Case2[id]                     =       0;
                Case3[id]                     =       0;
                Case4[id]                      =       0;
                Case5[id]                      =       0;
                Case6[id]                      =       0;
                Cash[id]                      =       0;
                userHelp[id]		=	0;
                PlayedAllTime[id]             =       0;
                PlayerEXP[id]                    =       0;
                PlayerLevel[id]                 =       0;
                Other1[id]                      =       0;
                Other2[id]                   =       0;
                Other3[id]                    =       0;
                Other4[id]                 =       0;
                Other5[id]                   =       0;
                Other6[id]                   =       0;
                Other7[id]                    =       0;
                Other8[id]                   =       0;
                Other9[id]                   =      0;
                Other10[id]                   =       0;
                Other11[id]                   =       0;
                Other12[id]                     =     0;
                Other13[id]                     =      0;
                Other14[id]                   =       0;
                Other15[id]                  =       0;
	}
        return PLUGIN_CONTINUE;
}
public saveSystem(id){
	new name[33]
	get_user_name(id,name,32)

	new szData[756];
        format(szData, sizeof(szData)-1,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
		Mission1[id],
		Mission2[id],
		Mission3[id],
		Mission4[id],
		Mission5[id],
		Mission6[id],
		Mission7[id],
		Mission8[id],
		Mission9[id],
		Mission10[id],
                Mission11[id],
                Case1[id],
                Case2[id],
                Case3[id],
                Case4[id],
                Case5[id],
                Case6[id],
                Cash[id],
                userHelp[id],
                PlayedAllTime[id],
                PlayerEXP[id],
                PlayerLevel[id],
                Other1[id],
                Other2[id],
                Other3[id],
                Other4[id],
                Other5[id],
                Other6[id],
                Other7[id],
                Other8[id],
                Other9[id],
                Other10[id],
                Other11[id],
                Other12[id],
                Other13[id],
                Other14[id],
                Other15[id]
        );
	fvault_set_data(vault_system, name, szData);
        return PLUGIN_CONTINUE;
}

Poza tym, wie ktoś jak przechować czas w PlayedAllTime[id], bo zrobiłem dodawanie w client_disconnect ale jak wschodze znowu i wychodze to ustawia sie czas jaki spedzilem na sesji a nie zlicza się
 

if(equal(szMessage, "/eloelo")){
        new iTime;
        iTime = str_to_num(PlayedAllTime[id]) + (playedTime(id));
	ColorChat(id, GREEN, "Czas aktualnej sesji: %d", playedTime(id));
        ColorChat(id, GREEN, "Przegrany czas allTime: %d", iTime);
	return PLUGIN_HANDLED
}

tak samo komenda mi printuje tylko ten czas z playedTime xD


  • +
  • -
  • 0

#4 Deus Vult

    Nowy

  • Użytkownik

Reputacja: 109
Zaawansowany

  • Postów:218
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Rzeszow
Offline

Napisano 11.08.2024 10:16

Z tego kodu raczej nic nie wynika, poza tym że jest słabej jakości. Wyślij całość najlepiej.
  • +
  • -
  • 0

#5 NwNwH

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
Offline

Napisano 11.08.2024 15:09

Z tego kodu raczej nic nie wynika, poza tym że jest słabej jakości. Wyślij całość najlepiej.

słabej jakości to znaczy? to jest cały kod, no i w client_connect jest loadSystem(id) i client_disconnect saveSystem(id) i tyle.


  • +
  • -
  • 0

#6 Deus Vult

    Nowy

  • Użytkownik

Reputacja: 109
Zaawansowany

  • Postów:218
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Rzeszow
Offline

Napisano 12.08.2024 07:53

[quote name="NwNwH" post="778750" timestamp="1723385387"][quote name="Deus Vult" post="778749" timestamp="1723367785"]
Z tego kodu raczej nic nie wynika, poza tym że jest słabej jakości. Wyślij całość najlepiej.
[/quote]
To znaczy ze zmienne są alokowane daleko poza rzeczywisty rozmiar tablicy. Pokaz fragment kodu który odpowiada za wyświetlenie expa i lvl. Może tam jest problem z błędną konwersją danych?
jeżeli jest problem tylko z dwoma zmiennymi w zapisie to raczej nie szukał bym tu problemu

Użytkownik Deus Vult edytował ten post 12.08.2024 07:55

  • +
  • -
  • 0

#7 NwNwH

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
Offline

Napisano 12.08.2024 22:33

 

 

[quote name="Deus Vult" post="778749" timestamp="1723367785"]
Z tego kodu raczej nic nie wynika, poza tym że jest słabej jakości. Wyślij całość najlepiej.

To znaczy ze zmienne są alokowane daleko poza rzeczywisty rozmiar tablicy. Pokaz fragment kodu który odpowiada za wyświetlenie expa i lvl. Może tam jest problem z błędną konwersją danych?
jeżeli jest problem tylko z dwoma zmiennymi w zapisie to raczej nie szukał bym tu problemu

No z deklarowaniem rozmiaru tablicy to fakt, jak robiłem ten zapis to myślałem ze 33 to id xD, ale nie oznacza to ze od razu jest słabej jakości. To nie jest błąd z konwersją danych, bo wszędzie tak wyświetla ten exp i lvl i w menu broni się zgadza wszystko, gdy rozdzieliłem zapis na 3 pliki fvault to teraz działa prawidłowo, ale wole mieć to w jednym i poznać problem + słyszałem żeby mieć w jednym pliku wszystko a nie rozdzielać.


Użytkownik NwNwH edytował ten post 12.08.2024 22:34

  • +
  • -
  • 0

#8 Boski Z Polski

    Profesjonalista

  • Użytkownik

Reputacja: 82
Zaawansowany

  • Postów:208
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Offline

Napisano 13.08.2024 10:27

+ słyszałem żeby mieć w jednym pliku wszystko a nie rozdzielać.


To źle słyszałeś. W zasadzie to właśnie powinno się rozdzielać pluginy, a zmienne przekazywać sobie natywami.

Generalnie zaleca się resetować zmienne przy wyjściu gracza na serwerze, a nie zerować w momencie nie znalezienia klucza vault.

Poza tym, wie ktoś jak przechować czas w PlayedAllTime[id], bo zrobiłem dodawanie w client_disconnect ale jak wschodze znowu i wychodze to ustawia sie czas jaki spedzilem na sesji a nie zlicza się
 

if(equal(szMessage, "/eloelo")){
new iTime;
iTime = str_to_num(PlayedAllTime[id]) + (playedTime(id));
ColorChat(id, GREEN, "Czas aktualnej sesji: %d", playedTime(id));
ColorChat(id, GREEN, "Przegrany czas allTime: %d", iTime);
return PLUGIN_HANDLED
}
tak samo komenda mi printuje tylko ten czas z playedTime


w zapisie który wysłałeś nie widzę tam chociażby linijki z kodem od zapisu czasu.

przed zapisem:
PlayedAllTime[id] += get_user_time(index, 0/1)

no i zamiast sprawdzać czy gracz wpisał komendę, to po prostu lepiej jest ją zarejestrować przez register_clcmd
  • +
  • -
  • 0

#9 NwNwH

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
Offline

Napisano 13.08.2024 20:09

 

+ słyszałem żeby mieć w jednym pliku wszystko a nie rozdzielać.


To źle słyszałeś. W zasadzie to właśnie powinno się rozdzielać pluginy, a zmienne przekazywać sobie natywami.

Generalnie zaleca się resetować zmienne przy wyjściu gracza na serwerze, a nie zerować w momencie nie znalezienia klucza vault.

Poza tym, wie ktoś jak przechować czas w PlayedAllTime[id], bo zrobiłem dodawanie w client_disconnect ale jak wschodze znowu i wychodze to ustawia sie czas jaki spedzilem na sesji a nie zlicza się
 

if(equal(szMessage, "/eloelo")){
new iTime;
iTime = str_to_num(PlayedAllTime[id]) + (playedTime(id));
ColorChat(id, GREEN, "Czas aktualnej sesji: %d", playedTime(id));
ColorChat(id, GREEN, "Przegrany czas allTime: %d", iTime);
return PLUGIN_HANDLED
}
tak samo komenda mi printuje tylko ten czas z playedTime


w zapisie który wysłałeś nie widzę tam chociażby linijki z kodem od zapisu czasu.

przed zapisem:
PlayedAllTime[id] += get_user_time(index, 0/1)

no i zamiast sprawdzać czy gracz wpisał komendę, to po prostu lepiej jest ją zarejestrować przez register_clcmd

 

Dlaczego lepiej rozdzielać pluginy i robić natywy? Jest to czasochłonne i niewygodne bo trzeba otwierać ciągle jakiś plik żeby coś innego zedytować, zresztą chodzi mi po prostu o to że tworze np public loadSystem, public loadMisje, public loadOther, tak samo z save i robie to po prostu pod inny plik fvault i wtedy działa. Resetować czyli ustawiać 0 tak?

przed zapisem czyli w client_disconnect przed saveSystem(id) ?
Staram się trzymać prawie wszystko w jednym sma i rozdzielać sobie na inne pliki w takim sensie ze np #include "files/saveload.inl" więc register_clcmd było by o wiele gorsze, a takto sobie zrobie register_clcmd tylko na say'a i potem equal'em sprawdzam co gracz wpisal i jak nie rozponaje nic to printuje ze nie znaleziono komendy tez mam system mute i prefixy co wlasnie w tej klasie dzialaja


Użytkownik NwNwH edytował ten post 13.08.2024 20:11

  • +
  • -
  • 0

#10 Boski Z Polski

    Profesjonalista

  • Użytkownik

Reputacja: 82
Zaawansowany

  • Postów:208
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Offline

Napisano 13.08.2024 21:02


Dlaczego lepiej rozdzielać pluginy i robić natywy? Jest to czasochłonne i niewygodne bo trzeba otwierać ciągle jakiś plik żeby coś innego zedytować

Z konwencji, chociażby. Teorytycznie można zrobić jeden mega wielki plugin, który będzie zawierał w sobie dosłownie wszystko co tylko się da, ale będzie to powodowało błędy chociażby z nazwami zmiennych itd. Podejrzewam, że sam compilator amxxpc ma jakąś ograniczoną liczbę znaków do wykorzystania, ale nigdy się aż tak nie wgłębiałem. Przez dzielenie pluginów łatwiej można zlokalizować błąd (tak jak w twoim przypadku), więc w skrócie: "mniej kodu = szybsze znalezienie błędu (z reguły)".


zresztą chodzi mi po prostu o to że tworze np public loadSystem, public loadMisje, public loadOther, tak samo z save i robie to po prostu pod inny plik fvault i wtedy działa. Resetować czyli ustawiać 0 tak?

zapisujesz dane i resetujesz zmienne (czyli ustawiasz 0 / false / 0.0 / "")


register_clcmd było by o wiele gorsze, a takto sobie zrobie register_clcmd tylko na say'a i potem equal'em sprawdzam co gracz wpisal i jak nie rozponaje nic to printuje ze nie znaleziono komendy tez mam system mute i prefixy co wlasnie w tej klasie dzialaja

czyli dajesz dodatkowo-zbędną robotę, pobierasz say i co każde wpisanie sprawdzasz kilkanaście razy ifami daną rzecz. Jak dla mnie zbędna rzecz, czasochłonna i nieefektywna. 
  • +
  • -
  • 0

#11 NwNwH

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
Offline

Napisano 13.08.2024 22:50

 


Dlaczego lepiej rozdzielać pluginy i robić natywy? Jest to czasochłonne i niewygodne bo trzeba otwierać ciągle jakiś plik żeby coś innego zedytować

Z konwencji, chociażby. Teorytycznie można zrobić jeden mega wielki plugin, który będzie zawierał w sobie dosłownie wszystko co tylko się da, ale będzie to powodowało błędy chociażby z nazwami zmiennych itd. Podejrzewam, że sam compilator amxxpc ma jakąś ograniczoną liczbę znaków do wykorzystania, ale nigdy się aż tak nie wgłębiałem. Przez dzielenie pluginów łatwiej można zlokalizować błąd (tak jak w twoim przypadku), więc w skrócie: "mniej kodu = szybsze znalezienie błędu (z reguły)".

 


zresztą chodzi mi po prostu o to że tworze np public loadSystem, public loadMisje, public loadOther, tak samo z save i robie to po prostu pod inny plik fvault i wtedy działa. Resetować czyli ustawiać 0 tak?

zapisujesz dane i resetujesz zmienne (czyli ustawiasz 0 / false / 0.0 / "")

 


register_clcmd było by o wiele gorsze, a takto sobie zrobie register_clcmd tylko na say'a i potem equal'em sprawdzam co gracz wpisal i jak nie rozponaje nic to printuje ze nie znaleziono komendy tez mam system mute i prefixy co wlasnie w tej klasie dzialaja

czyli dajesz dodatkowo-zbędną robotę, pobierasz say i co każde wpisanie sprawdzasz kilkanaście razy ifami daną rzecz. Jak dla mnie zbędna rzecz, czasochłonna i nieefektywna. 

 

Jak wszystko dasz do jednego sma i będzie tego bardzo duzo to kompilator moze sie zacinac, ale ja mam po prostu rozrzucone to tak jak napisałem wyżej dla mnie to jest o wiele lepsze niz robienie natywów itd. Nie wiem jakie błędy z nazwami zmiennymi ci chodzi, i te "itd", nigdy nie miałem takiego problemu.

Z racji że mod który robię nie należy do najprościejszych to mam bardzo dużo komend, robienie każdej komendy na register_clcmd by kosztowało o wiele więcej czasu bo nie każda komenda kieruje do jakiejś innej klasy tylko od razu mogę w tym equal'u np wyświetlić motd i po co mam robić specjalnie nową klasę żeby taką drobnostkę zrobić, na serwerze również mam system autoryzacji więc musiałbym w każdej klasie każdej komendy robic warunek czy gracz jest zalogowany a zrobienie tego od razu przy rejestracji clcmd jest chyba niemożliwe ale tego nei jestem pewien, plusem tez jest ze moge zrobic komendy na ! jak w cs go albo na inny prefix taka tam drobnostka. 


Użytkownik NwNwH edytował ten post 13.08.2024 23:00

  • +
  • -
  • 0

#12 NwNwH

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:18
Offline

Napisano 15.08.2024 18:28

Ogółem to problem naprawiony, po prostu nie dałem szHelp do parse(szData,
Dzięki za pomoc w innych rzeczach.


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych