public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
if(!IsPlayerConnected(playerid)) return 0;
shots[playerid] ++;
if(hittype == BULLET_HIT_TYPE_NONE
|| hittype == BULLET_HIT_TYPE_OBJECT
|| hittype == BULLET_HIT_TYPE_PLAYER_OBJECT)
{
misses[playerid] ++;
}
if(hittype == BULLET_HIT_TYPE_PLAYER)
{
phits[playerid] ++;
}
if(hittype == BULLET_HIT_TYPE_VEHICLE)
{
if(VehicleOccupied(hitid))
{
vhits[playerid] ++;
}
else
{
misses[playerid] ++;
}
}
return 1;
}
stock VehicleOccupied(vehicleid)
{
foreach (new i : Player)
{
if(IsPlayerInVehicle(i,vehicleid)) return 1;
}
return 0;
}
|
What are you saying? I don't understand.
You want that shots on empty vehicle should count as hit or miss? |
//what you asked for, only "counts a shot on an empty vehicle as a miss, but counts a shot on an occupied vehicle as a hit"
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
shots[playerid] ++;
if(hittype == BULLET_HIT_TYPE_VEHICLE)
{
if(VehicleOccupied(hitid)) vhits[playerid] ++;
else misses[playerid] ++;
}
return 1;
}
//what i find more logic: counts a shot on a player or occupied vehicle as a hit and counts a shot anywhere else as a miss
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
shots[playerid] ++;
if (
(hittype == BULLET_HIT_TYPE_PLAYER && hitid != playerid) ||
(hittype == BULLET_HIT_TYPE_VEHICLE && VehicleOccupied(hitid))
)
vhits[playerid]++; else misses[playerid] ++;
return 1;
}
//this function is called about 10 times as frequently as a fire rate, depending on the number of players shooting together. with the bool tag u use 4 times less space (from 4 bytes/return to 1 byte/return)
bool:VehicleOccupied(vehicleid)
{
foreach (new i : Player) if(IsPlayerInVehicle(i,vehicleid)) return true;
return false;
}