#if defined _auw_included
    #endinput
#endif
#define _auw_included
#if 1
    #define __auw__native_str__get_weapon_uid        "auw_get_weapon_uid"
    #define __auw__native_str__give_weapon            "auw_give_weapon"
    #define __auw__native_str__valid_weapon            "auw_valid_weapon"
    #define __auw__native_str__get_weapons_data        "auw_get_weapons_data"
    #define __auw__native__auw_get_weapon_uid        auw_get_weapon_uid
    #define __auw__native__auw_give_weapon            auw_give_weapon
    #define __auw__native__auw_valid_weapon            auw_valid_weapon
    #define __auw__native__auw_get_weapons_data        auw_get_weapons_data
#endif
#define AUW_IMPULSE_OFFSET 128381
enum _:eAUWData
{
    eAUWData_WEAPON_REFERENCE[32],
    WeaponIdType: eAUWData_WEAPON_ID,
    InventorySlotType: eAUWData_WEAPON_SLOT,
    eAUWData_MENU_NAME_ITEM[64],
    eAUWData_WEAPON_COST,
    eAUWData_WEAPON_AMMO,
    eAUWData_WEAPON_BPAMMO,
    Float: eAUWData_WEAPON_DAMAGE,
    eAUWData_WEAPON_ALLOW_ROUND,
    eAUWData_WEAPON_TRACE,
    eAUWData_MENU_WEAPON_ADD,
    eAUWData_WEAPON_ACCESS_FLAGS,
    eAUWData_WEAPON_MODEL_VIEW[64],
    eAUWData_WEAPON_MODEL_PLAYER[64],
    eAUWData_WEAPON_MODEL_WORLD[64]
};
enum eAUWForwards
{
    eAUWForwards_OnGiveItemPre,
    eAUWForwards_OnParseEnd,
};
enum eAUWWeaponIdReturn
{
    eAUWWeaponIdReturn_InvalidId = -1
};
enum eAUWGiveItemTypes
{
    eAUWGiveItemTypes_AdminCmd,
    eAUWGiveItemTypes_PlayerCmd,
    eAUWGiveItemTypes_Native,
    eAUWGiveItemTypes_ShopMenu
};
/**
* Retrieves UID by weapon name
*
* @param sWeaponName                Weapon Name
* @param iUidWithOffset                Is UID contain internal offset
* @return                            UID otherwise eAUWWeaponIdReturn_InvalidId
*/
native __auw__native__auw_get_weapon_uid(const sWeaponName[], const bool: iUidWithOffset = true);
/**
* Give weapon by weapon name
*
* @param iPlayer                    id
* @param sWeaponName                Weapon Name
* @param notification                Show chat notification's
* @param uid                        Weapon UID
* @param iUidWithOffset                Is UID contain internal offset
* @param iBuy                        Buy
*
* @return                            true/false
*/
native __auw__native__auw_give_weapon(iPlayer, const sWeaponName[], const bool: notification = true, const uid = -1, const iUidWithOffset = true, const iBuy = 0);
/**
* Checks if the weapon is custom
*
* @param iItem                        Weapon Index
* @param iKey                        UID
* @param iKeyWithOffset                Is UID contain internal offset
*
* @return                            true/false
*/
native __auw__native__auw_valid_weapon(iItem, iKey, const bool: iKeyWithOffset = true);
/**
* Writes weapon data to array
*
* @param iKey                        UID
* @param aData                        Array Data
* @param iKeyWithOffset                Is UID contain internal offset
*
* @return                            true/false
*/
native __auw__native__auw_get_weapons_data(iKey, aData[eAUWData], const bool: iKeyWithOffset = true);
/**
* Called before item given, before any internal checks
*
* Return 0 - to continue, any other values to break
*
* @param eGiveItemType                eAUWGiveItemTypes
* @param iPlayer                    Player index
* @param iWeaponKey                    Weapon raw index (UID - AUW_IMPULSE_OFFSET), can be used with weapons_get_weapons_data + AUW_IMPULSE_OFFSET
* @param iBuy                        Is weapon buying, possible should be deprecated due eAUWGiveItemTypes
*
* @return                            nothing
*/
forward auw_on_give_item_pre(const eAUWGiveItemTypes: eGiveItemType, const iPlayer, const iWeaponKey, const iBuy);
/**
* Called after .ini parsing
*
* @param iCount                        Parsed weapons count
*
* @return                            nothing
*/
forward auw_on_parse_end(const iCount);