Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Do not remove credits (c) Luksa
- // Thanks to: Y_Less
- #include <a_samp>
- #include <foreach>
- #pragma tabsize 0
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Gun System - By Luksa");
- print("--------------------------------------\n");
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE))
- {
- foreach (Player, i)
- {
- if(i != playerid)
- {
- if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 23 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 50.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 25 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 200.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 24 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 5.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 24 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 5.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 27 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 100.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 29 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 22.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 30 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 21.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 31 && GetDistanceBetweenPlayers(playerid,i) < 50)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 25.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 34 && GetDistanceBetweenPlayers(playerid,i) < 500)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 200.0);
- }
- else if(IsPlayerAimingAtPlayer(playerid,i) && GetPlayerWeapon(playerid) == 8 && GetDistanceBetweenPlayers(playerid,i) < 1)
- {
- new Float:health;
- GetPlayerHealth(i, health);
- SetPlayerHealth(i, health - 200.0);
- }
- }
- }
- return 1;
- }
- return 1;
- }
- stock IsPlayerAimingAtPlayer(playerid, targetid) {
- new Float:x, Float:y, Float:z;
- GetPlayerPos(targetid, x, y, z);
- if (IsPlayerAimingAt(playerid, x, y, z-0.75, 0.25)) return true;
- if (IsPlayerAimingAt(playerid, x, y, z-0.25, 0.25)) return true;
- if (IsPlayerAimingAt(playerid, x, y, z+0.25, 0.25)) return true;
- if (IsPlayerAimingAt(playerid, x, y, z+0.75, 0.25)) return true;
- 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));
- }
- 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;
- }
- forward Float:GetDistanceBetweenPlayers(p1,p2);
- public Float:GetDistanceBetweenPlayers(p1,p2)
- {
- new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
- if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
- {
- return -1.00;
- }
- GetPlayerPos(p1,x1,y1,z1);
- GetPlayerPos(p2,x2,y2,z2);
- return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
- }
Advertisement
Add Comment
Please, Sign In to add comment