Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

[ROZWIĄZANE] Wczytywanie nVault dla graczy, których nie ma na serwerze (poprzez nick)


Najlepsza odpowiedź BlackPerfum, 11.06.2014 20:00

Czy po tym nie powinno być returna żebvy wyjść z funkcji? Bo tak to wykona się if(typ == 1)    set_array(3,ranga_name[0],get_parm(4)) i dla pobierania rangi zawsze będzie jedna wartość.

Sory zapomniałem dopisać else przed if ale można jeszcze szybciej

 

 

Tak wygląda poprawny kod:

public PobierzDane(id,parm)
{
	if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE;
	
	new vaultkey[128], vaultdata[128],name[32],typ,x;
	get_array(1,name,31)
	typ = get_parm(2)
	formatex(vaultkey, charsmax(vaultkey), "%s-aim", name);
	if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata)))
	{
		new danegracza[5][8];
		parse(vaultdata, danegracza[0],7,danegracza[1],7,danegracza[2],7,danegracza[3],7, danegracza[4],7);
		x = str_to_num(danegracza[typ])
	}
	if(typ == 1)	set_array(3,ranga_name[x],get_parm(4))
	
	return x
}

A i jeszcze po co typ = get_param(2) skoro w nagłówku funkcji jest to już przesłane?

I jeszcze po co get_array() skoro w nagłówku funkcji mamy nick?

Szlag mnie trafi :( Przeczytaj 10 razy odnośniki w moim poście okey??

 

 

O tym:

 

Hmm poza tym że jest sporo błędów to główne założenie jest całkowicie do bani    (joke), a tak na prawdę to poczytaj sobie troszkę tutaj a szczególnie o 3 parametrze, troszkę tutaj,tutaj i tutaj. No możesz jeszcze to przeczytać. Tak z czystej ciekawości co przechowuje zmienna danegracza[0] po udanym wczytaniu danych??

 

 

 

Ale i tak ci napisze o co kaman. Jeśli w register_native argument nr. 3 będzie równy 0 (domyślnie jest równy 0) to natyw będzie miał tylko dwa argumenty:

1 - id pluginu w którym został użyty

2- ilość parametrów

 

Dlatego z tak ustawionym register_native trzeba pobierać argumenty!!! Oraz nie dostaje się ich w nagłówku.

 

Błędy w twoim kodzie:

1 - Błędne argumenty + z góry ustaliłeś ich ilość a wtedy nie zadziała dodawanie ich tyle ile się chce można zapobiec temu poprzez np za pomocą dodania po argumentach"any:..."/"_:..."

2- zwróconej wartości nie trzeba zerować gdyż nowo stworzona zmienna posiada wartość "0"

3. Za każdym razem ustawiasz 3 parametrowi wartość pobranej wartości :D Nie uwzględniłeś momętu gdy zostanie pobrana wartość np. ilość zabić he (po to dawałem if(typ ==1))

 

Chyba tyle

Przejdź do postu


  • Zamknięty Temat jest zamknięty
15 odpowiedzi w tym temacie

#1 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 03.06.2014 07:19

Witam. Mam ogromny problem z tym pluginem.

public plugin_natives()
{
      register_native("rangi_get_user_ranga", "PobierzNazweRangi")
      register_native("rangi_get_user_knife", "PobierzKnife")
      register_native("rangi_get_user_knifehs", "PobierzKnifeHs")
      register_native("rangi_get_user_he", "PobierzHe")
}

public PobierzNazweRangi(name[], Return[], len)
      PobierzDane(name, 1, Return, len)

public PobierzKnife(name[])
      PobierzDane(name, 2)
      
public PobierzKnifeHs(name[])
      PobierzDane(name, 3)
      
public PobierzHe(name[])
      PobierzDane(name, 4)
      
PobierzDane(name[], typ, ...)
{
	if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE;
	
      new vaultkey[128], vaultdata[128];
	
	format(vaultkey, charsmax(vaultkey), "%s-aim", name);
	
	new odczyt;

	if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata)))
	{
		new danegracza[5][8];
		parse(vaultdata, danegracza[0], 7, danegracza[1], 7, danegracza[2], 7, danegracza[3], 7, danegracza[4]);
		
		switch(typ)
		{
                  case 1: odczyt = str_to_num(danegracza[1]);
                  case 2: odczyt = str_to_num(danegracza[2]);
                  case 3: odczyt = str_to_num(danegracza[3]);
                  case 4: odczyt = str_to_num(danegracza[4]);
            }
	}
	
	else
	{
		switch(typ)
		{
                  case 1: odczyt = 1
                  case 2: odczyt = 0
                  case 3: odczyt = 0
                  case 4: odczyt = 0
            }
	}
	
	if(typ == 1)
        {
	      copy(Return, len, ranga_name[odczyt]);
	}
	
	else
            return odczyt;
}

Plik .inc

#if defined _rangi_included
  #endinput
#endif
#define _rangi_included

native rangi_get_user_ranga(name[], Return[], len); 
native rangi_get_user_knife(name[]);
native rangi_get_user_knifehs(name[]);
native rangi_get_user_he(name[]);

I tu zaczynają się problemy.

Plugin zapisuje zabicia graczy (nożem (hs), he). Ale jest także ranga, która jest stringiem (ranga_name to tablica z nazwami rang).

 

W innym pluginie chcę to pobrać podając nick gracza, a potem odczytać z vault za pomocą tego nicku, jego dane.

 

Tu mam ogromne problemy. Jeszcze jakby wszystko było liczbą całkowitą to może bym zrobił, ale jeden typ jest stringiem i trzeba skopiować wynik odczytu do tablicy (przesłać tablice przez parametr, a potem zwrócić ja).

Też mam wątpliwości co do przesyłania tych tablic.

Mógłby ktoś podpowiedzieć?

 


  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#2 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 04.06.2014 21:17

Hmm poza tym że jest sporo błędów to główne założenie jest całkowicie do bani   :wstyd: (joke), a tak na prawdę to poczytaj sobie troszkę tutaj a szczególnie o 3 parametrze, troszkę tutaj,tutaj i tutaj. No możesz jeszcze to przeczytać. Tak z czystej ciekawości co przechowuje zmienna danegracza[0] po udanym wczytaniu danych??

 

Ja bym to zrobił tak:

 

W pluginie z rangami:

public plugin_natives()	register_native("PobierzDane", "_PobierzDane")

public _PobierzDane(id,parm)
{
	if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE;
	
	new vaultkey[128], vaultdata[128],name[32],typ;
	get_array(1,name,31)
	typ = get_parm(2)
	formatex(vaultkey, charsmax(vaultkey), "%s-aim", name);
	if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata)))
	{
		new danegracza[5][8];
		parse(vaultdata, danegracza[0], 7, danegracza[1], 7, danegracza[2], 7, danegracza[3], 7, danegracza[4],7);
		
		if(typ == 1)
		{
			set_array(3,ranga_name[str_to_num(danegracza[1])],get_parm(4))
			return 1
		}
		else return str_to_num(danegracza[typ])
	}
	if(typ == 1)	set_array(3,ranga_name[1],get_parm(4))
	
	return 0
}

W pliku ".inc"

enum RodzajDanych {NazwaRangi=1,ZabiciaNozem,ZabiciaNozemHS,ZabiciaHe}
native PobierzDane(_name[],_typ,any:...)

A teraz jak pobrać wartość? nic prostszego

//Mamy sobie takie zmienne, (w name już jest wpakowana nazwa gracza)
new name[32],Ranga[9874932874]

//Pobieram nazwe rangi
PobierzDane(name,NazwaRangi,Ranga,9874932873)
//W zmiennej "Ranga" znalazła się nazwa rangi gracza o nicku "name"
//Dodatkowo zwraca czy znaleziono range

//Pobieram ilość zabić nożem
new KillKnife = PobierzDane(name,ZabiciaNozem)

//Pobieram ilość zabić nożem z hs
new KillKnifeHS = PobierzDane(name,ZabiciaNozemHS)

//Pobieram ilość zabić He
new KillHe = PobierzDane(name,ZabiciaHe)

W kodzie wyżej załozyłem że poprawnie ułożyłeś argumenty w parse ale możesz na wszelki wypadek pokazać funkcję zapisującą albo sam 3 parametr nvault_set bo coś czuję że się pomyliłeś ale mogę się mylić

 


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#3 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Autor tematu
  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 05.06.2014 06:11

Poprawie to i edytuje tego posta dodając poprawiony kod. Przejscie na enum... Nie pomyslalem.

 

 

ZapiszDane:

format(vaultdata, charsmax(vaultdata), "%i %i %i %i %i", xp_gracza[id], poziom_gracza[id], knife_gracza[id], knifehs_gracza[id], he_gracza[id]);

.inc

#if defined _rangi_included
  #endinput
#endif
#define _rangi_included

enum RodzajDanych
{
      RANGANAME = 1,
      KNIFE,
      KNIFEHS,
      HE
}

native rangi_pobierz_dane(_name[], _typ, any:...)

Reszta kodu:

public plugin_natives()
      register_native("rangi_pobierz_dane", "PobierzDane")
      
public PobierzDane(name[], param)
{
    if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE;
    
      new vaultkey[128], vaultdata[128];
    
    format(vaultkey, charsmax(vaultkey), "%s-aim", name);
    
    new typ = get_param(2);

    if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata)))
    {
        new danegracza[5][8];
        parse(vaultdata, danegracza[0], 7, danegracza[1], 7, danegracza[2], 7, danegracza[3], 7, danegracza[4]);
        
        if(typ == 1)
                  set_array(3, ranga_name[str_to_num(danegracza[1])], get_param(4))
            
            else
                  return str_to_num(danegracza[typ])
    }
    
    else
    {
            if(typ == 1)
                  set_array(3, ranga_name[0], get_param(4))
            
            else
                  return 0
    }
    
    return PLUGIN_CONTINUE
}

Co tu jeszcze jest namieszane?


  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#4 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 10.06.2014 07:26

Wszystko okey. Jedynie to:

Dodatkowo zwraca czy znaleziono range

Nie będzie działać

 

Ja wolę jak coś przejrzyście wygląda i nie jest oddalone o pare km od siebie bo nie mam dużego monitora   :D (marnujesz returna na końcu funkcji :D ten na 32 lini zwraca to samo co na 35 :D połącz je )

 

 

ranga_name[0]

Na pewno ma być 0??

 

 

Bo tu dawałeś 1

 

copy(Return, len, ranga_name[odczyt]);

 

 


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#5 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Autor tematu
  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 10.06.2014 07:54


Wszystko okey. Jedynie to:

'BlackPerfum', dnia 04 Cze 2014 - 22:17, napisał:

Dodatkowo zwraca czy znaleziono range

Nie będzie działać



Ja wolę jak coś przejrzyście wygląda i nie jest oddalone o pare km od siebie bo nie mam dużego monitora :D (marnujesz returna na końcu funkcji :D ten na 32 lini zwraca to samo co na 35 :D połącz je )


 

Wat???

 

Jak połączyć? Nie rozmumiem.

Co do zwracania czy znaleziono to nie potrzebne mi to.

 


'TibacK', dnia 05 Cze 2014 - 07:11, napisał:

ranga_name[0]

Na pewno ma być 0??





Bo tu dawałeś 1



'TibacK', dnia 03 Cze 2014 - 08:19, napisał:

copy(Return, len, ranga_name[odczyt]);


 

Nie bo pierwsza nazwa rangi to Szeregowy:

new ranga_name[][] = 
{
	"Szeregowy",
	"Starszy Szeregowy",
        [...]
}

  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#6 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 10.06.2014 10:59

Wat???
Jak połączyć? Nie rozmumiem.

Tak:

public PobierzDane(id,parm)
{
	if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE;
	
	new vaultkey[128], vaultdata[128],name[32],typ,x;
	get_array(1,name,31)
	typ = get_parm(2)
	formatex(vaultkey, charsmax(vaultkey), "%s-aim", name);
	if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata)))
	{
		new danegracza[5][8];
		parse(vaultdata, danegracza[0], 7, danegracza[1], 7, danegracza[2], 7, danegracza[3], 7, danegracza[4],7);
		
		x = str_to_num(danegracza[typ])
		if(typ == 1)	set_array(3,ranga_name[x],get_parm(4))
	}
	if(typ == 1)	set_array(3,ranga_name[0],get_parm(4))
	
	return x
}

Widzisz jest tylko 1 return na końcu + pobierając nazwe rangi gracza zwraca numer jego rangi (bajer wynikający z uproszczenia kodu jakby tak zawsze było :D)

 

Na przyszłośc używaj numerowania liń jeśli:

- to do czegoś potrzebne

- nie zawija to tekstu

- umieszczasz kod zgodnie z liniami a nie co drugą pomijasz


Użytkownik BlackPerfum edytował ten post 10.06.2014 11:01

  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#7 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Autor tematu
  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 11.06.2014 18:14


if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata))) 
{ 
     new danegracza[5][8]; 
     parse(vaultdata, danegracza[0], 7, danegracza[1], 7, danegracza[2], 7, danegracza[3], 7, danegracza[4],7); 
     x = str_to_num(danegracza[typ])
     if(typ == 1) set_array(3,ranga_name[x],get_parm(4)) 

     //tu return ?
}

 

Czy po tym nie powinno być returna żebvy wyjść z funkcji? Bo tak to wykona się if(typ == 1)    set_array(3,ranga_name[0],get_parm(4)) i dla pobierania rangi zawsze będzie jedna wartość.

 

Co Ty na to?

 

A i jeszcze po co typ = get_param(2) skoro w nagłówku funkcji jest to już przesłane?
I jeszcze po co get_array() skoro w nagłówku funkcji mamy nick?

 

Wytłumacz.

 

Wypracowany kod:

Spoiler

  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#8 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 11.06.2014 20:00   Najlepsza odpowiedź

Czy po tym nie powinno być returna żebvy wyjść z funkcji? Bo tak to wykona się if(typ == 1)    set_array(3,ranga_name[0],get_parm(4)) i dla pobierania rangi zawsze będzie jedna wartość.

Sory zapomniałem dopisać else przed if ale można jeszcze szybciej

 

 

Tak wygląda poprawny kod:

public PobierzDane(id,parm)
{
	if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE;
	
	new vaultkey[128], vaultdata[128],name[32],typ,x;
	get_array(1,name,31)
	typ = get_parm(2)
	formatex(vaultkey, charsmax(vaultkey), "%s-aim", name);
	if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata)))
	{
		new danegracza[5][8];
		parse(vaultdata, danegracza[0],7,danegracza[1],7,danegracza[2],7,danegracza[3],7, danegracza[4],7);
		x = str_to_num(danegracza[typ])
	}
	if(typ == 1)	set_array(3,ranga_name[x],get_parm(4))
	
	return x
}

A i jeszcze po co typ = get_param(2) skoro w nagłówku funkcji jest to już przesłane?

I jeszcze po co get_array() skoro w nagłówku funkcji mamy nick?

Szlag mnie trafi :( Przeczytaj 10 razy odnośniki w moim poście okey??

 

 

O tym:

 

Hmm poza tym że jest sporo błędów to główne założenie jest całkowicie do bani    (joke), a tak na prawdę to poczytaj sobie troszkę tutaj a szczególnie o 3 parametrze, troszkę tutaj,tutaj i tutaj. No możesz jeszcze to przeczytać. Tak z czystej ciekawości co przechowuje zmienna danegracza[0] po udanym wczytaniu danych??

 

 

 

Ale i tak ci napisze o co kaman. Jeśli w register_native argument nr. 3 będzie równy 0 (domyślnie jest równy 0) to natyw będzie miał tylko dwa argumenty:

1 - id pluginu w którym został użyty

2- ilość parametrów

 

Dlatego z tak ustawionym register_native trzeba pobierać argumenty!!! Oraz nie dostaje się ich w nagłówku.

 

Błędy w twoim kodzie:

1 - Błędne argumenty + z góry ustaliłeś ich ilość a wtedy nie zadziała dodawanie ich tyle ile się chce można zapobiec temu poprzez np za pomocą dodania po argumentach"any:..."/"_:..."

2- zwróconej wartości nie trzeba zerować gdyż nowo stworzona zmienna posiada wartość "0"

3. Za każdym razem ustawiasz 3 parametrowi wartość pobranej wartości :D Nie uwzględniłeś momętu gdy zostanie pobrana wartość np. ilość zabić he (po to dawałem if(typ ==1))

 

Chyba tyle


  • +
  • -
  • 2
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#9 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Autor tematu
  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 11.06.2014 20:29

Dobra. A jak zmienie 3 parametr w register_native na 1?
To wtedy mogę pobierać z nagłówka?
  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#10 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 11.06.2014 20:50

Dobra. A jak zmienie 3 parametr w register_native na 1?
To wtedy mogę pobierać z nagłówka?

Tak ale wtedy nagłówek musi mieć liczbe argumentów równą 1/0 (policz samemu)  :D czyli używasz "..." lub czegoś podobnego (jest parę sposobów)

 

 

Osobiście wolę w natywie w którym mam zwracać tekst używać argumentu nr. 3 ustawionego na 0 gdyż jest mi łatwiej/szybciej :D

Nie polegaj na nagłówku (jeśli nie musisz lub zbyt dużo robisz na nim operacji) bo on ma spore ograniczenia (tzn. ogranicza ciebie a nie funkcję)


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#11 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Autor tematu
  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 11.06.2014 20:58

To ja juz wole pobierac przez get_param()


ale po co mi wtedy ilosc parametrow i id pluginu???
  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#12 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 11.06.2014 21:13

id pluginu jest ci nie potrzebne (bynajmniej tutaj) ale dzięki ilości parametrów można np. zrobic zabezpieczenie przy nie prawidłowej ilości argumentów co do ich wartości :D

 

Przykład:

public PobierzDane(id,parm)
{
	if(vault == INVALID_HANDLE || parm < 2 || parm > 4) return 0 // Tutaj go użyłem
	
	new vaultkey[128], vaultdata[128],name[32],typ,x;
	get_array(1,name,31)
	typ = get_parm(2)

	switch(typ) // I tutaj (dodatkowo w default sprawdzam czy podałeś prawidłowy typ :D)
	{
		case 1:if(parm != 4) return 0
		case 2,3,4:if(parm != 2) return 0
		default: return 0
	}
	formatex(vaultkey, charsmax(vaultkey), "%s-aim", name);
	if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata)))
	{
		new danegracza[5][8];
		parse(vaultdata, danegracza[0],7,danegracza[1],7,danegracza[2],7,danegracza[3],7, danegracza[4],7);
		x = str_to_num(danegracza[typ])
	}
	if(typ == 1)	set_array(3,ranga_name[x],get_parm(4))
	
	return x
}

  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#13 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Autor tematu
  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 12.06.2014 06:14

aha. Juz wiem.

get_array pobiera pierwszy parametr do tablicy, set_array ustawia.
To mamy za sobą.

Dobra. Popatrz na koniec kodu.

Jesli( typ to 1) ustaw nazwe rangi
return x

czyli jesli typ bedzie rowny jeden to wtedy ten natyw zwroci nazwe rangi i wartosc jeden?

 

Do czego służy param_convert() ?

 

Wypracowany kod:

Spoiler

  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#14 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 12.06.2014 12:37


Jesli( typ to 1) ustaw nazwe rangi
return x
czyli jesli typ bedzie rowny jeden to wtedy ten natyw zwroci nazwe rangi i wartosc jeden?
Nie, wtedy do argumentu nr. 3 wpakuje nazwe rangi, o długości podanej w agumencie nr.4 a zwóci numer rangi

 

 


Do czego służy param_convert() ?
Parm convert używasz gdy w register_native 3 argument ustawisz na 1 czyli dla nas jest to nie potzebne
  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#15 TibacK

    Diler pod gimnazjum dla niepełnosprawnych dzieci

  • Autor tematu
  • Power User

Reputacja: 466
Wszechobecny

  • Postów:2448
Offline

Napisano 12.06.2014 12:52

Dobra.
Dziekuje Ci bardzo. Pomogles mi wiele. Tak to bym zrobil niepotymalnie i kazde w osobnym natywie bo bym nie mial pomyslu.

Ale do czego sluzy param_convert()
  • +
  • -
  • 0

Sprzedam Paczkę CoD pod CS 1.6 (JEST WIELE WERSJI DO WYBORU TEJ PACZKI) na lvl od 201 - 601

Silnik (8 nowych statystyk, poprawiony zapis, dodatkowy exp, pozbyto się CurWeapon). Ponad 100 perków (do wyboru do koloru). Sklep, NOWE MISJE (QUESTY), premium i super premium, AUKCJE, KLANY, zapis nVault, 4 zestawy modeli bronii do wyboru!

JESTEŚ ZAINTERESOWANY KUPNEM? NAPISZ WIADOMOŚĆ DO MNIE!


#16 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 453
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 12.06.2014 13:51

param_convert() używasz w natywie który zarejsetrowałeś z 3 arg. na 1

Co to robi?? Nigdy mnie to jakoś nie trapiło ale zakłądam że konwertuje adres danych ( == zmienna{x} ?? )

Bez tego nie odczytasz ciągów nie określonych tzn. Jak w nagówku natywu zrobisz tak:



public JakisTamNatyw(Tekst[5],Zmienna,Tablica[2])

To nie jest ci to potrzebne ale jeśli zrobisz ciąg wielkości nie określonej:



public JakisTamNatyw(Tekst[],Zmienna,Tablica[])

To za nim zaczniesz operować nad zmienną Tekst i Tablica musisz je najpierw skonwertować za pomocą param_convert()

 


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika




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

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