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.
|

Static, new [33] lub [32] ?
#1
Napisano 21.11.2012 16:14
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.
#2
Napisano 21.11.2012 16:39
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. Menu Wiadomosci HUD [ | | | | | | | | | | ] - 100%
2. HUD Advertisements [ _ _ _ _ _ _ _ _ _ _ ] - 1%
#3
Napisano 21.11.2012 16:40
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.
If you can dream it, you can do it.
#4
Napisano 21.11.2012 17:13
Albo ja nie umiem liczyć, albo nie wiem, ale chyba od 0 do 32, to jest 33 elementów?new zmienna[33] określa wielkość tablicy w tym przypadku jest ona 32 elementowa ( 0, 32 ).

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.
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#5
Napisano 21.11.2012 17:35
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
#6
Napisano 21.11.2012 17:40
new NameID[32]; get_user_name(id, NameID, 32);Zamień na:
new NameID[32]; get_user_name(id, NameID, 31);
Lub charsmax(NameID)
If you can dream it, you can do it.
#7
Napisano 21.11.2012 17:40
I nie ma potrzeby tworzyć zmienne do statów, co mają po 32 elementy, bo nie ma liczb, które mają tyle cyfr.
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
#8
Napisano 21.11.2012 19:39
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?
#9
Napisano 21.11.2012 19:47
Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!
Na zlecenie i bez zlecenia zresztą też!
#10
Napisano 21.11.2012 19:57
public plugin_end(){ ZapiszPostep(0); }To plugin zapisze dane dla gracza którego index wynosi 0, tym graczem jest serwer

Najlepiej zapisywać dane gracza, kiedy wychodzi on z serwera, ale o tym masz napisane wyżej

If you can dream it, you can do it.
#11
Napisano 21.11.2012 20:02
#12
Napisano 21.11.2012 20:04
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL
If you can dream it, you can do it.
Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych