#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 = humanpublic 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_COLLISIONlifting[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;}