Kötelezõ visszatérési értéket megadni, különben a módot sem tudod lefordítani, elvégre hibás lenne. Ez lehet false/hamis (0), true/igaz (1), vagy akár egy függvény is, vagy szinte bármi más, amire szükséged van. Ha egyszerûen elég neked, hogy visszatér a callback, akkor használj return 1;-et. Most pedig jön 2 példa, hogy hol.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 1:
{
if(response) SendClientMessage(playerid, 0xFFFFFFFF, \"Ez az 1-es számú dialog, 1. gombja.\");
else SendClientMessage(playerid, 0xFFFFFFFF, \"Ez az 1-es számú dialog, 2. gombja.\");
}
case 2:
{
if(response) SendClientMessage(playerid, 0xFFFFFFFF, \"Ez a 2-es számú dialog, 1. gombja.\");
else SendClientMessage(playerid, 0xFFFFFFFF, \"Ez a 2-es számú dialog, 2. gombja.\");
}
}
SendClientMessage(playerid, 0xFFFFFFFF, \"Ha ezt látod, egészen idáig lefutott a kód.\");
return 1;
}
Ebben az esetben egy érték szerinti elágazásban történnek meg a dolgok aszerint, hogy mely dialogot mutattuk meg a játékos számára. Amennyiben az 1-es dialogról van szó és kattintunk az 1. gombra, kiíródik az \"
Ez az 1-es számú dialog, 1. gombja.\" szöveg. Ekkor - mivel pawn nyelvben nem szükséges a break; használata érték szerinti elágazás esetében - ugyan a case 2-rõl szinte már nem vesz tudomást, de tovább fut egészen a callback legaljáig, amely igen sok sor is lehet, pl. 100 db igen sok dologgal megtömött dialog esetében. Ekkor pedig kiíródik a \"
Ha ezt látod, egészen idáig lefutott a kód.\" szöveg is. Azonban ha ezt a példát vesszük:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 1:
{
if(response) SendClientMessage(playerid, 0xFFFFFFFF, \"Ez az 1-es számú dialog, 1. gombja.\");
else SendClientMessage(playerid, 0xFFFFFFFF, \"Ez az 1-es számú dialog, 2. gombja.\");
return 1; // BEJELÖLÉS
}
case 2:
{
if(response) SendClientMessage(playerid, 0xFFFFFFFF, \"Ez a 2-es számú dialog, 1. gombja.\");
else SendClientMessage(playerid, 0xFFFFFFFF, \"Ez a 2-es számú dialog, 2. gombja.\");
return 1;
}
}
SendClientMessage(playerid, 0xFFFFFFFF, \"Ha ezt látod, egészen idáig lefutott a kód.\");
return 1;
}
Akkor már nem fog kiíródni a szöveg, hacsak nem egy itt nem lecsekkolt ID-vel rendelkezõ dialogott használunk, mert ha az 1-es dialogról beszélünk, akkor a zöld színû megjegyzéses bejelölésnél már fog tovább futni a kód. Eléggé bonyolultan lett elmagyarázva ez az egyszerû dolog, de azért remélem, hogy érthetõ. A lényeg, hogyha visszatér valamivel, onnantól kezdve nem fut tovább. Igazándiból nyugodtan írhatod csak a végére is, nem nagyon lesz észrevehetõ a különbség. Valami oknál fogva én is csak a végére rakom, ellentétben az OnPlayerCommandText beli parancsokkal; ugyanis ott minden egyes parancs végén visszatérek, hogy a többit ne csekkolja le. Bár az érhetõ is, mert jobban lassítaná és felesleges lenne, nem úgy, mint jelen esetben egy darab hosszú érték szerinti elágazásnál.