-
Sziasztok.Az lenne a problémám, hogy megszeretném oldani azt, hogy ha elér egy bizonyos pontot Például: 10 pont akkor küldjön mindenkinek egy üzenetet.Ez meg is van, de nem 1szer küldi el hanem sokszor.
Az én megoldásom:
public OnPlayerUpdate( playerid )
{
new Name[24], Msg[128];
GetPlayerName(playerid, Name, sizeof(Name));
if (APlayerData[playerid][statsTruckerJobs] == 10)
{
format(Msg, 128, \"{FFFFFF}%s új szintre lépett.Szint: {FF0000}Kamionos\", Name);
SendClientMessageToAll(0xFFFFFFFF, Msg);
}
return 1;
}
Mi lehet vele a baj?
-
Írd át a 10-et 1 re
if (APlayerData[playerid][statsTruckerJobs] == 10)
if (APlayerData[playerid][statsTruckerJobs] == 1)
És pontosan hányszor írja ki?
-
Írd át a 10-et 1 re
if (APlayerData[playerid][statsTruckerJobs] == 10)
if (APlayerData[playerid][statsTruckerJobs] == 1)
És pontosan hányszor írja ki?
Ez maga a hülyeség... A 10 nála a 10 teljesített munkát jelöli. Na de ilyen hülyeségekkel nem is foglalkozom, térjünk a tárgyra...
Azért írja ki, mert az OnPlayerUpdate folyamatosan figyeli a játékos adatait, és az alatta megadott dolgokat folyamatosan végrehajtja. Így amíg a StatsTruckerJobs tároló értéke 10-el egyenlõ, folyamatosan ki fogja írni. Esetleg hozz létre egy ideglenes tárolót (pl. Kiiras[MAX_PLAYERS]), és hozzáadsz egyet, mikor eléri. És csak akkor írná ki, ha 0-val egyenlõre a Kiiras.
public OnPlayerUpdate( playerid )
{
new Name[24], Msg[128];
GetPlayerName(playerid, Name, sizeof(Name));
if (APlayerData[playerid][statsTruckerJobs] == 10 && Kiiras[playerid] == 0)
{
format(Msg, 128, \"{FFFFFF}%s új szintre lépett.Szint: {FF0000}Kamionos\", Name);
SendClientMessageToAll(0xFFFFFFFF, Msg);
Kiiras[playerid]++;
}
return 1;
}
Így csak akkor hajtja végre, ha a Kiiras értéke egyenlõre 0-val. Ha végrehajtja, akkor hozzáad 1-et a Kiiras-hoz, majd újra megismételné az OnPlayerUpdate, de mivel már nem 0 a Kiiras értéke, ezért nem teszi. Ennyi lenne, be kéne jönnie :)
-
Ez így szép,de erroros :D
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : error 017: undefined symbol \"Kiiras\"
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : warning 215: expression has no effect
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : error 001: expected token: \";\", but found \"]\"
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : error 029: invalid expression, assumed zero
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
1188. sor:
if (APlayerData[playerid][statsTruckerJobs] == 10 && Kiiras[playerid] == 0)
-
Ez így szép,de erroros :D
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : error 017: undefined symbol \"Kiiras\"
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : warning 215: expression has no effect
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : error 001: expected token: \";\", but found \"]\"
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : error 029: invalid expression, assumed zero
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1188) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
1188. sor:
if (APlayerData[playerid][statsTruckerJobs] == 10 && Kiiras[playerid] == 0)
Mert létre kéne hoznod a tárolót... Ennyire kezdõ nem vagy :D
new Kiiras[MAXPLAYERS];
Azt hittem, hogy ezt nem kell beleírnom, magadtól is beleírod. És a sima CTR+C CTR+V nem elég, ugyanis eltolódik az egész itt a fórumos pawno code tagban...
-
Má bocs, de beírtam xDDD
És voálá hibás xD:
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1183) : error 017: undefined symbol \"MAXPLAYERS\"
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1183) : error 009: invalid array size (negative, zero or out of bounds)
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1183) : error 036: empty statement
C:\\Documents and Settings\\Zoli\\Asztal\\Truck reload\\gamemodes\\truck.pwn(1183) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
1183. sor:
new Kiiras[MAXPLAYERS];
-
new Kiiras[MAXPLAYERS];
new Kiiras[MAX_PLAYERS];
MAX_PLAYERS ;)
-
new Kiiras[MAXPLAYERS];
new Kiiras[MAX_PLAYERS];
MAX_PLAYERS ;)
[/quote]
Nincs error, mégse jó ugyan úgy kiírja folyamatosan.
-
Vannak ötletek csak azért még egy változó hogy már kiírta az értéket.
Ezt gyakorlatban a legegyszerûbben megoldani úgy lehet (persze oda kell figyelni a dolgokra), hogy a valóságban rögötn egyel megnöveled az értéket de viszont mikor megjeleníted akkor levonsz egyet, hogy bizony neki annyi az elért pontszáma.
public
OnPlayerUpdate(playerid)
{
new
Msg[128];
GetPlayerName(playerid, Msg, sizeof Msg);
if(APlayerData[playerid][statsTruckerJobs] == 10)
{
APlayerData[playerid][statsTruckerJobs]++;
format(Msg, 128, \"{FFFFFF}%s új szintre lépett.Szint: %d{FF0000}Kamionos\", Name, APlayerData[playerid][statsTruckerJobs] - 1);
SendClientMessageToAll(0xFFFFFFFF, Msg);
}
return 1;
}
Persze itt tényleg oda kell figyelni mikor ellenõrzõd mennyi a szintje vagy esetleg lehetne használni egy definíciót mikor ellenõrizni illetve kiíratni akarod az értéket,
mert ezzel mindig egyel nagyobb értéket tárol a változó mint amennyi a szintje, de így nem kell újabb változót létrehozni.
#define GetStatsTruckerJobs(%0)\\
APlayerData[%0][statsTruckerJobs] - 1
format(Msg, 128, \"{FFFFFF}%s új szintre lépett.Szint: %d{FF0000}Kamionos\", Name, GetStatsTruckerJobs(playerid));
Mindez szép és jó, de egy gond van: az úgy nem jó, hogy eléri a 10-es szintet, aztán csak azért hozzáad egyet, hogy csak egyszer írja ki. Ha annak nem kéne 10-nek maradnia, nem kéne másik változó, ez igaz. Erre én is gondoltam, de ebben az esetben sajnos nem használható ez a megoldás.
Ha pedig nem jó amit írtam, akkor egyenlõre nincs ötletem. Elméletben mûködnie kéne.
Még annyit egy gyors editben, hogy értem, hogy a megfelelõ számot írná ki, azonban az érték egyel több lenne a valósnál. És ez itt a probléma.
-
Köszi mind kettõtöknek megoldottam a segítségetekkel. :)
Ment a +.
-
Rájöttem azért töröltem a hozzászólást.
Egyébként a legegyszerûbb ott kiírni ezt az üzenetet ahol növelve van APlayerData[playerid][statsTruckerJobs] változó értéke és elfelejteni az OnPlayerUpdate-t.
-
Rájöttem azért töröltem a hozzászólást.
Egyébként a legegyszerûbb ott kiírni ezt az üzenetet ahol növelve van APlayerData[playerid][statsTruckerJobs] változó értéke és elfelejteni az OnPlayerUpdate-t.
Jó amit írtál.Növeli 1el a StatsTruckerJobs-ot.Én meg a szinteket hozzá igazítottam és ha kap +1 ingyen StatsTruckerJobs pontot remélem nem kezd majd el vergõdni. xDD
-
[mod]Témát megnyítottam ɐʞzssǝlosz kérésére.[/mod]
-
Köszönöm.
Létrehozol egy ilyen stock funkciót:
stock
_StatsTruckerJobs(playerid)
{
switch(APlayerData[playerid][statsTruckerJobs])
{
case 5, 10, 15:
{
new
Msg[128];
GetPlayerName(playerid, Msg, sizeof Msg);
format(Msg, 128, \"{FFFFFF}%s új szintre lépett.Szint: %d{FF0000}Kamionos\", Msg, APlayerData[playerid][statsTruckerJobs]);
SendClientMessageToAll(0xFFFFFFFF, Msg);
}
}
}
Majd minden olyan helyre beírod ahol növeled ennek a változónak az értékét:
APlayerData[playerid][statsTruckerJobs]++;
_StatsTruckerJobs(playerid);
És nem kell állandóan ellenõrizned OnPlayerUpdate alatt annak a változónak az értékét, mert csak akkor fut le mikor egyel növeled az értékét annak a változónak.