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

Zapis 1(true) do nvault


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

#1 Toldi

    Czempion

  • Power User

Reputacja: 259
Wszechwidzący

  • Postów:841
  • Imię:Mateusz
  • Lokalizacja:wies
Offline

Napisano 12.10.2017 19:11

Siemka. Mam takie pytanie do was. Jak zrobić żeby plugin zapisywał w nvault tylko wartości true (1)? Mam taką pętlę w zapisie:

for(new i; i < MAX_SKINS_KNIFE; i++)
    {    
        format(String, 7, "^"%d^" ", skins_knife[id][i][1]);
        add(vaultdata, 255, String);
        
    }

Próbowałem zrobić to w taki sposób lecz wtedy po zmianie mapy serwer dostaje crash z powodem naruszenia pamięci (jakoś tak).

for(new i; i < MAX_SKINS_KNIFE; i++)
    {    
        if(skins_knife[id][i][1] == 1) 
        {
            format(String, 7, "^"%d^" ", skins_knife[id][i][1]);
            add(vaultdata, 255, String);
        }
        
    }

i jeszcze w taki sposób chociaż to to samo w sumie.

for(new i; i < MAX_SKINS_KNIFE; i++)
    {    
        if(skins_knife[id][i][1] == 0) // lub też !=1
        continue;

            format(String, 7, "^"%d^" ", skins_knife[id][i][1]);
            add(vaultdata, 255, String);
        
        
    }

Pierwszy raz stosuję zapis taki po przez pętlę bo miałem nadzieje że mocno oszczędzę pamięć i szybkość wczytywanie się serwera gdyby do vault trafiały tylko zmiennie = 1. Aktualnie zapisują się też 0 (false) i już to widzę gdy na serwer wejdzie parę set osób zapis wtedy będzie mocno zasyfiony przez co zwolni mi serwer a tego chcę uniknąć. Ktoś coś poradzi?

 


  • +
  • -
  • 0

#2 Robiin

    Godlike

  • Support Team

Reputacja: 1 106
Super Hero

  • Postów:2 048
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 12.10.2017 20:23

new bool:zyje[33];
if(is_user_alive(id)) zyje[id]=true

if(zyje[id]) wykonaj dalsza instrukcje

Nie musisz sprawdzać po wartościach, a skoro jest to boolean, to lets give it a try.


  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#3 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 12.10.2017 21:05

+ za chęć optymalizacji pluginu, jednak już na wstępie poleciłbym Ci zastanowić się nad algorytmem wczytywania danych dla powyższej metody zapisu - możesz tam napotkać pewien problem ;)


  • +
  • -
  • 0

#4 Toldi

    Czempion

  • Autor tematu
  • Power User

Reputacja: 259
Wszechwidzący

  • Postów:841
  • Imię:Mateusz
  • Lokalizacja:wies
Offline

Napisano 12.10.2017 21:40

Zrobiłem ten zapis lecz gdy kupie skina z pozycji np. 9 i 12 to po zmianie mapy w menu skinów mam odblokowanego skina z pozycji 1 i 2. Przynajmniej wiem czym to jest spowodowane lecz nie potrafię wam to w czytelny sposób przedstawić :). Wymyślałem żeby zrobić zmienną bool która przybiera wartość true; gdy gracz kupi pierwszego skina i w zapisie sprawdzać że jeżeli jest równa 0 to po prostu nie będzie tego gracza wrzucać do zapisu. Na pewno zawsze trochę to zoptymalizuje plugin przed graczami, którzy wbijają na serwer tylko od tak sobie. Myślałem też zrobić że jeżeli gracz nie ma skina do żeby dodawało " "(pustka w klamrach) ale to w sumie to samo jak by się tam znalazło 0 no chyba że się mylę.


  • +
  • -
  • 0

#5 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 13.10.2017 19:09

Rzeczywiście, wstawienie pustego pola w cudzysłowy nic nie zmieni. Aby osiągnąć pożądany efekt musiałbyś stworzyć zapis oparty na "wyliczaniu" posiadanych przez gracza skinów.

 

Jakby to wyglądało:

Załóżmy, że gracz posiada 3 skiny z 5 istniejących:

  ID  |  Nazwa skinu

   1  |  Skin nr 1 *
   2  |  Skin nr 2
   3  |  Skin nr 3
   4  |  Skin nr 4 *
   5  |  Skin nr 5 *

* Skiny posiadane przez gracza

Obecny zapis (który chciałbyś zoptymalizować) wygląda w ten sposób:

"nazwa gracza" "1" "0" "0" "1" "1"

Chcąc usunąć te zera w środku, można zrobić to innym sposobem:

"nazwa gracza" "1" "4" "5"

W powyższym zapisie użyłem jedynie ID danego skinu, aby zasygnalizować, że gracz posiada skin z tym właśnie ID.

Odczytując linię zapisu, wystarczyłoby odczytać kolejne ID skinów i zmienić wartość zmiennej jakasZmienna[id][ID_SKINU] = true;

 

W ten sposób częściowo zmniejszysz rozmiar pliku nVault.


Użytkownik _McHappy edytował ten post 13.10.2017 19:10

  • +
  • -
  • 1

#6 Toldi

    Czempion

  • Autor tematu
  • Power User

Reputacja: 259
Wszechwidzący

  • Postów:841
  • Imię:Mateusz
  • Lokalizacja:wies
Offline

Napisano 14.10.2017 17:37

No właśnie tak myślałem żeby ID broni robić i po tym zapisywać/odczytywać ich z zapisu wtedy bym nie musiał wszystkich wartości zapisywać tylko wartość =true; oraz kolejność skinów w menu podczas odczytu nie była by po kolei tylko w zależności od numeru skina w menu. Dzięki Panowie za porady. Jedynie co mogę dać to + ale zawsze coś niż nic :). Jeszcze raz dzięki :)


  • +
  • -
  • 0




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

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