Dialog response problem


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

prethodna tema - sledeća tema

0 članova i 1 gost 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.
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 } 
};

        case TEAM_MAFIA: 
        { 
            for(i = 1; i < sizeof(MafiaGrade); i++) 
            { 
                dmsg[0] = EOS; 
                 
                if(MafiaGrade[i][gRank] != TeamRank[playerid]) 
                { 
                    continue; 
                } 
                 
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[i][gName], MafiaGrade[i][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");         
            }         
        }


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[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]);
						}
					}					
				}
			}
		}


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
{ 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

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)
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 }
};


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[0] = EOS;
                 
                if(MafiaGrade[i][gRank] != TeamRank[playerid])
                {
                    continue;
                }
                
				gvarlist =  MafiaGrade[i][gRank];
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[i][gName], MafiaGrade[i][gLevel]);
                strcat(string, dmsg);
                gcounter++;
            }

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)
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 }
};


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[0] = EOS;
                 
                if(MafiaGrade[i][gRank] != TeamRank[playerid])
                {
                    continue;
                }
                
				gvarlist =  MafiaGrade[i][gRank];
                format(dmsg, sizeof(dmsg), "\n"col_team_mafia"%s \t %d", MafiaGrade[i][gName], MafiaGrade[i][gLevel]);
                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
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.

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

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

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


MafiaGradeID = i ;//bez znaci -1 

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

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