VIDEO Kód: #include <a_samp> native IsValidVehicle(vehicleid); #define PRESSED(%0) \\ (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0))) #define RELEASED(%0) \\ (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0))) new Float:GUNDISTANCE[MAX_PLAYERS] = {10.0,...}; new check_timer[MAX_PLAYERS]; new aiming[MAX_PLAYERS]; //new movetimer[MAX_PLAYERS]; new liftimer[MAX_PLAYERS]; new lifting[MAX_PLAYERS]; new lifttype[MAX_PLAYERS]; // 0 = vehicle, 1 = human public OnFilterScriptInit() { for(new i = 0; i < MAX_PLAYERS; i++) { lifting = -1; lifttype = -1; } return 1; } public OnFilterScriptExit() { KillTimer(liftimer[0]); KillTimer(check_timer[0]); } public OnPlayerConnect(playerid) { aiming[playerid]=0; lifting[playerid] = -1; lifttype[playerid] = -1; return 1; } public OnPlayerDisconnect(playerid, reason) { KillTimer(liftimer[playerid]); KillTimer(check_timer[playerid]); lifting[playerid] = -1; return 1; } stock movecar(vehid, playerid) { new Float:vector[3]; GetPlayerCameraFrontVector(playerid, vector[0], vector[1], vector[2]); new Float:lx,Float:ly,Float:lz; GetPlayerPos(playerid, lx,ly,lz); PutPlayerInVehicle(playerid, vehid, 0); SetVehicleVelocity(vehid,vector[0], vector[1], vector[2]); SetPlayerPos(playerid, lx,ly,lz); //RemovePlayerFromVehicle(playerid); } stock getcar(vehid, playerid) { new Float:vector[3]; GetPlayerCameraFrontVector(playerid, vector[0], vector[1], vector[2]); new Float:lx,Float:ly,Float:lz; GetPlayerPos(playerid, lx,ly,lz); PutPlayerInVehicle(playerid, vehid, 0); SetVehicleVelocity(vehid, -vector[0], -vector[1], -vector[2]); SetPlayerPos(playerid, lx,ly,lz); check_timer[playerid] = SetTimerEx(\"checkyet\",50,1,\"ii\",playerid,vehid); //RemovePlayerFromVehicle(playerid); } forward checkyet(playerid,vehid); public checkyet(playerid,vehid) { new Float:x,Float:y,Float:z; GetVehiclePos(vehid, x,y,z); if(GetPlayerDistanceFromPoint(playerid, x,y,z)<15.0) { KillTimer(check_timer[playerid]); SetTimerEx(\"enablegravity\", 10, 0, \"iii\", playerid, vehid, 0); // SendClientMessage(playerid, -1, \"ok\"); } else { // printf(\"%f\",GetPlayerDistanceFromPoint(playerid, x,y,z)); //SendClientMessage(playerid, -1, \"nope\"); } } forward Lift(playerid); public Lift(playerid) { if(lifttype[playerid] == 0)//vehicle { new Float:X2, Float:Y2, Float:Z2; GetPlayerCameraLookAt(playerid, X2, Y2, Z2); SetVehiclePos(lifting[playerid],X2, Y2, Z2); } if(lifttype[playerid] == 1)//player { new Float:X2, Float:Y2, Float:Z2; GetPlayerCameraLookAt(playerid, X2, Y2, Z2); SetPlayerPos(lifting[playerid],X2, Y2, Z2); } if(lifttype[playerid] == 2)//object { new Float:X2, Float:Y2, Float:Z2; GetPlayerCameraLookAt(playerid, X2, Y2, Z2); SetObjectPos(lifting[playerid],X2, Y2, Z2); } return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(PRESSED(128)) { aiming[playerid]^=1;//toggle } if(RELEASED(128))//KEY_AIM { if(lifting[playerid]!=-1) { KillTimer(liftimer[playerid]); KillTimer(check_timer[playerid]); lifting[playerid] = -1; PlayerPlaySound(playerid, 1140, 0,0,0);//SOUND_CAR_SMASH_CAR } } if(PRESSED(KEY_LOOK_BEHIND)&&lifting[playerid]==-1) { if(lifting[playerid] == -1) { new Float:X, Float:Y, Float:Z, vehicleid; for(new i = 0; i < MAX_VEHICLES; i++) { if(IsValidVehicle(i)) { GetVehiclePos(i, X, Y, Z); if(IsPlayerAimingAt(playerid, X, Y, Z, 2.5)) { vehicleid = i; } } } if(vehicleid > 0) { new Float:x,Float:y,Float:z; GetVehiclePos(vehicleid, x,y,z); new Float: dist = GetPlayerDistanceFromPoint(playerid, x,y,z); //SetTimerEx(\"enablegravity\", floatround(dist)/5, 0, \"iii\", playerid, vehicleid, 0); lifting[playerid]=vehicleid; //printf(\"%d\",floatround(dist)/5); if(dist>12.0) getcar(vehicleid, playerid); else { SetTimerEx(\"enablegravity\", 10, 0, \"iii\", playerid, vehicleid, 0); } } } if(lifting[playerid] == -1) { new Float:X, Float:Y, Float:Z, targetid=INVALID_PLAYER_ID; for(new i = 0; i < MAX_PLAYERS; i++) { if(GetPlayerState(i) == PLAYER_STATE_ONFOOT) { if(i == playerid) continue; GetPlayerPos(i, X, Y, Z); if(IsPlayerAimingAt(playerid, X, Y, Z, 2.5)) { targetid = i; } } } if(targetid!=INVALID_PLAYER_ID) { lifting[playerid] = targetid; lifttype[playerid] = 1; liftimer[playerid] = SetTimerEx(\"Lift\", 50, 1, \"i\", playerid); PlayerPlaySound(playerid, 1148, 0,0,0);//SOUND_MAGNET_VEHICLE_COLLISION } } if(lifting[playerid] == -1) { new Float:X, Float:Y, Float:Z, targetid=INVALID_OBJECT_ID; for(new i = 0; i < MAX_OBJECTS; i++) { if(IsValidObject(i)) { if(i == INVALID_OBJECT_ID) continue; GetObjectPos(i, X, Y, Z); if(IsPlayerAimingAt(playerid, X, Y, Z, 2.5)) { if(IsObjectMoving(i)) { StopObject(i); } targetid = i; } } } if(targetid!=INVALID_OBJECT_ID) { new Float:ox,Float:oy,Float:oz; GetObjectPos(targetid, ox,oy,oz); new Float:px,Float:py,Float:pz; GetPlayerPos(playerid, px,py,pz); new Float:angle; lifting[playerid]=targetid; GetPlayerFacingAngle(playerid,angle); new Float:dist = GetPlayerDistanceFromPoint(playerid, ox,oy,oz); new time = MoveObject(targetid, px+(5.0*floatsin(-angle, degrees)),py+(5.0*floatcos(-angle, degrees)),pz+1.0, dist*1.7);// SetTimerEx(\"enablegravity\", time, 0, \"iii\", playerid, targetid, 2); //printf(\"%d\", time); } } /* if(lifting[playerid]!=-1) { PlayerPlaySound(playerid, 1148, 0,0,0);//SOUND_MAGNET_VEHICLE_COLLISION }*/ } if(PRESSED(KEY_FIRE)) { if(lifting[playerid] != -1) { new Float:vector[3]; GetPlayerCameraFrontVector(playerid, vector[0], vector[1], vector[2]); if(lifttype[playerid]==1)//player { SetPlayerVelocity(lifting[playerid], vector[0],vector[1],vector[2]); new str[128]; new name[24]; GetPlayerName(playerid, name,sizeof(name)); format(str,sizeof(str),\"You have been thrown by %s (%d)\",name,playerid); SendClientMessage(lifting[playerid], -1, str); } if(lifttype[playerid]==0)//car { //movetimer[playerid] = SetTimerEx(\"movecar\", 50, 0, \"i\", lifting[playerid], vector[0],vector[1], vector[2]);//create move Timer here.... movecar(lifting[playerid], playerid); //PlayerPlaySound(playerid, 1140, 0,0,0);//SOUND_CAR_SMASH_CAR } if(lifttype[playerid]==2)//obj { //PlayerPlaySound(playerid, 1141, 0,0,0);//SOUND_CAR_SMASH_GATE new Float:Vector[3], Float:x,Float:y,Float:z; GetPlayerCameraFrontVector(playerid, Vector[0], Vector[1], Vector[2]); GetObjectPos(lifting[playerid], x,y,z); //I removed this part, u can make it exact if u want new Float:vertical=0.0, Float:horizontal=0.0; switch (GetPlayerWeapon(playerid)) { case 34,35,36: { //if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true; //return false; } case 30,31: { vertical = 4.0; horizontal = -1.6; } case 33: { vertical = 2.7; horizontal = -1.0; } default: { vertical = 6.0; horizontal = -2.2; } } MoveObject(lifting[playerid], x+(Vector[0]*200.0)+horizontal,y+(Vector[1]*200.0)+horizontal,z+(Vector[2]*200.0)+vertical, 35.0); } KillTimer(liftimer[playerid]); lifting[playerid] = -1; } } return 1; } forward enablegravity(playerid, targetId, lift_type); public enablegravity(playerid, targetId, lift_type) { PlayerPlaySound(playerid, 1148, 0,0,0);//SOUND_MAGNET_VEHICLE_COLLISION lifting[playerid] = targetId; lifttype[playerid] = lift_type; liftimer[playerid] = SetTimerEx(\"Lift\", 50, 1, \"i\", playerid); } stock IsVehicleInRangeOfPoint(vehicleid, Float:range, Float:x, Float:y, Float:z) { static Float:pX, Float:pY, Float:pZ; GetVehiclePos(vehicleid, pX, pY, pZ); return x - range / 2 < pX > x + range / 2 && y - range / 2 < pY > y + range / 2 && z - range / 2 < pZ > z + range / 2; } GetPlayerCameraLookAt(playerid, &Float:X, &Float:Y, &Float:Z) { new Float:Destination[3], Float:Camera[3], Float:Vector[3]; GetPlayerPos(playerid, Destination[0], Destination[1], Destination[2]); GetPlayerCameraPos(playerid, Camera[0], Camera[1], Camera[2]); GetPlayerCameraFrontVector(playerid, Vector[0], Vector[1], Vector[2]); new Float: posAngle = atan2(floatsub(Destination[1],Camera[1]),floatsub(Destination[0],Camera[0])); if(posAngle > 360) posAngle-=360; posAngle+=270; posAngle *= -1; Destination[0] += GUNDISTANCE[playerid] * floatsin(posAngle, degrees); Destination[1] += GUNDISTANCE[playerid] * floatcos(posAngle, degrees); new Float:dis = floatsqroot((Camera[0] - Destination[0]) * (Camera[0] - Destination[0]) + (Camera[1] - Destination[1]) * (Camera[1] - Destination[1]) + (Camera[2] - Destination[2]) * (Camera[2] - Destination[2])); X = Vector[0] * dis + Camera[0]; Y = Vector[1] * dis + Camera[1]; Z = Vector[2] * dis + Camera[2]; } Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ) { new Float:TGTDistance; TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ)); new Float:tmpX, Float:tmpY, Float:tmpZ; tmpX = FrX * TGTDistance + CamX; tmpY = FrY * TGTDistance + CamY; tmpZ = FrZ * TGTDistance + CamZ; return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ)); } stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) { new Float:DX, Float:DY; new Float:angle; DX = floatabs(floatsub(x2,X)); DY = floatabs(floatsub(y2,Y)); if (DY == 0.0 || DX == 0.0) { if(DY == 0 && DX > 0) angle = 0.0; else if(DY == 0 && DX < 0) angle = 180.0; else if(DY > 0 && DX == 0) angle = 90.0; else if(DY < 0 && DX == 0) angle = 270.0; else if(DY == 0 && DX == 0) angle = 0.0; } else { angle = atan(DX/DY); if(X > x2 && Y <= y2) angle += 90.0; else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle); else if(X < x2 && Y >= y2) angle -= 90.0; else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle); } return floatadd(angle, 90.0); } stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance) { x += (distance * floatsin(-angle, degrees)); y += (distance * floatcos(-angle, degrees)); } stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius) { new Float:camera_x,Float:camera_y,Float:camera_z,Float:vector_x,Float:vector_y,Float:vector_z; GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z); GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z); new Float:vertical, Float:horizontal; switch (GetPlayerWeapon(playerid)) { case 34,35,36: { if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true; return false; } case 30,31: { vertical = 4.0; horizontal = -1.6; } case 33: { vertical = 2.7; horizontal = -1.0; } default: { vertical = 6.0; horizontal = -2.2; } } new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0; new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees); GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees)); if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true; return false; }
Üdvözölek a topicban! Leírás: - Ez a filterszkript ara szolgál, hogy az adott fegyvered úgy viselkedhesen mint a Half-Life 2-ben lévõ Gravity gun. Alkalmass FUN szerverekre, de RP szervere viszont már nem alkalmass, és nem ajánlott! - Ez az FS csak is Deagle pisztolyal mûküdik.Készítõk: Gravity Gun - Matz
Szerkesztette/Javította - whatthefuck123
VIDEO Kód: #include <a_samp> native IsValidVehicle(vehicleid); #define PRESSED(%0) \\ (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0))) #define RELEASED(%0) \\ (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0))) new Float:GUNDISTANCE[MAX_PLAYERS] = {10.0,...}; new check_timer[MAX_PLAYERS]; new aiming[MAX_PLAYERS]; //new movetimer[MAX_PLAYERS]; new liftimer[MAX_PLAYERS]; new lifting[MAX_PLAYERS]; new lifttype[MAX_PLAYERS]; // 0 = vehicle, 1 = human public OnFilterScriptInit() { for(new i = 0; i < MAX_PLAYERS; i++) { lifting = -1; lifttype = -1; } return 1; } public OnFilterScriptExit() { KillTimer(liftimer[0]); KillTimer(check_timer[0]); } public OnPlayerConnect(playerid) { aiming[playerid]=0; lifting[playerid] = -1; lifttype[playerid] = -1; return 1; } public OnPlayerDisconnect(playerid, reason) { KillTimer(liftimer[playerid]); KillTimer(check_timer[playerid]); lifting[playerid] = -1; return 1; } stock movecar(vehid, playerid) { new Float:vector[3]; GetPlayerCameraFrontVector(playerid, vector[0], vector[1], vector[2]); new Float:lx,Float:ly,Float:lz; GetPlayerPos(playerid, lx,ly,lz); PutPlayerInVehicle(playerid, vehid, 0); SetVehicleVelocity(vehid,vector[0], vector[1], vector[2]); SetPlayerPos(playerid, lx,ly,lz); //RemovePlayerFromVehicle(playerid); } stock getcar(vehid, playerid) { new Float:vector[3]; GetPlayerCameraFrontVector(playerid, vector[0], vector[1], vector[2]); new Float:lx,Float:ly,Float:lz; GetPlayerPos(playerid, lx,ly,lz); PutPlayerInVehicle(playerid, vehid, 0); SetVehicleVelocity(vehid, -vector[0], -vector[1], -vector[2]); SetPlayerPos(playerid, lx,ly,lz); check_timer[playerid] = SetTimerEx(\"checkyet\",50,1,\"ii\",playerid,vehid); //RemovePlayerFromVehicle(playerid); } forward checkyet(playerid,vehid); public checkyet(playerid,vehid) { new Float:x,Float:y,Float:z; GetVehiclePos(vehid, x,y,z); if(GetPlayerDistanceFromPoint(playerid, x,y,z)<15.0) { KillTimer(check_timer[playerid]); SetTimerEx(\"enablegravity\", 10, 0, \"iii\", playerid, vehid, 0); // SendClientMessage(playerid, -1, \"ok\"); } else { // printf(\"%f\",GetPlayerDistanceFromPoint(playerid, x,y,z)); //SendClientMessage(playerid, -1, \"nope\"); } } forward Lift(playerid); public Lift(playerid) { if(lifttype[playerid] == 0)//vehicle { new Float:X2, Float:Y2, Float:Z2; GetPlayerCameraLookAt(playerid, X2, Y2, Z2); SetVehiclePos(lifting[playerid],X2, Y2, Z2); } if(lifttype[playerid] == 1)//player { new Float:X2, Float:Y2, Float:Z2; GetPlayerCameraLookAt(playerid, X2, Y2, Z2); SetPlayerPos(lifting[playerid],X2, Y2, Z2); } if(lifttype[playerid] == 2)//object { new Float:X2, Float:Y2, Float:Z2; GetPlayerCameraLookAt(playerid, X2, Y2, Z2); SetObjectPos(lifting[playerid],X2, Y2, Z2); } return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(PRESSED(128)) { aiming[playerid]^=1;//toggle } if(RELEASED(128))//KEY_AIM { if(lifting[playerid]!=-1) { KillTimer(liftimer[playerid]); KillTimer(check_timer[playerid]); lifting[playerid] = -1; PlayerPlaySound(playerid, 1140, 0,0,0);//SOUND_CAR_SMASH_CAR } } if(PRESSED(KEY_LOOK_BEHIND)&&lifting[playerid]==-1) { if(lifting[playerid] == -1) { new Float:X, Float:Y, Float:Z, vehicleid; for(new i = 0; i < MAX_VEHICLES; i++) { if(IsValidVehicle(i)) { GetVehiclePos(i, X, Y, Z); if(IsPlayerAimingAt(playerid, X, Y, Z, 2.5)) { vehicleid = i; } } } if(vehicleid > 0) { new Float:x,Float:y,Float:z; GetVehiclePos(vehicleid, x,y,z); new Float: dist = GetPlayerDistanceFromPoint(playerid, x,y,z); //SetTimerEx(\"enablegravity\", floatround(dist)/5, 0, \"iii\", playerid, vehicleid, 0); lifting[playerid]=vehicleid; //printf(\"%d\",floatround(dist)/5); if(dist>12.0) getcar(vehicleid, playerid); else { SetTimerEx(\"enablegravity\", 10, 0, \"iii\", playerid, vehicleid, 0); } } } if(lifting[playerid] == -1) { new Float:X, Float:Y, Float:Z, targetid=INVALID_PLAYER_ID; for(new i = 0; i < MAX_PLAYERS; i++) { if(GetPlayerState(i) == PLAYER_STATE_ONFOOT) { if(i == playerid) continue; GetPlayerPos(i, X, Y, Z); if(IsPlayerAimingAt(playerid, X, Y, Z, 2.5)) { targetid = i; } } } if(targetid!=INVALID_PLAYER_ID) { lifting[playerid] = targetid; lifttype[playerid] = 1; liftimer[playerid] = SetTimerEx(\"Lift\", 50, 1, \"i\", playerid); PlayerPlaySound(playerid, 1148, 0,0,0);//SOUND_MAGNET_VEHICLE_COLLISION } } if(lifting[playerid] == -1) { new Float:X, Float:Y, Float:Z, targetid=INVALID_OBJECT_ID; for(new i = 0; i < MAX_OBJECTS; i++) { if(IsValidObject(i)) { if(i == INVALID_OBJECT_ID) continue; GetObjectPos(i, X, Y, Z); if(IsPlayerAimingAt(playerid, X, Y, Z, 2.5)) { if(IsObjectMoving(i)) { StopObject(i); } targetid = i; } } } if(targetid!=INVALID_OBJECT_ID) { new Float:ox,Float:oy,Float:oz; GetObjectPos(targetid, ox,oy,oz); new Float:px,Float:py,Float:pz; GetPlayerPos(playerid, px,py,pz); new Float:angle; lifting[playerid]=targetid; GetPlayerFacingAngle(playerid,angle); new Float:dist = GetPlayerDistanceFromPoint(playerid, ox,oy,oz); new time = MoveObject(targetid, px+(5.0*floatsin(-angle, degrees)),py+(5.0*floatcos(-angle, degrees)),pz+1.0, dist*1.7);// SetTimerEx(\"enablegravity\", time, 0, \"iii\", playerid, targetid, 2); //printf(\"%d\", time); } } /* if(lifting[playerid]!=-1) { PlayerPlaySound(playerid, 1148, 0,0,0);//SOUND_MAGNET_VEHICLE_COLLISION }*/ } if(PRESSED(KEY_FIRE)) { if(lifting[playerid] != -1) { new Float:vector[3]; GetPlayerCameraFrontVector(playerid, vector[0], vector[1], vector[2]); if(lifttype[playerid]==1)//player { SetPlayerVelocity(lifting[playerid], vector[0],vector[1],vector[2]); new str[128]; new name[24]; GetPlayerName(playerid, name,sizeof(name)); format(str,sizeof(str),\"You have been thrown by %s (%d)\",name,playerid); SendClientMessage(lifting[playerid], -1, str); } if(lifttype[playerid]==0)//car { //movetimer[playerid] = SetTimerEx(\"movecar\", 50, 0, \"i\", lifting[playerid], vector[0],vector[1], vector[2]);//create move Timer here.... movecar(lifting[playerid], playerid); //PlayerPlaySound(playerid, 1140, 0,0,0);//SOUND_CAR_SMASH_CAR } if(lifttype[playerid]==2)//obj { //PlayerPlaySound(playerid, 1141, 0,0,0);//SOUND_CAR_SMASH_GATE new Float:Vector[3], Float:x,Float:y,Float:z; GetPlayerCameraFrontVector(playerid, Vector[0], Vector[1], Vector[2]); GetObjectPos(lifting[playerid], x,y,z); //I removed this part, u can make it exact if u want new Float:vertical=0.0, Float:horizontal=0.0; switch (GetPlayerWeapon(playerid)) { case 34,35,36: { //if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true; //return false; } case 30,31: { vertical = 4.0; horizontal = -1.6; } case 33: { vertical = 2.7; horizontal = -1.0; } default: { vertical = 6.0; horizontal = -2.2; } } MoveObject(lifting[playerid], x+(Vector[0]*200.0)+horizontal,y+(Vector[1]*200.0)+horizontal,z+(Vector[2]*200.0)+vertical, 35.0); } KillTimer(liftimer[playerid]); lifting[playerid] = -1; } } return 1; } forward enablegravity(playerid, targetId, lift_type); public enablegravity(playerid, targetId, lift_type) { PlayerPlaySound(playerid, 1148, 0,0,0);//SOUND_MAGNET_VEHICLE_COLLISION lifting[playerid] = targetId; lifttype[playerid] = lift_type; liftimer[playerid] = SetTimerEx(\"Lift\", 50, 1, \"i\", playerid); } stock IsVehicleInRangeOfPoint(vehicleid, Float:range, Float:x, Float:y, Float:z) { static Float:pX, Float:pY, Float:pZ; GetVehiclePos(vehicleid, pX, pY, pZ); return x - range / 2 < pX > x + range / 2 && y - range / 2 < pY > y + range / 2 && z - range / 2 < pZ > z + range / 2; } GetPlayerCameraLookAt(playerid, &Float:X, &Float:Y, &Float:Z) { new Float:Destination[3], Float:Camera[3], Float:Vector[3]; GetPlayerPos(playerid, Destination[0], Destination[1], Destination[2]); GetPlayerCameraPos(playerid, Camera[0], Camera[1], Camera[2]); GetPlayerCameraFrontVector(playerid, Vector[0], Vector[1], Vector[2]); new Float: posAngle = atan2(floatsub(Destination[1],Camera[1]),floatsub(Destination[0],Camera[0])); if(posAngle > 360) posAngle-=360; posAngle+=270; posAngle *= -1; Destination[0] += GUNDISTANCE[playerid] * floatsin(posAngle, degrees); Destination[1] += GUNDISTANCE[playerid] * floatcos(posAngle, degrees); new Float:dis = floatsqroot((Camera[0] - Destination[0]) * (Camera[0] - Destination[0]) + (Camera[1] - Destination[1]) * (Camera[1] - Destination[1]) + (Camera[2] - Destination[2]) * (Camera[2] - Destination[2])); X = Vector[0] * dis + Camera[0]; Y = Vector[1] * dis + Camera[1]; Z = Vector[2] * dis + Camera[2]; } Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ) { new Float:TGTDistance; TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ)); new Float:tmpX, Float:tmpY, Float:tmpZ; tmpX = FrX * TGTDistance + CamX; tmpY = FrY * TGTDistance + CamY; tmpZ = FrZ * TGTDistance + CamZ; return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ)); } stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) { new Float:DX, Float:DY; new Float:angle; DX = floatabs(floatsub(x2,X)); DY = floatabs(floatsub(y2,Y)); if (DY == 0.0 || DX == 0.0) { if(DY == 0 && DX > 0) angle = 0.0; else if(DY == 0 && DX < 0) angle = 180.0; else if(DY > 0 && DX == 0) angle = 90.0; else if(DY < 0 && DX == 0) angle = 270.0; else if(DY == 0 && DX == 0) angle = 0.0; } else { angle = atan(DX/DY); if(X > x2 && Y <= y2) angle += 90.0; else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle); else if(X < x2 && Y >= y2) angle -= 90.0; else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle); } return floatadd(angle, 90.0); } stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance) { x += (distance * floatsin(-angle, degrees)); y += (distance * floatcos(-angle, degrees)); } stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius) { new Float:camera_x,Float:camera_y,Float:camera_z,Float:vector_x,Float:vector_y,Float:vector_z; GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z); GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z); new Float:vertical, Float:horizontal; switch (GetPlayerWeapon(playerid)) { case 34,35,36: { if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true; return false; } case 30,31: { vertical = 4.0; horizontal = -1.6; } case 33: { vertical = 2.7; horizontal = -1.0; } default: { vertical = 6.0; horizontal = -2.2; } } new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0; new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees); GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees)); if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true; return false; }