-
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);
}
-
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.
-
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
-
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ó.
-
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
-
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
-
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
-
Amit küldtél forráskódot, arra holnap szakítok időt és átnézem.
-
Amit küldtél forráskódot, arra holnap szakítok időt és átnézem.
Rendben akkor megvárom mit mondasz, köszi.
-
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
-
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
-
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.
-
Done, Kösz Memphis a segítséget