Advertisement
Guest User

OnObjectShot (c) by Kaliber

a guest
Feb 23rd, 2013
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.19 KB | None | 0 0
  1. /* SA-MP Include OnObjectShot
  2.  *
  3.  * Copyright (c) by Kaliber, 2013
  4.  *
  5. */
  6. #include <a_samp>
  7. #if !defined dis
  8.     #define dis 5
  9. #endif
  10. #define W_RANGE 50
  11. static Float:ObjectInfo[MAX_OBJECTS][3],count;
  12. forward OnObjectShot(playerid,weaponid,objectid);
  13. forward Stream_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
  14. native Stream_CreateObject(modelid,Float:X,Float:Y,Float:Z,Float:r1,Float:r2,Float:r3,Float:Distance) = CreateObject;
  15.  
  16. stock _CreateObject(modelid,Float:X,Float:Y,Float:Z,Float:r1,Float:r2,Float:r3,Float:Distance) {
  17.     count++,ObjectInfo[count][0]=X,ObjectInfo[count][1]=Y,ObjectInfo[count][2]=Z;
  18.     return Stream_CreateObject(modelid,X,Y,Z,r1,r2,r3,Distance);
  19. }
  20. #if defined _ALS_CreateObject
  21.     #undef CreateObject
  22. #else
  23.     #define _ALS_CreateObject
  24. #endif
  25. #define CreateObject _CreateObject
  26. forward Check(playerid,x,q,Float:q1,Float:q2,Float:q3);
  27. public Check(playerid,x,q,Float:q1,Float:q2,Float:q3) {
  28.     if(x==W_RANGE) return 0;
  29.     x++;
  30.     switch(q) {
  31.         case 0: {
  32.             if(q2 > 0) q2++;
  33.             else q2 = floatsub(q2,1);
  34.         }
  35.         case 1,2: {
  36.             if(q2 > 0) q2 = floatsub(q2,1);
  37.             else q2++;
  38.         }
  39.     }
  40.     for(new i; i<MAX_OBJECTS; i++) {
  41.         if(!ObjectInfo[i][0]) continue;
  42.         if(ObjectToPoint(dis,i,q1,q2,q3)) return CallRemoteFunction("OnObjectShot","iii",playerid,GetPlayerWeapon(playerid),i);
  43.     }
  44.     SetTimerEx("Check",10,0,"iiifff",playerid,x,q,q1,q2,q3);
  45.     return 1;
  46. }
  47. stock ObjectToPoint(Float:radi, i, Float:x, Float:y, Float:z)
  48. {
  49.     new Float:Q[6];
  50.     Q[0]=ObjectInfo[i][0],Q[1]=ObjectInfo[i][1],Q[2]=ObjectInfo[i][2];
  51.     //printf("X:%.02f|x:%.02f|Y:%.02f|y:%.02f|Z:%.02f|z:%.02f",Q[0],x,Q[1],y,Q[2],z);
  52.     Q[3] = (Q[0] -x),Q[4] = (Q[1] -y),Q[5] = (Q[2] -z);
  53.     if(((Q[3] < radi) && (Q[3] > -radi)) && ((Q[4] < radi) && (Q[4] > -radi)) && ((Q[5] < radi) && (Q[5] > -radi))) return true;
  54.     return false;
  55. }
  56. public OnPlayerKeyStateChange(playerid,newkeys,oldkeys) {
  57.     if(IsPlayerInAnyVehicle(playerid)) return 0;
  58.     switch(newkeys) {
  59.         case 4: {
  60.             new w = GetPlayerWeapon(playerid);
  61.             if(w!=24&&w!=23&&w!=22&&w!=25&&w!=26&&w!=27) return 1;
  62.             new Float:Q[4],x,obj,pres_dis=W_RANGE;
  63.             GetPlayerFacingAngle(playerid,Q[0]);
  64.             GetPlayerPos(playerid,Q[1],Q[2],Q[3]);
  65.             for(new i=1; i<MAX_OBJECTS; i++) {
  66.                 if(!ObjectInfo[i][0]) continue;
  67.                 x = floatround(GetPlayerDistanceFromPoint(playerid, ObjectInfo[i][0],ObjectInfo[i][1],ObjectInfo[i][2]));
  68.                 if(x <= W_RANGE && x <= pres_dis) obj = i,pres_dis = x;
  69.             }
  70.             x = floatround(GetPlayerDistanceFromPoint(playerid, ObjectInfo[obj][0],ObjectInfo[obj][1],ObjectInfo[obj][2]));
  71.             new Float:r=140+floatmul(x,3),Float:u=250-floatmul(x,3),Float:e=52-floatmul(x,3);
  72.             if(Q[0] > r && Q[0] <= u) SetTimerEx("Check",10,0,"iiifff",playerid,0,0,Q[1],Q[2],Q[3]);
  73.             else if(Q[0] > 0 && Q[0] <= e) SetTimerEx("Check",10,0,"iiifff",playerid,0,1,Q[1],Q[2],Q[3]);
  74.             else if(Q[0] > 320+x && Q[0] < 360) SetTimerEx("Check",10,0,"iiifff",playerid,0,2,Q[1],Q[2],Q[3]);
  75.         }
  76.     }
  77.     return 0;
  78. }
  79.  
  80. #if defined _ALS_OnPlayerKeyStateChange
  81.     #undef OnPlayerKeyStateChange
  82. #else
  83.     #define _ALS_OnPlayerKeyStateChange
  84. #endif
  85. #define OnPlayerKeyStateChange Stream_OnPlayerKeyStateChange
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement