Advertisement
Guest User

Drive-by weapon switch

a guest
Sep 12th, 2011
2,006
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.66 KB | None | 0 0
  1. // Drive-by Weapon Switch Filterscript v1.0 by Amit_B
  2. #include "a_samp.inc"
  3. #define isAcceptedDBWeapon(%1) ((%1 >= 22 && %1 <= 34) || %1 == 38)
  4. new pweapon[MAX_PLAYERS] = {0,...};
  5. public OnFilterScriptInit() return print("Drive-by Weapon Switch filterscript loaded"), 1;
  6. public OnPlayerConnect(playerid) return pweapon[playerid] = 0, 1;
  7. public OnPlayerStateChange(playerid,newstate,oldstate) return newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER ? (pweapon[playerid] = GetPlayerWeapon(playerid),1) : 1;
  8. public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
  9. {
  10.     if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && (newkeys & 64 || newkeys & 256) && IsPlayerUsingDB(playerid))
  11.     {
  12.         new wd[13][2], w = pweapon[playerid], s = GetWeaponSlot(w), acceptedSlots[] = {2,3,4,5,6}, first = acceptedSlots[0], last = acceptedSlots[sizeof(acceptedSlots)-1];
  13.         if(isAcceptedDBWeapon(w))
  14.         {
  15.             for(new i = 0; i < 13; i++) GetPlayerWeaponData(playerid,i,wd[i][0],wd[i][1]);
  16.             new found = w;
  17.             if(newkeys & 64) // next
  18.             {
  19.                 for(new i = s + 1; i <= last && found == w; i++) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
  20.                 if(found == w) for(new i = first; i < s && found == w; i++) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
  21.                 if(found != w)
  22.                 {
  23.                     SetPlayerArmedWeapon(playerid,found);
  24.                     pweapon[playerid] = found;
  25.                 }
  26.             }
  27.             else if(newkeys & 256) // previous
  28.             {
  29.                 for(new i = s - 1; i >= first && found == w; i--) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
  30.                 if(found == w) for(new i = last; i > s && found == w; i--) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
  31.                 if(found != w)
  32.                 {
  33.                     SetPlayerArmedWeapon(playerid,found);
  34.                     pweapon[playerid] = found;
  35.                 }
  36.             }
  37.         }
  38.     }
  39.     return 1;
  40. }
  41. stock IsPlayerUsingDB(playerid,bool:withsomeone = false)
  42. {
  43.     if(GetPlayerState(playerid) != PLAYER_STATE_PASSENGER) return 0;
  44.     new bool:hassomeone = false;
  45.     if(withsomeone)
  46.     {
  47.         new v = GetPlayerVehicleID(playerid);
  48.         for(new i = 0; i < MAX_PLAYERS && !hassomeone; i++) if(IsPlayerConnected(i) && IsPlayerInVehicle(i,v) && GetPlayerState(i) == PLAYER_STATE_DRIVER) hassomeone = true;
  49.     }
  50.     return GetPlayerCameraMode(playerid) == 55 && (!withsomeone || (withsomeone && hassomeone));
  51. }
  52. stock GetWeaponSlot(wid)
  53. {
  54.     switch(wid)
  55.     {
  56.         case 0, 1: return 0;
  57.         case 2..9: return 1;
  58.         case 22..24: return 2;
  59.         case 25..27: return 3;
  60.         case 28, 29, 32: return 4;
  61.         case 30, 31: return 5;
  62.         case 33, 34: return 6;
  63.         case 35..38: return 7;
  64.         case 16..19, 39: return 8;
  65.         case 41..43: return 9;
  66.         case 10..15: return 10;
  67.         case 44..46: return 11;
  68.         case 40: return 12;
  69.         default: return -1;
  70.     }
  71.     return -1;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement