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

    Szukam niewiadomej

  • Użytkownik

Reputacja: 41
Pomocny

  • Postów:407
  • Steam:steam
  • 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

CoD Mod - IP: 91.224.117.15:27235      
JailBreak  -   IP: 91.224.117.67:27075     
Only de_dust2 -   IP: 193.33.176.197:27111   

Więcej serwerów na: www.NaFarciePL


#2 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • 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


#3 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • 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