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

Problem z gangami by Cypis


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

#21 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 29.07.2019 21:18

Cellarray.inc o tablicach dynamicznych:

/**
* These arrays are intended to be used for a form of global storage without 
* requiring a #define that needs to be increased each time a person needs more 
* storage.
* These are not designed to be used as a replacement for normal arrays, as
* normal arrays are faster and should be used whenever possible.
*/

Opis użycia: https://amxx.pl/topi...miczne-tablice/

 

Kod, którego potrzebujesz:

 

Deklaracja zmiennej, które będzie uchwytem tablicy jako zmienna globalna:

new Array:gangMoneyBonus,
    Array:gangDisarm; 

W plugin_init/plugin_cfg/plugin_precache inicjacja tablicy:

gangMoneyBonus = ArrayCreate(1, 1);
gangDisarm = ArrayCreate(1, 1);

Przy stworzeniu gangu:

ArrayPushCell(gangMoneyBonus, 0);
ArrayPushCell(gangDisarm, 0);

Przy dodawaniu umiejętności:

ArraySetCell(gangMoneyBonus, gangIndex, ArrayGetCell(gangMoneyBonus, gangIndex) + 1);
ArraySetCell(gangDisarm, gangIndex, ArrayGetCell(gangDisarm, gangIndex) + 1);

Gorzej wygląda sytuacja z usuwaniem gangu, bo wszystkie indeksy gangów trzeba byłoby zdekrementować.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#22 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 29.07.2019 22:31

Troche za bardzo kombinujesz, ja chce żeby zapisywało tylko umiejętności gangu i ilość szlugów w banku dla danego gangu hah.

 

Przypomniał mi się ten dostępny w internecie plugin na umiejętności z gangami, więc skopiowałem troche i wyszło takie coś:

 

enum _:GangInfo
{
	GangWeaponDrop,
	GangMoney,
	GangMoneyBonus
};

Tak deklaruję:

	g_Gangs = ArrayCreate(GangInfo);

Tak pobieram informacje:

	new aData[ GangInfo ];
	ArrayGetArray( g_Gangs, user_gang[id], aData )
aData[ GangWeaponDrop ]

Tak dodaje dany bonus:

aData[ GangMoneyBonus ]++

Mam problem z zapisem o odczytem tego, zrobiłem tak:

public zaladuj_skills(id)
{

	new aData[ GangInfo ];
	ArrayGetArray( g_Gangs, user_gang[id], aData );
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%d-skills",user_gang[id])
	
	if(nvault_get(jb_skills,vaultkey,vaultdata,127)) {
		new parsowanie[3][16];
		parse(vaultdata, parsowanie[0], 15, parsowanie[1], 15, parsowanie[2], 15)
		
		aData[ GangMoneyBonus ]=str_to_num(parsowanie[0])
		aData[ GangWeaponDrop ]=str_to_num(parsowanie[1])	
		aData[ GangMoney ]=str_to_num(parsowanie[2])	
	}
	
	return PLUGIN_CONTINUE
}  

public zapisz_skills(id) {	

	new aData[ GangInfo ];
	ArrayGetArray( g_Gangs, user_gang[id], aData );
	if(!aData[ GangMoneyBonus ] && !aData[ GangWeaponDrop ] && !aData[ GangMoney ]) return PLUGIN_HANDLED;

	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%d-skills",user_gang[id])
	formatex(vaultdata,127,"%d %d %d", aData[ GangMoneyBonus ], aData[ GangWeaponDrop ], aData[ GangMoney ])
	nvault_set(jb_skills,vaultkey,vaultdata)
	
	return PLUGIN_CONTINUE
}

Ale w konsoli mam taki błąd:

L 07/29/2019 - 23:20:18: Invalid cellvector handle provided (19:16:0)
L 07/29/2019 - 23:20:18: [AMXX] Displaying debug trace (plugin "jail_gang.amxx")
L 07/29/2019 - 23:20:18: [AMXX] Run time error 10: native error (native "ArrayGetArray")
L 07/29/2019 - 23:20:18: [AMXX]    [0] jail_gang.sma::zaladuj_skills (line 1502)
L 07/29/2019 - 23:20:18: [AMXX]    [1] jail_gang.sma::PobierzGang (line 1240)

 W PobierzGang jest to:

 

public PobierzGang(failstate, Handle:query, error[], errnum, data[], size){
	if(failstate != TQUERY_SUCCESS){
		log_amx("<Query> Error: %s", error);
		return;
	}
	new id = data[0];
	if(!is_user_connected(id) && !is_user_connecting(id))
	return;
	
	if(SQL_NumRows(query))
	{
		user_gang[id] = SQL_ReadResult(query, 0);//id_gangu
		user_bunty[id] += SQL_ReadResult(query, 2);//zabicia
		user_zyczenia[id] += SQL_ReadResult(query, 3);//zyczenia
		user_flags[id] = GANG_FLAGS:SQL_ReadResult(query, 4);//flaga
		
		//if(user_gang[id])
		//	NewPlayerName(id);
	}
	else
	{
		SQL_FormatQuery("INSERT INTO `GangUser` (`Name`) VALUES ('%s');", nazwa_gracza[id]);
		SQL_ThreadQuery(info, "ZapiszDane", gszQuery);
	}
	user_wczytalo[id] = true;
	zaladuj_skills(id)
}

Tutaj właśnie zapisuje gang gracza, zyczenia itd. Jest tu to robione w mysql, ale ja chce akurat umiejętności w nvault.

 


  • +
  • -
  • 0

#23 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 08:36

Zrobiłem teraz, też jak ty mi pokazałeś i wszędzie mam błąd gdzie jest:

ArrayGetCell(gangMoney, user_gang[id])

  • +
  • -
  • 0

#24 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 30.07.2019 08:51

ArrayGetCell zwróci Ci wartość, więc musi być przypisana do zmiennej:

new money = ArrayGetCell(gangMoney, user_gang[id]);

  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#25 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 10:44

Mam nadal to samo wszędzie gdzie jest ten Array jest błąd:

L 07/30/2019 - 11:40:25: Invalid cellvector handle provided (21:11:0)
L 07/30/2019 - 11:40:25: [AMXX] Displaying debug trace (plugin "jail_gang.amxx")
L 07/30/2019 - 11:40:25: [AMXX] Run time error 10: native error (native "ArrayGetCell")
L 07/30/2019 - 11:40:25: [AMXX]    [0] jail_gang.sma::Damage (line 230)

Tu np public Damage:

public Damage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	new drop = ArrayGetCell(gangWeaponDrop, user_gang[idattacker])
	{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
	if(!user_gang[idattacker] || drop == 0)
		return HAM_IGNORED;
	if(get_user_team(idattacker) == get_user_team(this))
		return HAM_IGNORED;
	if(get_user_team(idattacker) != 1)
		return HAM_IGNORED;
	if(!damagebits & DMG_BULLET)
		return HAM_IGNORED;
	if(random_num(1, 100) > drop)
		return HAM_IGNORED;

	engclient_cmd(this, "drop");
	}
	return HAM_IGNORED;
}

  • +
  • -
  • 0

#26 Oddaj Wiertarke

    Profesjonalista

  • Użytkownik

Reputacja: 74
Pomocny

  • Postów:164
  • Imię:Matico
  • Lokalizacja:Wieś
Offline

Napisano 30.07.2019 11:04

Tutaj pobierasz dane

new drop = ArrayGetCell(gangWeaponDrop, user_gang[idattacker])

Ale nie sprawdzasz czy "idattacker" posiada w ogóle jakikolwiek gang, dlatego najpewniej wyskakuje Ci taki błąd.


  • +
  • -
  • 1

#27 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 11:29

public Damage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
	if(get_user_team(idattacker) == get_user_team(this))
		return HAM_IGNORED;
	if(get_user_team(idattacker) != 1)
		return HAM_IGNORED;
	if(!damagebits & DMG_BULLET)
		return HAM_IGNORED;
	if(!user_gang[idattacker])
		return HAM_IGNORED;
	new drop = ArrayGetCell(gangWeaponDrop, user_gang[idattacker])
	if(random_num(1, 100) > drop)
		return HAM_IGNORED;
	engclient_cmd(this, "drop");
	}
	return HAM_IGNORED;
}

Nic to nie zmieniło dalej to samo.


  • +
  • -
  • 0

#28 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 30.07.2019 12:15

Prawdopodobnie nie pushujesz poprawnie danych. Klany, które zostały stworzone przed implementacją tablic dynamicznych mają indeksy większe niż ArraySize.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#29 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 30.07.2019 12:15

Prawdopodobnie nie pushujesz poprawnie danych. Klany, które zostały stworzone przed implementacją tablic dynamicznych mają indeksy większe niż ArraySize.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#30 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 12:21

public zaladuj_skills(id)
{

	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%d-skills",user_gang[id])
	
	if(nvault_get(jb_skills,vaultkey,vaultdata,127)) {
		new parsowanie[3][16];
		parse(vaultdata, parsowanie[0], 15, parsowanie[1], 15, parsowanie[2], 15)
		
		ArraySetCell(gangMoneyBonus, user_gang[id], str_to_num(parsowanie[0]))
		ArraySetCell(gangWeaponDrop, user_gang[id], str_to_num(parsowanie[1]))
		ArraySetCell(gangMoney, user_gang[id], str_to_num(parsowanie[2]))
	}
	return PLUGIN_CONTINUE
}  

public zapisz_skills(id) {	

	if(ArrayGetCell(gangMoneyBonus, user_gang[id]) == 0 && ArrayGetCell(gangMoney, user_gang[id]) == 0 && ArrayGetCell(gangWeaponDrop, user_gang[id]) == 0) return PLUGIN_HANDLED;

	new money = ArrayGetCell(gangMoney, user_gang[id])
	new drop = ArrayGetCell(gangWeaponDrop, user_gang[id])
	new moneybon = ArrayGetCell(gangMoneyBonus, user_gang[id])
	
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%d-skills",user_gang[id])
	formatex(vaultdata,127,"%d %d %d", moneybon, drop, money)
	nvault_set(jb_skills,vaultkey,vaultdata)
	
	return PLUGIN_CONTINUE
}
public SkillsMenu_Handler( id, iKey )
{

	new szInt[10], szPrefix[64];
	num_to_str(user_gang[id], szInt, 9);
	TrieGetString(gnGangName, szInt, szPrefix, 11);
	new money = ArrayGetCell(gangMoney, user_gang[id])
	new drop = ArrayGetCell(gangWeaponDrop, user_gang[id])
	new moneybon = ArrayGetCell(gangMoneyBonus, user_gang[id])
	
	switch( ( iKey + 1 ) % 10 )
	{
		case 0: 
		{
			MenuGang(id);
			return PLUGIN_HANDLED;
		}
		case 1:
		{
			if(user_flags[id] == ADMINS || user_flags[id] == ASSIST){
			if(moneybon == 5 && (user_flags[id] == ADMINS) && (!(get_user_svip(id) || get_user_hero(id))))
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejetnosci. Mozesz go zwiekszyc kupujac SVIP lub HERO.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			else if(moneybon == 5 && (user_flags[id] == ASSIST))
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejetnosci. Moze go jedynie zwiekszyc lider z HERO lub SVIP.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			if(moneybon >= 6)
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejetnosci.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			
			new iRemaining = money - 1100;
			
			if( iRemaining < 0 )
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1W banku gangu jest za malo szlugow.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			
			ArraySetCell(gangMoneyBonus, user_gang[id], moneybon + 1);
			ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Ulepszyles swoj gang.");
			ArraySetCell(gangMoney, user_gang[id], iRemaining);
			log_to_file(SZM_LOG, "[ODDZIELACZ]-----------------------------------------------------------------------------------");
			log_to_file(SZM_LOG, "[UMIEJETNOSCI] %s | IP %s | Ulepszyl bonus szlugow w gangu %s | ID: %d ", nazwa_gracza[id], ip(id), szPrefix, user_gang[id]);
			log_to_file(SZM_LOG, "[UMIEJETNOSCI - WYNIK] Gang %s | ID: %d Posiada bonus szlugow lvl %i/5(6)", szPrefix, user_gang[id], moneybon);
			log_to_file(SZM_LOG, "[GANG - SALDO] Gang %s | ID: %d Posiada ( %d ) szlugow w banku", szPrefix, user_gang[id], money);
			}
			else ShowSkillsMenu( id )
		}
		case 2:
		{
			if(user_flags[id] == ADMINS || user_flags[id] == ASSIST){
			if(drop == 5 && (user_flags[id] == ADMINS) && (!(get_user_svip(id) || get_user_hero(id))))
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejetnosci. Mozesz go zwiekszyc kupujac SVIP lub HERO.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			else if(drop == 5 && (user_flags[id] == ASSIST))
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejetnosci. Moze go jedynie zwiekszyc lider z HERO lub SVIP.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			if(drop >= 6)
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejetnosci.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			
			new iRemaining = money - 1800;
			
			if( iRemaining < 0 )
			{
				ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1W banku gangu jest za malo szlugow.");
				ShowSkillsMenu( id );
				return PLUGIN_HANDLED;
			}
			
			ArraySetCell(gangWeaponDrop, user_gang[id], drop + 1);
			ColorChat( id, 0, "^3[^4JailBreak - Gang^3] ^1Ulepszyles swoj gang.");
			ArraySetCell(gangMoney, user_gang[id], iRemaining);
			log_to_file(SZM_LOG, "[ODDZIELACZ]-----------------------------------------------------------------------------------");
			log_to_file(SZM_LOG, "[UMIEJETNOSCI] %s | IP %s | Ulepszyl bonus obezwladnienie w gangu %s | ID: %d ", nazwa_gracza[id], ip(id), szPrefix, user_gang[id]);
			log_to_file(SZM_LOG, "[UMIEJETNOSCI - WYNIK] Gang %s | ID: %d Posiada obezwladnienie lvl %i/5(6)", szPrefix, user_gang[id], drop);
			log_to_file(SZM_LOG, "[GANG - SALDO] Gang %s | ID: %d Posiada ( %d ) szlugow w banku", szPrefix, user_gang[id], money);
			}
			else ShowSkillsMenu( id )
		}
	}
	zapisz_skills(id)
	ShowSkillsMenu( id );
	return PLUGIN_HANDLED;
}

Tu jest mój kod, nie wiem co robie w nim źle :/

 

Jeszcze to w sumie mogę dać:

	gangMoneyBonus = ArrayCreate(1, 1);
	gangMoney = ArrayCreate(1, 1);
	gangWeaponDrop = ArrayCreate(1, 1);

Użytkownik Black004 edytował ten post 30.07.2019 12:28

  • +
  • -
  • 0

#31 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 12:26

Jak trzeba, dużo zrobic w tym kodzie żeby działał, to zawsze moge zrobic zapis w zwykłym vault, że limit będzie się zwiększać przy robieniu nowego gangu przez gracza.


  • +
  • -
  • 0

#32 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 30.07.2019 12:34

W zaladuj_skils ArrayPushCell, nie ArraySetCell, ale to zapewne pomiesza Ci dane różmych klanów. Właśnie dlatego o takich rzeczach myśli się wcześniej.


  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#33 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 13:09

W zaladuj_skils ArrayPushCell, nie ArraySetCell, ale to zapewne pomiesza Ci dane różmych klanów. Właśnie dlatego o takich rzeczach myśli się wcześniej.

 

Zapis teraz wygląda tak:

public zaladuj_skills(id)
{

	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%d-skills",user_gang[id])
	
	if(nvault_get(jb_skills,vaultkey,vaultdata,127)) {
		new parsowanie[3][16];
		parse(vaultdata, parsowanie[0], 15, parsowanie[1], 15, parsowanie[2], 15)
		
		ArrayPushCell(gangMoneyBonus, str_to_num(parsowanie[0]))
		ArrayPushCell(gangWeaponDrop, str_to_num(parsowanie[1]))
		ArrayPushCell(gangMoney, str_to_num(parsowanie[2]))
	}
	return PLUGIN_CONTINUE
}  

public zapisz_skills(id) {	

	new money = ArrayGetCell(gangMoney, user_gang[id])
	new drop = ArrayGetCell(gangWeaponDrop, user_gang[id])
	new moneybon = ArrayGetCell(gangMoneyBonus, user_gang[id])

	if(money == 0 && drop == 0 && moneybon == 0) return PLUGIN_HANDLED;
	
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%d-skills",user_gang[id])
	formatex(vaultdata,127,"%d %d %d", moneybon, drop, money)
	nvault_set(jb_skills,vaultkey,vaultdata)
	
	return PLUGIN_CONTINUE
}

I z tego co widzę nie wyświetla błędów z tym w konsoli, więc pewnie jest dobrze, ale nie mam jak tego sprawdzić, ponieważ jest błąd z głownym menu z gangami:

L 07/30/2019 - 14:08:23: Invalid cellvector handle provided (20:16:9)
L 07/30/2019 - 14:08:23: [AMXX] Displaying debug trace (plugin "jail_gang.amxx")
L 07/30/2019 - 14:08:23: [AMXX] Run time error 10: native error (native "ArrayGetCell")
L 07/30/2019 - 14:08:23: [AMXX]    [0] jail_gang.sma::MenuGang (line 541)

Z resztą z tym też ciągle :/ :

L 07/30/2019 - 14:08:12: Invalid cellvector handle provided (19:11:9)
L 07/30/2019 - 14:08:12: [AMXX] Displaying debug trace (plugin "jail_gang.amxx")
L 07/30/2019 - 14:08:12: [AMXX] Run time error 10: native error (native "ArrayGetCell")
L 07/30/2019 - 14:08:12: [AMXX]    [0] jail_gang.sma::Event_DeathMsg (line 253)

L 07/30/2019 - 14:08:13: Invalid cellvector handle provided (21:11:9)
L 07/30/2019 - 14:08:13: [AMXX] Displaying debug trace (plugin "jail_gang.amxx")
L 07/30/2019 - 14:08:13: [AMXX] Run time error 10: native error (native "ArrayGetCell")
L 07/30/2019 - 14:08:13: [AMXX]    [0] jail_gang.sma::Damage (line 241)

Daje kod głównego menu:

public MenuGang(id)
{
	if(!user_wczytalo[id] || create_gang[id])
	return;
	new formats[128];
	if(!user_gang[id]){
	formatex(formats,charsmax(formats),"\dGangi")
	} else{
	new money = ArrayGetCell(gangMoney, user_gang[id])
	formatex(formats,charsmax(formats),"\r[\wGangi\r]^n^n\yID gangu: \w%d^n\ySzlugi w Gangu: \w[\r%d\w]", user_gang[id], money)
	}
	new menu = menu_create(formats, "Handel_Gang");
	if(!user_gang[id])
	{
		menu_additem(menu, "Stworz swoj wlasny \yGang\r!", "0");
	}
	else
	{
		if(user_flags[id] == ADMINS)
		{
			menu_additem(menu, "\wZwerbuj ludzi do Gangu!", "2");
			menu_additem(menu, "\rUsun \wczlonka Gangu^n", "3");
			menu_additem(menu, "Czlonkowie Gangu", "5");
			menu_additem(menu, "Ustaw range", "7");
			menu_additem(menu, "Ulepsz gang", "8");
			menu_additem(menu, "\yBank gangu", "9");
			menu_additem(menu, "\rUsun Gang", "4");
		}
		else
		{
			menu_additem(menu, "\rWyjdz z \wGangu^n", "1");
			if(user_flags[id] == ASSIST)
			{
				menu_additem(menu, "\wZwerbuj ludzi do Gangu!", "2");
				menu_additem(menu, "\rUsun \wczlonka Gangu^n", "3");
				menu_additem(menu, "Ulepsz gang", "8");
				menu_additem(menu, "\yBank gangu", "9");
			}
			menu_additem(menu, "Zobacz umiejetnosci gangu", "8");
			menu_additem(menu, "\yBank gangu", "9");
			menu_additem(menu, "Czlonkowie Gangu", "5");
		}
	}
	menu_setprop(menu, MPROP_EXITNAME, "\rWyjdz");
	ColorChat(id, 0, "^3[^4JailBreak - Gang^3]^x01 Gangi sa w fazie beta! Wszelkie bledy proszę zglaszac do wlasciciela.");
	menu_display(id, menu);
}

  • +
  • -
  • 0

#34 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 13:26

Sprawdziłem i nie wszystkim nie działa menu, niektórym działa. Nie wiem od czego to zależy.


  • +
  • -
  • 0

#35 Oddaj Wiertarke

    Profesjonalista

  • Użytkownik

Reputacja: 74
Pomocny

  • Postów:164
  • Imię:Matico
  • Lokalizacja:Wieś
Offline

Napisano 30.07.2019 13:53

To tak, radziłbym zmienić Array'e na Trie, one nie są bez powodu użyte przez twórce gangów.

Dzieje się tak dlatego że, gang_user[id] może posiadać rożne wartości, powiedzmy od 1 do 100, i wcale nie musi być 1,2,3,4,5,6 tylko może być 1,5,85, i dzięki temu Array się tutaj nie nadaje.

 

Ogólnie to najlepiej zastosować tutaj zapis SQL + Trie i wczytywać wszystkie umiejętności/skille podczas ładowania się gangów.

 

 

Jeżeli się mylę to liczę że ktoś mnie poprawi.


  • +
  • -
  • 0

#36 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 30.07.2019 14:13

Dynamic array'e jak najbardziej są dobre, wystarczy wiedzieć jak ich poprawnie użyć. Moim zdaniem o wiele łatwiejsze byłoby przepisanie wszystkich danych do arraya i zapis wszystkich danych do nvaulta.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#37 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 14:22

To można wiedzieć dlaczego ten błąd występuję ?

L 07/30/2019 - 14:08:23: Invalid cellvector handle provided (20:16:9)
L 07/30/2019 - 14:08:23: [AMXX] Displaying debug trace (plugin "jail_gang.amxx")
L 07/30/2019 - 14:08:23: [AMXX] Run time error 10: native error (native "ArrayGetCell")
L 07/30/2019 - 14:08:23: [AMXX]    [0] jail_gang.sma::MenuGang (line 541)

Kod podany wyżej.

 


  • +
  • -
  • 0

#38 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 30.07.2019 16:30


To można wiedzieć dlaczego ten błąd występuję ?

 

No to jest temu, że się odwołujesz poza tablice

 

Tak siedze w pracy i dumam i na szybko wydumałem jakieś takie dziobaki

jak robisz push cell to ono dodaje na koniec tablicy, a nam trzeba pod indeksem. i tera tak

albo robim takie fake puste wpisy zeby sie indeksy zgadzali

albo korzystamy z Trie i mamy elegancko pary klucz-wartość    - klucz to id gangu a wartosc to bonus szlugów.

public zaladuj_skills(id)
{

	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%d-skills",user_gang[id])
	
	if(nvault_get(jb_skills,vaultkey,vaultdata,127)) {
		new parsowanie[3][16];
		parse(vaultdata, parsowanie[0], 15, parsowanie[1], 15, parsowanie[2], 15)

		while(ArraySize(gangMoneyBonus) < user_gang[id]){
			ArrayPushCell(gangMoneyBonus, 0)
			ArrayPushCell(gangWeaponDrop, 0)
			ArrayPushCell(gangMoney, 0)
		}
		
		ArraySetCell(gangMoneyBonus, user_gang[id], str_to_num(parsowanie[0]))
		ArraySetCell(gangWeaponDrop, user_gang[id], str_to_num(parsowanie[1]))
		ArraySetCell(gangMoney, user_gang[id], str_to_num(parsowanie[2]))
	}
	return PLUGIN_CONTINUE
}  

O takim czymś mówie, wypełniasz dopóki nie ma pożądanego indeksu, a jak już jest to ustawiasz wartość po prostu.

 

 

Trie method:

Robisz TrieCreate na początku.

Przy odczytywaniu pakujesz do Trie (TrieSetCell) - klucz to user_gang[id], value to bonus szlugów i jak kolejni gracze wchodzą to sprawdzasz czy istnieje już taki klucz, jeśli tak to nic nie robisz, jeśli nie to wczytujesz.

Przy zapisie sprawdzasz czy klucz istnieje i po prostu pobierasz value poprzez TrieGetCell i zapisujesz normalnie do nvault.

 

Co do pobrania wartości: TrieGetCell.

Reszta jest na forum, tutoriale do Trie, Array, wystarczy spędzić troche czasu i sie naumiesz ;)

 

A te rzeczy wczytujesz oczywiscie wtedy, gdy juz załaduje sie user_gang z sqla


  • +
  • -
  • 1

#39 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 18:47

Dzięki! Zrobiłem wszystko dokładnie i powoli, poprawiłem błędy porównałem fakty z Array i Trie działa lepiej, bo działa hah. I teraz limit mi nie jest straszny i nie musze go ręcznie zwiększać? Chodzi mi o limit ilości gangów.

 

Jeszcze mam tylko problem z tym kodem:

public dajszlugibank(id, level, cid)
{

	new money;
	TrieGetCell(gangMoney, user_gang[id], money)

	if(!cmd_access(id, level, cid, 3))
		return PLUGIN_CONTINUE;
	
	new arg[33];
	read_argv(1, arg, 32);
	new target = str_to_num(arg);
	
	
	read_argv(2, arg, 32);
	new ile = str_to_num(arg);
	
	TrieSetCell(gangMoney, user_gang[target], money + ile )
	
	return PLUGIN_CONTINUE;
}

Mianowicie nie dodaje szlugów dla gangu jak podam id danego gangu. Czemu tak jest?


  • +
  • -
  • 0

#40 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 30.07.2019 19:55

Próbowałem też tak:

public dajszlugibank(id, level, cid)
{

	if(!cmd_access(id, level, cid, 3))
		return PLUGIN_CONTINUE;
	new arg[33];
	read_argv(1, arg, 32);
	new target = str_to_num(arg);
	read_argv(2, arg, 32);
	new ile = str_to_num(arg);
	new money;
	TrieGetCell(gangMoney, user_gang[target], money)

	money = TrieSetCell(gangMoney, user_gang[target], money + ile);
	
	return PLUGIN_CONTINUE;
}

Też nie działa :/


  • +
  • -
  • 0




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

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