new Electric_Fence; #define FenceModelID 16868 //Change to preference public OnGameModeInit() { SetTimer("Check_Position", 1000, true); //Change to preference Electric_Fence = CreateObject(FenceModelID, xchange, ychange, zchange, 0.0, 0.0, 0.0); return 1; } forward Check_Position(); public Check_Position() { for (new i; i < GetPlayerPoolSize(); i++) { new Float: x,Float: y,Float: z; GetObjectPos(Electric_Fence,x,y,z); if (!IsPlayerInRangeOfPoint(i, 1.0, x, y, z)) // Change to preference { new Float:health; GetPlayerHealth(i, health); SetPlayerHealth(i, health-15); // Change to preference } } return 1; }
Hi.
The following should work. Code:
new Electric_Fence; #define FenceModelID 16868 //Change to preference public OnGameModeInit() { SetTimer("Check_Position", 1000, true); //Change to preference Electric_Fence = CreateObject(FenceModelID, xchange, ychange, zchange, 0.0, 0.0, 0.0); return 1; } forward Check_Position(); public Check_Position() { for (new i; i < GetPlayerPoolSize(); i++) { new Float: x,Float: y,Float: z; GetObjectPos(Electric_Fence,x,y,z); if (!IsPlayerInRangeOfPoint(i, 1.0, x, y, z)) // Change to preference { new Float:health; GetPlayerHealth(i, health); SetPlayerHealth(i, health-15); // Change to preference } } return 1; } |
It's going to be a little complicated to get this to work properly.
The problem occurs because 'IsPlayerInRangeOfPoint' detects if the player is in the range of the set coordinate. So you put an object in a coordinate, but that object is bigger, but the function 'IsPlayerInRangeOfPoint' only corresponds to the coordinate of the object, but not to the object as such. Simply put, you have to get close to the exact coordinate, but not the object. Suggestion: Try creating the objects normally, and set the coordinates apart so that when a player gets close it will damage it. Example: You put a fence normally, and set 3 coordinates inside that fence (left, center, right), and if the player gets close to one of those areas, it damages it. |
stock IsPlayerInTheArea(playerid,Float:minx,Float:miny,Float:maxx,Float:maxy) { new Float:posx, Float:posy, Float:posz; GetPlayerPos(playerid, posx,posy,posz); if(posx >= minx && posx <= maxx && posy >= miny && posy <= maxy) { return true; } else return false; }
if(IsPlayerInTheArea(playerid,X,Y,X,Y)) { //He is in your area. do it here }
It's going to be a little complicated to get this to work properly.
The problem occurs because 'IsPlayerInRangeOfPoint' detects if the player is in the range of the set coordinate. So you put an object in a coordinate, but that object is bigger, but the function 'IsPlayerInRangeOfPoint' only corresponds to the coordinate of the object, but not to the object as such. Simply put, you have to get close to the exact coordinate, but not the object. Suggestion: Try creating the objects normally, and set the coordinates apart so that when a player gets close it will damage it. Example: You put a fence normally, and set 3 coordinates inside that fence (left, center, right), and if the player gets close to one of those areas, it damages it. |
This,
also you can use Code:
stock IsPlayerInTheArea(playerid,Float:minx,Float:miny,Float:maxx,Float:maxy) { new Float:posx, Float:posy, Float:posz; GetPlayerPos(playerid, posx,posy,posz); if(posx >= minx && posx <= maxx && posy >= miny && posy <= maxy) { return true; } else return false; } Code:
if(IsPlayerInTheArea(playerid,X,Y,X,Y)) { //He is in your area. do it here } |
#define FILTERSCRIPT #include <a_samp> #include <sscanf> new Electric_Fence; #define FenceModelID 987 //Change to preference public OnGameModeInit() { SetTimer("Check_Position", 1000, true); //Change to preference Electric_Fence = CreateObject(FenceModelID, 1271.32739, -2047.58093, 58.14730, 0.0, 0.0, 0.0); return 1; } forward Check_Position(); public Check_Position() { for (new i; i < GetPlayerPoolSize(); i++) { new Float: x,Float: y,Float: z; GetObjectPos(Electric_Fence,x,y,z); if (!IsPlayerInRangeOfPoint(i, 1.0, x, y, z)) // Change to preference { new Float:health; GetPlayerHealth(i, health); SetPlayerHealth(i, health-15); // Change to preference } } return 1; }