GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: halaloszto100 - 2013. Június 05. - 18:18:02

Cím: Sokszor írja ki
Írta: halaloszto100 - 2013. Június 05. - 18:18:02
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?
Cím: Sokszor írja ki
Írta: xD1999 - 2013. Június 05. - 18:25:36
Írd át a 10-et 1 re
 
if (APlayerData[playerid][statsTruckerJobs] == 10)

 

if (APlayerData[playerid][statsTruckerJobs] == 1)

 
És pontosan hányszor írja ki?
Cím: Sokszor írja ki
Írta: Dfoglalo - 2013. Június 05. - 18:28:04
Idézetet írta: xD1999 date=1370449536\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"38181\" data-ipsquote-contentclass=\"forums_Topic
Í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 :)
Cím: Sokszor írja ki
Írta: halaloszto100 - 2013. Június 05. - 19:08:08
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)
Cím: Sokszor írja ki
Írta: Dfoglalo - 2013. Június 05. - 19:10:33
Idézetet írta: halaloszto100 date=1370452088\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"38181\" data-ipsquote-contentclass=\"forums_Topic
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...
Cím: Sokszor írja ki
Írta: halaloszto100 - 2013. Június 05. - 19:12:30
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];
Cím: Sokszor írja ki
Írta: Dfoglalo - 2013. Június 05. - 19:18:38
Idézetet írta: halaloszto100 date=1370452350\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"38181\" data-ipsquote-contentclass=\"forums_Topic

new Kiiras[MAXPLAYERS];

 


new Kiiras[MAX_PLAYERS];

 
MAX_PLAYERS ;)
Cím: Sokszor írja ki
Írta: halaloszto100 - 2013. Június 05. - 19:24:25
Idézetet írta: Dfoglalo date=1370452718\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"38181\" data-ipsquote-contentclass=\"forums_Topic


 
new Kiiras[MAXPLAYERS];

 


new Kiiras[MAX_PLAYERS];

 
MAX_PLAYERS ;)
 
[/quote]
Nincs error, mégse jó ugyan úgy kiírja folyamatosan.
Cím: Sokszor írja ki
Írta: Dfoglalo - 2013. Június 05. - 19:37:22
Idézetet írta: ɐʞzssǝlosz date=1370453148\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"38181\" data-ipsquote-contentclass=\"forums_Topic
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.
Cím: Sokszor írja ki
Írta: halaloszto100 - 2013. Június 05. - 19:42:29
Köszi mind kettõtöknek megoldottam a segítségetekkel. :)
Ment a +.
Cím: Sokszor írja ki
Írta: Zsolesszka - 2013. Június 05. - 19:42:51
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.
Cím: Sokszor írja ki
Írta: halaloszto100 - 2013. Június 05. - 19:45:26
Idézetet írta: ɐʞzssǝlosz date=1370454171\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"38181\" data-ipsquote-contentclass=\"forums_Topic
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
Cím: Sokszor írja ki
Írta: ZyZu. - 2013. Június 05. - 19:51:49
[mod]Témát megnyítottam ɐʞzssǝlosz kérésére.[/mod]
Cím: Sokszor írja ki
Írta: Zsolesszka - 2013. Június 05. - 19:53:02
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.