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

[ROZWIĄZANE] Wczytywanie wielu zmiennych (nvault)


Najlepsza odpowiedź GwynBleidD , 13.05.2013 17:57

Po pierwsze, stworzymy listę definów:

/* Najpierw dla mission_flags_1: */
#define MISSIONFLAG_MA_MISJE (1<<0)
#define MISSIONFLAG_BLOK1 (1<<1)
#define MISSIONFLAG_BEDZIE_LEPIEJ (1<<2)
#define MISSIONFLAG_PIERWSZA_KREW (1<<3);
/*...*/
#define MISSIONFLAG_BLOK1 (1<<30)
#define MISSIONFLAG_BLOK2 (1<<31)
 
/* I dla mission_flags_2 */
#define MISSIONFLAG_BLOK3 (1<<0)
#define MISSIONFLAG_BLOK4 (1<<1)
/* ... */
#define MISSIONFLAG_BLOK27 (1<<24)
#define MISSIONFLAG_BLOK28 (1<<25)

Tam, gdzie komentarz z kropkami, robicie analogicznie każdą flagę. Można sobie wygodniej te flagi poukładać.

 

Następnie 2 zmienne tablicowe (lub tablicę 2 wymiarową, jak wygodniej):

new mission_flags_1[33];
new mission_flags_2[33];

 

Będziemy w nich przechowywać wszystko, zamiast w wielu tablicach typu bool.

Teraz zamieniamy wszelkie użycia

if(ma_misje[id])

na:

if(mission_flags_1[id] & MISSIONFLAG_MA_MISJE)

 

zamieniamy:

ma_misje[id]=1

na:

mission_flags_1 |= MISSIONFLAG_MA_MISJE

 

zamieniamy:

ma_misje[id]=0

na:

mission_flags_1 &= ~MISSIONFLAG_MA_MISJE

 

Z resztą flag analogicznie. Później w nvault zapisujemy po prostu jako liczby mission_flags_1 i mission_flags_2. Odczytujemy również jako liczby. Ogólnie całkowicie przestajemy używać tablic bool. Jeśli jakieś wątpliwości macie jak coś zamienić, na co zamienić lub coś pominąłem, piszcie :)

 

 

 

 

 

 

Przejdź do postu


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

#1 Niide

    *** it I'm done

  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 13.05.2013 12:14

Witajcie. Mam mały problem. Wydaje mi się, że nie jest on trudny do ogarnięcia ale nie wiem jak to zrobić :/. Chodzi o to:

public odczytaj_misje(id)
{
	new vaultkey[64], vaultdata[13], cos[33], cos1[33], cos2[33], cos3[33], cos4[33], cos5[33], cos6[33], cos7[33], cos8[33], cos9[33], cos10[33], cos11[33], cos12[33],
	cos13[33], cos14[33], cos15[33], cos16[33], cos17[33], cos18[33], cos19[33], cos20[33], cos21[33], cos22[33], cos23[33], cos24[33], cos25[33], cos26[33], cos27[33], 
	cos28[33], cos29[33], cos30[33], cos31[33], cos32[33], cos33[33], cos34[33], cos35[33], cos36[33], cos37[33], cos38[33], cos39[33], cos40[33], cos41[33], cos42[33], 
	cos43[33], cos44[33], cos45[33], cos46[33], cos47[33], cos48[33], cos49[33], cos50[33], cos51[33], cos52[33], cos53[33], cos54[33], cos55[33], cos56[33], cos57[33], 
	cos58[33], cos59[33], cos60[33], cos61[33], cos62[33], cos63[33], cos64[33];; 
	new identyfikator[64];
	copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
	formatex(vaultkey, 63, "%s-%i-misje", identyfikator, cod_get_user_class(id));
	
	nvault_get(gvault, vaultkey, vaultdata, 12);
	replace_all(vaultdata, 12, "#", " ");
	
	parse(vaultdata, cos, 32, cos1, 32, cos2, 32, cos3, 32, cos4, 32, cos5, 32, cos6, 32, cos7, 32, cos8, 32, cos9, 32, cos10, 32, cos11, 32, cos12, 32, cos13, 32, 
	cos14, 32, cos15, 32, cos16, 32, cos17, 32, cos18, 32, cos19, 32, cos20, 32, cos21, 32, cos22, 32, cos23, 32, cos24, 32, cos25, 32, cos26, 32, cos27, 32, cos28, 32, 
	cos29, 32, cos30, 32, cos31, 32, cos32, 32, cos33, 32, cos34, 32, cos35, 32, cos36, 32, cos37, 32, cos38, 32, cos39, 32, cos40, 32, cos41, 32, cos42, 32, cos43, 32, 
	cos44, 32, cos45, 32, cos46, 32, cos47, 32, cos48, 32, cos49, 32, cos50, 32, cos51, 32, cos52, 32, cos53, 32, cos54, 32, cos55, 32, cos56, 32, cos57, 32, cos58, 32, 
	cos59, 32, cos60, 32, cos61, 32, cos62, 32, cos63, 32, cos64, 32);
	
	ma_misje[id] = bool:str_to_num(cos);
	blok1[id] = bool:str_to_num(cos1);
	ded[id] = str_to_num(cos2);
	bedzie_lepiej[id] = bool:str_to_num(cos3);
	bedzie_lepiej[id] = bool:str_to_num(cos4);
	bedzie_lepiej[id] = bool:str_to_num(cos5);
	bedzie_lepiej[id] = bool:str_to_num(cos6);
	bedzie_lepiej[id] = bool:str_to_num(cos7);
	bedzie_lepiej[id] = bool:str_to_num(cos8);
	bedzie_lepiej[id] = bool:str_to_num(cos9);
	bedzie_lepiej[id] = bool:str_to_num(cos10);
	bedzie_lepiej[id] = bool:str_to_num(cos11);
	bedzie_lepiej[id] = bool:str_to_num(cos12);
	bedzie_lepiej[id] = bool:str_to_num(cos13);
	bedzie_lepiej[id] = bool:str_to_num(cos14);
	bedzie_lepiej[id] = bool:str_to_num(cos15);
	bedzie_lepiej[id] = bool:str_to_num(cos16);
	bedzie_lepiej[id] = bool:str_to_num(cos17);
	bedzie_lepiej[id] = bool:str_to_num(cos18);
	bedzie_lepiej[id] = bool:str_to_num(cos19);
	bedzie_lepiej[id] = bool:str_to_num(cos20);
	bedzie_lepiej[id] = bool:str_to_num(cos21);
	bedzie_lepiej[id] = bool:str_to_num(cos22);
	bedzie_lepiej[id] = bool:str_to_num(cos23);
	bedzie_lepiej[id] = bool:str_to_num(cos24);
	bedzie_lepiej[id] = bool:str_to_num(cos25);
	bedzie_lepiej[id] = bool:str_to_num(cos26);
	bedzie_lepiej[id] = bool:str_to_num(cos27);
	bedzie_lepiej[id] = bool:str_to_num(cos28);
	bedzie_lepiej[id] = bool:str_to_num(cos29);
	bedzie_lepiej[id] = bool:str_to_num(cos30);
	bedzie_lepiej[id] = bool:str_to_num(cos31);
	bedzie_lepiej[id] = bool:str_to_num(cos32);
	bedzie_lepiej[id] = bool:str_to_num(cos33);
	bedzie_lepiej[id] = bool:str_to_num(cos34);
	bedzie_lepiej[id] = bool:str_to_num(cos35);
	bedzie_lepiej[id] = bool:str_to_num(cos36);
	bedzie_lepiej[id] = bool:str_to_num(cos37);
	bedzie_lepiej[id] = bool:str_to_num(cos38);
	bedzie_lepiej[id] = bool:str_to_num(cos39);
	bedzie_lepiej[id] = bool:str_to_num(cos40);
	bedzie_lepiej[id] = bool:str_to_num(cos41);
	bedzie_lepiej[id] = bool:str_to_num(cos42);
	bedzie_lepiej[id] = bool:str_to_num(cos43);
	bedzie_lepiej[id] = bool:str_to_num(cos44);
	bedzie_lepiej[id] = bool:str_to_num(cos45);
	bedzie_lepiej[id] = bool:str_to_num(cos46);
	bedzie_lepiej[id] = bool:str_to_num(cos47);
	bedzie_lepiej[id] = bool:str_to_num(cos48);
	bedzie_lepiej[id] = bool:str_to_num(cos49);
	bedzie_lepiej[id] = bool:str_to_num(cos50);
	bedzie_lepiej[id] = bool:str_to_num(cos51);
	bedzie_lepiej[id] = bool:str_to_num(cos52);
	bedzie_lepiej[id] = bool:str_to_num(cos53);
	bedzie_lepiej[id] = bool:str_to_num(cos54);
	bedzie_lepiej[id] = bool:str_to_num(cos55);
	bedzie_lepiej[id] = bool:str_to_num(cos56);
	bedzie_lepiej[id] = bool:str_to_num(cos57);
	bedzie_lepiej[id] = bool:str_to_num(cos58);
	bedzie_lepiej[id] = bool:str_to_num(cos59);
	bedzie_lepiej[id] = bool:str_to_num(cos60);
	bedzie_lepiej[id] = bool:str_to_num(cos61);
	bedzie_lepiej[id] = bool:str_to_num(cos62);
	bedzie_lepiej[id] = bool:str_to_num(cos63);
	bedzie_lepiej[id] = bool:str_to_num(cos64);
	
	
	odczytane[id] = true;
}

Jak widzicie mam sporo zmiennych, które chcę odczytać. Na te "bedzie_lepiej[id]" nie patrzcie bo to nie jest skończone. Wiem, że jest sposób żeby to jakoś skrócić. Ktoś mi pisał, że muszę zrobić coś na podobę cos[65][33]; i potem użyć pętlę do odczytania. Niestety nie wiem jak to zrobić :P. Jak jest tak jak mam teraz to nawet nie da się skompilować pluginu :D

Welcome to the AMX Mod X 1.8.1-300 Compiler.
	Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

	Naruszenie ochrony pamięci

Za każdą pomoc +'iki :D


  • +
  • -
  • 0

kP8HWV.png


#2 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 13.05.2013 13:18

po prostu tworzysz tablicę :

bedzie_lepiej[id][64] // oczywiście 64 to rozmiar tablicy

i potem przy nvault get możesz użyć funkcji "explode" by DarkGL
http://amxx.pl/topic/43223-explode/

która wczyta wszystkie wartości które wczyta do tablicy np. :

tworzysz tablicę - new cos[64][5]

i używasz funkcji

explode explode(vauldata, " ", cos, 63, 4)

jeśli chodzi o drugi paramter " " to jest znak, jaki ma oddzielać zmienne.

 

I potem robisz pętle :

for(new i ; i < 64 ; i++)
    bedzie_lepiej[id][i] = str_to_num(cos[i]);

mogą wystąpić błędy. ;ja bym tak zrobił. ^D^



a jeśli chodzi o tablicę "new cos[64][5]" tą [5] zmień na il potrzebujesz. :)

a i ta zmienna "bedzie_lepiej" jest bool? Bo nie można użyać

bool:str_to_num

napisz nam co chcesz osiągnąć. ;P
i nie musisz formatować tekstu przy wczytywaniu .

Edit :

musiz formatować klucz. nie dopatrzyłem. ;D

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#3 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 13.05.2013 13:21

Skoro wartości są tylko 1-0, to nie widzę sensu używania tutaj spacji, czy jakichkolwiek znaków rozdzielających.
 

a i ta zmienna "bedzie_lepiej" jest bool? Bo nie można użyać

bool:str_to_num

Jak nie można, jak można...
  • +
  • -
  • 1

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


#4 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 13.05.2013 13:59

Zmienna w AMX posiada 32 bity, Ty przechowujesz ok 60 wartości 1 bitowych. Można to zmieścić w 2ch zmiennych spokojnie, za pomocą flag i przesunięć bitowych. Zaoszczędzi Ci to zarówno miejsca w nvaulcie, jak i miejsca w pamięci RAM. No i będzie bardziej optymalne.


  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#5 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 13.05.2013 15:07

No i znowu mówisz coś czego ja nie wiem, wytyłumaczyzs jak to zrobić ?

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#6 Niide

    *** it I'm done

  • Autor tematu
  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 13.05.2013 15:18

No i znowu mówisz coś czego ja nie wiem, wytyłumaczyzs jak to zrobić ?

 

Mam tą samą prośbę.

 

BTW. Mam teraz takie coś:

public odczytaj_misje(id)
{
	new vaultkey[64], vaultdata[13], cos[3][65];
	new identyfikator[64];
	copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
	formatex(vaultkey, 63, "%s-%i-misje", identyfikator, cod_get_user_class(id));
	
	nvault_get(gvault, vaultkey, vaultdata, 12);
	replace_all(vaultdata, 12, "#", " ");
	
	explode(vaultdata, ' ', cos, 3, 64);
	
	for(new i; i < 64; i++)
	{
		ma_misje[id] = bool:str_to_num(cos[i]);
		blok1[id] = bool:str_to_num(cos[i]);
		ded[id] = str_to_num(cos[i]);
		bedzie_lepiej[id] = bool:str_to_num(cos[i]);
		pierwsza_krew[id] = bool:str_to_num(cos[i]);
		mlody_nozownik[id] = bool:str_to_num(cos[i]);
		gracz_zespolowy[id] = bool:str_to_num(cos[i]);
		czas_na_przygode[id] = bool:str_to_num(cos[i]);
		fragi_czas_zaczac[id] = bool:str_to_num(cos[i]);
		tripple_kill[id] = bool:str_to_num(cos[i]);
		nie_ma_lipy[id] = bool:str_to_num(cos[i]);
		noz_do_smarowania[id] = bool:str_to_num(cos[i]);
		bron_dodatkowa[id] = bool:str_to_num(cos[i]);
		fragi_leca[id] = bool:str_to_num(cos[i]);
		jeszcze_ktos[id] = bool:str_to_num(cos[i]);
		twoj_przyjaciel_noz[id] = bool:str_to_num(cos[i]);
		troche_tutaj_siedze[id] = bool:str_to_num(cos[i]);
		dlaczego_ja[id] = bool:str_to_num(cos[i]);
		deszcz_smierci[id] = bool:str_to_num(cos[i]);
		jestem_niesmiertelny[id] = bool:str_to_num(cos[i]);
		veteran[id] = bool:str_to_num(cos[i]);
		zloty_marker[id] = bool:str_to_num(cos[i]);
		na_szczycie[id] = bool:str_to_num(cos[i]);
		profesjonalna_robota[id] = bool:str_to_num(cos[i]);
		dziadek[id] = bool:str_to_num(cos[i]);
		czlowiek_demolka[id] = bool:str_to_num(cos[i]);
		jestem_legenda[id] = bool:str_to_num(cos[i]);
		dobrze_jest_miec_vipa[id] = bool:str_to_num(cos[i]);
		kucykowy_krysztal[id] = bool:str_to_num(cos[i]);
		speed_round[id] = bool:str_to_num(cos[i]);
		zaraz_wybuchnie[id] = bool:str_to_num(cos[i]);
		blok1[id] = bool:str_to_num(cos[i]);
		blok2[id] = bool:str_to_num(cos[i]);
		blok3[id] = bool:str_to_num(cos[i]);
		blok4[id] = bool:str_to_num(cos[i]);
		blok5[id] = bool:str_to_num(cos[i]);
		blok6[id] = bool:str_to_num(cos[i]);
		blok7[id] = bool:str_to_num(cos[i]);
		blok8[id] = bool:str_to_num(cos[i]);
		blok9[id] = bool:str_to_num(cos[i]);
		blok10[id] = bool:str_to_num(cos[i]);
		blok11[id] = bool:str_to_num(cos[i]);
		blok12[id] = bool:str_to_num(cos[i]);
		blok13[id] = bool:str_to_num(cos[i]);
		blok14[id] = bool:str_to_num(cos[i]);
		blok15[id] = bool:str_to_num(cos[i]);
		blok16[id] = bool:str_to_num(cos[i]);
		blok17[id] = bool:str_to_num(cos[i]);
		blok18[id] = bool:str_to_num(cos[i]);
		blok19[id] = bool:str_to_num(cos[i]);
		blok20[id] = bool:str_to_num(cos[i]);
		blok21[id] = bool:str_to_num(cos[i]);
		blok22[id] = bool:str_to_num(cos[i]);
		blok23[id] = bool:str_to_num(cos[i]);
		blok24[id] = bool:str_to_num(cos[i]);
		blok25[id] = bool:str_to_num(cos[i]);
		blok26[id] = bool:str_to_num(cos[i]);
		blok27[id] = bool:str_to_num(cos[i]);
		blok28[id] = bool:str_to_num(cos[i]);
		kille[id] = str_to_num(cos[i]);
		rundy[id] = str_to_num(cos[i]);
		czas[id] = str_to_float(cos[i]);
		paka[id] = str_to_num(cos[i]);
		oberwal[id] = str_to_num(cos[i]);
		misja[id] = str_to_num(cos[i]);
	}
	
	odczytane[id] = true;
}

Lecz teraz się nie chce nic wczytać ;/

 

Może mój zapis się przyda:

public zapisz_misje(id)
{
	new identyfikator[64];
	copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
	new vaultkey[64], vaultdata[13];
	
	formatex(vaultkey, 63, "%s-%i-misje", identyfikator, cod_get_user_class(id));
	formatex(vaultdata, 12, "%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%s", 
	ma_misje[id], blok1[id], ded[id], bedzie_lepiej[id], pierwsza_krew[id], mlody_nozownik[id], gracz_zespolowy[id], czas_na_przygode[id], fragi_czas_zaczac[id], 
	tripple_kill[id], nie_ma_lipy[id], noz_do_smarowania[id], bron_dodatkowa[id], fragi_leca[id], jeszcze_ktos[id], twoj_przyjaciel_noz[id], troche_tutaj_siedze[id], 
	dlaczego_ja[id], deszcz_smierci[id], jestem_niesmiertelny[id], veteran[id], zloty_marker[id], na_szczycie[id], profesjonalna_robota[id], dziadek[id], 
	czlowiek_demolka[id], jestem_legenda[id], dobrze_jest_miec_vipa[id], kucykowy_krysztal[id], speed_round[id], zaraz_wybuchnie[id], blok2[id], blok3[id], blok4[id], 
	blok5[id], blok6[id], blok7[id], blok8[id], blok9[id], blok10[id], blok11[id], blok12[id], blok13[id], blok14[id], blok15[id], blok16[id], blok17[id], blok18[id], 
	blok19[id], blok20[id], blok21[id], blok22[id], blok23[id], blok24[id], blok25[id], blok26[id], blok27[id], blok28[id], kille[id], rundy[id], czas[id], paka[id], oberwal[id], misja[id]);
	nvault_set(gvault, vaultkey, vaultdata);
}

Tak wiem, niepotrzebnie mam blok1[id], blok2[id] itp. ale tak mi jest wygodniej. Chyba, że tak być nie może to bd miał dużo zmieniania ;/


  • +
  • -
  • 0

kP8HWV.png


#7 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 13.05.2013 15:24

amxx.pl/topic/5044-operacje-bitowe/
  • +
  • -
  • 0

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#8 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 13.05.2013 15:48

Teoretycznie lepiej było by, gdybyś te bloki dał do innego pliku vault :)

i tak na marginesie na samym końcu (zapisu) masz: %s, a to jest misja[id] xD

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#9 Niide

    *** it I'm done

  • Autor tematu
  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 13.05.2013 15:57

Teoretycznie lepiej było by, gdybyś te bloki dał do innego pliku vault :)

i tak na marginesie na samym końcu (zapisu) masz: %s, a to jest misja[id] xD

 

To ma być %s ponieważ to jest string, nazwa misji. Np. "Stos ciał". Tylko nwm czy dobrze wczytuję ten string tym:

misja[id] = str_to_num(cos[i]);

  • +
  • -
  • 0

kP8HWV.png


#10 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 13.05.2013 17:03

pomyśl. :D string to num :D

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#11 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 13.05.2013 17:57   Najlepsza odpowiedź

Po pierwsze, stworzymy listę definów:

/* Najpierw dla mission_flags_1: */
#define MISSIONFLAG_MA_MISJE (1<<0)
#define MISSIONFLAG_BLOK1 (1<<1)
#define MISSIONFLAG_BEDZIE_LEPIEJ (1<<2)
#define MISSIONFLAG_PIERWSZA_KREW (1<<3);
/*...*/
#define MISSIONFLAG_BLOK1 (1<<30)
#define MISSIONFLAG_BLOK2 (1<<31)
 
/* I dla mission_flags_2 */
#define MISSIONFLAG_BLOK3 (1<<0)
#define MISSIONFLAG_BLOK4 (1<<1)
/* ... */
#define MISSIONFLAG_BLOK27 (1<<24)
#define MISSIONFLAG_BLOK28 (1<<25)

Tam, gdzie komentarz z kropkami, robicie analogicznie każdą flagę. Można sobie wygodniej te flagi poukładać.

 

Następnie 2 zmienne tablicowe (lub tablicę 2 wymiarową, jak wygodniej):

new mission_flags_1[33];
new mission_flags_2[33];

 

Będziemy w nich przechowywać wszystko, zamiast w wielu tablicach typu bool.

Teraz zamieniamy wszelkie użycia

if(ma_misje[id])

na:

if(mission_flags_1[id] & MISSIONFLAG_MA_MISJE)

 

zamieniamy:

ma_misje[id]=1

na:

mission_flags_1 |= MISSIONFLAG_MA_MISJE

 

zamieniamy:

ma_misje[id]=0

na:

mission_flags_1 &= ~MISSIONFLAG_MA_MISJE

 

Z resztą flag analogicznie. Później w nvault zapisujemy po prostu jako liczby mission_flags_1 i mission_flags_2. Odczytujemy również jako liczby. Ogólnie całkowicie przestajemy używać tablic bool. Jeśli jakieś wątpliwości macie jak coś zamienić, na co zamienić lub coś pominąłem, piszcie :)

 

 

 

 

 

 


  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#12 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 13.05.2013 19:07

~(1<25)
To jest negacja ?

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#13 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 981
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 13.05.2013 19:21

Tak
  • +
  • -
  • 0

#14 Niide

    *** it I'm done

  • Autor tematu
  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 13.05.2013 19:55

Gwyn, mógłbyś podać przykład zapisu i odczytu tych 2 tablic? Nie jestem ekspertem od zapisu jak to można zauważyć ;/


  • +
  • -
  • 0

kP8HWV.png


#15 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 13.05.2013 20:01

~(1<25)
To jest negacja ?

 

Tak, a co więcej: negacja bitowa. Oznacza to, że z 0b 0000 0010 0000 0000 0000 0000 0000 0000 zrobi Ci się 0b 1111 1101 1111 1111 1111 1111 1111 1111 :)

 

Gwyn, mógłbyś podać przykład zapisu i odczytu tych 2 tablic? Nie jestem ekspertem od zapisu jak to można zauważyć ;/

Traktuj każdą komórkę z tablicy, jak zwykłą, najzwyklejszą liczbę. Jak tablice ded, kille, rundy...


Użytkownik GwynBleidD edytował ten post 13.05.2013 20:01

  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#16 Niide

    *** it I'm done

  • Autor tematu
  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 14.05.2013 08:59

Czy jak mam to:

if(!ma_misje[id])

Użyć tego:

if(mission_flags_1[id] & ~MISSIONFLAG_MA_MISJE)

Bo nie wiem ;/


  • +
  • -
  • 0

kP8HWV.png


#17 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 14.05.2013 12:09

if(!(mission_flags_1[id] & MISSIONFLAG_MA_MISJE))
Raczej tak.
  • +
  • -
  • 2

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować





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

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