View Single Post
Author Message
Unalloyed
New Member
Join Date: Aug 2012
Old 08-17-2012 , 10:43   WEAPON for admins only
Reply With Quote #1

Im using this mod http://forums.alliedmods.net/showthread.php?p=363037


From the original wpn_distruptor, I tried to change the code around so that the person needs to pass an admin check for the flag ADMIN_KICK..But all players can buy that weapon .Please Help
Code:
/* WeaponMod Weapon
 * 
 * (c) Copyright 2006, DevconeS
 * This file is provided as is (no warranties).
 * 
 */

#include <amxmodx>
#include <fakemeta>
#include <weaponmod>
#define ADMINLEVEL        ADMIN_KICK


new PLUGIN[] = "WPN DISRUPTOR"
new VERSION[] = "5.1"
new AUTHOR[] = "DevconeS"
new WPN_NAME[] = "The DISRUPTOR(\rAdmin only)"
new WPN_SHORT[] = "dis"

new P_MODEL[] = "models/wpnmod/p_dis.mdl"
new V_MODEL[] = "models/wpnmod/v_dis.mdl"
new W_MODEL[] = "models/wpnmod/w_dis.mdl"

new BULLETS_PER_SHOT[] = {1, 30}
new ROCKET_MDL[][] = {"sprites/gargeye1.spr", "sprites/3dmflared.spr"}
new ROCKET_SOUND[][] = {"wpnmod/dis_fire_8b44k_v2.wav", "wpnmod/dis_nuke_8b44k.wav"}

new ROCKET_CLASSNAME[][] = {"wpn_disrupor_1", "wpn_disruptor_2"}
new ROCKET_SPEED[] = {2200, 450}
new ROCKET_EXPLOSION[][] = {"sprites/wpnmod/dis.spr", "sprites/wpnmod/dis_nuke.spr"}
new ROCKET_TRAIL_COLOR[][3] = {{255, 255, 255}, {255, 255, 0}}
new Float:ROCKET_RADIUS[] = {175.0, 1500.0}
new Float:ROCKET_DAMAGE[] = {250.0, 5000.0}

// Sequences
enum
{
    anim_idle1,
    anim_idle2,
    anim_spinup,
    anim_spindown,
    anim_spin,
    anim_fire,
    anim_draw,
    anim_holster1
}

new g_wpnid
new g_trail,g_explosion[2]

public plugin_precache() {
    precache_model(P_MODEL)
    precache_model(V_MODEL)
    precache_model(W_MODEL)

    precache_model(ROCKET_MDL[0])
    precache_model(ROCKET_MDL[1])
    precache_sound(ROCKET_SOUND[0])
    precache_sound(ROCKET_SOUND[1])

    g_trail= precache_model("sprites/gwave1.spr")
    g_explosion[0] = precache_model(ROCKET_EXPLOSION[0])
    g_explosion[1] = precache_model(ROCKET_EXPLOSION[1])
}




public plugin_init() {
    register_plugin(PLUGIN,VERSION,AUTHOR)
    register_forward(FM_Touch,"fwd_Touch")
    create_weapon()
}


public wpn_event_post(player,wpnid,wpn_event:event,params[])
{
    new bool:Check = false
    
    
    switch(wpn_event)
    {
        case event_draw: 
            Check = true
        case event_pickup:
            Check = true
        default:
            Check = false
    }
    if(Check)
    {
        if((get_user_flags(player) & ADMINLEVEL))
            return PLUGIN_CONTINUE
        else
            return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}    

public onlyadmin(id)   
{
    if ((get_user_flags(id) & ADMINLEVEL))
{
return PLUGIN_HANDLED
}
else
{
client_print(id, print_console, "only admin")
}
return PLUGIN_CONTINUE
} 
 
public create_weapon() {
    new wpnid = wpn_register_weapon(WPN_NAME,WPN_SHORT)
    if(wpnid == -1) return PLUGIN_CONTINUE
    wpn_set_string(wpnid,wpn_viewmodel,V_MODEL)
    wpn_set_string(wpnid,wpn_weaponmodel,P_MODEL)
    wpn_set_string(wpnid,wpn_worldmodel,W_MODEL)
    
    wpn_register_event(wpnid,event_attack1,"ev_attack1")
    wpn_register_event(wpnid,event_attack2,"ev_attack2")
    wpn_register_event(wpnid,event_draw,"ev_draw")
    wpn_register_event(wpnid,event_reload,"ev_reload")

    wpn_set_float(wpnid,wpn_refire_rate1,0.35)
    wpn_set_float(wpnid,wpn_refire_rate2,2.0)
    wpn_set_float(wpnid,wpn_reload_time,6.0)
    wpn_set_float(wpnid,wpn_recoil1,4.0)
    wpn_set_float(wpnid,wpn_run_speed,350.0)

    wpn_set_integer(wpnid,wpn_ammo1,45)
    wpn_set_integer(wpnid,wpn_ammo2,45)
    wpn_set_integer(wpnid,wpn_bullets_per_shot1,BULLETS_PER_SHOT[0])
    wpn_set_integer(wpnid,wpn_bullets_per_shot2,BULLETS_PER_SHOT[1])
    wpn_set_integer(wpnid,wpn_cost,0)

    g_wpnid = wpnid
    return PLUGIN_CONTINUE
} 

// vector_to_angle port 
stock vec_to_angle(Float:vector[3],Float:output[3]) {
    new Float:angles[3]
    engfunc(EngFunc_VecToAngles, vector, angles) 
    output[0] = angles[0] 
    output[1] = angles[1] 
    output[2] = angles[2] 
} 

public ev_attack1(id) {
    return fire_rocket(id, 0);
}

public ev_attack2(id) {
    return fire_rocket(id, 1);
}

fire_rocket(id, type)
{
    wpn_playanim(id,random_num(anim_fire,anim_idle1))
    
    new rocket = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
    if(!rocket) return PLUGIN_CONTINUE
    
    // Strings
    set_pev(rocket,pev_classname,ROCKET_CLASSNAME[type])
    engfunc(EngFunc_SetModel,rocket,ROCKET_MDL[type])
    
    // Integer
    set_pev(rocket,pev_owner,id)
    set_pev(rocket,pev_movetype,MOVETYPE_FLY)
    set_pev(rocket,pev_solid,SOLID_BBOX)
    set_pev(rocket,pev_rendermode,kRenderTransAdd)
    set_pev(rocket,pev_renderamt,255.0)
        
    // Floats
    set_pev(rocket,pev_mins,Float:{-1.0,-1.0,-1.0})
    set_pev(rocket,pev_maxs,Float:{1.0,1.0,1.0})
    
    new Float:fStart[3]
    wpn_projectile_startpos(id,40,0,0,fStart)
    set_pev(rocket,pev_origin,fStart)
    
    new Float:fVel[3]
    velocity_by_aim(id,ROCKET_SPEED[type],fVel)
    set_pev(rocket,pev_velocity,fVel)
    
    new Float:fAngles[3]
    vec_to_angle(fVel,fAngles)
    set_pev(rocket,pev_angles,fAngles)
    
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(TE_BEAMFOLLOW)    // Temp entity type
    write_short(rocket)        // entity
    write_short(g_trail)    // sprite index
    write_byte(25)    // life time in 0.1's
    write_byte(5)    // line width in 0.1's
    write_byte(ROCKET_TRAIL_COLOR[type][0])    // red (RGB)
    write_byte(ROCKET_TRAIL_COLOR[type][1])    // green (RGB)
    write_byte(ROCKET_TRAIL_COLOR[type][2])    // blue (RGB)
    write_byte(255)    // brightness 0 invisible, 255 visible
    message_end()
    
    emit_sound(rocket, CHAN_WEAPON, ROCKET_SOUND[type], 1.0, ATTN_NORM, 0, PITCH_NORM)
    
    return PLUGIN_CONTINUE
}

public ev_reload(id)
    wpn_playanim(id, anim_spindown)

public ev_draw(id)
    wpn_playanim(id,anim_draw) 

public fwd_Touch(ptr, ptd) {
    if(pev_valid(ptr)) {
        static classname[32]
        pev(ptr,pev_classname,classname,31)

        if(equal(classname,ROCKET_CLASSNAME[0])) {
            create_explosion(ptr, ptd, 0)
        } else if(equal(classname,ROCKET_CLASSNAME[1])) {
            create_explosion(ptr, ptd, 1)
        }
    }
}

create_explosion(ptr, ptd, type)
{
    new Float:fOrigin[3]
    pev(ptr,pev_origin,fOrigin)
    
    engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fOrigin, 0)
    write_byte(TE_EXPLOSION)
    engfunc(EngFunc_WriteCoord, fOrigin[0])
    engfunc(EngFunc_WriteCoord, fOrigin[1])
    engfunc(EngFunc_WriteCoord, fOrigin[2])
    write_short(g_explosion[type])
    write_byte(30)
    write_byte(15)
    write_byte(0)
    message_end()

    new attacker = pev(ptr,pev_owner)
    wpn_radius_damage(g_wpnid,attacker,ptr,ROCKET_RADIUS[type],ROCKET_DAMAGE[type],DMG_BLAST)
    if(pev_valid(ptd)) {
        new classname[32]
        pev(ptd,pev_classname,classname,31)

        if(equal(classname,"func_breakable"))
            dllfunc(DLLFunc_Use,ptd,ptr)
    }
    set_pev(ptr,pev_flags,FL_KILLME)
}
I colored my parts black
Unalloyed is offline