View Single Post
Author Message
disawar1
AlliedModders Donor
Join Date: Aug 2011
Location: Russian
Old 07-31-2020 , 08:07   [L4D2] l4d2_weapons.inc
Reply With Quote #1

About:
Provides a set of functions to identify, validate and spawn weapons/melees.

Features:
- Support SourceMod 1.7, 1.11 Transitional Syntax.
- A lot of weapons/melees functions.
- Provides weapons/melees data: ID, names, models etc.

API structure:
Since the weapon_melee class contains its own melees the code has been logically divided into two parts: WEAPON and MELEE.
Both parts have functions to check for garbage value and identify their type of weapon.
The ITEM struct is needed to determine to which type (WEAPON / MELEE) an entity or weapon name belongs.

Usages:
Use L4D2Wep_Identify, L4D2Wep_NameToIDEx for WEAPON and L4D2Wep_IdentifyMelee, L4D2Wep_MeleeNameToID functions for MELEE to identify their ID by entity or class name.
If you want the code work for both types (ITEMS) use L4D2Wep_IdentifyItemByName, L4D2Wep_IdentifyItemByEnt functions to identify (See example).

When you got an WEAPON / MELEE / ITEM ID you can do following things:
- Filter weapon/melee entities.
- Grab info about: model, weapon name, weapon slot index, check for spawn class
- Create any weapons as weapon_ or _spawn class (Fixed pos/angles)
- Create any melees as weapon_melee or weapon_melee_spawn class (Fixed pos/angles)
- Give a weapon/melee to player (based on give cmd)
- Sets a weapon max ammo (based on convars)
- Sets a weapon max ammo to player (based on offsets)

API:
PHP Code:
// Weapons:
void L4D2Wep_Init()
char[] L4D2Wep_GetNameByID(int wepID)
bool L4D2Wep_HasSpawnClass(int wepID)
char[] L4D2Wep_GetModelByID(int wepID)
int L4D2Wep_GetSlotByID(int wepID)
bool L4D2Wep_IsValidID(int wepID)
bool L4D2Wep_HasValidModel(int wepID)
int L4D2Wep_NameToID(char[] weaponName)
int L4D2Wep_NameToIDEx(char[] weaponName)
int L4D2Wep_Identify(int entityint flags IDENTIFY_SAFE)
void L4D2Wep_PrecacheModels()
// Weapons Helpers:
void L4D2Wep_AddSpawnSuffix(char[] weaponNamechar[] storeint len)
void L4D2Wep_RemoveSpawnSuffix(char[] weaponNameint Len 0)
int L4D2Wep_HasSpawnSuffix(char[] weaponName)
bool L4D2Wep_IsValidAndEntity(int entity)
bool L4D2Wep_IsEntity(int entity)
// Meeles:
void L4D2Wep_InitMelees()
char L4D2Wep_GetMeleeNameByID(int meleepID)
char L4D2Wep_GetMeleeModelByID(int meleepID)
bool L4D2Wep_IsValidMeleeID(int meleeID)
int L4D2Wep_MeleeNameToID(char[] meleeName)
int L4D2Wep_IdentifyMelee(int entityint flags IDENTIFY_SAFE)
void L4D2Wep_OnMapStart()
bool L4D2Wep_IsValidMelee(char[] meleeName)
bool L4D2Wep_IsValidMeleeIDEx(int meleeID)
void L4D2Wep_PrecacheMeleeModels()
// Items:
int L4D2Wep_IdentifyItemByEnt(int entityint &anyID 0int flags IDENTIFY_SAFE)
int L4D2Wep_IdentifyItemByName(char[] anyNameint &anyID 0)
int L4D2Wep_IdentifyEquipSlot(int entity)
bool L4D2Wep_IsValidItemAndID(int anyIDint itemType)
bool L4D2Wep_IsItemNoneID(int anyIDint itemType)
bool L4D2Wep_IsValidItemID(int anyIDint itemType)
void L4D2Wep_GiveItemByName(int clientchar[] weaponName)
void L4D2Wep_GiveItemByID(int clientint anyIDint itemType)
// Ammo:
void L4D2Wep_InitAmmoCvars()
int L4D2Wep_WepIDToAmmoID(int wepID)
int L4D2Wep_GetAmmo(int ammoID)
bool L4D2Wep_SetAmmoByID(int entityint wepID)
int L4D2Wep_WepIDToOffset(int wepID)
int L4D2Wep_GetPlayerAmmo(int client)
bool L4D2Wep_SetPlayerAmmo(int clientint maxAmmo)
// Spawn:
int L4D2Wep_SpawnItem(int anyIDint itemTypefloat origin[3], float angles[3] = {0.0, ...}, bool applyVecFix truebool spawn trueint count 5)
int L4D2Wep_Spawn(int wepIDfloat origin[3], float angles[3] = {0.0, ...}, bool applyVecFix truebool spawn trueint count 5)
int L4D2Wep_SpawnMelee(int meleeIDfloat origin[3], float angles[3] = {0.0, ...}, bool applyVecFix truebool spawn trueint count 5)
int L4D2Wep_ConvertWeaponSpawn(int entityint wepIDint count 5, const char[] model "")
// Fixes:
void L4D2Wep_FixModelVectors(int wepIDfloat origin[3], float angles[3])
void L4D2Wep_FixMeleeModelVectors(int meleeIDfloat origin[3], float angles[3]) 
Note:
l4d2_weapons does not provide a way to unlock weapons, for this goal you may use any known plugins or extensions. However, if you unlock any vanilla weapons like a knife the l4d2_weapons will detect it and support.
If you want to add custom weapons support to l4d2_weapons look at line custom melee for example.

Examples:
l4d2_weapons_test.sp plugin provides examples of how this API can be used.

Credits:
- Forked from MatthewClair/sourcemod-plugins
- Thanks Electr0 for method to detect valid melees via string table.

Source Code:
l4d2_weapons.inc
__________________

Last edited by disawar1; 09-26-2020 at 16:09.
disawar1 is offline