Szerző Téma: GetVehicleDriver(vehicleid)  (Megtekintve 2483 alkalommal)

GetVehicleDriver(vehicleid)
« Dátum: 2011. július 24. - 00:56:32 »
0 Show voters
Download:
http://solidfiles.com/d/ed99/
Hiba javítva.
Letöltés v1.1
http://solidfiles.com/d/4a198/
Nincs for ciklus.
Igazán talán roleplay módokban használják ezt a funkciót többet, egyszerre egy jármû azonosító szám megadásával ellenõrizhetõ van-e játékos jármûvezetõként a jármûben.
Test script:
[pawn]
#include <a_samp>
#define FILTERSCRIPT
#include <zcmd>
#include <getvehicledriver>
#if defined FILTERSCRIPT
public
OnFilterScriptInit()
{
#else
public
OnGameModeInit()
{
#endif
return 1;
}   
// test command
COMMAND:getvehicledriver(playerid, params[])
{
if(isnull(params)) return SendClientMessage(playerid, -1, \"Usage: /getvehicledriver [vehicleid 1 - 2000]\");
new
   str[128],
   player1 = GetVehicleDriver(strval(params));
if(player1 != INVALID_PLAYER_ID)
{
   new
      PlayerN[MAX_PLAYER_NAME];
   GetPlayerName(player1, PlayerN, 24);
   format(str, sizeof str, \"VehicleDriver  vehicleid: %d | playerid: %d | PlayerName: %s\", GetPlayerVehicleID(player1), player1, PlayerN);
   SendClientMessage(playerid, -1, str);
} else {
   SendClientMessage(playerid, -1, \"No player is the driver as\"); // Sorry google translate
}
return 1;
}
/*
//old code:
stock
GetVehicleDriver(vehicleid) by.: forum.sa-mp.com user
{
for(new i; i < 500; i++)
{
   if(!IsPlayerConnected(i)) continue;
   if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
   if(GetPlayerVehicleID(i) == vehicleid)
   {
      return i;
   }
}
return -1;
}
*/
[/pawn]
És azoknak akik nem akarnak még egy plussz .inc fájlt  de használni szeretnék ezt a funkciót itt a kód amit csak be kell ágyazni a gamemod-ba vagy filterscript-be:
[pawn]
#include <a_samp>
/*
GetVehicleDriver function by Zsolesszka aka Phento v1.1
Date 2011.07.23
Example put In OnGameModeInit Or OnFilterScriptInit
*/
static
VehicleDriverPlayerid[MAX_VEHICLES] = { INVALID_PLAYER_ID, ... };
//------------------------------------------------------------------------------
stock
GetVehicleDriver(vehicleid)
{
if(vehicleid < 1 || vehicleid > sizeof(VehicleDriverPlayerid)) return INVALID_PLAYER_ID; // invalid array
if(VehicleDriverPlayerid[vehicleid - 1] != INVALID_PLAYER_ID  && IsPlayerInVehicle(VehicleDriverPlayerid[vehicleid - 1], vehicleid) && GetPlayerVehicleSeat(VehicleDriverPlayerid[vehicleid - 1]) == 0)
   return VehicleDriverPlayerid[vehicleid - 1]; // return playerid vehicledriver
return VehicleDriverPlayerid[vehicleid - 1] = INVALID_PLAYER_ID;
}
//------------------------------------------------------------------------------
public
OnPlayerStateChange(playerid, newstate, oldstate)
{
// ->
if(newstate == PLAYER_STATE_DRIVER)
{
   new
      vehicleid = GetPlayerVehicleID(playerid);
   if(vehicleid)
   {
      VehicleDriverPlayerid[vehicleid - 1] = playerid;
   }
}
//-<
return 1;
}
//------------------------------------------------------------------------------
[/pawn]
Hiba javítva, a hiba abból állt ha egy jármû vezetõje voltam és utána egy másiké is akkor hibás adat maradt vissza hogy én még mindig az elõzõ jármû vezetõje is vagyok. Ezt sikerült kiküszöbölni az IsPlayerInVehicle függvénnyel ami ellenõrzi hogy az adott jármûben is van-e a játékos.
« Utoljára szerkesztve: 2011. november 13. - 09:23:15 írta Jethro »

Nem elérhető instant

  • 2778
  • ZzzzzZ
    • Profil megtekintése
GetVehicleDriver(vehicleid)
« Válasz #1 Dátum: 2011. július 24. - 10:07:27 »
0 Show voters
jó lett

GetVehicleDriver(vehicleid)
« Válasz #2 Dátum: 2011. július 25. - 16:05:45 »
0 Show voters
Köszi amúgy onnan jött az ötlet hogy épp láttam a hivatalos fórumon Jernelj által készített plugint és abban arra volt a panasz hogy pont ez a funkció milyen lassú is c++ ban mint pawnban de az oka valószínû az invoke (samp funkciók pluginban).
Azt végig gondoltam hogy minek is kell egyáltalán for ciklus azért hogy ellenõrizhessük hogy egy jármûben tartózkodik-e játékos sofõrként, mikor lehetne tárolni is ezt az információt jármûvenként hogy épp ki ült a volán mögé. Majd ennek a változónak az értékét vissza kapni, helyesen.
Igaz csak akkor hasznos ha elég sokat van használva mert azért itt egy 2000-es nagyságú változóról van szó.  8)

GetVehicleDriver(vehicleid)
« Válasz #3 Dátum: 2011. augusztus 23. - 11:33:17 »
0 Show voters
Jo lett!  ;D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal