-
Üdv, pontozás alapján akarnám csoportosítani a játékosokat egy dialogba, de id szerint rakja. (összevissza)
Hogyan lehet megadni hogy a \'legtöbb pontos\' legyen felül és az alacsonyabbak alatta?
Illetve börtön parancsnál van olyan bug, hogy ha pl. id3-at bezárom ( /jail 3 szabályzat ) majd lelép, és ha más valaki visszajön id3 helyébe akkor õ is bezáródik. (pedig valójában nem õ volt id3) Sima helyi változós, \'new bezartID\' -t használok.
Köszi a segítséget.
-
Ne ID alapján zárd be, mert akkor nyilvánvaló, hogy ha más lép a helyébe, akkor börtönbe kerül. ID alapján lekéred a nevet, és névvel zárod be. Gondolom reges a szervered és ugyanolyan névvel nem lehet regelni. A dialog-ra így nem tudok mit mondani. Be tudnád másolni?
-
1. És milyen módon csatoljam az id-hez a nevet?
rabID = GetPlayerName(rabID, rabNAME, 24);
if(strcmp(rabID,rabName,true))
Majd a többi paraméterhez (setplayerpos, setpvar, settimer) is rabName-t írjak a rabID helyett?
2. Hát igazából ID szerint alakítja a sorrendet, és nem pontszám szerint.:
Legfelülre akarnám a legmagasabb pontszámosat.
CMD:score(playerid, params[])
{
new jatekosok = 0, str[512];
for(new i;i<MAX_PLAYERS;i++)
{
new pontszam = GetPlayerScore(i);
if(pontszam >= 10)
{
format(str,sizeof(str),\"%s{ffffff}%s {ff0000}Pontszáma: {ff0000}%d\\n\", str, PlayerName(i), pontszam);
jatekosok++;
}
}
ShowPlayerDialog(playerid, DIALOG_SCORE, DIALOG_STYLE_MSGBOX, \"Pontszám alakulás (növekvõ sorrendben)\", str, \"Bezár\", \"\");
if(jatekosok == 0) return ShowPlayerDialog(playerid,DIALOG_SCORE, DIALOG_STYLE_MSGBOX,\"Pontszám alakulás (növekvõ sorrendben)\",\" \",\"Bezár\",\"\");
return 1;
}
-
Gondolom elmented valahova, hogy ki van bezárva. Ez egy RP szerver? vagy hasonló?. Reges?. mert ha reges, akkor csak a felhasználónál simán csinálsz egy részt, hogy börtönben = 0 vagy 1. És loginnál ellenõrízni. Ha börtönben = 1, akkor csukja be.
Dupla hozzászólás automatikusan összefûzve. ( 2013. augusztus 08. - 13:03:51 )
A dialogodhoz már kigondoltam valamit, egy picit késõbb tesztelem is, csak már éhes vagyok :D
Dupla hozzászólás automatikusan összefûzve. ( 2013. augusztus 08. - 15:04:26 )
Nos, nem teszteltem a kódot, csak egy részét.
https://raw.github.com/oscar-broman/md-sort/master/md-sort.inc
Ezt az include-ot töltsd le, és tedd be a PAWNO include mappádba.
Hogy értsd: Ez az include arra szolgál, hogy több dimenziós változók megadott elemeit növekvõ sorrendbe helyezze.
Tehát:
#include <md-sort>
new pontok[][2]; //itt létrehoztam egy két dimenziós változót, a 0. elemébe a pontszámot tároljuk, az 1.-ben pedig a hozzá tartozó ID-t.
CMD:score(playerid, params[])
{
new jatekosok = 0, str[512];
for(new i;i<MAX_PLAYERS;i++)
{
new pontszam = GetPlayerScore(i);
if(pontszam >= 10)
{
pontok[0] = pontszam; //itt feltöltöm a tömb 0. elemét a pontszámokkal
pontok[1] = i; //itt pedig a hozzájuk tartozó ID-vel
jatekosok++;
}
}
SortDeepArray(pontok, 0); //Ez a funkció szolgálja azt a célt, hogy a már feltöltött tömböt a pontszámok alapján növekvõ sorba rendezi.
new i = sizeof(pontok)-1; //Mivel azt kérted, hogy a legnagyobb legyen legfelül, az egy csökkenõ sorrend(nem növekvõ, ahogy lejebb írtad), ezért fordított ciklust kell használni.
while(i >= 0)
{
new ID = pontok[1];
new pontszamformat = pontok[0];
format(str,sizeof(str),\"%s{ffffff}%s {ff0000}Pontszáma: {ff0000}%d\\n\", str, PlayerName(ID), pontszamformat); //ezek már szerintem érthetõek
i--;
}
ShowPlayerDialog(playerid, DIALOG_SCORE, DIALOG_STYLE_MSGBOX, \"Pontszám alakulás (növekvõ sorrendben)\", str, \"Bezár\", \"\");
if(jatekosok == 0) return ShowPlayerDialog(playerid,DIALOG_SCORE, DIALOG_STYLE_MSGBOX,\"Pontszám alakulás (növekvõ sorrendben)\",\" \",\"Bezár\",\"\");
return 1;
}
Elvileg így mûködnie kell. Ha nem, akkor szólj és javítom.
Észrevétel: A pawn kódodban Te azt írtad, hogy növekvõ sorrendben, viszont itt a kérésben pedig azt, hogy a legnagyobb megy legfelülre. Ha a legnagyobb megy legfelülre, akkor az egy csökkenõ sorrend. És mivel a kérésben ez volt, én ezt csináltam meg.
-
Ezt írja ki: :rolleyes:
warning 224: indeterminate array size in \"sizeof\" expression (symbol \"\")
warning 224: indeterminate array size in \"sizeof\" expression (symbol \"\")
SortDeepArray(pontok, 0);
new i = sizeof(pontok)-1;
-
Mûködik ettõl függetlenül?
Dupla hozzászólás automatikusan összefûzve. ( 2013. augusztus 09. - 12:02:05 )
Mert ez csak warning. Elõfordulhat, hogy ettõl még megy a kód, valójában ez azt mondja, hogy bizonytalan a sizeof mennyiség. De elképzelhetõ, hogy mûködik. De szerintem az a gondja, hogy ezt ciklus tölti fel adatokkal, és jelenleg még nincs benne semmi. Esetleg adj meg egy értéket a tömbnek.
így:
new pontok[][2] = {
{1,1}
};