Szerző Téma: Floodolja  (Megtekintve 1571 alkalommal)

Nem elérhető Flips

Floodolja
« Dátum: 2016. Október 20. - 21:16:00 »
0
Van egy rank rendszer amibe megpróbáltam beleírni hogy kiírja ha a játékos szintet lép azonban folyamatosan floodolja a szöveget és nem csak 1x írja ki. Ez most OnPlayerUpdate alatt van és azért floodolja de hova kéne írni hogy csak 1x írja ki?
 
   new msg[64];
new msga[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name))

 

    else if(GetPlayerScore(playerid) >= 0 && GetPlayerScore(playerid) <= 1)
    {
        Rank = \"1\";
        format(msg, sizeof(msg), \"Szintet léptél! Szinted: %s\", Rank);
       SendClientMessage(playerid, -1, msg);
       format(msga, sizeof(msga), \"%s szintet lépett! Szint: %s\", name, Rank);
       SendClientMessageToAll(-1, msga);
    }

Floodolja
« Válasz #1 Dátum: 2016. Október 20. - 21:31:17 »
+1
else if(GetPlayerScore(playerid) >= 0 && GetPlayerScore(playerid) <= 1)

 
Itt azt írod le hogyha a player pontja nagyobb vagy egyenlő mint nulla és kisebb egyenlő mint egy ?
Az érintett intervallum az a 0 és 1. Ez oké, nem ismerem a rank rendszer elképzelését de ha a játékos scoreja 0 és 1 akkor minek állítod be a Rank = \"1\"; Globál(???) string(???) változót 1-re ? És persze hogy floodolja hisz amíg a player scorja ebben az intervallumban tartózkodik minden egyes frissítéskor ki fogja írni. Szabd a változót playerre tehát.
 
new rank[MAX_PLAYERS];

 
És legyen így az elágazás:
 

else if(GetPlayerScore(playerid) == 1 && rank[playerid] != 1)
{
        rank[playerid] = 1;
        format(msg, sizeof(msg), \"Szintet léptél! Szinted: %d\", rank[playerid]);
        SendClientMessage(playerid, -1, msg);
        format(msga, sizeof(msga), \"%s szintet lépett! Szint: %d\", name, rank[playerid]);
        SendClientMessageToAll(-1, msga);
}

 
És ugye nem kell rosszra gondolnom ?
Nincs minden egyes ranknak egy külön elágazása ugye ??? Mert az úgy nem túl szép. (1. 2. 3. rankokra gondolok és így tovább).
Mert ha van akkor inkább használd így:
 

if(GetPlayerScore(playerid) != rank[playerid] && GetPlayerScore(playerid) != 0)
{
        rank[playerid] = GetPlayerScore(playerid);
        format(msg, sizeof(msg), \"Szintet léptél! Szinted: %d\", rank[playerid]);
        SendClientMessage(playerid, -1, msg);
        format(msga, sizeof(msga), \"%s szintet lépett! Szint: %d\", name, rank[playerid]);
        SendClientMessageToAll(-1, msga);
}

 
Itt az történik hogyha a player \"rank változója\" nem egyenlő a player listán látható pontszámával és ha a pontszáma nem nulla akkor lépjen szintet. (Ezt nem fogja floodolni).
Ha valami nem oké szólj vagy ha valamit nem értesz. Este van már így meló után főleg. A fogalmazási készségem nem a legjobb ilyenkor :D Nyugodtan írj ha nem értesz valamit.

Nem elérhető Flips

Floodolja
« Válasz #2 Dátum: 2016. Október 20. - 22:26:17 »
0
1 dolgot kell tudnod rólam, scripter nem vagyok, én is csak próbálkozom :D az a baj amit leírtál annak 1/4 része kínai a többit nagyjából felfogtam, a egyelőre azért csak 0 és 1 pont mert próbálgattam a pont az teljesen máshogy lenne, csak nem tudom hogy kell azt megcsinálni hogy mindig 2x-es pontra változzon 1-2 szint 50 pont vagyis 0 pont szint:1, 50 pont szint:2, 100 pont szint:3, 200 pont: 4. szint, 400 pont 5. szint... stb.
Azonban nem akarok 60 szóval amint eléri hatvant már végig 60-as legyen a játékos.
Amúgy meg én szokásomhoz híven mindig a legnehezebb dolgokkal próbálkozom aztán javítanak ki hogy 2000 sor helyett lehetne 10 sorba is írni.
Ha tudnál segíteni megköszönném nem kérlek arra hogy így este, gondolom fáradt vagy holnap neked is korán kell kelni és nekem is de ha lesz időd akkor megköszönném

Floodolja
« Válasz #3 Dátum: 2016. Október 23. - 10:21:02 »
+1
Ha mindig duplázni szeretnéd akkor itt egy megoldás.
Amúgy bocsi hogy ennyit kellett rá várni csak nem volt túl sok időm.
 

new rank[MAX_PLAYERS], score[MAX_PLAYERS], nextscore[MAX_PLAYERS];
public OnPlayerConnect(playerid) { //Azért OnP.Conn. -hez írtam mert nem tudom hogy honnan töltöd be a player rankját, pontját. Így egyszerűsítem.
    rank[playerid] = 1;
    score[playerid] = 0;
    nextscore[playerid] = 50; //2-es szinthez szükséges
    return 1;
}
if(GetPlayerScore(playerid) >= nextscore[playerid] && rank[playerid] != 60)
{
        rank[playerid]++;
        nextscore[playerid] = nextscore[playerid]*2;
        format(msg, sizeof(msg), \"Szintet léptél! Szinted: %d! Következő szinthez szükséges pontszám: %d\", rank[playerid], nextscore[playerid]);
        SendClientMessage(playerid, -1, msg);
        format(msga, sizeof(msga), \"%s szintet lépett! Szint: %d\", name, rank[playerid]);
        SendClientMessageToAll(-1, msga);
}
//Nem teszteltem elvileg jó.

Nem elérhető Flips

Floodolja
« Válasz #4 Dátum: 2016. Október 28. - 12:44:56 »
0
Idézetet írta: Memphis date=1477210862\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63396\" data-ipsquote-contentclass=\"forums_Topic
Ha mindig duplázni szeretnéd akkor itt egy megoldás.
Amúgy bocsi hogy ennyit kellett rá várni csak nem volt túl sok időm.
 

new rank[MAX_PLAYERS], score[MAX_PLAYERS], nextscore[MAX_PLAYERS];
public OnPlayerConnect(playerid) { //Azért OnP.Conn. -hez írtam mert nem tudom hogy honnan töltöd be a player rankját, pontját. Így egyszerűsítem.
    rank[playerid] = 1;
    score[playerid] = 0;
    nextscore[playerid] = 50; //2-es szinthez szükséges
    return 1;
}
if(GetPlayerScore(playerid) >= nextscore[playerid] && rank[playerid] != 60)
{
        rank[playerid]++;
        nextscore[playerid] = nextscore[playerid]*2;
        format(msg, sizeof(msg), \"Szintet léptél! Szinted: %d! Következő szinthez szükséges pontszám: %d\", rank[playerid], nextscore[playerid]);
        SendClientMessage(playerid, -1, msg);
        format(msga, sizeof(msga), \"%s szintet lépett! Szint: %d\", name, rank[playerid]);
        SendClientMessageToAll(-1, msga);
}
//Nem teszteltem elvileg jó.

 

Az oké hogy onnan töltöm be viszont OnPlayerUpdate alatt van a textdraw frissítése, vagyis oda kéne írni ezt is amit írtál nem?
És nem akar Lvl 2 felé menni szóval 0-49 pontig Lvl 1 megszerzi az 50-et bedobja lvl 2-nek de onnantól lehet akár 2000 pontja is nem lesz lvl 3
« Utoljára szerkesztve: 2016. Október 28. - 12:47:25 írta Flips »

Floodolja
« Válasz #5 Dátum: 2016. Október 28. - 16:45:15 »
0
if(GetPlayerScore(playerid) == nextscore[playerid])
{
nextscore[playerid] = nextscore[playerid]*2;
rank[playerid]++;
//   Szintlepes szövege...
return 1;
}

 
Esetleg ez? de a nextscorét mensd el!!!!!  meg a rankot is meg ezeket... csak akkor fog úgy menni ahogy te szeretnéd
« Utoljára szerkesztve: 2016. Október 30. - 22:11:35 írta Flαsн »

Nem elérhető Flips

Floodolja
« Válasz #6 Dátum: 2016. Október 30. - 21:00:56 »
0
Idézetet írta: Kyosuke_Hiroshi date=1477665915\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63396\" data-ipsquote-contentclass=\"forums_Topic

if(GetPlayerScore(playerid) == nextscore[playerid])
{
nextscore[playerid] = nextscore[playerid]*2;
rank[playerid]++;
//   Szintlepes szövege...
return 1;
}

 
Esetleg ez? de a nextscorét mensd el!!!!!  meg a rankot is meg ezeket... csak akkor fog úgy menni ahogy te szeretnéd
 
Mentsem a rankot is külön hiába menti magát a score-t amiből számítja a rankot? Mondjuk holnap megpróbálom, én jobban bízom abban amit ti mondtok mint amit én csinálok :P

Floodolja
« Válasz #7 Dátum: 2016. Október 30. - 21:11:03 »
+1
Amit küldtél forráskódot, arra holnap szakítok időt és átnézem.

Nem elérhető Flips

Floodolja
« Válasz #8 Dátum: 2016. Október 30. - 21:14:40 »
0
Idézetet írta: Memphis date=1477858263\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63396\" data-ipsquote-contentclass=\"forums_Topic
Amit küldtél forráskódot, arra holnap szakítok időt és átnézem.
 
Rendben akkor megvárom mit mondasz, köszi.

Floodolja
« Válasz #9 Dátum: 2016. Október 30. - 21:49:52 »
0
hát nem muszáj ha írsz egy olyan scriptet ami kiszámítja hogy GetPlayerScore alapján milyen rangja van és mennyi kell a következő ranghoz

Nem elérhető Flips

Floodolja
« Válasz #10 Dátum: 2016. Október 30. - 22:24:07 »
0
Idézetet írta: Kyosuke_Hiroshi date=1477860592\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63396\" data-ipsquote-contentclass=\"forums_Topic
hát nem muszáj ha írsz egy olyan scriptet ami kiszámítja hogy GetPlayerScore alapján milyen rangja van és mennyi kell a következő ranghoz
 
Lehet amúgy nem ártana külön scriptbe írni mert akkor jobban átlátnám

Dupla hozzászólás automatikusan összefûzve. ( [time]2016. október 30. 22:35:55[/time] )

Eddig ez van:
- Mod eleje
 
new PlayerText:Szint[MAX_PLAYERS];
new rank[MAX_PLAYERS], scoree[MAX_PLAYERS], nextscore[MAX_PLAYERS];

 
- OnPlayerConnect alatt
 
   new text[41];
new jatekosname[MAX_PLAYER_NAME];
GetPlayerName(playerid, jatekosname, sizeof(jatekosname));
Szint[playerid] = CreatePlayerTextDraw(playerid, 500.000000, 192.000000, \" \");
PlayerTextDrawBackgroundColor(playerid, Szint[playerid], 255);
PlayerTextDrawFont(playerid, Szint[playerid], 2);
PlayerTextDrawLetterSize(playerid, Szint[playerid], 0.230000, 1.100000);
PlayerTextDrawColor(playerid, Szint[playerid], -1);
PlayerTextDrawSetOutline(playerid, Szint[playerid], 1);
PlayerTextDrawSetProportional(playerid, Szint[playerid], 1);
PlayerTextDrawUseBox(playerid, Szint[playerid], 1);
PlayerTextDrawBoxColor(playerid, Szint[playerid], 100);
PlayerTextDrawTextSize(playerid, Szint[playerid], 637.000000, 0.000000);
format(text, sizeof(text), \"~g~Szint: ~r~-\");
PlayerTextDrawSetString(playerid, Szint[playerid], text);
for(new i; i < MAX_PLAYERS; i ++)
{
if(IsPlayerConnected(i))
{
   PlayerTextDrawShow(i, Szint[playerid]);
}
}

 
- OnPlayerUpdate alatt
 
   new score;
new text[41];
new msg[64];
new msga[64];
new name[MAX_PLAYER_NAME];
score = GetPlayerScore(playerid);
GetPlayerName(playerid, name, sizeof(name));
    rank[playerid] = 1;
    scoree[playerid] = 0;
    nextscore[playerid] = 50; //2-es szinthez szükséges
if(GetPlayerScore(playerid) == nextscore[playerid] && rank[playerid] != 60)
{
        nextscore[playerid] = nextscore[playerid]*2;
rank[playerid]++;
          format(msg, sizeof(msg), \"Szintet léptél! Szinted: %d! Következő szinthez szükséges pontszám: %d\", rank[playerid], nextscore[playerid]);
   SendClientMessage(playerid, -1, msg);
       format(msga, sizeof(msga), \"%s szintet lépett! Szint: %d\", name, rank[playerid]);
       SendClientMessageToAll(-1, msga);
}
    format(text, sizeof(text), \"~g~Szint:~r~ %i (%i)\", rank[playerid], (nextscore[playerid] - score));
    PlayerTextDrawSetString(playerid, Szint[playerid], text);

 
És ugye a lényeg az hogy floodolja a szöveget valamint nem akar szintet lépni
« Utoljára szerkesztve: 2016. Október 30. - 22:47:15 írta Flips »

Floodolja
« Válasz #11 Dátum: 2016. Október 31. - 09:00:33 »
+1
Ez rossz helyen van, tedd be OnPlayerConnect alá.
 
rank[playerid] = 1;
//scoree[playerid] = 0;
nextscore[playerid] = 50; //2-es szinthez szükséges

 
A scoree-t meg nem is használod szóval azt a módból is kivettem amit küldtél.
Edit: El is küldtem neked PM-ben, elméletileg már működnie kéne ha jól változik a playernek a score-ja.
« Utoljára szerkesztve: 2016. Október 31. - 09:10:25 írta Memphis »

Nem elérhető Flips

Floodolja
« Válasz #12 Dátum: 2016. November 01. - 09:00:13 »
0
Done, Kösz Memphis a segítséget

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal