Szerző Téma: Dialogba sorrend & jail bug  (Megtekintve 965 alkalommal)

Dialogba sorrend & jail bug
« Dátum: 2013. augusztus 07. - 21:40:24 »
0 Show voters
Ü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.

Dialogba sorrend & jail bug
« Válasz #1 Dátum: 2013. augusztus 07. - 23:00:04 »
0 Show voters
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?

Dialogba sorrend & jail bug
« Válasz #2 Dátum: 2013. augusztus 08. - 12:30:17 »
0 Show voters
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;
}
« Utoljára szerkesztve: 2013. augusztus 08. - 12:35:16 írta Bloodest44 »

Dialogba sorrend & jail bug
« Válasz #3 Dátum: 2013. augusztus 08. - 12:57:11 »
0 Show voters
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.
« Utoljára szerkesztve: 2013. augusztus 08. - 15:04:27 írta Dexter95 »

Dialogba sorrend & jail bug
« Válasz #4 Dátum: 2013. augusztus 08. - 21:16:10 »
0 Show voters
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;

Dialogba sorrend & jail bug
« Válasz #5 Dátum: 2013. augusztus 09. - 00:16:10 »
+1 Show voters
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}
};
« Utoljára szerkesztve: 2013. augusztus 09. - 12:02:05 írta Dexter95 »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal