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: Sasori - 2012. május 20. - 20:28:12

Cím: for ciklus hiba
Írta: Sasori - 2012. május 20. - 20:28:12
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.
Cím: for ciklus hiba
Írta: xSkillZ7x - 2012. május 21. - 17:37:02
Vegul is nem ertem.Egy kicsit tul bonyolitottad a magyarazatot.Pill el olvasom meg parszor xD
Cím: for ciklus hiba
Írta: Sasori - 2012. május 21. - 18:21:13
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.
Cím: for ciklus hiba
Írta: xSkillZ7x - 2012. május 21. - 18:35:54
Kezdem erteni,viszont tul keves az info a code-ban amit le irtal.
Cím: for ciklus hiba
Írta: Sasori - 2012. május 21. - 19:07:55
Hát mi kéne még? Kb ennyi az egész.
Cím: for ciklus hiba
Írta: Zsolesszka - 2012. május 22. - 10:12:34
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);
Cím: for ciklus hiba
Írta: Sasori - 2012. május 22. - 16:05:28
Köszi, Zsolesszka, az volt a baj, hogy a playerid életét kértem le.:D Köszi, megy a +, zárok.
Cím: for ciklus hiba
Írta: Sasori - 2012. május 20. - 20:28:12
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.
Cím: for ciklus hiba
Írta: xSkillZ7x - 2012. május 21. - 17:37:02
Vegul is nem ertem.Egy kicsit tul bonyolitottad a magyarazatot.Pill el olvasom meg parszor xD
Cím: for ciklus hiba
Írta: Sasori - 2012. május 21. - 18:21:13
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.
Cím: for ciklus hiba
Írta: xSkillZ7x - 2012. május 21. - 18:35:54
Kezdem erteni,viszont tul keves az info a code-ban amit le irtal.
Cím: for ciklus hiba
Írta: Sasori - 2012. május 21. - 19:07:55
Hát mi kéne még? Kb ennyi az egész.
Cím: for ciklus hiba
Írta: Zsolesszka - 2012. május 22. - 10:12:34
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);
Cím: for ciklus hiba
Írta: Sasori - 2012. május 22. - 16:05:28
Köszi, Zsolesszka, az volt a baj, hogy a playerid életét kértem le.:D Köszi, megy a +, zárok.