/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <engine> 
#include <fakemeta> 

#define PLUGIN "Ballesta"
#define VERSION "1.0"
#define AUTHOR "Zapdos1"
#define CSW_AWP        18

new VIEW_MODEL[]        = "models/crossbow/v_ballesta.mdl" 
new PLAYER_MODEL[]        = "models/crossbow/p_ballesta.mdl" 
new WORLD_MODEL[]    = "models/crossbow/w_ballesta.mdl"

new OLDWORLD_MODEL[]    = "models/crossbow/w_ballesta.mdl" // el world model que quieres reemplasar por el que esta mas arriba

new PLUGIN_NAME[]    = "Ballesta" 
new PLUGIN_AUTHOR[]         = "Zapdos1" 
new PLUGIN_VERSION[]        = "1.0" 

public plugin_init() 
{
    // Info del Plugin
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)     
    
    // Evento CurWeapon, cuando un player activa/pone/selecciona un arma
    register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
    
    // Evento (FAKEMETA) en el cual se setean Models (claramente el mismo evento lo dice)
    register_forward(FM_SetModel, "fw_SetModel")
} 

public plugin_precache() 
{    
    // Haciendo Precache de los Models
    precache_model(VIEW_MODEL)     
    precache_model(PLAYER_MODEL) 
    precache_model(WORLD_MODEL)
} 

public Event_CurWeapon(id) 
{     
    // obtenemos la ID del arma que porta el jugador
    new weaponID = read_data(2) 
    
    // ejemplo: si el arma no es la AK-47, detenemos la operacion
    if(weaponID != CSW_AWP)
        return PLUGIN_CONTINUE
    
    // aplicamos el View Model (el que el user tiene en sus manos)
    entity_set_string(id, EV_SZ_viewmodel, VIEW_MODEL)   // ENGINE
    
    // aplicamos el Player Model (el que los demas users Ven que tiene el user en sus manos)
    entity_set_string(id, EV_SZ_weaponmodel, PLAYER_MODEL) // ENGINE
    
    return PLUGIN_CONTINUE 
}

public fw_SetModel(entity, model[])
{
    // detectamos si la entidad es correcta/sin errores, de no ser asi, detenemos la operacion
    if(!is_valid_ent(entity)) // ENGINE
        return FMRES_IGNORED
    
    // detectamos si el Model ES como el que queremos reemplasar, de no ser asi, detenemos la operacion
    if(!equali(model, OLDWORLD_MODEL)) 
        return FMRES_IGNORED
    
    // Obtenemos el Classname de la Entidad
    new className[33]
    entity_get_string(entity, EV_SZ_classname, className, 32) // ENGINE
    
    // Detectamos si los Classnames son equivalentes a la de un arma
    
    // "weaponbox": Arma botada 
    // "armoury_entity": Arma botada por el Mapa en si
    // "grenade": Granada, C4
    
    if(equal(className, "weaponbox") || equal(className, "armoury_entity") || equal(className, "grenade"))
    {
        // seteamos el World Model (el que esta botado en el piso)
        entity_set_model(entity, WORLD_MODEL) // ENGINE
        return FMRES_SUPERCEDE
    }
    
    return FMRES_IGNORED
}
