Szerző Téma: Sebesség korlát hiba  (Megtekintve 912 alkalommal)

Sebesség korlát hiba
« Dátum: 2014. június 04. - 16:42:49 »
0 Show voters
Sziasztok!
Ezt a scriptet még az egyik kérésemre kaptam meg és azt szeretném megoldani, hogy ne egy megadott jármû ID-nek a sebességét korlátozza le mert akkor ugye az összes ugyanazon ID-jü jármû a megadott sebességgel közlekedik. Úgy szeretném megoldani, hogy létrehozott jármûre állítsa a sebességet.
Létre is hoztam a scriptbe ezeket a jármûveket le is fut maga a script hibátlanul, de sajnos nem korlátozódik le a sebessége :(
Valaki tudna segíteni ennek kijavításában?
Nagyon köszönöm elõre is!
SCRIPT:
 
#include <a_samp>
forward SetPlayerSpeedCap( playerid, Float:value );
forward DisablePlayerSpeedCap( playerid );
new
Float:g_fSpeedCap[ MAX_PLAYERS ] = { 0.0, ... }
;
new Kocsi[4];
public OnGameModeInit()
{
     Kocsi[0] = AddStaticVehicleEx(400,2062.4780,-1904.0059,13.2523,0.1147,1,1, 7200000);
    Kocsi[1] = AddStaticVehicleEx(400,2052.3628,-1903.9910,13.2523,359.7091,1,1, 7200000);
    Kocsi[2] = AddStaticVehicleEx(400,2056.1294,-1903.9355,13.2517,359.9152,1,1, 7200000);
      Kocsi[3] = AddStaticVehicleEx(400,2059.1633,-1903.9895,13.2516,359.8265,1,1, 7200000);
      return 1;
}
public OnPlayerUpdate(playerid)
{
static
s_iVehicle
;
if ( g_fSpeedCap[ playerid ] != 0.0 && GetPlayerState( playerid ) == PLAYER_STATE_DRIVER )
{
s_iVehicle = GetPlayerVehicleID( playerid );
if ( s_iVehicle )
{
   static
      Float:s_fX,
      Float:s_fY,
      Float:s_fZ,
      Float:s_fVX,
      Float:s_fVY,
      Float:s_fVZ
   ;
   GetVehiclePos( s_iVehicle, s_fX, s_fY, s_fZ );
   GetVehicleVelocity( s_iVehicle, s_fVX, s_fVY, s_fVZ );
   if ( !IsPlayerInRangeOfPoint( playerid, g_fSpeedCap[ playerid ] + 0.05, s_fX + s_fVX, s_fY + s_fVY, s_fZ + s_fVZ ) )
   {
      static
         Float:s_fLength
      ;
      s_fLength = floatsqroot( ( s_fVX * s_fVX ) + ( s_fVY * s_fVY ) + ( s_fVZ * s_fVZ ) );
      s_fVX = ( s_fVX / s_fLength ) * g_fSpeedCap[ playerid ];
      s_fVY = ( s_fVY / s_fLength ) * g_fSpeedCap[ playerid ];
      s_fVZ = ( s_fVZ / s_fLength ) * g_fSpeedCap[ playerid ];
      if ( s_iVehicle )
         SetVehicleVelocity( s_iVehicle, s_fVX, s_fVY, s_fVZ );
      else
         SetPlayerVelocity( playerid, s_fVX, s_fVY, s_fVZ );
   }
}
}
return 1;
}
public OnPlayerEnterVehicle( playerid, vehicleid, ispassenger )
{
    //new modelid = GetVehicleModel( vehicleid );
    //if ( modelid == 522 ) // 522 - NRG-500
    if(GetPlayerVehicleID(playerid) >= Kocsi[0] && GetPlayerVehicleID(playerid) <= Kocsi[3])
        SetPlayerSpeedCap( playerid, 0.4 );
    else
        DisablePlayerSpeedCap( playerid );
}
public SetPlayerSpeedCap(playerid, Float:value)
{
if ( 0 <= playerid < sizeof( g_fSpeedCap ) )
g_fSpeedCap[ playerid ] = value;
}
public DisablePlayerSpeedCap( playerid )
{
if ( 0 <= playerid < sizeof( g_fSpeedCap ) )
g_fSpeedCap[ playerid ] = 0.0;
}
« Utoljára szerkesztve: 2014. június 04. - 17:19:27 írta Flash »

Nem elérhető kos

  • 292
    • Profil megtekintése
Sebesség korlát hiba
« Válasz #1 Dátum: 2014. június 04. - 18:54:53 »
0 Show voters
Hali, ha tényleg mûködik, akkor biztos valami gond lehet.
Elsõként ezt vettem észre xd bár ez nem befolyásolja a problémádat, de hiba!  ;)
Ez az állításod.
 
new Kocsi[4];

 
És korlátozásnál már csak ennyi?
 
GetPlayerVehicleID(playerid) <= Kocsi[3]

 
Szólj ha rosszúl tudok számolni, de a 4 és a 3rom nem ugyan az...
Már ha a 4. kocsiba szálsz be, annál tuti nem lesz jó a dolog  :D
De azért hátha tudok segíteni a problémádo :)
Próbáld meg így...
 

Kocsi[4] = GetVehicleModel( vehicleid );
if(Kocsi[4] == GetPlayerVehicleID(playerid))

 
Nem biztos hogy most ezt helyesen írtam... De hasonló képpen biztos meg lehet oldani :)
« Utoljára szerkesztve: 2014. június 04. - 18:56:37 írta kos »

Sebesség korlát hiba
« Válasz #2 Dátum: 2014. június 04. - 19:11:00 »
0 Show voters
Így sem jó :( Ha 4 re írom akkor ez történik: array index out of bounds (variable \"Kocsi\")

Nem elérhető kos

  • 292
    • Profil megtekintése
Sebesség korlát hiba
« Válasz #3 Dátum: 2014. június 04. - 19:19:54 »
+1 Show voters
:hmmm: akkor talán így? 
 

if(Kocsi[0] == GetPlayerVehicleID(playerid) || Kocsi[1] == GetPlayerVehicleID(playerid) || Kocsi[2] == GetPlayerVehicleID(playerid) || Kocsi[3] == GetPlayerVehicleID(playerid))

Sebesség korlát hiba
« Válasz #4 Dátum: 2014. június 04. - 19:26:27 »
0 Show voters
ÁÁáá jó lett :D
Nagyon köszönöm! ;)

Sebesség korlát hiba
« Válasz #5 Dátum: 2014. június 04. - 16:42:49 »
0 Show voters
Sziasztok!
Ezt a scriptet még az egyik kérésemre kaptam meg és azt szeretném megoldani, hogy ne egy megadott jármû ID-nek a sebességét korlátozza le mert akkor ugye az összes ugyanazon ID-jü jármû a megadott sebességgel közlekedik. Úgy szeretném megoldani, hogy létrehozott jármûre állítsa a sebességet.
Létre is hoztam a scriptbe ezeket a jármûveket le is fut maga a script hibátlanul, de sajnos nem korlátozódik le a sebessége :(
Valaki tudna segíteni ennek kijavításában?
Nagyon köszönöm elõre is!
SCRIPT:
 
#include <a_samp>
forward SetPlayerSpeedCap( playerid, Float:value );
forward DisablePlayerSpeedCap( playerid );
new
Float:g_fSpeedCap[ MAX_PLAYERS ] = { 0.0, ... }
;
new Kocsi[4];
public OnGameModeInit()
{
     Kocsi[0] = AddStaticVehicleEx(400,2062.4780,-1904.0059,13.2523,0.1147,1,1, 7200000);
    Kocsi[1] = AddStaticVehicleEx(400,2052.3628,-1903.9910,13.2523,359.7091,1,1, 7200000);
    Kocsi[2] = AddStaticVehicleEx(400,2056.1294,-1903.9355,13.2517,359.9152,1,1, 7200000);
      Kocsi[3] = AddStaticVehicleEx(400,2059.1633,-1903.9895,13.2516,359.8265,1,1, 7200000);
      return 1;
}
public OnPlayerUpdate(playerid)
{
static
s_iVehicle
;
if ( g_fSpeedCap[ playerid ] != 0.0 && GetPlayerState( playerid ) == PLAYER_STATE_DRIVER )
{
s_iVehicle = GetPlayerVehicleID( playerid );
if ( s_iVehicle )
{
   static
      Float:s_fX,
      Float:s_fY,
      Float:s_fZ,
      Float:s_fVX,
      Float:s_fVY,
      Float:s_fVZ
   ;
   GetVehiclePos( s_iVehicle, s_fX, s_fY, s_fZ );
   GetVehicleVelocity( s_iVehicle, s_fVX, s_fVY, s_fVZ );
   if ( !IsPlayerInRangeOfPoint( playerid, g_fSpeedCap[ playerid ] + 0.05, s_fX + s_fVX, s_fY + s_fVY, s_fZ + s_fVZ ) )
   {
      static
         Float:s_fLength
      ;
      s_fLength = floatsqroot( ( s_fVX * s_fVX ) + ( s_fVY * s_fVY ) + ( s_fVZ * s_fVZ ) );
      s_fVX = ( s_fVX / s_fLength ) * g_fSpeedCap[ playerid ];
      s_fVY = ( s_fVY / s_fLength ) * g_fSpeedCap[ playerid ];
      s_fVZ = ( s_fVZ / s_fLength ) * g_fSpeedCap[ playerid ];
      if ( s_iVehicle )
         SetVehicleVelocity( s_iVehicle, s_fVX, s_fVY, s_fVZ );
      else
         SetPlayerVelocity( playerid, s_fVX, s_fVY, s_fVZ );
   }
}
}
return 1;
}
public OnPlayerEnterVehicle( playerid, vehicleid, ispassenger )
{
    //new modelid = GetVehicleModel( vehicleid );
    //if ( modelid == 522 ) // 522 - NRG-500
    if(GetPlayerVehicleID(playerid) >= Kocsi[0] && GetPlayerVehicleID(playerid) <= Kocsi[3])
        SetPlayerSpeedCap( playerid, 0.4 );
    else
        DisablePlayerSpeedCap( playerid );
}
public SetPlayerSpeedCap(playerid, Float:value)
{
if ( 0 <= playerid < sizeof( g_fSpeedCap ) )
g_fSpeedCap[ playerid ] = value;
}
public DisablePlayerSpeedCap( playerid )
{
if ( 0 <= playerid < sizeof( g_fSpeedCap ) )
g_fSpeedCap[ playerid ] = 0.0;
}
« Utoljára szerkesztve: 2014. június 04. - 17:19:27 írta Flash »

Nem elérhető kos

  • 292
    • Profil megtekintése
Sebesség korlát hiba
« Válasz #6 Dátum: 2014. június 04. - 18:54:53 »
0 Show voters
Hali, ha tényleg mûködik, akkor biztos valami gond lehet.
Elsõként ezt vettem észre xd bár ez nem befolyásolja a problémádat, de hiba!  ;)
Ez az állításod.
 
new Kocsi[4];

 
És korlátozásnál már csak ennyi?
 
GetPlayerVehicleID(playerid) <= Kocsi[3]

 
Szólj ha rosszúl tudok számolni, de a 4 és a 3rom nem ugyan az...
Már ha a 4. kocsiba szálsz be, annál tuti nem lesz jó a dolog  :D
De azért hátha tudok segíteni a problémádo :)
Próbáld meg így...
 

Kocsi[4] = GetVehicleModel( vehicleid );
if(Kocsi[4] == GetPlayerVehicleID(playerid))

 
Nem biztos hogy most ezt helyesen írtam... De hasonló képpen biztos meg lehet oldani :)
« Utoljára szerkesztve: 2014. június 04. - 18:56:37 írta kos »

Sebesség korlát hiba
« Válasz #7 Dátum: 2014. június 04. - 19:11:00 »
0 Show voters
Így sem jó :( Ha 4 re írom akkor ez történik: array index out of bounds (variable \"Kocsi\")

Nem elérhető kos

  • 292
    • Profil megtekintése
Sebesség korlát hiba
« Válasz #8 Dátum: 2014. június 04. - 19:19:54 »
0 Show voters
:hmmm: akkor talán így? 
 

if(Kocsi[0] == GetPlayerVehicleID(playerid) || Kocsi[1] == GetPlayerVehicleID(playerid) || Kocsi[2] == GetPlayerVehicleID(playerid) || Kocsi[3] == GetPlayerVehicleID(playerid))

Sebesség korlát hiba
« Válasz #9 Dátum: 2014. június 04. - 19:26:27 »
0 Show voters
ÁÁáá jó lett :D
Nagyon köszönöm! ;)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal