Zaključano

Dialog response problem

Započeo gasmon
pre 6 godina
963
pregleda
14
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
gasmon
Hustler
pre 6 godina
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.

enum GradeInfo 

    gRank,
    gLevel,
    gName,
    Float:gHealth,
    Float:gArmor
}

new MafiaGrade[] = 
{
    { -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 }
};

        case TEAM_MAFIA:
        {
            for(i = 1; i < sizeof(MafiaGrade); i++)
            {
                dmsg = EOS;
               
                if(MafiaGrade != TeamRank)
                {
                    continue;
                }
               
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade, MafiaGrade);
                strcat(string, dmsg);
                gcounter++;
            }
           
            if(!gcounter)
            {
                SendErrorMessage(playerid, "There is no available grades for your current rank (%s).", RankName(playerid, TeamRank));
            }
            else
            {
                ShowPlayerDialog(playerid, DIALOG_GRADE_MAFIA, DIALOG_STYLE_TABLIST_HEADERS, "Choose your grade", string, "Select", "Cancel");       
            }       
        }


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:

case DIALOG_RANK_MAFIA:
{
if(response)
{
if(!IsRankChangeAllowed(playerid, GetPlayerTeam(playerid)))
return 1;

switch(listitem)
{
case 0..sizeof MafiaRank:
{
if(PlayerInfo < MafiaRank[listitem + 1])
{
SendErrorMessage(playerid, "You need to be minimum level %d in order to become %s.", MafiaRank[listitem + 1], MafiaRank[listitem + 1]);
return 1;
}

if(TeamRank == listitem + 1)
{
SendErrorMessage(playerid, "You are already %s.", MafiaRank[listitem + 1]);
return 1;
}

if(MafiaRank[listitem + 1] && PlayerInfo < MafiaRank[listitem + 1])
{
SendErrorMessage(playerid, "You need to be at least %s donor in order to use this rank.", DonorName(MafiaRank[listitem + 1]));
}
else
{
Mafia_Rank_Set(playerid, listitem + 1);
SendInfoMessage(playerid, "You have changed your rank. You are %s now.", MafiaRank[listitem + 1]);
}
}
}
}
}


Problem mi stvara ovaj podebljani deo MafiaRank[listitem + 1] 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): /
--Lood--
Crime Lord
pre 6 godina
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

{ 1, DEFAULT_LEVEL, "Junior Associate", 99.0, 0.0 },
    { 1, 3, "Senior Associate", 99.0, 0.0 },

?
jer uzimas preko IDa jesam li u pravu ?

Sto znaci da ne mozes uzimati preko

listitem+1

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
--Lood--
Crime Lord
pre 6 godina
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
gasmon
Hustler
pre 6 godina
Probao sam, i delimicno radi tj "zuri" mi za 2 reda iz onog niza (Umesto selektovanog prikazuje ime iz sledeca 2 reda)

new MafiaGrade[] =
{
{ -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 }
};


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?

            for(i = 1; i < sizeof(MafiaGrade); i++)
            {
                dmsg = EOS;
               
                if(MafiaGrade != TeamRank)
                {
                    continue;
                }
               
gvarlist =  MafiaGrade;
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade, MafiaGrade);
                strcat(string, dmsg);
                gcounter++;
            }
--Lood--
Crime Lord
pre 6 godina
gasmon wrote on February 26, 2019, 2:35 pm:
Probao sam, i delimicno radi tj "zuri" mi za 2 reda iz onog niza (Umesto selektovanog prikazuje ime iz sledeca 2 reda)

new MafiaGrade[] =
{
{ -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 }
};


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?

            for(i = 1; i < sizeof(MafiaGrade); i++)
            {
                dmsg = EOS;
               
                if(MafiaGrade != TeamRank)
                {
                    continue;
                }
               
gvarlist =  MafiaGrade;
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade, MafiaGrade);
                strcat(string, dmsg);
                gcounter++;
            }


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
--Lood--
Crime Lord
pre 6 godina
Msm da je toto
https://pastebin.com/g8LWQ7uW
gasmon
Hustler
pre 6 godina
--Lood-- wrote on February 26, 2019, 2:56 pm:
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.
--Lood--
Crime Lord
pre 6 godina
NP tu sam da pomognem 😄
gasmon
Hustler
pre 6 godina
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.

for(i = 1; i < sizeof(MafiaGrade); i++)
{
dmsg = EOS;

if(MafiaGrade != TeamRank)
{
continue;
}

MafiaGradeID = i - 1;

format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade, MafiaGrade);
strcat(string, dmsg);
gcounter++;
}
--Lood--
Crime Lord
pre 6 godina

for(i = 1; i <= sizeof(MafiaGrade); i++)
{
dmsg = EOS;

if(MafiaGrade == TeamRank)
{

MafiaGradeID = i ;//bez znaci -1

format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade, MafiaGrade);
strcat(string, dmsg);
gcounter++;
}
}

a ovako ?
gasmon
Hustler
pre 6 godina
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
--Lood--
Crime Lord
pre 6 godina
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
gasmon
Hustler
pre 6 godina
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.  😁
--Lood--
Crime Lord
pre 6 godina
Nista nista, malo mozganja nije na odmet 😄

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava