Szerző Téma: for ciklus hiba  (Megtekintve 1142 alkalommal)

for ciklus hiba
« Dátum: 2012. május 20. - 20:28:12 »
+1 Show voters
Van egy forciklus, pontosabban:
 

   for(new i; i < MAX_PLAYERS; i++)
   {
       if(IsPlayerInRangeOfPoint(i, 5, x[playerid], y[playerid], z[playerid]))
       {
        if(i != playerid)
        {
         GetPlayerPos(i, x2, y2, z2);
      PlayerPlaySound(i, 1159, x, y, z);
      SetPlayerHealth(i, health-10);
     }
    }
       else if(IsPlayerInRangeOfPoint(i, 10, x[playerid], y[playerid], z[playerid]))
    {
        if(i != playerid)
        {
         GetPlayerPos(i, x2, y2, z2);
      PlayerPlaySound(i, 1159, x, y, z);
     }
    }
   }

 
Nos, ez az lenne, hogy egy játékos messzebbrõl meg tudja sebezni a körülötte lévõ játékosokat, de ezzel az a baj, hogy az életükbõl nem 10 megy le, hanem mindig változó, de nem tudom miért. A másik hiba vele, hogy mondjuk van player1 és player2. Ha player1 megsebzi vele player2-õt, és player1 újra sebezni akar, akkor csak akkor megy player2-nek az élete, ha már player2 is vitt le utána player1-nek. Vagyis ha player1 2-ször akar sebezni player2-nek, elõször meg kell várni, hogy player2 is sebezzen player1-nek, különben player1 hiába sebez player2-nek, nem megy le az élete. Kicsit bonyolultnak hangzik tudom.:P De légyszives valaki segítsen.

for ciklus hiba
« Válasz #1 Dátum: 2012. május 21. - 17:37:02 »
0 Show voters
Vegul is nem ertem.Egy kicsit tul bonyolitottad a magyarazatot.Pill el olvasom meg parszor xD

for ciklus hiba
« Válasz #2 Dátum: 2012. május 21. - 18:21:13 »
0 Show voters
Akkor röviden: elõszöris a támadott játékosnak nem 10 élete megy le, hanem mindig randomban megy kb 10 és 80 közt..
A másik: Ha egy játékos kettõször akar valakit megtámadni ezzel, csak elsõnek fogja megsebezni, mert valamiért csak akkor tudja másodszor sebezni, ha már az a játékos is sebzett rá, akit meg akart sebezni. Bocsi, de ennél érthetõbben nem megy.

for ciklus hiba
« Válasz #3 Dátum: 2012. május 21. - 18:35:54 »
0 Show voters
Kezdem erteni,viszont tul keves az info a code-ban amit le irtal.

for ciklus hiba
« Válasz #4 Dátum: 2012. május 21. - 19:07:55 »
0 Show voters
Hát mi kéne még? Kb ennyi az egész.

for ciklus hiba
« Válasz #5 Dátum: 2012. május 22. - 10:12:34 »
+2 Show voters
Ha valakinek 10 élet pontot akarsz levenni, akkor tudni is kellene mennyi élet pontja van.
 

GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health);

 
És elõ is fordulhat hogy ez az egésznek a hiba forrása.
Gondolom meghatároztad a Float:health értékét 100-ra, vagy a kód elõtt ez szerepel GetPlayerHealth(playerid, health);
Így az elsõ játékos életéhez viszonyítva kerül levonásra mindenkinek.
Így ha levesz 10-et belõle akkor már csak 90 lesz, így a továbbiakban nem tud levenni tovább más játékosoknak.
Próbaként:
 

GetPlayerHealth(i, health);
SetPlayerHealth(i, health - 10);
« Utoljára szerkesztve: 2012. május 22. - 16:24:55 írta ɐʞzssǝlosz »

for ciklus hiba
« Válasz #6 Dátum: 2012. május 22. - 16:05:28 »
0 Show voters
Köszi, Zsolesszka, az volt a baj, hogy a playerid életét kértem le.:D Köszi, megy a +, zárok.

for ciklus hiba
« Válasz #7 Dátum: 2012. május 20. - 20:28:12 »
0 Show voters
Van egy forciklus, pontosabban:
 

   for(new i; i < MAX_PLAYERS; i++)
   {
       if(IsPlayerInRangeOfPoint(i, 5, x[playerid], y[playerid], z[playerid]))
       {
        if(i != playerid)
        {
         GetPlayerPos(i, x2, y2, z2);
      PlayerPlaySound(i, 1159, x, y, z);
      SetPlayerHealth(i, health-10);
     }
    }
       else if(IsPlayerInRangeOfPoint(i, 10, x[playerid], y[playerid], z[playerid]))
    {
        if(i != playerid)
        {
         GetPlayerPos(i, x2, y2, z2);
      PlayerPlaySound(i, 1159, x, y, z);
     }
    }
   }

 
Nos, ez az lenne, hogy egy játékos messzebbrõl meg tudja sebezni a körülötte lévõ játékosokat, de ezzel az a baj, hogy az életükbõl nem 10 megy le, hanem mindig változó, de nem tudom miért. A másik hiba vele, hogy mondjuk van player1 és player2. Ha player1 megsebzi vele player2-õt, és player1 újra sebezni akar, akkor csak akkor megy player2-nek az élete, ha már player2 is vitt le utána player1-nek. Vagyis ha player1 2-ször akar sebezni player2-nek, elõször meg kell várni, hogy player2 is sebezzen player1-nek, különben player1 hiába sebez player2-nek, nem megy le az élete. Kicsit bonyolultnak hangzik tudom.:P De légyszives valaki segítsen.

for ciklus hiba
« Válasz #8 Dátum: 2012. május 21. - 17:37:02 »
0 Show voters
Vegul is nem ertem.Egy kicsit tul bonyolitottad a magyarazatot.Pill el olvasom meg parszor xD

for ciklus hiba
« Válasz #9 Dátum: 2012. május 21. - 18:21:13 »
0 Show voters
Akkor röviden: elõszöris a támadott játékosnak nem 10 élete megy le, hanem mindig randomban megy kb 10 és 80 közt..
A másik: Ha egy játékos kettõször akar valakit megtámadni ezzel, csak elsõnek fogja megsebezni, mert valamiért csak akkor tudja másodszor sebezni, ha már az a játékos is sebzett rá, akit meg akart sebezni. Bocsi, de ennél érthetõbben nem megy.

for ciklus hiba
« Válasz #10 Dátum: 2012. május 21. - 18:35:54 »
0 Show voters
Kezdem erteni,viszont tul keves az info a code-ban amit le irtal.

for ciklus hiba
« Válasz #11 Dátum: 2012. május 21. - 19:07:55 »
0 Show voters
Hát mi kéne még? Kb ennyi az egész.

for ciklus hiba
« Válasz #12 Dátum: 2012. május 22. - 10:12:34 »
0 Show voters
Ha valakinek 10 élet pontot akarsz levenni, akkor tudni is kellene mennyi élet pontja van.
 

GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health);

 
És elõ is fordulhat hogy ez az egésznek a hiba forrása.
Gondolom meghatároztad a Float:health értékét 100-ra, vagy a kód elõtt ez szerepel GetPlayerHealth(playerid, health);
Így az elsõ játékos életéhez viszonyítva kerül levonásra mindenkinek.
Így ha levesz 10-et belõle akkor már csak 90 lesz, így a továbbiakban nem tud levenni tovább más játékosoknak.
Próbaként:
 

GetPlayerHealth(i, health);
SetPlayerHealth(i, health - 10);
« Utoljára szerkesztve: 2012. május 22. - 16:24:55 írta ɐʞzssǝlosz »

for ciklus hiba
« Válasz #13 Dátum: 2012. május 22. - 16:05:28 »
0 Show voters
Köszi, Zsolesszka, az volt a baj, hogy a playerid életét kértem le.:D Köszi, megy a +, zárok.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal