Dialog response problem

Započeo gasmon, Februar 26, 2019, 13:51:11 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 5 gostiju pregledaju ovu temu.

Problem(error/warning): Nista
Dio skripte:
Imam problem u vezi dialoga, i znam sta uzrokuje taj problem ali ne znam kako da ga resim.
Ovkao, prvi deo koda mi prolazi kroz sve stepene (grade) za mafiju, i ako je stepen kroz koji je loop prosao namenjen za rank koji je trenutno igrac, dodaje ga u dialogu.
[pawn]
enum GradeInfo 

    gRank,
    gLevel,
    gName[32],
    Float:gHealth,
    Float:gArmor
}

new MafiaGrade[][GradeInfo] = 
{
    { -1, -1, "None", 0.0, 0.0},
    { 1, DEFAULT_LEVEL, "Junior Associate", 99.0, 0.0 },
    { 1, 3, "Senior Associate", 99.0, 0.0 },
    { 2, 3, "Newbie Crook", 99.0, 0.0 },
    { 2, 44, "Experienced Crook", 99.0, 0.0 },
    { 3, 22, "Light Gunner", 99.0, 0.0 },
    { 3, 11, "Heavy Gunner", 99.0, 0.0 }
};
[/pawn]
[pawn]
        case TEAM_MAFIA:
        {
            for(i = 1; i < sizeof(MafiaGrade); i++)
            {
                dmsg[0] = EOS;
                 
                if(MafiaGrade[gRank] != TeamRank[playerid])
                {
                    continue;
                }
                 
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[gName], MafiaGrade[gLevel]);
                strcat(string, dmsg);
                gcounter++;
            }
             
            if(!gcounter)
            {
                SendErrorMessage(playerid, "There is no available grades for your current rank (%s).", RankName(playerid, TeamRank[playerid]));
            }
            else
            {
                ShowPlayerDialog(playerid, DIALOG_GRADE_MAFIA, DIALOG_STYLE_TABLIST_HEADERS, "Choose your grade", string, "Select", "Cancel");         
            }         
        }
[/pawn]

Ovo gore mi sve savrseno radi, znaci ako je igrac rank 1 pokazace mu "Associate" stepene, a ako je igrac rank 2 pokazace mu "Crook" rankove u dialogu, i sve tako redom.
Ali evo gde nailazimo na moj problem, u OnDialogResponse ja sam do sada proveravao ovako:

[pawn]
      case DIALOG_RANK_MAFIA:
      {
         if(response)
         {
            if(!IsRankChangeAllowed(playerid, GetPlayerTeam(playerid)))
            return 1;
            
            switch(listitem)
            {
               case 0..sizeof MafiaRank:
               {
                  if(PlayerInfo[playerid][Level] < MafiaRank[listitem + 1][rLevel])
                  {
                     SendErrorMessage(playerid, "You need to be minimum level %d in order to become %s.", MafiaRank[listitem + 1][rLevel], MafiaRank[listitem + 1][rName]);
                     return 1;
                  }
                  
                  if(TeamRank[playerid] == listitem + 1)
                  {
                     SendErrorMessage(playerid, "You are already %s.", MafiaRank[listitem + 1][rName]);
                     return 1;
                  }
                  
                  if(MafiaRank[listitem + 1][rDonor] && PlayerInfo[playerid][Donor] < MafiaRank[listitem + 1][rDonorLevel])
                  {
                     SendErrorMessage(playerid, "You need to be at least %s donor in order to use this rank.", DonorName(MafiaRank[listitem + 1][rDonorLevel]));
                  }
                  else
                  {
                     Mafia_Rank_Set(playerid, listitem + 1);   
                     SendInfoMessage(playerid, "You have changed your rank. You are %s now.", MafiaRank[listitem + 1][rName]);
                  }
               }               
            }
         }
      }
[/pawn]

Problem mi stvara ovaj podebljani deo MafiaRank[listitem + 1][rName] a razlog ta sto ako se vratite na niz stepena videcete da su mi pod 1 i 2 Associate stepeni,
tako da koji god ja da sam rank, i bilo da mi u dialogu za stepene pisu Crook stepeni, Associate ili neki drugi, OnDialogResponse ce uvek da odradi samo Associate stepene tj krenuce od 0 pa na gore umesto da krene od broja pod kojim su mi stepeni za odabrani rank.
Da li neko ima predstavu kako mogu ovo da resim?
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): /
Slika/video ingame problema(obavezno ako je ingame problem): /
Poslednja Izmena: Februar 27, 2019, 17:12:32 POSLE PODNE od Bašovski

Cekaj kako sam ja skontao ti uvjek dobijas
2 opicje u dialogu, ako sam upravu,  znaci listitem+1 moze biti samo (1 ili 2) sto znaci da ti je to samo ovo 2
[pawn]
{ 1, DEFAULT_LEVEL, "Junior Associate", 99.0, 0.0 },
    { 1, 3, "Senior Associate", 99.0, 0.0 },
[/pawn]
?
jer uzimas preko IDa jesam li u pravu ?


Sto znaci da ne mozes uzimati preko
[pawn]
listitem+1
[/pawn]
nego moras naci drugi nacin
tipa u onoj petlji odradit globalnu varijablu te dodjelit je i da ti to bude umjesto listitem
ako me nisi skonto reci poksuacu ti kodom objasnit

Evo i u kodu msm da bi mozda cak i radilo da ides samo copy paste al nisam siguran

ps obriso sam slucajno neku provjeru msm ovu za minimum level nmj je zaboravit ubacit
Pastebin: https://pastebin.com/aABzQFCN

Probao sam, i delimicno radi tj "zuri" mi za 2 reda iz onog niza (Umesto selektovanog prikazuje ime iz sledeca 2 reda)
[pawn]
new MafiaGrade[][GradeInfo] =
{
   { -1, -1, "None", 0.0, 0.0}, // Blank row that fixes some variables. (Add new levels below this row)
   { 1, DEFAULT_LEVEL, "Junior Associate", 99.0, 0.0 },
   { 1, 3, "Senior Associate", 99.0, 0.0 },
   { 2, 3, "Newbie Crook", 99.0, 0.0 },
   { 2, 44, "Experienced Crook", 99.0, 0.0 },
   { 3, 22, "Light Gunner", 99.0, 0.0 },
   { 3, 11, "Heavy Gunner", 99.0, 0.0 }
};
[/pawn]

E sad, probao sam da dodam jednostavno gvarlist + listitem + 2 ali jos vise sjebe stvar.
Mozda to ima neke veze sto mi loop pocinje od i = 1 (Kod ispod) a listitem iz ondialogresponse pocinje od 0?
[pawn]
            for(i = 1; i < sizeof(MafiaGrade); i++)
            {
                dmsg[0] = EOS;
                 
                if(MafiaGrade[gRank] != TeamRank[playerid])
                {
                    continue;
                }
               
            gvarlist =  MafiaGrade[gRank];
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[gName], MafiaGrade[gLevel]);
                strcat(string, dmsg);
                gcounter++;
            }
[/pawn]

Citat: gasmon poslato Februar 26, 2019, 15:35:34 POSLE PODNE
Probao sam, i delimicno radi tj "zuri" mi za 2 reda iz onog niza (Umesto selektovanog prikazuje ime iz sledeca 2 reda)
[pawn]
new MafiaGrade[][GradeInfo] =
{
   { -1, -1, "None", 0.0, 0.0}, // Blank row that fixes some variables. (Add new levels below this row)
   { 1, DEFAULT_LEVEL, "Junior Associate", 99.0, 0.0 },
   { 1, 3, "Senior Associate", 99.0, 0.0 },
   { 2, 3, "Newbie Crook", 99.0, 0.0 },
   { 2, 44, "Experienced Crook", 99.0, 0.0 },
   { 3, 22, "Light Gunner", 99.0, 0.0 },
   { 3, 11, "Heavy Gunner", 99.0, 0.0 }
};
[/pawn]

E sad, probao sam da dodam jednostavno gvarlist + listitem + 2 ali jos vise sjebe stvar.
Mozda to ima neke veze sto mi loop pocinje od i = 1 (Kod ispod) a listitem iz ondialogresponse pocinje od 0?
[pawn]
            for(i = 1; i < sizeof(MafiaGrade); i++)
            {
                dmsg[0] = EOS;
                 
                if(MafiaGrade[gRank] != TeamRank[playerid])
                {
                    continue;
                }
               
            gvarlist =  MafiaGrade[gRank];
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[gName], MafiaGrade[gLevel]);
                strcat(string, dmsg);
                gcounter++;
            }
[/pawn]

nema loop vezee, preskaces 0 jer ti je 0 svakako koliko sam skonto ne bitak rank tacnije to je None
A zasto to +2 radi bez toga trebalio bi raditi bez +2
samo listitem+gvarlist

i pogledaj u provjerama nisam sve provjere izmjenio ostalo je jos negdje listiitem+1 zamjeni i to

EDIT : ups moja greska ak0 zuri 2 reda ides -2, ali ne bi trebalo zuriti cek sacu jos jednom pogledat kod pa ti javim, ako ne stignem u roku 10 min vrv sam otiso kuci radim do 4
Poslednja Izmena: Februar 26, 2019, 15:53:34 POSLE PODNE od --Lood--


Citat: --Lood-- poslato Februar 26, 2019, 15:56:44 POSLE PODNE
Msm da je toto
https://pastebin.com/g8LWQ7uW
Odlicno, hvala ti puno!
Prikazivalo mi je za 1 ispred, ali kad sam dodao - 1 u onom nizu ( MafiaGradeID = i - 1; ) sada savrseno radi sve.
Svaki rank i stepen za taj rank sam isprobao i sve pravilno odradjuje.


E pa cvrc... ???
Sve lepo samo ako ima po 2 stepena za svaki rank, ako dodam recimo za rank 1 4 stepena, za rank 2 tri stepena onda ne radi lepo.
U ovom slucaju tamo gde ima 4 stepena zuri za 3, gde ima 3 stepena zuri za 2 i gde ima 2 stepena zuri za 1 (Kliknes na prvi stepen na primer, on selektuje onaj po redu u zavisnosti koliko polja zuri u napred) (to sam testirao do sad).
Koristio sam primer iz tvog poslednjeg posta samo sto sam dodao ono gvarlist = i - 1 (kod ispod) - Ako ukinem ovo i - 1 svuda gde zuri, zurice za jos plus jedno polje.

[pawn]
         for(i = 1; i < sizeof(MafiaGrade); i++)
         {
            dmsg[0] = EOS;
            
            if(MafiaGrade[gRank] != TeamRank[playerid])
            {
               continue;
            }
            
            MafiaGradeID = i - 1;
            
            format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[gName], MafiaGrade[gLevel]);
            strcat(string, dmsg);
            gcounter++;
         }
[/pawn]
Poslednja Izmena: Februar 26, 2019, 22:43:54 POSLE PODNE od gasmon

[pawn]
for(i = 1; i <= sizeof(MafiaGrade); i++)
{
dmsg[0] = EOS;

if(MafiaGrade[gRank] == TeamRank[playerid])
{


MafiaGradeID = i ;//bez znaci -1

format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[gName], MafiaGrade[gLevel]);
strcat(string, dmsg);
gcounter++;
}
}
[/pawn]
a ovako ?

Kada u listi od 4 stepena selektujem prvi, doalog response mi odradi cetvrti, tamo gde ima 3 stepena kada izaberem prvi, odradi mi treci, i sve tako.
Ovo oznaceno u dialogu je sta sam kliknuo a ovo sto izadje u cetu je sta mi server odradi. Takodje ispisuje i gvarlist + listitem (koji je broj odabran) https://imgur.com/a/vHLPcrc

Obozavam ove muckalice
evo pokusaj sada
Dodao sam testrank i pratio petlju na osnovu toga, vidices u komentarima msm da bi sada trebalo radit
https://pastebin.com/btagipSW

Testirao sam i prikazivalo mi je za jedno polje unazad, ali kad sam stavio new br_rankova = -1; umesto new br_rankova = 0; sve savrseno radi. Samo sto sam ovaj put probao mali milion nacina (napravio sam 10 stepena, 7 stepena, 2 stepena, sve na razlicitim mestima) i sve savrseno radi, ziv bio i hvala ti jos jednom.  ;D