/** * vim: set ts=4 : * ============================================================================= * Left 4 Downtown 2 SourceMod Extension * Copyright (C) 2010 Michael "ProdigySim" Busby * ============================================================================= * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . * * As a special exception, AlliedModders LLC gives you permission to link the * code of this program (as well as its derivative works) to "Half-Life 2," the * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software * by the Valve Corporation. You must obey the GNU General Public License in * all respects for all other code used. Additionally, AlliedModders LLC grants * this exception to all derivative works. AlliedModders LLC defines further * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * or . * * Version: $Id$ */ #if defined _l4d2weapons_included #endinput #endif #define _l4d2weapons_included enum L4D2IntWeaponAttributes { L4D2IWA_Damage, L4D2IWA_Bullets, L4D2IWA_ClipSize }; /* A note regarding Clipsize: Any nonstandard value will NOT be in effect at weapon pickup, which means the client has to reload once to achieve the modified value. To fix this, add a weapon pickup hook in your plugin (eg "player_use") and use something like this with a small timer delay of 0.1 seconds or more (dont you love this engine) int weapon = GetPlayerWeaponSlot(client, 0); if (weapon == INVALID_ENT_REFERENCE) return; char class[56]; GetEdictClassname(weapon, class, sizeof(class)); SetEntProp(weapon, Prop_Send, "m_iClip1", L4D2_GetIntWeaponAttribute(class, L4D2IWA_ClipSize)); */ enum L4D2FloatWeaponAttributes { L4D2FWA_MaxPlayerSpeed, L4D2FWA_SpreadPerShot, L4D2FWA_MaxSpread, L4D2FWA_SpreadDecay, L4D2FWA_MinDuckingSpread, L4D2FWA_MinStandingSpread, L4D2FWA_MinInAirSpread, L4D2FWA_MaxMovementSpread, L4D2FWA_PenetrationNumLayers, L4D2FWA_PenetrationPower, L4D2FWA_PenetrationMaxDist, L4D2FWA_CharPenetrationMaxDist, L4D2FWA_Range, L4D2FWA_RangeModifier, L4D2FWA_CycleTime, L4D2FWA_PelletScatterPitch, L4D2FWA_PelletScatterYaw }; enum L4D2BoolMeleeWeaponAttributes { L4D2BMWA_Decapitates }; enum L4D2IntMeleeWeaponAttributes { L4D2IMWA_DamageFlags, L4D2IMWA_RumbleEffect }; enum L4D2FloatMeleeWeaponAttributes { L4D2FMWA_Damage, L4D2FMWA_RefireDelay, L4D2FMWA_WeaponIdleTime }; /** * @brief Checks for a given weapon string to exist in the WeaponInformationDatabase * @remarks Throws an error if Database is unavailable * * @param weaponName Weapon to check up on * @return True if weapon is found, false if not */ native bool L4D2_IsValidWeapon(const char[] weaponName); /** * @brief Read an int-typed attribute for a given weapon from the WeaponInformationDatabase * @remarks Throws an error if the weapon is not found or the attribute is incorrect * * @param weaponName Weapon to lookup attribute for * @param attr Attribute to read from the weapon's info struct * @return The value read. */ native int L4D2_GetIntWeaponAttribute(const char[] weaponName, L4D2IntWeaponAttributes attr); /** * @brief Read a float-typed attribute for a given weapon from the WeaponInformationDatabase * @remarks Throws an error if the weapon is not found or the attribute is incorrect * * @param weaponName Weapon to lookup attribute for * @param attr Attribute to read from the weapon's info struct * @return The value read. */ native float L4D2_GetFloatWeaponAttribute(const char[] weaponName, L4D2FloatWeaponAttributes attr); /** * @brief Set an int-typed attribute for a given weapon from the WeaponInformationDatabase to a given value * @remarks Throws an error if the weapon is not found or the attribute is incorrect * * @param weaponName Weapon to lookup attribute for * @param attr Attribute to alter in the weapon's info struct * @param value Value to set the attribute to * @noreturn */ native void L4D2_SetIntWeaponAttribute(const char[] weaponName, L4D2IntWeaponAttributes attr, int value); /** * @brief Set a float-typed attribute for a given weapon from the WeaponInformationDatabase to a given value * @remarks Throws an error if the weapon is not found or the attribute is incorrect * * @param weaponName Weapon to lookup attribute for * @param attr Attribute to alter in the weapon's info struct * @param value Value to set the attribute to * @noreturn */ native void L4D2_SetFloatWeaponAttribute(const char[] weaponName, L4D2FloatWeaponAttributes attr, float value); /** * @brief Retrieve the index for a given melee weapon from the Melee Weapon Database * @remarks returns -1 if no match is found * * @param weaponName Weapon to lookup index id for * @return The index id */ native int L4D2_GetMeleeWeaponIndex(const char[] weaponName); /** * @brief Read an int-typed attribute for a given id from the Melee Weapon Database * @remarks Throws an error if the id is not found or the attribute is incorrect * * @param id Melee id to lookup attribute for * @param attr Attribute to read from the weapon's info struct * @return The value read. */ native int L4D2_GetIntMeleeAttribute(int id, L4D2IntMeleeWeaponAttributes attr); /** * @brief Read a float-typed attribute for a given id from the Melee Weapon Database * @remarks Throws an error if the id is not found or the attribute is incorrect * * @param id Melee id to lookup attribute for * @param attr Attribute to read from the weapon's info struct * @return The value read. */ native float L4D2_GetFloatMeleeAttribute(int id, L4D2FloatMeleeWeaponAttributes attr); /** * @brief Read a bool-typed attribute for a given id from the Melee Weapon Database * @remarks Throws an error if the id is not found or the attribute is incorrect * * @param id Melee id to lookup attribute for * @param attr Attribute to read from the weapon's info struct * @return The value read. */ native bool L4D2_GetBoolMeleeAttribute(int id, L4D2BoolMeleeWeaponAttributes attr); /** * @brief Set an int-typed attribute for a given id from the Melee Weapon Database to a given value * @remarks Throws an error if the id is not found or the attribute is incorrect * * @param id Melee id to lookup attribute for * @param attr Attribute to alter in the weapon's info struct * @param value Value to set the attribute to * @noreturn */ native void L4D2_SetIntMeleeAttribute(int id, L4D2IntMeleeWeaponAttributes attr, int value); /** * @brief Set a float-typed attribute for a given id from the Melee Weapon Database to a given value * @remarks Throws an error if the id is not found or the attribute is incorrect * * @param id Melee id to lookup attribute for * @param attr Attribute to alter in the weapon's info struct * @param value Value to set the attribute to * @noreturn */ native void L4D2_SetFloatMeleeAttribute(int id, L4D2FloatMeleeWeaponAttributes attr, float value); /** * @brief Set a bool-typed attribute for a given id from the Melee Weapon Database to a given value * @remarks Throws an error if the id is not found or the attribute is incorrect * * @param id Melee id to lookup attribute for * @param attr Attribute to alter in the weapon's info struct * @param value Value to set the attribute to * @noreturn */ native void L4D2_SetBoolMeleeAttribute(int id, L4D2BoolMeleeWeaponAttributes attr, bool value);