Jump to content
  • 0

pomoc Problém s enumom


DuFF

Dotaz

Popis problému:


Zdravím, pri pawnení podnikov som narazil na problém s enumom. Vzhľadom na to, že enumom a tagom príliš nerozumiem, píšem radšej sem.

Problém je s výrazom "up_safe + listitem" (tag mismatch), aj keď po skompilovaní všetko funguje tak, ako má, rád by som sa zbavil warningu.


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


warning 213: tag mismatch


Kód:

 

[code=auto:0]
#define MAX_PROPERTIES          50
#define MAX_UPGRADE_VIP 	5

enum propInfo {
        ...
	up_safe,
	up_personal,
	up_security,
        ...
}

enum playerInfo {
	owner,
	current
}

enum enumDialogs {
        DIALOG_OWNER = 0,
	DIALOG_UPGRADE,
        ...
}

new properties[MAX_PROPERTIES][propInfo];
new players[MAX_PLAYERS][playerInfo];

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	switch (dialogid) {
                ...
		case DIALOG_UPGRADE:
		{
		        if (!response)
                                return DialogOwner(playerid);

                        if (properties[players[playerid][current]][up_safe + listitem] >= MAX_UPGRADE_VIP)
		                return DialogUpgrade(playerid);
			...
                        return 1;
		}
                ...
        }
        return 0;
}

[/code]

 




Dodatečné poznámky:
EDIT: Problém vyriešený spôsobom: up_safe + propInfo:listitem, dúfam, že to nebude mať nežiadúce následky. 

Edited by DuFF
Link to comment
Share on other sites

3 odpovědí na tuto otázku

Recommended Posts

  • 0

case DIALOG_UPGRADE:
		{
		        if (!response)
                                return DialogOwner(playerid);

                        if (properties[players[playerid][current]][up_safe + listitem] >= MAX_UPGRADE_VIP)
		                return DialogUpgrade(playerid);
			...
                        return 1;
		}

Som trochu nepobral, ak stlačí na tlačítko "Cancel" - druhé tak vyskočí majitel  properties ?

 

properties[players[playerid][current]][up_safe + listitem]

 

nechápem čo chceš spraviť, 

 

ale prečo na konkr. properties nepripíšeš meno či chceš aby tu properties mohli kupovať viac ludí ?

 

DIALOG_OWNER = 0,

 

tam nemusíš dávať 0,

enum si sám defaultne zoraduje  "ídečka" od nuly...

 

Link to comment
Share on other sites

  • 0

Problem je, ze listitem je typu _ a up_safe je typu propInfo. Tieto dva typy sa nedaju scitat. Staci pretypovat listitem.

 

if (properties[players[playerid][current]][up_safe + propInfo:listitem] >= MAX_UPGRADE_VIP)

Vdaka tomu sa daju scitat.

 

Druha moznost je pretypovat up_safe na _.

if (properties[players[playerid][current]][_:up_safe + listitem] >= MAX_UPGRADE_VIP)

Tak ci tak musia byt rovnakeho typu.

Edited by xhunterx
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0
case DIALOG_UPGRADE:
		{
		        if (!response)
                                return DialogOwner(playerid);

                        if (properties[players[playerid][current]][up_safe + listitem] >= MAX_UPGRADE_VIP)
		                return DialogUpgrade(playerid);
			...
                        return 1;
		}

Som trochu nepobral, ak stlačí na tlačítko "Cancel" - druhé tak vyskočí majitel  properties ?

 

properties[players[playerid][current]][up_safe + listitem]

 

nechápem čo chceš spraviť, 

 

ale prečo na konkr. properties nepripíšeš meno či chceš aby tu properties mohli kupovať viac ludí ?

 

DIALOG_OWNER = 0,

 

tam nemusíš dávať 0,

enum si sám defaultne zoraduje  "ídečka" od nuly...

 

 

Ak majiteľ otvorí menu podnikov, jednou z možností je "Upgrade", ktorá otvorí nový dialog, preto keď majiteľ DIALOG_UPGRADE zavrie, zobrazujem mu ten, z ktorého sa tam dostal.

Čo chcem spraviť: DIALOG_UPGRADE má 3 listitemy (vylepšiť trezor, personál a ochranku). Kliknutím na jeden z listitemov sa príslušná vlastnosť podniku vylepší o 1 a chcem zakázať, aby bolo možné vylepšovať cez limit (MAX_UPGRADE_VIP). Každopádne mojím problémom bolo sčítať prvok z enumu s listitemom, zvyšok sú nepodstatné informácie.

 

 

Problem je, ze listitem je typu _ a up_safe je typu propInfo. Tieto dva typy sa nedaju scitat. Staci pretypovat listitem.

 

 

if (properties[players[playerid][current]][up_safe + propInfo:listitem] >= MAX_UPGRADE_VIP)

Vdaka tomu sa daju scitat.

 

Druha moznost je pretypovat up_safe na _.

if (properties[players[playerid][current]][_:up_safe + listitem] >= MAX_UPGRADE_VIP)

Tak ci tak musia byt rovnakeho typu.

Vďaka, na možnosť pretypovania listitemu som prišiel tesne po postnutí príspevku (funguje), tvoju druhú možnosť som skúšal ešte pred postnutím, ale warningu som sa ňou nezbavil. rep+

 

Môžete LOCK, problém bol vyriešený.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...