Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- By Seregamil
- Car shot
- */
- #include a_samp
- native IsValidVehicle(vehicleid);
- main(){}
- new _update[MAX_PLAYERS];
- public OnGameModeInit(){
- return 1;
- }
- public OnPlayerConnect(playerid){
- _clearAim(playerid);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason){
- _clearAim(playerid);
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
- if(newkeys & KEY_FIRE){
- if(newkeys & KEY_HANDBRAKE && damageGun(playerid))
- _update[playerid] = SetTimerEx("_vehicleShot", 794, true, "i", playerid);
- else
- _clearAim(playerid);
- }
- else if(oldkeys & KEY_FIRE || oldkeys & KEY_HANDBRAKE)
- _clearAim(playerid);
- return 1;
- }
- Float:setRadius(vehicleid){
- switch(vehicleType(vehicleid)){
- case 1,2: return 1.5;
- case 3,4,6: return 6.0;
- case 5: return 5.0;
- case 7,9: return 2.0;
- case 8: return 0.5;
- default: return 3.0;
- }
- return 3.0;
- }
- forward _vehicleShot(playerid);
- public _vehicleShot(playerid){
- if(!damageGun(playerid)) return _clearAim(playerid);
- new Float: car_pos[3], Float: carHealth;
- GetVehiclePos(GetPVarInt(playerid,"AimVehicle"), car_pos[0],car_pos[1],car_pos[2]);
- if(IsPlayerAimingAt(playerid, car_pos[0],car_pos[1],car_pos[2], setRadius(GetPVarInt(playerid,"AimVehicle")))){
- GetVehicleHealth(GetPVarInt(playerid,"AimVehicle"), carHealth);
- if(carHealth > 100)
- SetVehicleHealth(GetPVarInt(playerid,"AimVehicle"), carHealth-(GetPlayerWeapon(playerid) * 4));
- randomDamage(GetPVarInt(playerid,"AimVehicle"));
- return true;
- }
- for(new vehicleid = 0; vehicleid!=MAX_VEHICLES;vehicleid++){
- if(!IsValidVehicle(vehicleid)) continue;
- if(!IsVehicleStreamedIn(vehicleid, playerid)) continue;
- GetVehiclePos(vehicleid, car_pos[0],car_pos[1],car_pos[2]);
- if(!IsPlayerAimingAt(playerid, car_pos[0],car_pos[1],car_pos[2], setRadius(vehicleid))) continue;
- GetVehicleHealth(vehicleid, carHealth);
- if(carHealth > 100)
- SetVehicleHealth(vehicleid, carHealth-(GetPlayerWeapon(playerid) * 4));
- randomDamage(vehicleid);
- SetPVarInt(playerid, "AimVehicle", vehicleid);
- break;
- }
- return true;
- }
- _clearAim(playerid){
- SetPVarInt(playerid, "AimVehicle", MAX_VEHICLES+1);
- KillTimer(_update[playerid]);
- return true;
- }
- encode_lights(light1, light2, light3, light4) return light1 | (light2 << 1) | (light3 << 2) | (light4 << 3);
- encode_panels(flp, frp, rlp, rrp, windshield, front_bumper, rear_bumper) return flp | (frp << 4) | (rlp << 8) | (rrp << 12) | (windshield << 16) | (front_bumper << 20) | (rear_bumper << 24);
- encode_doors(bonnet, boot, driver_door, passenger_door, behind_driver_door, behind_passenger_door){
- #pragma unused behind_driver_door
- #pragma unused behind_passenger_door
- return bonnet | (boot << 8) | (driver_door << 16) | (passenger_door << 24);
- }
- randomDamage(vehicleid){
- new panels, doors, lights, tires;
- GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
- switch(random(3)){
- case 0: panels = encode_panels(1, 1, 1, 1, 3, 3, 3);
- case 1: doors = encode_doors(4, 4, 4, 4, 0, 0);
- case 2: lights = encode_lights(1, 1, 1, 1);
- }
- UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
- return 1;
- }
- damageGun(playerid){
- switch(GetPlayerWeapon(playerid)){
- case 22..38: return true;
- }
- return false;
- }
- vehicleType(vehicleid){//by wh0am1
- switch (GetVehicleModel(vehicleid)){
- case 509,481,510: return 1;//velo
- case 461..463,448,581,521..523,586,468,471: return 2;//moto
- case 417,425,447,469,487,488,497,548,563: return 3;//heli
- case 460,476,511..513,519,520,553,577,592,593: return 4;//air
- case 435,450,569,570,584,590,591,606..608,610,611: return 5;//trailer
- case 472,473,493,595,484,430,453,452,446,454: return 6;//boat
- case 499,498,609,524,578,455,403,414,443,514,515,408,456,433: return 7;//autoB
- case 441,464,465,501,564,594: return 8;//RC
- default: return 9;//autoA
- }
- return false;
- }
- 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));
- }
- IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius){
- new Float:cx,Float:cy,Float:cz,Float:fx,Float:fy,Float:fz;
- GetPlayerCameraPos(playerid, cx, cy, cz);
- GetPlayerCameraFrontVector(playerid, fx, fy, fz);
- return (radius >= DistanceCameraTargetToLocation(cx, cy, cz, x, y, z, fx, fy, fz));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement