Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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] Invalid cellvector handle provided (2:1:1)


Najlepsza odpowiedź sebul, 23.08.2014 11:40

W tym samym czasie przynajmniej dwie osoby korzystają z tego menu i jeśli jedna osoba kupi (czyli wykona się ArrayDeleteItem), to wtedy wszystkie inne rzeczy znajdujące się w array, przesuwają się i druga osoba chcąc kupić ostatni perk, nie kupi go, bo został już on przesunięty na wcześniejszą pozycję. Albo Ty, albo ktoś inny po prostu napisał nie do końca przemyślany kod. Przejdź do postu


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

#1 Eryk172

    ŁAAAAAA, O TAK O?

  • Użytkownik

Reputacja: 34
Życzliwy

  • Postów:362
  • GG:
  • Imię:Eryk
  • Lokalizacja:Dbn
Offline

Napisano 23.08.2014 11:36

Witam, proszę o pomoc.

Co w tym kodzie jest źle? ( Niżej ERROR)

public rynek_kupno(id)
{
	new szText[128], data[2];
	
	formatex(szText, charsmax(szText), "\yDostepne Oferty:");
	new menu = menu_create(szText, "rynek_kupno_handler");
	
	for(new i = 0; i < ArraySize(items); ++i)
	{
		new perk[e_Perk], name[33];

		ArrayGetArray(items,i,perk);
		get_user_name(perk[OWNER_ID], name, 32);
		data[0] = i+1;
		data[1] = perk[ITEM_ID];
		formatex(szText, charsmax(szText), "%s\y [%s]\w Cena:\r [%i Monet]\w Wytrzymalosc:\r [%d/100]", name, perk[PERK_NAME],perk[PERK_PRICE],perk[PERK_DURABILITY]);
		menu_additem(menu, szText, data);
	}
	
	menu_setprop(menu, MPROP_BACKNAME, "Wstecz");
	menu_setprop(menu, MPROP_NEXTNAME, "Dalej");
	menu_setprop(menu, MPROP_EXIT, "Wyjscie");
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
}

public rynek_kupno_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new szText[512], iLen = 0, iMax = sizeof(szText) - 1;
	new perk[e_Perk], opis[64], name[32];
	new data[2], zaccess, callback;
	menu_item_getinfo(menu, item, zaccess, data, 2, _, _, callback);
	
	ArrayGetArray(items,item,perk);
	
	get_user_name(perk[OWNER_ID], name, 32);
	cod_get_perk_desc(perk[PERK_ID], opis, charsmax(opis));
		
	iLen += formatex(szText[iLen], iMax-iLen, "Potwierdzenie kupna perku od: \r%s^n", name);
	iLen += formatex(szText[iLen], iMax-iLen, "\yPerk: \r%s^n", perk[PERK_NAME]);
	iLen += formatex(szText[iLen], iMax-iLen, "\yOpis: \r%s^n", opis);
	iLen += formatex(szText[iLen], iMax-iLen, "\yKoszt: \r%d Monet^n", perk[PERK_PRICE]);
	iLen += formatex(szText[iLen], iMax-iLen, "\yWytrzymalosc: \r%d/100^n^n", perk[PERK_DURABILITY]);
	iLen += formatex(szText[iLen], iMax-iLen, "\wCzy chcesz kupic ten perk?");
	
	new menu = menu_create(szText, "rynek_kupno_potwierdzenie");
	
	menu_additem(menu, "\yTak", data);
	menu_additem(menu, "\rNie");

	menu_setprop(menu,MPROP_EXIT,MEXIT_NEVER)
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
}

public rynek_kupno_potwierdzenie(id, menu, item)
{
	if(item == MENU_EXIT || item == 1)
	{
		rynek_kupno(id);
		return PLUGIN_HANDLED;
	}
	
	new data[2], zaccess, callback;
	menu_item_getinfo(menu, item, zaccess, data, 2, _, _, callback);
	
	new perk[e_Perk];
	new item_id = data[0]-1;
	ArrayGetArray(items,item_id,perk);
	
	if(data[1] != perk[ITEM_ID])
	{
		ColorChat(id, GREEN, "[%s]^x03 Perk zostal juz kupiony.", PREFIX);
		rynek_kupno(id);
		return PLUGIN_CONTINUE;
	}

	if(cod_get_user_coins(id) < perk[PERK_PRICE])
	{
		ColorChat(id, GREEN, "[%s]^x03 Masz za malo monet!", PREFIX);
		rynek_kupno(id);
	}
	else
	{
		new nick[32];
		get_user_name(id, nick, charsmax(nick));
		cod_set_user_coins(id, cod_get_user_coins(id) - perk[PERK_PRICE]);
		cod_set_user_coins(perk[OWNER_ID], cod_get_user_coins(perk[OWNER_ID]) + perk[PERK_PRICE]);
		
		cod_set_user_perk(id, perk[PERK_ID]);
		cod_set_perk_durability(id, perk[PERK_DURABILITY]);
		
		ColorChat(id, GREEN, "[%s]^x03 Perk zostal zakupiony pomyslnie!", PREFIX);
		ColorChat(perk[OWNER_ID], GREEN, "[%s]^x03 Twoj perk zostal zakupiony przez^x04 %s^x03. Otrzymujesz^x04 %i Monet^x03.", PREFIX, nick, perk[PERK_PRICE]);
		ArrayDeleteItem(items,item_id)
	}
	
	return PLUGIN_CONTINUE;
}

public rynek_usun(id) {
	new szText[128], data[2];
	
	formatex(szText, charsmax(szText), "\yTwoje Oferty:");
	new menu = menu_create(szText, "rynek_usun_handler");
	
	for(new i = 0; i < ArraySize(items); ++i)
	{
		new perk[e_Perk];
		ArrayGetArray(items,i,perk);
		
		if(perk[OWNER_ID] != id)
			continue;
			
		data[0] = i+1;
		data[1] = perk[ITEM_ID];
		formatex(szText, charsmax(szText), "\y[%s]\w Cena:\r [%i Monet]\w Wytrzymalosc:\r [%d/100]", perk[PERK_NAME],perk[PERK_PRICE],perk[PERK_DURABILITY]);
		menu_additem(menu, szText, data);
	}
	
	menu_setprop(menu, MPROP_BACKNAME, "Wstecz");
	menu_setprop(menu, MPROP_NEXTNAME, "Dalej");
	menu_setprop(menu, MPROP_EXIT, "Wyjscie");
	menu_display(id, menu);
}

public rynek_usun_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new szText[256], iLen = 0, iMax = sizeof(szText) - 1;
	new perk[e_Perk], item_id;
	new data[2], zaccess, callback;
	menu_item_getinfo(menu, item, zaccess, data, 2, _, _, callback);
	item_id = data[0]-1;
	
	ArrayGetArray(items,item_id,perk);
		
	iLen += formatex(szText[iLen], iMax-iLen, "Potwierdzenie usuniecia perku.^n");
	iLen += formatex(szText[iLen], iMax-iLen, "\yPerk: \r%s^n", perk[PERK_NAME]);
	iLen += formatex(szText[iLen], iMax-iLen, "\yKoszt: \r%d Monet^n", perk[PERK_PRICE]);
	iLen += formatex(szText[iLen], iMax-iLen, "\yWytrzymalosc: \r%d/100^n^n", perk[PERK_DURABILITY]);
	iLen += formatex(szText[iLen], iMax-iLen, "\wCzy chcesz usunac ten perk?");
	
	new menu = menu_create(szText, "rynek_usun_potwierdzenie");
	
	menu_additem(menu, "\yTak", data);
	menu_additem(menu, "\rNie");

	menu_setprop(menu,MPROP_EXIT,MEXIT_NEVER)
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
}

public rynek_usun_potwierdzenie(id, menu, item)
{
	if(item == MENU_EXIT || item == 1)
	{
		rynek_usun(id);
		return PLUGIN_HANDLED;
	}
	
	new data[2], zaccess, callback;
	menu_item_getinfo(menu, item, zaccess, data, 2, _, _, callback);
	
	new perk[e_Perk];
	new item_id = data[0]-1;
	ArrayGetArray(items,item_id,perk);
	
	if(data[1] != perk[ITEM_ID])
	{
		ColorChat(id, GREEN, "[%s]^x03 Perk zostal juz kupiony.", PREFIX);
		rynek_usun(id);
		return PLUGIN_CONTINUE;
	}
	
	ArrayDeleteItem(items,item_id)
	ColorChat(id, GREEN, "[%s]^x03 Perk zostal pomyslnie usuniety z rynku!", PREFIX)
	rynek_usun(id);
	
	return PLUGIN_CONTINUE;
}

error:

L 08/23/2014 - 10:50:44: Start of error session.
L 08/23/2014 - 10:50:44: Info (map "de_dust2_long_2012") (file "addons/amxmodx/logs/error_20140823.log")
L 08/23/2014 - 10:50:44: Invalid cellvector handle provided (2:1:1)
L 08/23/2014 - 10:50:44: [AMXX] Displaying debug trace (plugin "cod_rynek.amxx")
L 08/23/2014 - 10:50:44: [AMXX] Run time error 10: native error (native "ArrayGetArray")
L 08/23/2014 - 10:50:44: [AMXX]    [0] cod_rynek.sma::rynek_kupno_handler (line 223)


  • +
  • -
  • 0
EASY COD - IP: 91.224.117.15:27235      b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png
JailBreak  -   IP: 91.224.117.67:27075     b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png
DD2 -   IP: 193.33.176.197:27111    b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png

Więcej serwerów na: www.NaFarciePL

#2 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

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

Napisano 23.08.2014 11:40   Najlepsza odpowiedź

W tym samym czasie przynajmniej dwie osoby korzystają z tego menu i jeśli jedna osoba kupi (czyli wykona się ArrayDeleteItem), to wtedy wszystkie inne rzeczy znajdujące się w array, przesuwają się i druga osoba chcąc kupić ostatni perk, nie kupi go, bo został już on przesunięty na wcześniejszą pozycję. Albo Ty, albo ktoś inny po prostu napisał nie do końca przemyślany kod.
  • +
  • -
  • 1
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu

#3 GwynBleidD

    Godlike

  • Administrator

Reputacja: 1849
Godlike

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

Napisano 23.08.2014 11:55

Dobre i złe nawyki tworzenia menu
To powinno wyczerpać temat.
  • +
  • -
  • 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




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

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