Szerző Téma: Sokszor írja ki  (Megtekintve 1190 alkalommal)

Sokszor írja ki
« Dátum: 2013. június 05. - 18:18:02 »
0 Show voters
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?

xD1999

  • Vendég
Sokszor írja ki
« Válasz #1 Dátum: 2013. június 05. - 18:25:36 »
0 Show voters
Írd át a 10-et 1 re
 
if (APlayerData[playerid][statsTruckerJobs] == 10)

 

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

 
És pontosan hányszor írja ki?

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Sokszor írja ki
« Válasz #2 Dátum: 2013. június 05. - 18:28:04 »
+1 Show voters
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 :)
« Utoljára szerkesztve: 2013. június 05. - 18:30:12 írta Dfoglalo »

Sokszor írja ki
« Válasz #3 Dátum: 2013. június 05. - 19:08:08 »
0 Show voters
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)

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Sokszor írja ki
« Válasz #4 Dátum: 2013. június 05. - 19:10:33 »
0 Show voters
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...

Sokszor írja ki
« Válasz #5 Dátum: 2013. június 05. - 19:12:30 »
0 Show voters
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];
« Utoljára szerkesztve: 2013. június 05. - 19:16:15 írta halaloszto100 »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Sokszor írja ki
« Válasz #6 Dátum: 2013. június 05. - 19:18:38 »
0 Show voters
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 ;)

Sokszor írja ki
« Válasz #7 Dátum: 2013. június 05. - 19:24:25 »
0 Show voters
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.

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Sokszor írja ki
« Válasz #8 Dátum: 2013. június 05. - 19:37:22 »
0 Show voters
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.
« Utoljára szerkesztve: 2013. június 05. - 19:39:53 írta Dfoglalo »

Sokszor írja ki
« Válasz #9 Dátum: 2013. június 05. - 19:42:29 »
0 Show voters
Köszi mind kettõtöknek megoldottam a segítségetekkel. :)
Ment a +.

Sokszor írja ki
« Válasz #10 Dátum: 2013. június 05. - 19:42:51 »
+1 Show voters
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.

Sokszor írja ki
« Válasz #11 Dátum: 2013. június 05. - 19:45:26 »
0 Show voters
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

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Sokszor írja ki
« Válasz #12 Dátum: 2013. június 05. - 19:51:49 »
0 Show voters
[mod]Témát megnyítottam ɐʞzssǝlosz kérésére.[/mod]

Sokszor írja ki
« Válasz #13 Dátum: 2013. június 05. - 19:53:02 »
+1 Show voters
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.
« Utoljára szerkesztve: 2013. június 05. - 19:54:49 írta ɐʞzssǝlosz »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal