Jump to content
  • 0

pomoc Vyvolá sa else, aj keď je podmienka nad ním splnená


Kubko

Dotaz

Popis problému:

Mám podmienku if a hneď pod ňou else a problém nastáva v tom, že sa mi vyvolá vnútro else aj cez to, že je podmienka nad ním splnená. Akonáhle pridám do toho if bloku nejaký kód, funguje to normálne.

 

Chyby/varování kompilátoru a při běhu:

-

 

Kód:

 

[code=:0]
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
	if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][6])
	{
		MDC_Close(playerid, true);
		return 1;
	}
	else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][8])
	{
		MDC_Close(playerid);
		return 1;
	}
	else
	{
		for(new i; i < MDC_ITEM_SIZE; i++)
		{
			if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][i * 2 + 10])
			{
				MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, i, MDC_g_sPlayer[playerid][E_MDC_CONTENT][i]);
				return 1;
			}
		}
		
		switch(MDC_g_sPlayer[playerid][E_MDC_ITEM])
		{
			case MDC_ITEM_LOOK_UP:
			{
				switch(MDC_g_sPlayer[playerid][E_MDC_CONTENT][MDC_g_sPlayer[playerid][E_MDC_ITEM]])
				{
					case MDC_CONTENT_SEARCH:
					{
						if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][21] || playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][23])
						{
							MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] == MDC_LOOK_UP_METHOD_PERSON ? MDC_LOOK_UP_METHOD_VEHICLE : MDC_LOOK_UP_METHOD_PERSON;

							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH, 29, 52);
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][24])
						{
							if((MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT][0] == EOS && !MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_DATA_LOADED]) || (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT][0] != EOS && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_DATA_LOADED]) || (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] < MDC_LOOK_UP_CACHE_SYNTAX_ERROR))
							{
								MDC_g_sPlayer[playerid][E_MDC_STATE] = MDC_STATE_SUSPENDED;
								CancelSelectTextDraw(playerid);

								if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] == MDC_LOOK_UP_METHOD_PERSON)
								{
									ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_INPUT, DIALOG_STYLE_INPUT, "Insert data", "Who are you looking for?", "Search", "Close");
								}
								else
								{
									ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_INPUT, DIALOG_STYLE_INPUT, "Insert data", "What plate are you looking for?\n\nFor plate, enter the plate number.\nFor vehicle ID, enter 'id:IDHERE', e.g. 'id:552'", "Search", "Close");
								}
							}
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][28] && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] != MDC_LOOK_UP_CACHE_NONE && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] != MDC_LOOK_UP_CACHE_SYNTAX_ERROR)
						{
							new
								bool:refresh_possible
							;

							if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD] == MDC_LOOK_UP_METHOD_PERSON)
							{
								if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_VEHICLE)
								{
									refresh_possible = true;
								}
							}
							else
							{
								if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] >= MDC_LOOK_UP_CACHE_ESSENTIAL && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] <= MDC_LOOK_UP_CACHE_ADRESS)
								{
									refresh_possible = true;
								}
							}
						
							if(refresh_possible)
							{
								MDC_LookUp(playerid, MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_METHOD], MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT]);
							}
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][35])
						{
							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS);
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][37])
						{
							if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ESSENTIAL)
							{
								MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE);
							}
							else if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ADRESS)
							{
								MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS);
							}
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][39])
						{
							if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ESSENTIAL)
							{

							}
							else
							{//Toto je ten else
                                                                printf("%i", MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE]); //Vyprintuje 1, čo je rovné MDC_LOOK_UP_CACHE_ESSENTIAL
								MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE);
							}
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][48] || playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][54])
						{
							if(!MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM])
							{
								MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] = MDC_LOOK_UP_RECORD_PER_PAGE_COUNT;
							}
							else
							{
								MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] - MDC_LOOK_UP_RECORD_PER_PAGE_COUNT - (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] % MDC_LOOK_UP_RECORD_PER_PAGE_COUNT);
							}
							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH, 29);
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][49] || playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][55])
						{
							MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_RECORD_CHARGE_NUM] += MDC_LOOK_UP_RECORD_PER_PAGE_COUNT;

							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH, 29);
							return 1;
						}
					}
					case MDC_CONTENT_ADRESS:
					{
						if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][20])
						{
							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH);
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][30])
						{
							if(!MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM])
							{
								MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] = MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT;
							}
							else
							{
								MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] - MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT - (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] % MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT);
							}
							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS, 32, 33, 34);
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][31])
						{
							MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] += MDC_LOOK_UP_ADRESS_PER_PAGE_COUNT;

							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS, 32, 33, 34);
							return 1;
						}
						
						for(new i; i < 3; i++)
						{
							if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][i * 2 + 25])
							{
								MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_SELECTED] = MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_NUM] + i;

								if((MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_POS_X][MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_SELECTED]] >= 132.0 && MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_MAP]) || (MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_POS_X][MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_SELECTED]] < 132.0 && !MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_ADRESS_MAP]))
								{
									MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS, 32, 33);
								}
								else
								{
									MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_ADRESS);
								}
								return 1;
							}
						}
					}
					case MDC_CONTENT_LICENSE:
					{
						if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][20])
						{
							MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_SEARCH);
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][30])
						{
							MDC_g_sPlayer[playerid][E_MDC_STATE] = MDC_STATE_SUSPENDED;
							CancelSelectTextDraw(playerid);

							strcpy(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "How many hours should 's license be suspended for?", MDC_STRING_SECONDARY_SIZE);
							strins(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT], 22, MDC_STRING_SECONDARY_SIZE);
							ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_LICENSE_SUSPEND, DIALOG_STYLE_INPUT, "Suspension", MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "Suspend", "Cancel");
							return 1;
						}
						else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][32])
						{
							if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_LICENSE_STATE][0] == 2)
							{
								MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_LICENSE_STATE][0] = 1;
								
								MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_KEEP_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE);
							}
							else
							{
								MDC_g_sPlayer[playerid][E_MDC_STATE] = MDC_STATE_SUSPENDED;
								CancelSelectTextDraw(playerid);

								strcpy(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "Are you sure you want to write a warning on 's driving license?", MDC_STRING_SECONDARY_SIZE);
								strins(MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_INPUT], 44, MDC_STRING_SECONDARY_SIZE);
								ShowPlayerDialog(playerid, MDC_DIALOG_LOOK_UP_LICENSE_WARN, DIALOG_STYLE_MSGBOX, "Confirmation", MDC_g_sPlayer[playerid][E_MDC_STRING_SECONDARY], "Yes", "No");
							}
							return 1;
						}
					}
				}
			}
		}
	}
	return 0;
}[/code]

 

 

 

Dodatečné poznámky:

- Ten else je označený komentárom

Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Hlavní moderátor

 

 

Mám podmienku if a hneď pod ňou else a problém nastáva v tom, že sa mi vyvolá vnútro else aj cez to, že je podmienka nad ním splnená. Akonáhle pridám do toho if bloku nejaký kód, funguje to normálne.

Pokud v tom if bloku neplánuješ nic mít, je zbytečné to tak používat, stačí přepsat podmínku a else úplně eliminovat:

if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] != MDC_LOOK_UP_CACHE_ESSENTIAL) // náhrada za else
{
    printf("%i", MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE]); //Vyprintuje 1, čo je rovné MDC_LOOK_UP_CACHE_ESSENTIAL
    MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE);
}
Link to comment
Share on other sites

  • 0

Práve, že plánujem, ale ma to dosť zaujalo icon_e_biggrin.gif, pretože keď som skúsil rovnakú vec vyvolať inde, napríklad OnPlayerSpawn, či dokonca main, funguje to normálne.

Zaujímavé, že keď si tú hodnotu vyprintujem pred tou podmienkou, tak to funguje tiež správne - else sa nevyvolá.

else if(playertextid == MDC_g_sPlayer[playerid][E_MDC_TEXTDRAW][39])
{    
    printf("%i", MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE]); //Vyprintuje 1, čo je rovné MDC_LOOK_UP_CACHE_ESSENTIAL	     
    if(MDC_g_sPlayer[playerid][E_MDC_LOOK_UP_CACHE] == MDC_LOOK_UP_CACHE_ESSENTIAL)
    {	

    }	
    else	
    {//Toto je ten else         
        MDC_Update(playerid, MDC_UPDATE_TECHNIQUE_WIPE_CONTENT, _, MDC_ITEM_LOOK_UP, MDC_CONTENT_LICENSE);	
    }	
    return 1;
}
Edited by Kubko
Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

Je divné, že by se to tak chovalo jen v tomto případě. V něčem ten háček být musí. Každopádně, chápu to správně, že o tom teď debatujeme jen ze zvědavosti a problém vlastně nemáš? :d

Link to comment
Share on other sites

  • 0

V podstate sa to dá nazvať tou zvedavosťou. icon_e_biggrin.gif Ale mňa to maximálne znepokojuje, pretože sa snažím prísť na príčinu, prečo to tam nefunguje ako inde.

 

Teraz som to vyskúšal ešte cez switch a funguje to tiež normálne.

Edited by Kubko
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...