Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- --------------------------------------------------------------------------------
- - iWeapons 1.0.2 ( Advanced weapon control )
- - Author: Iggy
- - Special Thanks To Aelfred AKA Englander. Owner Of BionixGaming.
- - And Thanks To Everyone In The BionixGaming Community.
- --------------------------------------------------------------------------------
- Credits: ( alphabetical order )
- Y_Less - foreach / y_ini
- ZeeX - zcmd
- Also Obviously - The SA-MP Development Team.
- Last but not least - Anyone who uses this script :)
- --------------------------------------------------------------------------------
- Changelog : v1.0.2 (first update)
- - Fixed bugs with banned weapons not being saved to the file correctly.
- - Added /banallweapons command
- - Banned driveby weapons are now saved to file, and loaded to vars when the script is loaded.
- - Null checks added on commands that expect params.
- - y_ini reading functions modified. As per z3ros suggestion.
- - /bandb now disarms everyone in a vehicle, as soon as this command is used.
- --------------------------------------------------------------------------------
- */
- #include <a_samp>
- #include <zcmd>
- #include <foreach>
- #include <YSI\y_ini>
- #define ERROR_RED (0xFF6666AA)
- #define MESSAGE_COLOR (0x99FF00AA)
- #define HELP_COLOR (0x00FF00AA)
- #define MAX_TEAM_KILLS (3)
- #define WC_DEFAULT_UPDATE_TIME (10000)
- #define MAX_BANNED_WEAPONID (46)
- #define NO_PERMISSION();\
- SendClientMessage(playerid, ERROR_RED, "| iWeapons |: You do not have permission to use that command.");
- #define IWEAPON_DIALOG_MAIN (4891)
- enum IWEAPON_DATA
- {
- bool:wc_BannedWeapons[MAX_BANNED_WEAPONID],
- bool:wc_VehicleWeapons[MAX_BANNED_WEAPONID],
- bool:wc_pDriveByBanned[MAX_PLAYERS],
- bool:wc_DriveByBanned,
- //bool:wc_TeamKills
- }
- new wc_iWeaponData[IWEAPON_DATA];
- new wc_UpdateTime = WC_DEFAULT_UPDATE_TIME;
- new wc_UpdateID;
- //forward(s)
- wc_Update();
- public OnFilterScriptInit()
- {
- if(fexist("iWeaponConfig.ini"))
- INI_Load("iWeaponConfig.ini");
- else
- {
- new
- INI:iweps = INI_Open("iWeaponConfig.ini");
- for ( new i = 1; i < 44; i++ )
- {
- new
- str[ 9 ];
- format( str, 9, "weapon%d", i );
- INI_WriteBool(iweps, str, false);
- }
- INI_Close(iweps);
- }
- if(fexist("iVehicleWeaponCfg.ini"))
- INI_Load("iVehicleWeaponCfg.ini");
- else
- {
- new
- INI:iweps = INI_Open("iVehicleWeaponCfg.ini");
- for ( new i = 1; i < 44; i++ )
- {
- new
- str[ 9 ];
- format( str, 9, "weapon%d", i );
- INI_WriteBool(iweps, str, false);
- }
- INI_Close(iweps);
- }
- print("\n-----------------------------------------");
- print(" iWeapons - weapon control Unit 1.0.2 Loaded");
- print("-----------------------------------------\n");
- wc_UpdateID = SetTimer("wc_Update", wc_UpdateTime, true);
- return 1;
- }
- public OnFilterScriptExit()
- {
- print("\n-----------------------------------------");
- print(" iWeapons - weapon control Unit 1.0.2 Unloaded");
- print("-----------------------------------------\n");
- return 1;
- }
- public wc_Update()
- {
- foreach(Player, playerid)
- {
- if(wc_iWeaponData[ wc_BannedWeapons ][ GetPlayerWeapon(playerid) ] == true)
- {
- ResetPlayerWeapons(playerid);
- SendClientMessage(playerid, 0xFFFFFFAA, "| iWeapons |: {FF6666}You have been disarmed for having banned weapons.");
- continue;
- }
- }
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- wc_iWeaponData[ wc_pDriveByBanned ][ playerid ] = false;
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {/*
- if(wc_iWeaponData[ wc_TeamKills ] == true)
- {
- if(GetPlayerTeam(playerid) == GetPlayerTeam(killerid))
- {
- SetPVarInt(killerid, "TeamKills", GetPVarInt(killerid, "TeamKills") + 1);
- switch( GetPVarInt(killerid, "TeamKills") )
- {
- case MAX_TEAM_KILLS:
- {
- SetPlayerHealth(killerid, -999999);
- SendClientMessage(killerid, ERROR_RED, "You have been killed for excessive team kills.");
- DeletePVar(killerid, "TeamKills");
- return 1;
- }
- }
- }
- }*/
- return 1;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- if(newstate == PLAYER_STATE_DRIVER && wc_iWeaponData[ wc_DriveByBanned ] || wc_iWeaponData[ wc_pDriveByBanned ][ playerid ])
- return SetPlayerArmedWeapon(playerid, 0);
- else if(newstate == PLAYER_STATE_PASSENGER)
- {
- new
- bool:count,
- vid = GetPlayerVehicleID(playerid);
- foreach(Player, i)
- {
- if(i == playerid)continue;
- if(IsPlayerInVehicle(i, vid) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
- {
- count = true;
- break;
- }
- }
- if(!count)
- {
- RemovePlayerFromVehicle(playerid);
- SendClientMessage(playerid, ERROR_RED, "ERROR: There must be a driver for you to be a passenger");
- return 1;
- }
- if(wc_iWeaponData[ wc_pDriveByBanned ][ playerid ])
- return SetPlayerArmedWeapon(playerid, 0);
- if(wc_iWeaponData[ wc_DriveByBanned ])
- return SetPlayerArmedWeapon(playerid, 0);
- if(wc_iWeaponData[ wc_VehicleWeapons ][ GetPlayerWeapon(playerid) ])
- return SetPlayerArmedWeapon(playerid, 0);
- }
- return 1;
- }
- COMMAND:weaponhelp(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- SendClientMessage(playerid, 0xFFFF00AA, "----------------------------- {FF6666}iWeapon Commands {FFFF00}-----------------------------");
- SendClientMessage(playerid, HELP_COLOR, "/bandb. /unbandb. /banplayerdb[playername/id]. /unbanplayerdb[playername/id]");
- SendClientMessage(playerid, HELP_COLOR, "/banweapon[weaponname/id]. /unbanweapon[weaponname/id]");
- SendClientMessage(playerid, HELP_COLOR, "/bandbwep[weaponname/id], /bandbwep[weaponname/id]");
- SendClientMessage(playerid, HELP_COLOR, "/weaponupdate[seconds]. This will change the update time.");
- SendClientMessage(playerid, HELP_COLOR, "/banallweapons. or /baw");
- }
- return 1;
- }
- COMMAND:banweapon(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- if( isnull( params ) )
- return SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Usage /banweapon [weaponname/id]");
- new
- weaponid;
- if( isnumeric( params ) )
- {
- weaponid = strval( params );
- if(IsValidWeaponId( weaponid )) {
- new
- str[64],
- weapon[32];
- GetWeaponName(weaponid, weapon, 32);
- format(str, sizeof(str), "| iWeapons |: You have banned %s.", weapon);
- wc_iWeaponData[ wc_BannedWeapons ][ weaponid ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, sizeof(str), "| SERVER |: %ss have been banned.", weapon);
- SendClientMessageToAll(0xFFFFFFAA, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iWeaponConfig.ini");
- INI_WriteBool(iweps, str, true);
- INI_Close(iweps);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon Id.");
- }
- else
- {
- weaponid = GetWeaponIDFromName(params);
- if(IsValidWeaponId( weaponid )) {
- new
- str[64],
- weapon[32];
- GetWeaponName(weaponid, weapon, 32);
- format(str, sizeof(str), "| iWeapons |: You have banned %s.", weapon);
- wc_iWeaponData[ wc_BannedWeapons ][ weaponid ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, sizeof(str), "| SERVER |: %ss have been banned.", weapon);
- SendClientMessageToAll(0xFFFFFFAA, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iWeaponConfig.ini");
- INI_WriteBool(iweps, str, true);
- INI_Close(iweps);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon Id.");
- }
- }
- return 1;
- }
- COMMAND:unbanweapon(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- if( isnull( params ) )
- return SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Usage /unbanweapon [weaponname/id]");
- new
- weaponid;
- if(isnumeric( params ))
- {
- weaponid = strval( params );
- if(IsValidWeaponId( weaponid )) {
- new
- str[64],
- weapon[32];
- GetWeaponName(weaponid, weapon, 32);
- format(str, sizeof(str), "| iWeapons |: You have unbanned %s.", weapon);
- wc_iWeaponData[ wc_BannedWeapons ][ weaponid ] = false;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, sizeof(str), "| SERVER |: %s have been banned.", weapon);
- SendClientMessageToAll(0xFFFFFFAA, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iWeaponConfig.ini");
- INI_WriteBool(iweps, str, false);
- INI_Close(iweps);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon Id.");
- }
- else
- {
- weaponid = GetWeaponIDFromName(params);
- if(IsValidWeaponId( weaponid )) {
- new
- str[64],
- weapon[32];
- GetWeaponName(weaponid, weapon, 32);
- format(str, sizeof(str), "| iWeapons |: You have unbanned %s.", weapon);
- wc_iWeaponData[ wc_BannedWeapons ][ weaponid ] = false;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, sizeof(str), "| SERVER |: %s have been banned.", weapon);
- SendClientMessageToAll(0xFFFFFFAA, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iWeaponConfig.ini");
- INI_WriteBool(iweps, str, false);
- INI_Close(iweps);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon Id.");
- }
- }
- return 1;
- }
- COMMAND:banallweapons(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- new
- INI:iweps = INI_Open("iWeaponConfig.ini");
- for ( new i = 1; i < 44; i++ )
- {
- new
- str[ 9 ];
- format( str, 9, "weapon%d", i );
- INI_WriteBool(iweps, str, true);
- wc_iWeaponData[ wc_BannedWeapons ] [ i ] = true;
- }
- INI_Close(iweps);
- }
- return 1;
- }
- COMMAND:baw(playerid, params[]) {
- return cmd_banallweapons(playerid, params);
- }
- COMMAND:disarmserver(playerid, params[])
- {
- return 1;
- }
- COMMAND:bandb(playerid, params[])
- {
- if(!IsPlayerAdmin(playerid))
- NO_PERMISSION();
- else {
- wc_iWeaponData[ wc_DriveByBanned ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, "| iWeapons |: You have disabled drivebys.");
- SendClientMessageToAll(0xFFFFFFAA, "| SERVER |: Drivebys have been {FF6666}disabled");
- foreach(Player, i)
- if(IsPlayerInAnyVehicle(i))
- SetPlayerArmedWeapon(playerid, 0);
- }
- return 1;
- }
- COMMAND:unbandb(playerid, params[])
- {
- if(!IsPlayerAdmin(playerid))
- NO_PERMISSION();
- else {
- wc_iWeaponData[ wc_DriveByBanned ] = false;
- SendClientMessage(playerid, MESSAGE_COLOR, "| iWeapons |: You have enabled drivebys.");
- SendClientMessageToAll(0xFFFFFFAA, "| SERVER |: Drivebys have been {00FF00}enabled");
- }
- return 1;
- }
- COMMAND:bandbweapon(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- if( isnull( params ) )
- return SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Usage /bandbweapon [weaponname/id]");
- new
- weaponid;
- if(isnumeric( params ))
- {
- weaponid = strval( params );
- if(IsValidWeaponId( weaponid )) {
- new
- str[64];
- GetWeaponName(weaponid, str, 32);
- format(str, sizeof(str), "| iWeapons |: You have banned driveby weapon: %s.", str);
- wc_iWeaponData[ wc_VehicleWeapons ][ weaponid ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iVehicleWeaponCfg.ini");
- INI_WriteBool(iweps, str, true);
- INI_Close(iweps);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon Id.");
- }
- else
- {
- weaponid = GetWeaponIDFromName(params);
- if(weaponid != -1)
- {
- new
- str[64];
- format(str, sizeof(str), "| iWeapons |: You have banned driveby weapon: %s.", params);
- wc_iWeaponData[ wc_VehicleWeapons ][ weaponid ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iVehicleWeaponCfg.ini");
- INI_WriteBool(iweps, str, true);
- INI_Close(iweps);
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon.");
- }
- }
- return 1;
- }
- COMMAND:bandbwep(playerid, params[]) {
- return cmd_bandbweapon(playerid, params);
- }
- COMMAND:unbandbweapon(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- if( isnull( params ) )
- return SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Usage /unbandbweapon [weaponname/id]");
- new
- weaponid;
- if(isnumeric( params ))
- {
- weaponid = strval( params );
- if(IsValidWeaponId( weaponid )) {
- new
- str[64];
- GetWeaponName(weaponid, str, 32);
- format(str, sizeof(str), "| iWeapons |: You have banned driveby weapon: %s.", str);
- wc_iWeaponData[ wc_VehicleWeapons ][ weaponid ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iVehicleWeaponCfg.ini");
- INI_WriteBool(iweps, str, false);
- INI_Close(iweps);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon Id.");
- }
- else
- {
- weaponid = GetWeaponIDFromName(params);
- if(IsValidWeaponId( weaponid ))
- {
- new
- str[64];
- format(str, sizeof(str), "| iWeapons |: You have banned driveby weapon: %s.", params);
- wc_iWeaponData[ wc_VehicleWeapons ][ weaponid ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- format(str, 9, "weapon%d", weaponid);
- new
- INI:iweps = INI_Open("iVehicleWeaponCfg.ini");
- INI_WriteBool(iweps, str, false);
- INI_Close(iweps);
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Invalid Weapon Id.");
- }
- }
- return 1;
- }
- COMMAND:unbandbwep(playerid, params[]) {
- return cmd_unbandbweapon(playerid, params);
- }
- COMMAND:banplayerdb(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- if( isnull( params ) )
- return SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Usage /banplayerdb [name/id]");
- new
- id;
- if(isnumeric( params ))
- {
- id = strval( params );
- if(id != INVALID_PLAYER_ID)
- {
- new
- str[64];
- format(str, sizeof( str ), "| iWeapons |: You have disabled %s from doing drivebys", playername(id));
- wc_iWeaponData[ wc_pDriveByBanned ][ id ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- SendClientMessage(id, 0xFFFFFFAA, "| SERVER |: You have been disabled from doing drivebys");
- if(IsPlayerInAnyVehicle(id))
- SetPlayerArmedWeapon(id, 0);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons |: Player not found.");
- }
- else
- {
- id = INVALID_PLAYER_ID;
- foreach(Player, i)
- {
- if(playerid == i)continue;
- if(!strcmp(params, playername(i), true))
- {
- id = i;
- break;
- }
- }
- if( id != INVALID_PLAYER_ID )
- {
- new
- str[64];
- format(str, sizeof( str ), "| iWeapons |: You have disabled %s from doing drivebys", playername(id));
- wc_iWeaponData[ wc_pDriveByBanned ][ id ] = true;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- SendClientMessage(id, 0xFFFFFFAA, "| SERVER |: You have been disabled from doing drivebys");
- if(IsPlayerInAnyVehicle(id))
- SetPlayerArmedWeapon(id, 0);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons |: Player not found.");
- }
- }
- return 1;
- }
- COMMAND:unbanplayerdb(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- if( isnull( params ) )
- return SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Usage /unbanplayerdb [name/id]");
- new
- id;
- if(isnumeric( params ))
- {
- id = strval( params );
- if(id != INVALID_PLAYER_ID)
- {
- new
- str[64];
- format(str, sizeof( str ), "| iWeapons |: You have enabled %s's drivebys", playername(id));
- wc_iWeaponData[ wc_pDriveByBanned ][ id ] = false;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- SendClientMessage(id, 0xFFFFFFAA, "| SERVER |: You can now driveby");
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons |: Player not found.");
- }
- else
- {
- id = INVALID_PLAYER_ID;
- foreach(Player, i)
- {
- if(playerid == i)continue;
- if(!strcmp(params, playername(i), true))
- {
- id = i;
- break;
- }
- }
- if( id != INVALID_PLAYER_ID )
- {
- new
- str[64];
- format(str, sizeof( str ), "| iWeapons |: You have enabled %s's drivebys", playername(id));
- wc_iWeaponData[ wc_pDriveByBanned ][ id ] = false;
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- SendClientMessage(id, 0xFFFFFFAA, "| SERVER |: You can now driveby");
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons |: Player not found.");
- }
- }
- return 1;
- }
- COMMAND:weaponupdate(playerid, params[])
- {
- if(!IsPlayerAdmin( playerid ))
- NO_PERMISSION();
- else
- {
- if( isnull( params ) )
- return SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Usage /weaponupdate [time]. Time is in seconds.");
- if(isnumeric( params ))
- {
- new
- newtime = strval( params );
- if(newtime > 0 && newtime < ( 120*60 ))
- {
- new
- str[64];
- KillTimer(wc_UpdateID);
- wc_UpdateID = SetTimer("wc_Update", newtime, true);
- wc_Update();
- format(str, sizeof( str ), "| iWeapons |: You have set the new iWeapon update time to once every %d seconds", newtime);
- SendClientMessage(playerid, MESSAGE_COLOR, str);
- return 1;
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Number must be between 2 and 120. (seconds)");
- }
- else
- SendClientMessage(playerid, ERROR_RED, "| iWeapons | ERROR: Expected value is a number. (2 - 120)");
- }
- return 1;
- }
- stock GetWeaponIDFromName(WeaponName[])
- {
- if(strfind("molotov",WeaponName,true)!=-1)
- return 18;
- for(new i; i <= 46; i++)
- {
- switch( i )
- {
- case 0,19,20,21,44,45: continue;
- default:
- {
- new name[32]; GetWeaponName(i,name,32);
- if(strfind(name,WeaponName,true) != -1)
- return i;
- }
- }
- }
- return -1;
- }
- IsValidWeaponId(weaponid)
- {
- if(weaponid>45||weaponid<1||weaponid==0||weaponid==19
- ||weaponid==20||weaponid==21||weaponid==44||weaponid==45)
- return 0;
- else
- return 1;
- }
- playername(playerid)
- {
- new
- pName[MAX_PLAYER_NAME];
- GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
- return pName;
- }
- INI:iVehicleWeaponCfg[](name[], value[])
- {
- for ( new i = 1; i < 44; i++ )
- {
- new
- str[ 9 ];
- format( str, 9, "weapon%d", i );
- INI_Bool( str, wc_iWeaponData[ wc_VehicleWeapons ] [ i ]);
- }
- return 0;
- }
- INI:iWeaponConfig[](name[], value[])
- {
- for ( new i = 1; i < 44; i++ )
- {
- new
- str[ 9 ];
- format( str, 9, "weapon%d", i );
- INI_Bool( str, wc_iWeaponData[ wc_BannedWeapons ] [ i ]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment