Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Drive-by Weapon Switch Filterscript v1.0 by Amit_B
- #include "a_samp.inc"
- #define isAcceptedDBWeapon(%1) ((%1 >= 22 && %1 <= 34) || %1 == 38)
- new pweapon[MAX_PLAYERS] = {0,...};
- public OnFilterScriptInit() return print("Drive-by Weapon Switch filterscript loaded"), 1;
- public OnPlayerConnect(playerid) return pweapon[playerid] = 0, 1;
- public OnPlayerStateChange(playerid,newstate,oldstate) return newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER ? (pweapon[playerid] = GetPlayerWeapon(playerid),1) : 1;
- public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
- {
- if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && (newkeys & 64 || newkeys & 256) && IsPlayerUsingDB(playerid))
- {
- new wd[13][2], w = pweapon[playerid], s = GetWeaponSlot(w), acceptedSlots[] = {2,3,4,5,6}, first = acceptedSlots[0], last = acceptedSlots[sizeof(acceptedSlots)-1];
- if(isAcceptedDBWeapon(w))
- {
- for(new i = 0; i < 13; i++) GetPlayerWeaponData(playerid,i,wd[i][0],wd[i][1]);
- new found = w;
- if(newkeys & 64) // next
- {
- for(new i = s + 1; i <= last && found == w; i++) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
- if(found == w) for(new i = first; i < s && found == w; i++) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
- if(found != w)
- {
- SetPlayerArmedWeapon(playerid,found);
- pweapon[playerid] = found;
- }
- }
- else if(newkeys & 256) // previous
- {
- for(new i = s - 1; i >= first && found == w; i--) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
- if(found == w) for(new i = last; i > s && found == w; i--) if(isAcceptedDBWeapon(wd[i][0])) found = wd[i][0];
- if(found != w)
- {
- SetPlayerArmedWeapon(playerid,found);
- pweapon[playerid] = found;
- }
- }
- }
- }
- return 1;
- }
- stock IsPlayerUsingDB(playerid,bool:withsomeone = false)
- {
- if(GetPlayerState(playerid) != PLAYER_STATE_PASSENGER) return 0;
- new bool:hassomeone = false;
- if(withsomeone)
- {
- new v = GetPlayerVehicleID(playerid);
- for(new i = 0; i < MAX_PLAYERS && !hassomeone; i++) if(IsPlayerConnected(i) && IsPlayerInVehicle(i,v) && GetPlayerState(i) == PLAYER_STATE_DRIVER) hassomeone = true;
- }
- return GetPlayerCameraMode(playerid) == 55 && (!withsomeone || (withsomeone && hassomeone));
- }
- stock GetWeaponSlot(wid)
- {
- switch(wid)
- {
- case 0, 1: return 0;
- case 2..9: return 1;
- case 22..24: return 2;
- case 25..27: return 3;
- case 28, 29, 32: return 4;
- case 30, 31: return 5;
- case 33, 34: return 6;
- case 35..38: return 7;
- case 16..19, 39: return 8;
- case 41..43: return 9;
- case 10..15: return 10;
- case 44..46: return 11;
- case 40: return 12;
- default: return -1;
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement