←  Problemy z pluginami

AMXX.pl: Support AMX Mod X i SourceMod

»

Problem z gangami by Cypis

  • +
  • -
Black004 - zdjęcie Black004 22.07.2019

Witam, problem dotyczny tego, że chce sam dodać do nich umiejętności, ale nie działa zapis tego ile dodałem mój kod wygląda tak:

public ShowSkillsMenu( id )
{	
	static szMenu[ 512 ], iLen, iKeys;
	
	if( !iKeys )
	{
		iKeys = MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_0;
	}
	
	iLen	=	formatex( szMenu, charsmax( szMenu ), "\yMenu Umiejetnosci^n^n" );
//	iLen	+=	formatex( szMenu[ iLen ], 511 - iLen, "\r1. \wSilownia [\rKoszt: \y500.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]]);
	iLen	+=	formatex( szMenu[ iLen ], 511 - iLen, "\r2. \wBonus szlugow [\rKoszt: \y600.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]] );
//	iLen	+=	formatex( szMenu[ iLen ], 511 - iLen, "\r3. \wObrazenia [\rKoszt: \y700.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]] );
//	iLen	+=	formatex( szMenu[ iLen ], 511 - iLen, "\r4. \wObezwladnienie [\rKoszt: \y800.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]] );
	
	iLen	+=	formatex( szMenu[ iLen ], 511 - iLen, "^n\r0. \wExit" );
	
	show_menu( id, iKeys, szMenu, -1, "Skills Menu" );
}

public SkillsMenu_Handler( id, iKey )
{

	new Float:szlugi_gracza = get_user_jbpack(id)
	
	switch( ( iKey + 1 ) % 10 )
	{
		case 0: 
		{
			MenuGang(id);
			return PLUGIN_HANDLED;
		}
		case 2:
		{
			if( bonus_szlugow[user_gang[id]] == 5 )
			{
				ColorChat( id, NORMAL, "^3[^4Jailbreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejętnosci.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			
			new Float:iRemaining = szlugi_gracza - 600;
			
			if( iRemaining < 0 )
			{
				ColorChat( id, NORMAL, "^3[^4Jailbreak - Gang^3] ^1Nie masz na to pieniedzy.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			
			bonus_szlugow[user_gang[id]]++;
			ColorChat( id, NORMAL, "^3[^4JailBreak - Gang^3] ^1Ulepszyles swoj gang.");
			set_user_jbpack( id, iRemaining );
		}
		
	}
	
	ShowSkillsMenu( id );
	
	return PLUGIN_HANDLED;
}

Zapis tak:

public zaladuj_skills(id)
{
	new name[48]
	get_user_name(id,name,47)
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%s-skills",name)
	
	if(nvault_get(jb_skills,vaultkey,vaultdata,127)) {
		new parsowanie[5][16];
		parse(vaultdata, parsowanie[0], 15)
		
		bonus_szlugow[id]=str_to_num(parsowanie[0])
	log_amx("WCZYTANO %s", vaultdata)
		
	}
	
	return PLUGIN_CONTINUE
}  

public zapisz_skills(id) {	
	new name[48]
	get_user_name(id,name,47)
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%s-skills",name)
	formatex(vaultdata,127,"%d", bonus_szlugow[user_gang[id]])
	nvault_set(jb_skills,vaultkey,vaultdata)
	log_amx("ZAPISNO %s", vaultdata)
	
	return PLUGIN_CONTINUE
}

Problem w tym, że nie zapisuję ilości lvl w bonusie i tak samo nie załadowuję tego...

new parsowanie[5][16]

W tym później będą inne umiejętności więc na razie zostawiłem tak.

 

Dam kod czystych gangów od cypisa:

 

 

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 23.07.2019

@Ref

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 23.07.2019

Zauważyłem, że zdublowały mi się tematy, a tam jest dodany kod z gangami, a tu nie więc dodaję:

 

 

 

 

 

 

 

 

 

Załączony plik  jail_gangi (1).sma   23,56 KB   43 Ilość pobrań

 

 


Użytkownik Black004 edytował ten post 23.07.2019 09:42
Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 25.07.2019

@Ref

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 26.07.2019

@Ref

 

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 27.07.2019

Pustka...

	log_amx("ZAPISNO %s", vaultdata)
        log_amx("WCZYTANO %s", vaultdata)
 

Tu dobrze pokazuje?

 

 

Dlaczego nie SQL, jak juz zapis jest zrobiony to modyfikacja jest dość prosta.

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 28.07.2019

Pustka...

	log_amx("ZAPISNO %s", vaultdata)
        log_amx("WCZYTANO %s", vaultdata)
 

Tu dobrze pokazuje?

 

 

Dlaczego nie SQL, jak juz zapis jest zrobiony to modyfikacja jest dość prosta.

 

 

Tak tu dobrze pokazuję, a sql dlatego nie, ponieważ nie wiem jak to zrobić, sql w ogóle nie potrafie, :/

 

Nie wiem też jak to by miało działać w sql i zapisywać bonus akurat do do gangu gracza.


Użytkownik Black004 edytował ten post 28.07.2019 09:25
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 28.07.2019

A sprawdzałeś  wartości tu:

bonus_szlugow[id]=str_to_num(parsowanie[0])

czym jest parsowanie[0] i co powstaje po konwersji na inta?

 

 

Podrzuć jeszcze funkcje w ktorych wywolujesz zapis/wczytanie

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 28.07.2019

public client_putinserver(id)
{	
	if(is_user_hltv(id))
	return;
	
	create_gang[id] = false;
	user_wczytalo[id] = false;
	user_gang[id] = 0;
	user_flags[id] = USER;
	user_bunty[id] = 0;
	user_zyczenia[id] = 0;
	bonus_szlugow[user_gang[id]] = 0

	get_user_name(id, nazwa_gracza[id], 34);
	replace_all(nazwa_gracza[id], 34, "'", "\'");
	replace_all(nazwa_gracza[id], 34, "`", "\`");
	
	new data[1];
	data[0] = id;
	
	SQL_FormatQuery("SELECT * FROM `GangUser` WHERE `Name` = '%s';", nazwa_gracza[id]);
	SQL_ThreadQuery(info, "PobierzGang", gszQuery, data, 1);
	zaladuj_skills(id)
}

public client_disconnect(id)
{	
	if(is_user_hltv(id))
	return;
	zapisz_skills(id)
	bonus_szlugow[user_gang[id]] = 0
}

Zmieniłem jeszcze zapis, dodałem żeby wyprintowało mi parse i też działa ulepszyłem gang na max (5 poziom) i normalnie wszędzie pisało 5, jeszcze naprawiłem jeden błąd z 

bonus_szlugow[id]=str_to_num(parsowanie[0])

Bo chyba powinno być raczej tak:

bonus_szlugow[user_gang[id]]=str_to_num(parsowanie[0])

Bo w zapisie mam tak: bonus_szlugow[user_gang[id]]

 

Cały zapis i ladowanie wygląda tak:

public zaladuj_skills(id)
{
	new name[48]
	get_user_name(id,name,47)
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%s-skills",name)
	
	if(nvault_get(jb_skills,vaultkey,vaultdata,127)) {
		new parsowanie[5][16];
		parse(vaultdata, parsowanie[0], 15)
		
		bonus_szlugow[user_gang[id]]=str_to_num(parsowanie[0])
		log_amx("WCZYTANO %s", vaultdata)
		log_amx("PARSOWANIE %s", parsowanie[0])
		
	}
	
	return PLUGIN_CONTINUE
}  

public zapisz_skills(id) {	
	new name[48]
	get_user_name(id,name,47)
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%s-skills",name)
	formatex(vaultdata,127,"%d", bonus_szlugow[user_gang[id]])
	nvault_set(jb_skills,vaultkey,vaultdata)
	log_amx("ZAPISNO %s", vaultdata)
	
	return PLUGIN_CONTINUE
}
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 28.07.2019

	SQL_ThreadQuery(info, "PobierzGang", gszQuery, data, 1);
	zaladuj_skills(id)

załaduj skills daj w handlerze od tego sqla, czyli w PobierzGang, tam bedziesz miał wczytanie user_gangu to po tym daj zeby ladowal.

Pytanie jeszcze jak dużą masz tablice bonus_szlugow bo jak bedzie duzo gangow to Ci bedzie wychodzic poza zakres, domyslam sie ze inne bonusy są robione na dynamicznych tablicach

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 28.07.2019

Działa, dzięki.

 

Chyba da się pobrać ilość gangów w bazie danych, nie wiem jak to się robi, ale jako tymczasowe rozwiązanie moge chyba zwiększać tą tablice.

 

Wygląda ona teraz tak:

new bonus_szlugow[33];

I żeby zwiększyć limit to musze tylko zwiększyć w taki sposób?:

new bonus_szlugow[65];

Użytkownik Black004 edytował ten post 28.07.2019 10:55
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 28.07.2019

Tak, ale to beznadziejny pomysł :/

W miare przyrostu gangów bedziesz musiał zmieniać Tymczasowo to jest ok, ale radze Ci popatrz na tego SQL'a, na początku też się go bałem, a jest prosty jak budowa cepa :D


Rivit (28.07.2019 11:01):
Dodam, że cep składa się z dzierżaka i bijaka.
Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 28.07.2019

A znasz jakiś lepszy sposób, bo wymyśliłem takie coś:

#define LIMIT_GANGU 50
new bonus_szlugow[LIMIT_GANGU], obezwladnienie[LIMIT_GANGU];

Szybciej będę zwiększał limit, ale jak będzie dużo gangów to jednak pasowałoby jakiś automatyczny limit który się zwiększa jak jest nowy gang. Mógłbym zrobić zmienną, która by rosła przy każdym zalożeniu gangu i ją zapisywać w nvault  :giggle:


Użytkownik Black004 edytował ten post 28.07.2019 18:30
Odpowiedz

  • +
  • -
Robiin - zdjęcie Robiin 28.07.2019

nvault_util_count zwróci Ci ilość itemów w vaulcie, czyli tym samym ilość gangów
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 28.07.2019

@aSiorr

Ale nie możesz stworzyć tablicy używając nvault_util_count, bo nie może to zostać wyliczone na etapie kompilacji.

Odpowiedz

  • +
  • -
Robiin - zdjęcie Robiin 28.07.2019

Mając do tego dostęp nie będzie musiał robić zmiennej

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 28.07.2019

Nie rozumiem Cię :(

 

 

 

 

Chociaż tak się zastanawiam, coś nie tak jest. Wczytujesz bonus_szlugów za każdym razem jak gracz wchodzi na serwer, załóżmy że jest jakas wartosc bonus_szlugów, wchodzi gracz z gangu X i wczytuje elegancko z nvault. Coś tam gra na mapie i zwiększa bonus_szlugów. Wchodzi gracz numer 2 z gangu X i zostaje wczytany stary bonus szlugów :/

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 29.07.2019

Nie rozumiem Cię :(

 

 

 

 

Chociaż tak się zastanawiam, coś nie tak jest. Wczytujesz bonus_szlugów za każdym razem jak gracz wchodzi na serwer, załóżmy że jest jakaś wartosc bonus_szlugów, wchodzi gracz z gangu X i wczytuje elegancko z nvault. Coś tam gra na mapie i zwiększa bonus_szlugów. Wchodzi gracz numer 2 z gangu X i zostaje wczytany stary bonus szlugów :/

 

Każdy gang, ma swoje id które jest przypisane do danego gracza. Wszystko się zapisuję do gangu, nie gracza.

 

Ja tym bardziej nie rozumiem, jak mam skorzystać z nvault_util_count


Użytkownik Black004 edytował ten post 29.07.2019 07:10
Odpowiedz

  • +
  • -
Robiin - zdjęcie Robiin 29.07.2019

Jeśli dobrze przeczytałem i nigdzie się nie pomyliłem (a taką mam nadzieję, boście mnie zaczęli stresować) to: tablice dynamiczne.

 

Tworzysz tablicę dynamiczną, pushujesz do niej dane przez ArrayPushCell pod indeksem == indeksowi gangu, w nowej mapie odczytujesz ponownie.

 

Potem przejrzę kod gangów i może znajdę coś lepszego.

Odpowiedz

  • +
  • -
Black004 - zdjęcie Black004 29.07.2019

Jeśli dobrze przeczytałem i nigdzie się nie pomyliłem (a taką mam nadzieję, boście mnie zaczęli stresować) to: tablice dynamiczne.

 

Tworzysz tablicę dynamiczną, pushujesz do niej dane przez ArrayPushCell pod indeksem == indeksowi gangu, w nowej mapie odczytujesz ponownie.

 

Potem przejrzę kod gangów i może znajdę coś lepszego.

 

Jeszcze nigdy nie używałem Pushowania, tych wszystki Array, Trie itd. Nigdy jeszcze mi to nie było potrzebne, jak ma kod wyglądać jak to użyję ?

Odpowiedz