I'm not familiar with what you're trying but I assume you have a variable named "pBugged" that stores another player's ID as the target spy. If that's it, you'll have to loop through all players to see if the target matches. I'm not suggesting you to use OnPlayerUpdate on that case or it's better to have an additional variable which holds the player's ID who have set your target to (if it's only one).
I'd also like to note that your function IsPlayerInWater can be tricked if someone's using animation cheats. It's better to have a boundary check or use ColAndreas plugin to perform this check.
pawn Code:
//https://github.com/pds2k12/OnPlayerFly/blob/master/pawno/include/OnPlayerFly.inc
/*
All functions below are created by Southclaw, thanks to him for sharing this useful function & array of SA water-area.
This function were taken from his (Scavenge and Survive) script, its free to use and its available on Github!
*/
static stock Float:Distance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) return floatsqroot((((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))+((z1-z2)*(z1-z2))));
static stock Float:Distance2D(Float:x1, Float:y1, Float:x2, Float:y2) return floatsqroot( ((x1-x2)*(x1-x2)) + ((y1-y2)*(y1-y2)) );
static Float:water_places[20][4] =
{
{30.0, 2313.0, -1417.0, 23.0},
{15.0, 1280.0, -773.0, 1083.0},
{25.0, 2583.0, 2385.0, 15.0},
{20.0, 225.0, -1187.0, 74.0},
{50.0, 1973.0, -1198.0, 17.0},
{180.0, 1937.0, 1589.0, 9.0},
{55.0, 2142.0, 1285.0, 8.0},
{45.0, 2150.0, 1132.0, 8.0},
{55.0, 2089.0, 1915.0, 10.0},
{32.0, 2531.0, 1567.0, 9.0},
{21.0, 2582.0, 2385.0, 17.0},
{33.0, 1768.0, 2853.0, 10.0},
{47.0, -2721.0, -466.0, 3.0},
{210.0, -671.0, -1898.0, 6.0},
{45.0, 1240.0, -2381.0, 9.0},
{50.0, 1969.0, -1200.0, 18.0},
{10.0, 513.0, -1105.0, 79.0},
{20.0, 193.0, -1230.0, 77.0},
{30.0, 1094.0, -672.0, 113.0},
{20.0, 1278.0, -805.0, 87.0}
};
static stock IsPlayerInWater(playerid)
{
static Float:PosX, Float:PosY, Float:PosZ, i = -1;
GetPlayerPos(playerid, PosX, PosY, PosZ);
if(PosZ < 44.0)
{
if(Distance(PosX, PosY, PosZ, -965.0, 2438.0, 42.0) <= 700.0) return true;
}
while(++i < sizeof(water_places))
{
if(Distance2D(PosX, PosY, water_places[i][1], water_places[i][2]) <= water_places[i][0])
{
if(PosZ < water_places[i][3]) return true;
}
if(PosZ < 1.9)
{
if(Distance(PosX, PosY, PosZ, 618.4129, 863.3164, 1.0839) < 200.0)
return false;
else
return true;
}
}
return false;
}
//Or using what ColAndreas lets you to:
//https://github.com/Ino42O/OxygenController/blob/master/OxygenController.inc
stock IsPlayerInWater(playerid)
{
new Float:x, Float:y, Float:z, Float:retx[2], Float:rety[2], Float:retz[2], Float: retdist[2], modelids[2];
GetPlayerPos(playerid, x, y, z);
new collisions = CA_RayCastMultiLine(x, y, z+0.7, x, y, z-0.7, retx, rety, retz, retdist, modelids, 2);
if (collisions)
{
for(new i = 0; i < collisions; i++)
{
if (modelids[i] == WATER_OBJECT)
{
return (true);
}
}
}
return (false);
}
stock IsPlayerUnderWater(playerid)
{
new Float:x, Float:y, Float:z, Float:retx[10], Float:rety[10], Float:retz[10], Float: retdist[10], modelids[10];
GetPlayerPos(playerid, x, y, z);
new collisions = CA_RayCastMultiLine(x, y, z+0.7, x, y, z+1000.0, retx, rety, retz, retdist, modelids, 10);
if (collisions)
{
for(new i = 0; i < collisions; i++)
{
if (modelids[i] == WATER_OBJECT)
{
return (true);
}
}
}
return (false);
}