goto label

Započeo monsterking, Jul 29, 2022, 22:48:23 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Problem(error/warning): Kako mogu da koristim goto na globalnom nivou (da skoči u drugi callback)? Ako može...
Ovo trenutno mi daje error: (1099) : error 019: not a label: "rankedit"
Deo skripte: public OnPlayerText(playerid, text[])
{
   new rank = GetPVarInt(playerid, "PlayerEditingOrgRank");
   if(rank > 0)
   {
           if(strlen(text) < 3 || strlen(text) > MAX_ORG_RANK_NAME)
           return ERROR(playerid, " ime ranka mora biti izmedju 3 i "#MAX_ORG_RANK_NAME" karaktera");
      new org = GetPVarInt(playerid, "PlayerEditingOrg");
      SCMF(playerid, COLOR_GOLD, "%s | Ime ranka %s[%d] promijenjeno u %s", OrgInfo[org][oName], OrgRankovi[org][rank], rank, text);
      strmid(OrgRankovi[org][rank], text, 0, strlen(text), MAX_ORG_RANK_NAME);
      goto rankedit;
   }
        new rankskin = GetPVarInt(playerid, "PlayerEditingOrgSkin");
   if(rankskin > 0)
   {
      new skin = strval(text);
      if(skin < 0 || skin == 74 || skin > 299)
           return ERROR(playerid, " skinovi mogu biti 0-73 i 75-299 ");
        new org = GetPVarInt(playerid, "PlayerEditingOrg");
      SCMF(playerid, COLOR_GOLD, "%s | Skin ranka %s[%d] promijenjen u %d", OrgInfo[org][oName], OrgRankovi[org][rankskin], rankskin, skin);
      OrgSkinovi[org][rank] = skin;
      goto skinedit;
   }
   
   return 0;
} //linija 1099


// Ovo je u odgovorima na dijaloge
case 5:
{
   rankedit:
   {
      format(string, sizeof(string), "1. %s\n2. %s\n3. %s\n4. %s\n5. %s\n6. %s", OrgRankovi[org][1], OrgRankovi[org][2], OrgRankovi[org][3], OrgRankovi[org][4], OrgRankovi[org][5], OrgRankovi[org][6]);
      ShowPlayerDialog(playerid, DIALOG_EDIT_ORG_RANKOVI, DIALOG_STYLE_LIST, "Promjena rankova", string, "Odabir", "Odustani");
   }
}
case 6:
{
    skinedit:
    {
       format(string, sizeof(string), "%d\n%d\n%d\n%d\n%d\n%d", OrgSkinovi[org][1], OrgSkinovi[org][2], OrgSkinovi[org][3], OrgSkinovi[org][4], OrgSkinovi[org][5], OrgSkinovi[org][6]);
       ShowPlayerDialog(playerid, DIALOG_EDIT_ORG_SKINOVI, DIALOG_STYLE_LIST, "Promjena skinova", string, "Odabir", "Odustani");
    }
}


Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [pawn]Vaš odgovor[/pawn]
Slika/video ingame problema(obavezno ako je ingame problem): link slike
Poslednja Izmena: Jul 30, 2022, 19:09:24 POSLE PODNE od Deleted User

ShowPlayerDialog(playerid, DIALOG_EDIT_ORG_RANKOVI

public OnPlayerText(playerid, text[])
{
   new rank = GetPVarInt(playerid, "PlayerEditingOrgRank");
}
?????????????????????? zasto u onplayertext?

Ovako prvo da kazem, goto je najgora naredba koja je ikad izmisljena u programiranju a u sustini je jump instrukcija. Ironicno ali izgleda da pawn ne dozvoljava jump izvan opsega pa zato i dobijas da nije definisan label. A ne dozvoljava zato da ne bi dolazilo do memory leakova. Inace goto naredba ti je nepotrebna ako programiras kao covek.

To receno, vidim da koristis OnPlayerText bez ikakvih provera za ono sta je uneto i slicno. Verovatno zelis da nakon komande ili sta vec igrac direktno u chat navede skin id ili nesto slicno...Moj savet je da koristis ko i svi mi ovde komande za takve stvari, ili eventualno dialoge. Ako se odlucis za komande, takodje preporucujem da koristis neki od command processora ZCMD, iZCMD, y_commands ili nesto slicno. Poenta je da ti svaka komanda u sustini bude jedna funkcija i da nemas spagetti kod u OnPlayerCommandText.

Ako zelis da se nesto moze odraditi na vise nacina (komanda, dialog, textdraw...), najpametnije je da napravis funkciju koju ces pozivati da ti handle sve to. Znaci ti u dialogu i komadi saniras i validujes input, i onda samo pozoves tu funkciju. Tako neces ponavljati kod (sto koliko vidim sada pokusavas da uradis).

Upravu si, prva mi je ideja naravno bila da prikažem input style dijalog u koji bih kucao i najlogičnija je opcija.. sad kad pogledam stvarno ne znam kako mi je ovo palo na pamet i zašto.. valjda da probam nešto što nisam do sad radio iako je nelogično i nepotrebno. Eto, naučio sam bar nešto u vezi pawn-a. Uradiću ovo unutar dijaloga jednostavno, preglednije i jednostavnije. Hvala, može lock :D

Inace ovo ti nije samo u vezi pawn, ovo ti je u svakom jeziku koji ima goto funkciju.
Inace lock cu ovo kao reseno