This is a weapon restrict plugin for CS:S it allows per player restrictions, ability to change the restrict sound and also comes with a warm up system! As of 3.0 it comes with a massive set of natives/forwards to be used by other plugins.
THANKS:
psychonic for answering all of my questions and convincing me to make cstrike extension better.
cpnichol for helping test
Snake60 for the awesome logo!
// Time after death before respawning player
// -
// Default: "0.5"
sm_warmup_respawn_time "0.5"
// How long in seconds warmup lasts
// -
// Default: "45"
sm_warmup_time "45"
Other Cvars
Spoiler
// Set to 0 to allow awp pickup ONLY if it is under the max allowed. Set to 1 to use sm_allow_restricted_pickup method.
// -
// Default: "1"
sm_allow_awp_pickup "1"
// Set to 0 to ONLY allow pickup if under the max allowed. Set to 1 to allow restricted weapon pickup
// -
// Default: "0"
sm_allow_restricted_pickup "0"
// If enabled will count bots in per player restricts
// -
// Default: "1"
sm_perplayer_bots "1"
// If enabled will restrict awp per player count
// -
// Default: "0"
sm_perplayer_restrict "0"
// If enabled will count specs in per player restricts
// -
// Default: "1"
sm_perplayer_specs "1"
// Enables admin immunity so admins can buy restricted weapons Default flag is reserved flag. Override sm_restrict_immunity_level to change.
// -
// Default: "0"
sm_weapon_restrict_immunity "0"
// Sound to play when a weapon is restricted (leave blank to disable)
// -
// Default: "sound/buttons/weapon_cant_buy.wav"
sm_restricted_sound "sound/buttons/weapon_cant_buy.wav"
enum CanBuyResult
{
CanBuy_Block, //block buy but notify
CanBuy_BlockDontDisplay, //block buy and notifications
CanBuy_Allow //Allow buy
};
#define WEAPONARRAYSIZE 64
/**
* Called when CanBuyWeapon is fired.
*
* @param client Client index
* @param team Team index
* @param id Weapon id that is being attempted to be bought
* @param result default result
*
* Return Plugin_Continue to ignore Plugin_Changed if result was changed Plugin_Handled and higher to block.
*/
forward Action:Restrict_OnCanBuyWeapon(client, team, WeaponID:id, &CanBuyResult:result);
/**
* Called when CanPickupWeapon is fired
*
* @param client Client index
* @param team Team index
* @param id Weapon id that is being attempted to be pickedup
* @param result default result
*
* Return Plugin_Continue to ignore Plugin_Changed if result was changed Plugin_Handled and higher to block.
*/
forward Action:Restrict_OnCanPickupWeapon(client, team, WeaponID:id, &bool:result);
/**
* Called when PlayRestrictSound is fired
*
* @param client Client index
* @param id Weapon id
* @param sound default sound
*
* Return Plugin_Continue to ignore Plugin_Changed if sound (make sure the sound is already cached and in downloads table) was changed Plugin_Handled and higher to block.
*/
forward Action:Restrict_OnPlayRestrictSound(client, WeaponID:id, String:sound[256]);
/**
* Called when warmup round has started.
*/
forward Restrict_OnWarmupStart_Post();
/**
* Called when warmup round has ended.
*/
forward Restrict_OnWarmupEnd_Post();
/**
* Refunds money according to the weapon.
*
* @param client Client index
* @param id Weapon id of the weapon money is being refunded for
*
* @error Invalid client or invalid id.
* @noreturn
*/
native Restrict_RefundMoney(client, WeaponID:id);
/**
* Removes x (count) amount of a certain weapon on a team
*
* @param count Amount to remove
* @param team Team index
* @param id Weapon id to remove
*
* @error Invalid client or invalid id or invalid team.
* @noreturn
*/
native Restrict_RemoveRandom(count, team, WeaponID:id);
/**
* Gets count of a certain weapon on a team
*
* @param team Team index
* @param id Weapon id to get count for
*
* @error Invalid id or invalid team.
* @return Count of the weapon on the team
*/
native Restrict_GetTeamWeaponCount(team, WeaponID:id);
/**
* Get the restrict value for weapon for the specified team
*
* @param team Team index
* @param id Weapon id to get value for
*
* @error Invalid id or invalid team.
* @return Value of the restriction.
*/
native Restrict_GetRestrictValue(team, WeaponID:id);
/**
* Get the id for a weapon (Extended)
*
* @param weapon Weapon string to get id for
*
* @error Invalid id or invalid team.
* @return Weapon id or WEAPON_NONE if could not be found.
*/
native WeaponID:Restrict_GetWeaponIDExtended(const String:weapon[]);
/**
* Get grenade count on client
*
* @param client Client index
* @param id Weapon id
*
* @error Invalid id or invalid client.
* @return Grenade count for specified gernade for the client.
*/
native Restrict_GetClientGrenadeCount(client, WeaponID:id);
/**
* Get weapon id of the clients weapon slot.
*
* @param client Client index
* @param slot Weapon slot
*
* @error Invalid slot or invalid client.
* @return Weapon id for the clients weapon on the slot. WEAPON_NONE will be returned if no weapon exists
*/
native WeaponID:Restrict_GetWeaponIDFromSlot(client, WeaponSlot:slot);
/**
* Removes special item from client (defuser, vest, vest and helmet, night vision)
*
* @param client Client index
* @param id Weapon id
*
* @error Invalid id or invalid client.
* @return true if removed false if not found
*/
native bool:Restrict_RemoveSpecialItem(client, WeaponID:id);
/**
* Checks if a client can buy the weapon
*
* @param client Client index
* @param team Team index
* @param id Weapon id
* @param blockhook True to block forward from being called
*
* @error Invalid id or invalid client or invalid team.
* @return true if client can buy the weapon false otherwise.
*/
native CanBuyResult:Restrict_CanBuyWeapon(client, team, WeaponID:id, bool:blockhook = false);
/**
* Checks if a client can pickup the weapon
*
* @param client Client index
* @param team Team index
* @param id Weapon id
* @param blockhook True to block forward from being called
*
* @error Invalid id or invalid client or invalid team.
* @return true if client can pickup the weapon false otherwise.
*/
native bool:Restrict_CanPickupWeapon(client, team, WeaponID:id, bool:blockhook = false);
/**
* Checks if it is a special round.
*
* @return true if special round is active false otherwise.
*/
native bool:Restrict_IsSpecialRound();
/**
* Checks if it is warmup round
*
* @return true if it is warmup false otherwise.
*/
native bool:Restrict_IsWarmupRound();
/**
* Checks if a client has a special item
*
* @param client Client index
* @param id Weapon id
*
* @error Invalid id or invalid client.
* @return true if client has the special item or false otherwise.
* @note This will return false if it is a normal weapon.
*/
native bool:Restrict_HasSpecialItem(client, WeaponID:id);
/**
* Sets a restriction for specified team
*
* @param id Weapon id
* @param team Team index
* @param amount Value to set restriction at
* @param override True to add weapon to override
*
* @error Invalid id or invalid team.
* @return true if restriction was applied false otherwise
* @note This will return false only if the Weapon id is invalid for the team
*/
native bool:Restrict_SetRestriction(WeaponID:id, team, amount, bool:override = true);
/**
* Sets a group restriction for specified team
*
* @param group Weapon group
* @param team Team index
* @param amount Value to set restriction at
* @param override True to add weapon's to override
*
* @error Invalid group or invalid team.
* @return true if restrictions were applied false otherwise
* @note Should never return false
*/
native bool:Restrict_SetGroupRestriction(WeaponType: group, team, amount, bool:override = true);
/**
* Returns the round type
*
* @return Current round type.
*/
native RoundType:Restrict_GetRoundType();
/**
* Checks player weapons and removes accordingly
*
* @noreturn
*/
native Restrict_CheckPlayerWeapons();
/**
* Drops and removes clients weapon
*
* @param client Client index
* @param weaponIndex Weapon index to drop and remove
*
* @error Invalid client or weapon index.
* @return true if weapon was removed false otherwise
*/
native bool:Restrict_RemoveWeaponDrop(client, weaponIndex);
/**
* Checks if client has immunity and restrict immunity is enabled
*
* @param client Client index
*
* @error Invalid client.
* @return true if client passes immunity check (Is immune) false otherwise
* @note This will return false if restrict immunity is disabled.
*/
native bool:Restrict_ImmunityCheck(client);
/**
* Checks if weapon is allowed for special round
*
* @param id Weapon id
*
* @error Invalid id.
* @return true if allowed for special round false otherwise
* @note This also works for warmup rounds
*/
native bool:Restrict_AllowedForSpecialRound(WeaponID :id);
/**
* Plays weapon restrict sound
*
* @param client Client index
* @param id Weapon id
*
* @error Invalid client or invalid id.
* @noreturn
*/
native Restrict_PlayRestrictSound(client, WeaponID:id);
/**
* Adds weapon to override for specific team
*
* @param team Team index
* @param id Weapon id
*
* @error Invalid team or invalid id.
* @noreturn
*/
native Restrict_AddToOverride(team, WeaponID:id);
/**
* Removes weapon from specific teams override
*
* @param team Team index
* @param id Weapon id
*
* @error Invalid team or invalid id.
* @noreturn
*/
native Restrict_RemoveFromOverride(team, WeaponID:id);
/**
* Checks if weapon is in override for the specified team
*
* @param team Team index
* @param id Weapon id
*
* @error Invalid team or invalid id.
* @return True if weapon is in override false otherwise.
*/
native bool:Restrict_IsWeaponInOverride(team, WeaponID:id);
/**
* Checks if the weapon is the warmup weapon
*
* @param id Weapon id to check
*
* @error Invalid weapon id.
* @return True if the weapon is the warmup weapon, false otherwise.
* @note Will return false if it is not warmup.
*/
native bool:Restrict_IsWarmupWeapon(WeaponID:id);
public SharedPlugin:__pl_restrict =
{
name = "weaponrestrict",
file = "weapon_restrict.smx",
#if defined REQUIRE_PLUGIN
required = 1,
#else
required = 0,
#endif
};
Note 3.0 and up requires SDKHooks 2.1+ and SourceMod 1.5+
Download the zip and extract the folder. Place the files in the server according to the path in the extracted folder.
To install per map configs or per prefix configs they go in addons/sourcemod/configs/restrict
mapname.cfg will be for maps and blah_.cfg for prefix it MUST have _ after the prefix (examples in the zip for test map and test prefix).
Upgrading to 3.0:
Upgrading from 2.3.X to 3.0 is mostly straight forward.
Make sure to update weapon_restrict.cfg (in the cstrike/cfg/sourcemod folder) since there are new cvars.
If you use a custom sound you now set it via cvar rather than the sound.txt file
Per player has changed dramatically to allow all weapons rather than awp only. Overwrite the file and read the next post on how to set up per player.
Requires SourceMod 1.4 and SDKHooks 2.1 or greater
Change log:
Spoiler
1.0.0 Intial release beta.
1.2.1 Still beta (yes i skipped a few versions :P)
Cleaned up a bit Seperated files warmup has its own included file along with all the remove weapon functions and command functions.
Fixed rebuy/autobuy when buying vest and/or helmet or defuser and it being restricted. Now it will remove it and give the money back.
Added removal of bomb in warm up
Also added the ability to restrict bomb. (It will be stripped from teh player on spawn)
Fixed a bug when buying via bind and buying defusal on the oppsite team throwing errors (binds that contained guns/things only avaible on the other team in general)
1.3.0 Still beta fixed a few bugs in buying.
Fixed issue when commenting out warmup.
Added per map config as well as prefix.
Optimized as much as i know how.
2.0.0 Close to being out of beta if no major problems on this one the next one wont be in beta
Rewrote mostly everything
Added support for warmup.cfg for weapons to use during warmup
Fixed loop that set restriction always 1 less than cvar was set to
Fixed money being taken away without giving the gun
Used tries instead of arrays
Fixed to meet with approval requirments(hooking convars correctly with handles etc.)
Removed warmup respawn
Made sm_knives and pistols be next round instead of the current round.
Added cvar to warmup for infinite nades.
And other tiny bug fixes that i cant remember now.
2.2.0 No longer a beta.
Added restrict weapons to admin menu under its own menu option.
Fixed a tiny bug where warmup was running before the config loader.(so custom per map configs that had warmup off warmup still ran)
Added cvar to allow weapon pickup and randomly remove if there was to many on round start.
Added @all to unrestrict this will unrestrict all weapons.
Added perplayer awp restrict (read below post for more info)
Other very minimal code optimizations
Added a check to make sure the mod was cstrike
2.2.1
Fixed spelling mistake :oops:
Changed sm_dropbomb to sm_dropc4
2.2.2
Slight optimization's.
Added weapon restrict immunity cvar (see misc cvars)
2.2.3
Fixed slight bug with admin immunity
Added warmup respawn cvar (see warmup cvars)
Added Removing weapons on ground during warmup
Fixed example files using old cvars
Fixed slight bug with infinite grenades (not allowing you to switch weapons or knifing or anything)
2.2.4
Fixed spelling mistake in configs
Fixed mistake in compiled version using old plugin version number
2.2.5
Fixed warmup throwing errors when respawn was enabled (hopefully)
2.2.6
Fixed another posible cuase for respawn errors (hopefully all are gone)
2.2.7
Fixed drop bomb bug
2.3.0
Added Translations support
Added the ability to change sound played when a weapon is restricted
Added pre and post warmup configs
Added Admin Override (prevents cvars from changing restrictions if admin command changed restrictions helpful with per player restrictions)
Fixed warmup for cssbeta
Added warning to signatures if they are incorrect
Moved warmup config into the restrict folder (to keep everything in one place)
Added sm_restrict @all support
Fixed possible memory leak
Added Full cssbeta support
Added sm_reload_restrictions to reload restrictions and reset overrides
Added sm_remove_restricted to remove restricted weapons from player
Fixed issue with grenades not being removed at round start if they were restricted
Added the ability to disable the restrict sound (read next post)
Fixed cvar changes being announced (now if your using perplayer plugin chat wont be spammed)
2.3.1
Made config loader array slightly larger for bigger prefixes
Fixed gamedata for orangebox css aswell as work with cssdm
Fixed setting convars to -1 not working
Fixed crash when trying to change convar that is in adminoverride
Fixed configloader not working on first launch
2.3.2
Fixed c4 not being able to be restricted (thanks to Bacardi)
Fixed a fail load if adminmenu plugin was not loaded.
Added sm_pistols and sm_knives to admin menu. (Translations need to be updated. English has already been updated.)
Another bug fix but i cant remember what now.
2.3.3
Added some deathmatch support again (Cant drop the bomb in deathmatch but restrictions should work).
Added support for css beta
Fixed problem with pistol only or knife only rounds not allowing buying of armor defuseal kits etc..
2.3.4
Updated translations
Added missing translation (thanks to Snake60)
2.3.5
Full support for CSS: DM
Fixed error when force bomb drop was run from console.
Fixed possible crash
Changed RemoveEdict for AcceptEntityInput
3.0.5
Rewrote everything
Optimized everything
Added Natives
Reworked entire menu
Added group restrictions
Added translations for weapon names.
Added sm_restrict_knife_t and sm_restrict_knife_ct
Added check for weapon aliases
Improved method of checking buy/rebuy/autobuy (no longer removes and refunds)
Now doesnt remove the restricted weapon on pickup instead will not allow pickup
Change how sm_restrict and sm_unrestrict @all worked (now restricts knife aswell!)
Requires CS:S Weapon tools include for compiling (In the zip)
No longer uses gamedata
Added Forwards
Changed how restrict sound is set (now set via cvar sm_restricted_sound)
Added per player support for all weapons
Changed how per player worked (now has a default value and the last key found is set for the rest)
Added server command sm_perplayer_debug to help debug per player issues.
Added sm_allow_awp_pickup to block awp pickup even when allow restricted pickup is set to 1 (will block only if it will go above awp limit prevents the buy and drop and buy exploit on awps)
Added sm_perplayer_bots and sm_perplayer_specs to count bots/specs in per player counts
No longer requires downloading of sound file.
Adds support ammo cvars for grenades.
3.0.6
Fixed bug with classnames not being all lowercase.
Fixed invalid id error
Fixed Special rounds lasting 2 rounds rather than 1.
3.0.7
Fixed bug with unrestrict command when passing a team.
Fixed a bug when checking perplayer weapons.
3.0.8
Fixed bug setting special rounds for after warmup.
3.0.9
Fixed bug with weapon aliases.
3.1.0 -> 3.1.4
Added support for CS:GO
Added better ID checks
Fixed bug with restricting knife
A bunch of CS:GO bugs
3.1.5
Added support for workshop maps.
Removed deprecated functions.
3.1.6
Fixed taser warmup not working.
3.1.7
Fixed printing not showing color in CS:GO
Fixed respawning spectators.
Fixed compile warnings on SM 1.8+
Note: all translations need to be updated to 3.0 translations
Changes for 3.1.0 and up
The config is now generated on start (it always was) but I wont include it in the zip anymore as guns differ from cs:s to cs:go. Install everything, start the server make sure weapon restrict loaded (sm plugins list). go to your <moddir>/cfg/sourcemod and edit weapon_restrict.cfg
Per player restrict text file goes in sourcemod/configs/restrict/perplayerrestrict.txt
(perplayerrestrict being the name of the text file used it will automaticly be placed when you extract the zip file from above)
Inside the file should look something like this (by default).
Between 0 and 17 usp will be restricted to -1
Between 18 and 65 usp will be restricted to 0
Between 0 and 9 awp will be restricted to 0
Between 10 and 17 awp will be restricted to 1
Between 18 and 65 awp will be restricted to 2
Between 0 and 19 flashbang will be restricted to -1
Between 20 and 65 flashbang will be restricted to 10
Between 0 and 19 defuser will be restricted to -1
Between 20 and 65 defuser will be restricted to 100
For debug purposes the following server command was added sm_perplayer_debug and will print in the format above :)
Pre/Post warmup configs:
Pre and post warmup configs are located in addons/sourcemod/configs/restrict simply add cvar or commands you want to be run like you would do in a server config and done.
BDeep
10-02-2009 13:11
Re: Weapon Restrict remake
+w00t
I have been having all kinds of weird issues with the original. Looking forward to the things on the todo list.
Dr!fter
10-02-2009 13:13
Re: Weapon Restrict remake
Yea i have the orginal with so many tweeks to it. But still dosnt work perfect. So i decided to make a new one.
Bigbuck
10-04-2009 10:06
Re: Weapon Restrict remake
We use Liam's version on our server and this seems like it will be a good improvement over it. I look forward to see your todo list completed.
Dr!fter
10-04-2009 11:33
Re: Weapon Restrict remake
Updated, fixed a few bugs and added the admin commands sm_knives, sm_pistols, sm_restrict, sm_unrestrict.
Read the change log for a full list of changes
BeG
10-04-2009 16:16
Re: Weapon Restrict remake
iss the bug fixed when im buy an restrictet weapon that i dont become back my money?
Dr!fter
10-04-2009 17:58
Re: Weapon Restrict remake
Quote:
Originally Posted by BeG
(Post 952427)
iss the bug fixed when im buy an restrictet weapon that i dont become back my money?
Yes.
My next doing is optimization. Want to optimize before moving on. Which will most likely mean an entire rewrite.
Xp3r7
10-04-2009 21:51
Re: Weapon Restrict remake
Very nice!
I will probably switch over to this as more of the to-do list is complete! :)
Dr!fter
10-12-2009 17:25
Re: Weapon Restrict remake
Little bit of an update. I rewrote some of the functions i will probably be releasing it sometime this week. Im just trying to add the map config to it in the next release.