Skocz do zawartości
CebulaPL

[ROZWIĄZANY]Warunek if działa w dziwny sposób

Rekomendowane odpowiedzi

Witam, napotkałem się na dziwne zachowanie, a więc przejdę do rzeczy, mam następujący kod:

http://pastebin.com/XJ4bvh7B

(wrzuciłem kod na pastebin bo jak go tu wstawiałem to nie mogłem napisać tematu, pewnie dlatego że jest w nim zapytanie mysql)

 

Kiedy mam rękawiczki w użyciu:

[19:12:32] Masz założone rękawiczki, dlatego na przedmiocie nie zostają odciski palców.
[19:12:32] Odcisk postaci: 574C377090CDB odcisk na podniesionym przedmiocie: 574C377090CDB

 

Kiedy nie mam rękawiczek w użyciu:

[19:12:46] Odcisk postaci: 574C377090CDB odcisk na podniesionym przedmiocie: 0

 

W jaki sposób to mam zrozumieć? 

Dlaczego jeśli mam rękawiczki w użyciu to odciski palca się zapisują na przedmiocie, a kiedy nie mam rękawiczek w użyciu to odciski palca się nie zapisują. 

No mógłbym oczywiście "!=" zastąpić "==" ale chcę zrozumieć dlaczego tak się dzieje. 

Edytowane przez CebulaPL

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  1. if( gloves != -1 ) //Jeśli ma w użyciu rekawiczki to nie zostawiaj sladow palcow
  2.     {
  3.         format(Item[itemid][item_finger], 15, pInfo[playerid][player_finger]); //Odcisk palca
  4.         SendClientMessage(playerid, COLOR_RED, "Masz założone rękawiczki, dlatego na przedmiocie nie zostają odciski palców.");
  5.     }

To w środku wykona się, jeśli gloves == -5/-4/-3/-2/0/1/2/3/4/5/6/7/8 - może teraz zrozumiesz. Ponadto formatujesz do Item[itemid][item_fingerodcisk palca gracza, więc? Jeśli chcesz aby go nie było, zamiast pInfo[playerid][player_fingerdaj 0 czy coś innego.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrobiłem w taki sposób:

	new gloves = GetPlayerUsedItem(playerid, ITEM_TYPE_GLOVES);
	if( gloves > -1 ) //Jeśli ma w użyciu rekawiczki to nie zostawiaj sladow palcow
	{
		format(Item[itemid][item_finger], 15, pInfo[playerid][player_finger]); //Odcisk palca
		SendClientMessage(playerid, COLOR_RED, "Masz założone rękawiczki, dlatego na przedmiocie nie zostają odciski palców.");
	}
	else
	{
		Item[itemid][item_finger] = 0;
	}

Nadal to daje ten sam efekt, który opisałem w pierwszym poście. 

 

Dodam jeszcze funkcję GetPlayerUsedItem byście wiedzieli w jaki sposób działa.

stock GetPlayerUsedItem(playerid, i_type)
{
	foreach(new itemid : Items)
	{
		if( Item[itemid][item_owner_type] == ITEM_OWNER_TYPE_PLAYER && Item[itemid][item_owner] == pInfo[playerid][player_id] && Item[itemid][item_type] == i_type && Item[itemid][item_used] ) return itemid;
	}
	
	return -1;
}

 

Edytowane przez CebulaPL

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
new gloves = GetPlayerUsedItem(playerid, ITEM_TYPE_GLOVES);

if( gloves != -1 ) //Jeśli ma w użyciu rekawiczki to nie zostawiaj sladow palcow
	return SendClientMessage(playerid, COLOR_RED, "Masz założone rękawiczki, dlatego na przedmiocie nie zostają odciski palców.");

format(Item[itemid][item_finger], 15, pInfo[playerid][player_finger]); //Odcisk palca
   
mysql_query(sprintf("UPDATE `rp_items` SET `item_ownertype` = %d, `item_owner` = %d, `item_finger` = '%s', `item_posx` = 0.0, `item_posy` = 0.0, `item_posz` = 0.0, `item_rotx` = 0.0, `item_roty` = 0.0, `item_rotz` = 0.0, `item_world` = 0, `item_interior` = 0  WHERE `item_uid` = %d", Item[itemid][item_owner_type], Item[itemid][item_owner], Item[itemid][item_finger], Item[itemid][item_uid]));
 
SendClientMessage(playerid, COLOR_RED, sprintf("Odcisk postaci: %s odcisk na podniesionym przedmiocie: %s", pInfo[playerid][player_finger], Item[itemid][item_finger]));

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@NikeKST źle mnie zrozumiałeś.

Cytuj

Kiedy mam rękawiczki w użyciu:

[19:12:32] Masz założone rękawiczki, dlatego na przedmiocie nie zostają odciski palców.
[19:12:32] Odcisk postaci: 574C377090CDB odcisk na podniesionym przedmiocie: 574C377090CDB

 

Kiedy nie mam rękawiczek w użyciu:

[19:12:46] Odcisk postaci: 574C377090CDB odcisk na podniesionym przedmiocie: 0

Wyświetlanie tekstu na czacie działa zgodnie z warunkiem, tylko zapytanie na odwrót. Kiedy mam w użyciu rękawiczki to odcisk palca zapisuje się do bazy, a kiedy nie mam rękawiczek to się nie zapisuje.

Zrobiłem to w taki sposób, dodając returny, ale nadal nie działa http://pastebin.com/eSTh8PaR

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No bo masz format w złym miejscu

Zamieniłem jeszcze zapytania na takie jakie wg mnie powinny być i format jest już na swoim miejscu.

  1. new gloves = GetPlayerUsedItem(playerid, ITEM_TYPE_GLOVES);
  2.     if( gloves > -1 ) //Jeśli ma w użyciu rekawiczki to nie zostawiaj sladow palcow
  3.     {
  4.         SendClientMessage(playerid, COLOR_RED, "Masz założone rękawiczki, dlatego na przedmiocie nie zostają odciski palców.");
  5. mysql_query(sprintf("UPDATE `rp_items` SET `item_ownertype` = %d, `item_owner` = %d, `item_posx` = 0.0, `item_posy` = 0.0, `item_posz` = 0.0, `item_rotx` = 0.0, `item_roty` = 0.0, `item_rotz` = 0.0, `item_world` = 0, `item_interior` = 0  WHERE `item_uid` = %d", Item[itemid][item_owner_type], Item[itemid][item_owner], Item[itemid][item_uid]));     
  6.         return 1;
  7.     }
  8.     else
  9.     {
            format(Item[itemid][item_finger], 15, pInfo[playerid][player_finger]); //Odcisk palca
  10.        mysql_query(sprintf("UPDATE `rp_items` SET `item_ownertype` = %d, `item_owner` = %d, `item_finger` = '%s', `item_posx` = 0.0, `item_posy` = 0.0, `item_posz` = 0.0, `item_rotx` = 0.0, `item_roty` = 0.0, `item_rotz` = 0.0, `item_world` = 0, `item_interior` = 0  WHERE `item_uid` = %d", Item[itemid][item_owner_type], Item[itemid][item_owner], Item[itemid][item_finger], Item[itemid][item_uid]));
  11.         return 1;
  12.     }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×