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): /
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
Msm da je toto
https://pastebin.com/g8LWQ7uW
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.
NP tu sam da pomognem :D
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]
[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
Nista nista, malo mozganja nije na odmet :D