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

Static, new [33] lub [32] ?


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

#1 nPaul

    Zaawansowany

  • Użytkownik

Reputacja: 8
Nowy

  • Postów:142
  • Imię:Piotr
  • Lokalizacja:United Kingdom / Hereford
Offline

Napisano 21.11.2012 16:14

Witam.
Mam pytanie czym różni się zmienna globalna od zmiennej statycznej. (Nie dawać mi linków do poradników bo plusa nie dam bo czytałem ale nie rozumiem)
Oraz co jest lepiej użyc
new
czy
static

Oraz jak piszemy new zmienna[33] czy new zmienna[32]
Dlaczego 32 a dlaczego 33? To jest ilość slotów? Co lepiej użyć new zmienna[33] czy new zmienna[ILOŚĆ SLOTÓW + 1]

Dzięki za pomoc. Kto pomoze dostaje plusika.
  • +
  • -
  • 0

#2 MarcineN

    Pomocny

  • Użytkownik

Reputacja: 5
Nowy

  • Postów:40
  • GG:
  • Imię:Marcin
  • Lokalizacja:pruszków
Offline

Napisano 21.11.2012 16:39

Lepiej używać new zmienna[33] ponieważ jeśli użyjesz ją do funkcji która posiada (nie wiem jak to wytłumaczyć) Posiada "czegoś" więcej niż 32 a ty użyłeś zmienna[32] to serwer może sie scrashować..

Zmiennej statycznej używamy w 1 funkcji a zmienna globalną możemy urzyć w każdej funkcji swojego kodu..

Mam nadzieje że zrozumiesz i nie popełniłem błędu.
Oj troche gorzej wytłumaczyłem niż kolega niżej:D

Użytkownik MarcineN edytował ten post 21.11.2012 16:42

  • +
  • -
  • 1




1. Menu Wiadomosci HUD [ | | | | | | | | | | ] - 100%
2. HUD Advertisements [ _ _ _ _ _ _ _ _ _ _ ] - 1%


#3 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 21.11.2012 16:40

new zmienna[33] określa wielkość tablicy w tym przypadku jest ona 33 elementowa ( 0, 32 ). Co lepiej użyć, jeśli serwer ma określoną liczbę slotów to zmienna[ilość_slotów + 1], ponieważ zaoszczędzisz na tym, będzie mniej zajmowanej pamięci. Najczęściej robimy taką zmienną, aby przetrzymać informacje dla każdego gracza z osobna.

Między static, a new co najlepiej użyć ? Zależy co chcesz zrobić.
Tutaj masz opis co robi zmienna static: http://amxx.pl/topic...enna-statyczna/

Gdybyś w tej samej funkcji zmienił static na new, to twoja zmienna zawsze miałaby tą samą wartość np.
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "speedkill"

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_clcmd("say /test", "Test");
}
public Test(id){
    new g_Test;
    g_Test++;

    client_print(id, 3, "Wartosc zmiennej g_Test wynosi: %d", g_Test); // 1
}

Zawsze dla każdego gracza będzie pokazywać 1. W przypadku static dla gracza, który wpisał to jako pierwszy pokaże 1, dla gracza który wpisał to jako drugi pokaże 2, dla gracza który wpisał tą komende jako trzeci pokaże 3 itd.
  • +
  • -
  • 4

If you can dream it, you can do it.


#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 21.11.2012 17:13

new zmienna[33] określa wielkość tablicy w tym przypadku jest ona 32 elementowa ( 0, 32 ).

Albo ja nie umiem liczyć, albo nie wiem, ale chyba od 0 do 32, to jest 33 elementów? ^^


Ogólnie jeśli zmienna jest tworzona tak "zmienna[33]", to oznacza że mamy 33 elementy (tak jak wyżej po porawce) i możemy operować na indeksach od 0 do 32, a jak wiadomo maksymalna liczba graczy na serwerze to 32, a indeksowanie graczy zaczyna się od 1, dlatego przeważnie tworzy się tablice 33 elementowe.
  • +
  • -
  • 4

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#5 nPaul

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 8
Nowy

  • Postów:142
  • Imię:Piotr
  • Lokalizacja:United Kingdom / Hereford
Offline

Napisano 21.11.2012 17:35

Aha okej dziękuje plusy poleciały a teraz drugie pytanie.
Mam takie coś:

#define SLOTY 14
new gSkillPoints[SLOTY + 1], gPlayerLevel[SLOTY + 1], gPlayerXP[SLOTY + 1];

+ zapis i wczytywanie

public ZapiszPostep(id){	
	new NameID[32]; 
	get_user_name(id, NameID, 32);
	
	//new AuthID[35]; 
	//get_user_authid(id, AuthID, 34); 
	
	new vaultkey[64], vaultdata[256]; 
	format(vaultkey, 63, "%s-XP", NameID); 
	format(vaultdata, 255, "%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#", gPlayerXP[id], gPlayerLevel[id], gSkillPoints[id], gSkill[id][HP], gSkill[id][ARMOR], gSkill[id][FLASH], gSkill[id][FROST], gSkill[id][HEG], gSkill[id][LOS], gSkill[id][MEDKIT], gSkill[id][STEALTH], gSkill[id][ODRODZENIE],
	gSkill[id][SKOK], gSkill[id][OKULARY], gSkill[id][PUSH], gSkill[id][XP]);
	
	nvault_set(gNvault, vaultkey, vaultdata); 
	
	return 0;
}

public WczytajPostep(id){
	new NameID[32]; 
	get_user_name(id, NameID, 32);
	
	new vaultkey[64], vaultdata[256]; 
	format(vaultkey, 63, "%s-XP", NameID); 
	format(vaultdata, 255, "%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#", gPlayerXP[id], gPlayerLevel[id], gSkillPoints[id], gSkill[id][HP], gSkill[id][ARMOR], gSkill[id][FLASH], gSkill[id][FROST], gSkill[id][HEG], gSkill[id][LOS], gSkill[id][MEDKIT], gSkill[id][STEALTH], gSkill[id][ODRODZENIE],
	gSkill[id][SKOK], gSkill[id][OKULARY], gSkill[id][PUSH], gSkill[id][XP]);
	
	nvault_get(gNvault, vaultkey, vaultdata,255); 
	
	replace_all(vaultdata, 255, "#", " "); 
	
	new doswiadczenie[32], poziom[32], punkty[32], skill0[32], skill1[32], skill2[32], skill3[32], skill4[32], skill5[32], skill6[32], skill7[32], skill8[32], skill9[32], skill10[32], skill11[32], skill12[32], skill13[32], skill14[32], skill15[32], skill16[32], skill17[32];
	
	parse(vaultdata, doswiadczenie, 31, poziom, 31, punkty, 31, skill0, 31, skill1, 31, skill2, 31, skill3, 31, skill4, 31, skill5, 31, skill6, 31, skill7, 31, skill8, 31, skill9, 31, skill10, 31, skill11, 31, skill12, 31, skill13, 31, skill14, 31, skill15, 31, skill16, 31, skill17, 31); 
	
	gPlayerXP[id] = str_to_num(doswiadczenie); 
	gPlayerLevel[id] = str_to_num(poziom); 
	gSkillPoints[id] = str_to_num(punkty);
	gSkill[id][HP] = str_to_num(skill0);
	gSkill[id][ARMOR] = str_to_num(skill1);
	gSkill[id][FLASH] = str_to_num(skill2);
	gSkill[id][FROST] = str_to_num(skill3);
	gSkill[id][HEG] = str_to_num(skill4);
	gSkill[id][LOS] = str_to_num(skill5);
	gSkill[id][MEDKIT] = str_to_num(skill6);
	gSkill[id][STEALTH] = str_to_num(skill7);
	gSkill[id][ODRODZENIE] = str_to_num(skill8);
	gSkill[id][SKOK] = str_to_num(skill9);
	gSkill[id][OKULARY] = str_to_num(skill10);
	gSkill[id][PUSH] = str_to_num(skill11);
	gSkill[id][XP] = str_to_num(skill12);

	return 0;
}

Moje pytanie brzmi. Dlaczego jak ktoś wyjdzie i wejdzie na serwer to ma 0 poziom a miał np. 21? Gdy wejdzie 2 raz ma np. 5 level tak jakby kogos levele przechodzily na inne konto. Z gory dzięki za pomoc. Plusy poleca
  • +
  • -
  • 0

#6 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 21.11.2012 17:40

Jak pobierasz nick:
new NameID[32]; 
get_user_name(id, NameID, 32);
Zamień na:
new NameID[32]; 
get_user_name(id, NameID, 31);

Lub charsmax(NameID)
  • +
  • -
  • 1

If you can dream it, you can do it.


#7 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 21.11.2012 17:40

Podałeś za mało kodu, żeby stwierdzić co może być nie tak. Ogólnie przeczytaj to http://amxx.pl/topic...roche-o-nvault/

I nie ma potrzeby tworzyć zmienne do statów, co mają po 32 elementy, bo nie ma liczb, które mają tyle cyfr.
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#8 nPaul

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 8
Nowy

  • Postów:142
  • Imię:Piotr
  • Lokalizacja:United Kingdom / Hereford
Offline

Napisano 21.11.2012 19:39

Tutaj zapodam trochę więcej info:

enum UMIEJETNOSCI { HP, ARMOR, FLASH, FROST, HEG, LOS, MEDKIT, STEALTH, ODRODZENIE, SKOK, OKULARY, PUSH, XP };
new gSkillPoints[SLOTY + 1], gPlayerLevel[SLOTY + 1], gPlayerXP[SLOTY + 1];

public ZapiszPostep(id){	
	new NameID[32]; 
	get_user_name(id, NameID, charsmax(NameID));
	
	//new AuthID[35]; 
	//get_user_authid(id, AuthID, 34); 
	
	new vaultkey[64], vaultdata[256]; 
	format(vaultkey, 63, "%i-XP", NameID); 
	format(vaultdata, 255, "%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#", gPlayerXP[id], gPlayerLevel[id], gSkillPoints[id], gSkill[id][HP], gSkill[id][ARMOR], gSkill[id][FLASH], gSkill[id][FROST], gSkill[id][HEG], gSkill[id][LOS], gSkill[id][MEDKIT], gSkill[id][STEALTH], gSkill[id][ODRODZENIE],
	gSkill[id][SKOK], gSkill[id][OKULARY], gSkill[id][PUSH], gSkill[id][XP]);
	
	nvault_set(gNvault, vaultkey, vaultdata); 
	
	return 0;
}

public WczytajPostep(id){
	new NameID[32]; 
	get_user_name(id, NameID, charsmax(NameID));
	
	new vaultkey[64], vaultdata[256]; 
	format(vaultkey, 63, "%i-XP", NameID); 
	format(vaultdata, 255, "%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#", gPlayerXP[id], gPlayerLevel[id], gSkillPoints[id], gSkill[id][HP], gSkill[id][ARMOR], gSkill[id][FLASH], gSkill[id][FROST], gSkill[id][HEG], gSkill[id][LOS], gSkill[id][MEDKIT], gSkill[id][STEALTH], gSkill[id][ODRODZENIE],
	gSkill[id][SKOK], gSkill[id][OKULARY], gSkill[id][PUSH], gSkill[id][XP]);
	
	nvault_get(gNvault, vaultkey, vaultdata,255); 
	
	replace_all(vaultdata, 255, "#", " "); 
	
	new doswiadczenie[32], poziom[32], punkty[32], skill0[32], skill1[32], skill2[32], skill3[32], skill4[32], skill5[32], skill6[32], skill7[32], skill8[32], skill9[32], skill10[32], skill11[32], skill12[32], skill13[32], skill14[32], skill15[32], skill16[32], skill17[32];
	
	parse(vaultdata, doswiadczenie, 31, poziom, 31, punkty, 31, skill0, 31, skill1, 31, skill2, 31, skill3, 31, skill4, 31, skill5, 31, skill6, 31, skill7, 31, skill8, 31, skill9, 31, skill10, 31, skill11, 31, skill12, 31, skill13, 31, skill14, 31, skill15, 31, skill16, 31, skill17, 31); 
	
	gPlayerXP[id] = str_to_num(doswiadczenie); 
	gPlayerLevel[id] = str_to_num(poziom); 
	gSkillPoints[id] = str_to_num(punkty);
	gSkill[id][HP] = str_to_num(skill0);
	gSkill[id][ARMOR] = str_to_num(skill1);
	gSkill[id][FLASH] = str_to_num(skill2);
	gSkill[id][FROST] = str_to_num(skill3);
	gSkill[id][HEG] = str_to_num(skill4);
	gSkill[id][LOS] = str_to_num(skill5);
	gSkill[id][MEDKIT] = str_to_num(skill6);
	gSkill[id][STEALTH] = str_to_num(skill7);
	gSkill[id][ODRODZENIE] = str_to_num(skill8);
	gSkill[id][SKOK] = str_to_num(skill9);
	gSkill[id][OKULARY] = str_to_num(skill10);
	gSkill[id][PUSH] = str_to_num(skill11);
	gSkill[id][XP] = str_to_num(skill12);

	return 0;
}

Czy możliwe że jak miałem coś takiego:
public plugin_end(){
             ZapiszPostep(0);
}
To się zmieniały levele innym osobom?
  • +
  • -
  • 0

#9 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 21.11.2012 19:47

Nie zapisuj postępu jak jest konie mapy tylko jak się gracz rozłącza: client_disconnect(index) - to jest forward
  • +
  • -
  • 2

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#10 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 21.11.2012 19:57

Jak zrobiłeś takie coś:
public plugin_end(){
	ZapiszPostep(0);
}
To plugin zapisze dane dla gracza którego index wynosi 0, tym graczem jest serwer :D

Najlepiej zapisywać dane gracza, kiedy wychodzi on z serwera, ale o tym masz napisane wyżej ;)
  • +
  • -
  • 2

If you can dream it, you can do it.


#11 nPaul

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 8
Nowy

  • Postów:142
  • Imię:Piotr
  • Lokalizacja:United Kingdom / Hereford
Offline

Napisano 21.11.2012 20:02

Dzięki do zamknięcia.
  • +
  • -
  • 0

#12 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 21.11.2012 20:04

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Temat zamknięty na prośbę użytkownika.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

If you can dream it, you can do it.





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

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