Como quitar la bazooka
#1
Bueno como puedo quitar la bazooka del nemesis en el modo armagedon?
les dejo el code.
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <zombieplague>

/*================================================================================
 [Customizations]
=================================================================================*/

// Rocket Launcher Model
new const nrl_gun_viewmodel[] =         "models/zombie_plague/v_rpg.mdl"
new const nrl_gun_weaponmodel[] =     "models/zombie_plague/p_rpg.mdl"

/*================================================================================

 "v_rpg.mdl" Sequence Nums
    
 Change the next lines IF YOU WANT to add support to the v_rpg.mdl model (default
 Half-Life RPG Model), don't forget to change the models:
    
    * Fire Sequence Num: 3
    * Draw Sequence Num: 5
    
=================================================================================*/

// View Model Animations
new const nrl_model_seq_fire 8    // Model Fire Sequence Num
new const nrl_model_seq_draw 3    // Model Draw Sequence Num

/*================================================================================

 *** This is optional ***
 
 If your model has a "Reload" Animation, you can put here his Sequence Num,
 whatever, you can disable it writing "-1".
 
 "v_rpg.mdl" Model Reload Sequence Num is "2"
 
=================================================================================*/

// Optional Reload Animation
new const nrl_model_seq_reload = -1

// Write here the aproximately num of the Reload Animation, 
// this can modify the launch fire rate. The "v_rpg.mdl" 
// aproximately reload animation time it's 2.0
const Float:nrl_reload_seq_time 0.0

/*================================================================================
    
 By default, the Sequence Nums are from the v_stinger_frk14.mdl Model, change only
 if you want. Just in Case, here is the v_stinger_frk14.mdl Sequence Nums:
    
    * Fire Sequence Num: 8
    * Draw Sequence Num: 3
    * Reload Sequence Num: -1 (Null)
    
 The "Idle" Sequence is always the 0.

=================================================================================*/

// Admin Flag (to access to the admin privileges)
const ACCESS_FLAG ADMIN_BAN 

// Customizable config file (into the configs folder)
new const nrl_config_file[] =         "zombieplague/zp_extension_nrl.cfg"

// Models
new const nrl_rocketmodel[] =         "models/zombie_plague/rpgrocket.mdl"     // Rocket Model

// Sprites
new const nrl_explosion_sprite[] =     "sprites/zerogxplode.spr"     // Explosion Sprite
new const nrl_ring_sprite[] =         "sprites/shockwave.spr"     // Ring Explosion Sprite
new const nrl_trail_sprite[] =         "sprites/xbeam3.spr"         // Rocket Follow Sprite

// Sounds
new const nrl_rocketlaunch_sound[][] =     // Rocket Launch Sound

    
"weapons/rocketfire1.wav" 
}

new const 
nrl_norockets_sound[][] =     // When user doesn't have Rockets

    
"weapons/dryfire1.wav" 
}

new const 
nrl_deploy_sound[][] =     // Deploying user NRL
{
    
"items/gunpickup3.wav",
    
"items/gunpickup4.wav" 
}

new const 
nrl_explosion_sound[][] =     // Rocket Explosion Sound
{
    
"weapons/explode3.wav",
    
"weapons/explode4.wav",
    
"weapons/explode5.wav"
}

new const 
nrl_rocketfly_sound[][] =     // Fly sound
{
    
"weapons/rocket1.wav"
}

// Rocket Size
new Float:nrl_rocket_mins[] =     {     -1.0,    -1.0,      -1.0     }
new 
Float:nrl_rocket_maxs[] =     {     1.0,     1.0,     1.0     }

// Colors (in RGB format)        R    G    B
new nrl_trail_colors[3] =     {    255,    0,    0    }    // Rocket trail
new nrl_glow_colors[3] =    {    255,    0,    0    }    // Rocket glow
new nrl_dlight_colors[3] =    {    200,    200,    200    }    // Rocket dynamic light
new nrl_flare_colors[3] =    {    255,    0,    0    }    // Rocket flare
new nrl_ring_colors[3] =    {    200,    200,    200    }    // Rocket ring-explosion

/*================================================================================
 Customization ends here! Yes, that's it. Editing anything beyond
 here is not officially supported. Proceed at your own risk...
=================================================================================*/

// Booleans
new bool:g_bHasNRL[33] = { false, ... }, bool:g_bHoldingNRL[33] = { false, ... }, bool:g_bKilledByRocket[33] = { false, ... }, 
bool:g_bIsAlive[33] = { false, ... }, bool:g_bIsConnected[33] = { false, ... }, bool:g_bRoundEnding false

// Arrays
new Float:g_flNextDeployTime[33] = { 0.0, ...}, Float:g_flNextLaunchTime[33] = { 0.0, ...}, 
g_iRocketAmount[33] = { 0, ...}, g_iCurrentWeapon[33] = { 0, ...}, g_szStatusText[33][32]

// Game vars
new g_sprExplosiong_sprRingg_sprTrailg_iSyncMsgg_iMaxPlayers

// Message IDs vars
new g_msgStatusTextg_msgAmmoPickupg_msgScreenFadeg_msgScreenShakeg_msgSayTextg_msgCurWeapon

// Some constants
const FFADE_IN =         0x0000
const UNIT_SECOND =         (1<<12)
const 
EV_ENT_FLARE =         EV_ENT_euser3
const AMMOID_HEGRENADE =     12
const IMPULSE_SPRAYLOGO =     201

// Offsets
const m_pPlayer =         41
const m_pActiveItem =         373
const m_flTimeWeaponIdle =     48

// Ring Z Axis addition
new Float:g_flRingZAxis_Add[3] = { 425.0 510.0595.0 }

// Cvar Pointers
new cvar_enablecvar_bonushpcvar_buyablecvar_svvelcvar_launchratecvar_launchpushcvar_buyrockets
cvar_explo_radiuscvar_explo_damagecvar_explo_ringscvar_explo_dlightcvar_damage_fadecvar_damage_shake
cvar_rocket_velcvar_rocket_trailcvar_rocket_glowcvar_rocket_dlightcvar_rocket_flarecvar_rocket_grav,
cvar_player_rocketscvar_player_apcostcvar_player_rocketapcostcvar_admin_featurescvar_admin_rockets
cvar_admin_apcostcvar_admin_rocketapcost

// Cached Cvars
enum iPlayers 0iAdmins }

new 
bool:g_bCvar_Enabledbool:g_bCvar_GiveFreebool:g_bCvar_BuyRocketsbool:g_bCvar_AdminFeatures
g_iCvar_DefaultRockets[2], g_iCvar_APCost[2], g_iCvar_RocketAPCost[2]

// Plug info.
#define PLUG_VERSION "2.2"
#define PLUG_AUTH "meTaLiCroSS"

// Macros
#define is_user_valid_alive(%1)     (1 <= %1 <= g_iMaxPlayers && g_bIsAlive[%1])
#define is_user_valid_connected(%1)     (1 <= %1 <= g_iMaxPlayers && g_bIsConnected[%1])

/*================================================================================
 [Init, Precache and CFG]
=================================================================================*/

public plugin_init() 
{
    
// Plugin Info
    
register_plugin("[ZP] Extension: Nemesis Rocket Launcher"PLUG_VERSIONPLUG_AUTH)
    
    
// Lang file
    
register_dictionary("zp_extension_nrl.txt")
    
    
// Events
    
register_event("CurWeapon""event_CurWeapon""be","1=1")    
    
register_event("HLTV""event_RoundStart""a""1=0""2=0")
    
    
// Messages
    
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
    
    
// Fakemeta Forwards
    
register_forward(FM_CmdStart"fw_CmdStart")
    
    
// Engine Forwards
    
register_impulse(IMPULSE_SPRAYLOGO"fw_Impulse")
    
register_touch("nrl_rocket""*""fw_RocketTouch")
    
    
// Ham Forwards
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1)
    
RegisterHam(Ham_Killed"player""fw_PlayerKilled")
    
RegisterHam(Ham_Item_Deploy"weapon_knife""fw_Knife_Deploy_Post"1)
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_knife""fw_Knife_PrimaryAttack")
    
RegisterHam(Ham_Weapon_SecondaryAttack"weapon_knife""fw_Knife_SecondaryAttack")

    
// CVARS - General
    
cvar_enable register_cvar("zp_nemesis_rocket_launcher""1")
    
cvar_bonushp register_cvar("zp_nrl_health_bonus""400")
    
cvar_buyable register_cvar("zp_nrl_give_free""1")
    
cvar_buyrockets register_cvar("zp_nrl_buy_rockets""1")
    
cvar_launchrate register_cvar("zp_nrl_launch_rate""2.0")
    
cvar_launchpush register_cvar("zp_nrl_launch_push_force""60")
    
    
// CVARS - Explosion
    
cvar_explo_radius register_cvar("zp_nrl_explo_radius""500")
    
cvar_explo_damage register_cvar("zp_nrl_explo_maxdamage""300")
    
cvar_explo_rings register_cvar("zp_nrl_explo_rings""1")
    
cvar_explo_dlight register_cvar("zp_nrl_explo_dlight""1")
    
    
// CVARS - Damage
    
cvar_damage_fade register_cvar("zp_nrl_damage_screenfade""1")
    
cvar_damage_shake register_cvar("zp_nrl_damage_screenshake""1")
    
    
// CVARS - Rocket
    
cvar_rocket_vel register_cvar("zp_nrl_rocket_speed""1200")
    
cvar_rocket_trail register_cvar("zp_nrl_rocket_trail""1")
    
cvar_rocket_glow register_cvar("zp_nrl_rocket_glow""1")
    
cvar_rocket_dlight register_cvar("zp_nrl_rocket_dlight""0")
    
cvar_rocket_flare register_cvar("zp_nrl_rocket_flare""1")
    
cvar_rocket_grav register_cvar("zp_nrl_rocket_obeygravity""0")
    
    
// CVARS - Player Options
    
cvar_player_rockets register_cvar("zp_nrl_default_rockets""2")
    
cvar_player_apcost register_cvar("zp_nrl_cost""30")
    
cvar_player_rocketapcost register_cvar("zp_nrl_rocket_cost""15")
    
    
// CVARS - Admin Options
    
cvar_admin_features register_cvar("zp_nrl_admin_features_enable""1")
    
cvar_admin_rockets register_cvar("zp_nrl_admin_default_rockets""4")
    
cvar_admin_apcost register_cvar("zp_nrl_admin_cost""20")
    
cvar_admin_rocketapcost register_cvar("zp_nrl_admin_rocket_cost""8")
    
    
// CVARS - Others
    
cvar_svvel get_cvar_pointer("sv_maxvelocity")
    
    static 
szCvar[30]
    
formatex(szCvarcharsmax(szCvar), "v%s by %s"PLUG_VERSIONPLUG_AUTH)
    
register_cvar("zp_extension_nrl"szCvarFCVAR_SERVER|FCVAR_SPONLY)
    
    
// Say commands
    
register_say_command("nrlshop""cmd_nrlshop")
    
register_say_command("nrlhelp""cmd_nrlhelp")

    
// Vars
    
g_iSyncMsg CreateHudSyncObj()
    
g_iMaxPlayers get_maxplayers()
    
    
// Message IDs
    
g_msgSayText get_user_msgid("SayText")
    
g_msgCurWeapon get_user_msgid("CurWeapon")
    
g_msgAmmoPickup get_user_msgid("AmmoPickup")
    
g_msgStatusText get_user_msgid("StatusText")
    
g_msgScreenFade get_user_msgid("ScreenFade")
    
g_msgScreenShake get_user_msgid("ScreenShake")
}

public 
plugin_precache()
{
    
// Models
    
precache_model(nrl_rocketmodel)
    
precache_model(nrl_gun_viewmodel)
    
precache_model(nrl_gun_weaponmodel)
    
    
// Sounds
    
static i
    
for(0sizeof nrl_rocketlaunch_soundi++)
        
precache_sound(nrl_rocketlaunch_sound[i])
    for(
0sizeof nrl_norockets_soundi++)
        
precache_sound(nrl_norockets_sound[i])
    for(
0sizeof nrl_deploy_soundi++)    
        
precache_sound(nrl_deploy_sound[i])
    for(
0sizeof nrl_explosion_soundi++)    
        
precache_sound(nrl_explosion_sound[i])
    for(
0sizeof nrl_rocketfly_soundi++)    
        
precache_sound(nrl_rocketfly_sound[i])
    
    
precache_sound("items/gunpickup2.wav")
    
precache_sound("ambience/particle_suck2.wav")
    
    
// Sprites
    
g_sprRing precache_model(nrl_ring_sprite)
    
g_sprExplosion precache_model(nrl_explosion_sprite)
    
g_sprTrail precache_model(nrl_trail_sprite)
    
precache_model("sprites/animglow01.spr")
}

public 
plugin_cfg()
{
    
// Get config file
    
static szPath[64]
    
get_configsdir(szPathcharsmax(szPath))
    
format(szPathcharsmax(szPath), "%s/%s"szPathnrl_config_file)
    
    
// Config file exists
    
if(!file_exists(szPath))
    {
        
// Log message
        
log_amx("%L"LANG_SERVER"NRL_CFGFILE_ERROR"szPath)
    }
    else
    {
        
// Execute config file
        
server_cmd("exec %s"szPath)
    }
    
    
// Now we can cache the cvars, because config file has read
    
set_task(0.5"cache_cvars")
}

/*================================================================================
 [Zombie Plague Forwards]
=================================================================================*/

public zp_user_infected_post(idinfector)
{
    
// User is Nemesis
    
if(zp_get_user_nemesis(id))
    {
        
// Plugin enabled
        
if(g_bCvar_Enabled
        {
            
// Check cvar
            
if(g_bCvar_GiveFree// Free
            
{
                
// Give gun
                
set_user_nrlauncher(id1)
            }
            
// User must buy
            
else 
            {
                
// Reset Vars
                
set_user_nrlauncher(id0)
                
                
// Messages
                
set_task(1.5"nrl_hudmessage"id)
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_BUY")
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_HELP")
            }
        }
    }
    
// is Zombie
    
else
    {
        
// Reset Vars
        
set_user_nrlauncher(id0)
    }
}

public 
zp_user_humanized_post(id)
{
    
// Reset Vars
    
set_user_nrlauncher(id0)
}

public 
zp_round_ended(team)
{
    
// Remove all the rockets in the map
    // remove_rockets_in_map()
    
set_task(0.1"remove_rockets_in_map")
    
    
// Update var
    
g_bRoundEnding true
}

/*================================================================================
 [Public Functions]
=================================================================================*/

public reset_user_knife(id)
{
    
// Latest version support
    
ExecuteHamB(Ham_Item_Deployfind_ent_by_owner(FM_NULLENT"weapon_knife"id)) // v4.3 Support
    
    // Updating Model
    
engclient_cmd(id"weapon_knife")
    
emessage_begin(MSG_ONEg_msgCurWeapon_id)
    
ewrite_byte(1// active
    
ewrite_byte(CSW_KNIFE// weapon
    
ewrite_byte(0// clip
    
emessage_end()
}

public 
cache_cvars()
{
    
// Cache some cvars
    
g_bCvar_Enabled bool:get_pcvar_num(cvar_enable)
    
g_bCvar_AdminFeatures bool:get_pcvar_num(cvar_admin_features)
    
g_bCvar_GiveFree bool:get_pcvar_num(cvar_buyable)
    
g_bCvar_BuyRockets bool:get_pcvar_num(cvar_buyrockets)
    
g_iCvar_DefaultRockets[iPlayers] = get_pcvar_num(cvar_player_rockets)
    
g_iCvar_DefaultRockets[iAdmins] = get_pcvar_num(cvar_admin_rockets)
    
g_iCvar_APCost[iPlayers] = get_pcvar_num(cvar_player_apcost)
    
g_iCvar_APCost[iAdmins] = get_pcvar_num(cvar_admin_apcost)
    
g_iCvar_RocketAPCost[iPlayers] = get_pcvar_num(cvar_player_rocketapcost)
    
g_iCvar_RocketAPCost[iAdmins] = get_pcvar_num(cvar_admin_rocketapcost)
}

public 
status_text(id)
{
    
// Format text
    
formatex(g_szStatusText[id], charsmax(g_szStatusText[]), ""id"NRL_STATUS_TEXT"g_iRocketAmount[id])
    
    
// Show
    
message_begin(MSG_ONEg_msgStatusText_id)
    
write_byte(0)
    
write_string((zp_get_user_nemesis(id) && g_bIsAlive[id] && g_bHoldingNRL[id] && g_iCurrentWeapon[id] == CSW_KNIFE) ? g_szStatusText[id] : "")
    
message_end()
}

/*================================================================================
 [Client Commands]
=================================================================================*/

public cmd_nrlshop(id)
{
    
// Show shop menu
    
show_buy_menu(id)
}

public 
cmd_nrlhelp(id)
{
    
// Show help menu
    
show_help_menu(id)
}

/*================================================================================
 [Menus]
=================================================================================*/    

public show_buy_menu(id)
{
    if(!
zp_get_user_nemesis(id) || !g_bIsAlive[id] || !g_bCvar_Enabled)
    {
        
client_printcolor(id"/g/y %L"id"NRL_NOT_ACCESS")
        return
    }
    
    
// Some vars
    
static szItem[100], iCostiRocketCostiDefaultRocketsiMenu
    
    
// Admin or Player Cost
    
iCost get_nrl_guncost(id)
    
    
// Admin or Player Rocket Cost
    
iRocketCost get_nrl_rocketcost(id)
    
    
// Get Default Rocket Cost
    
iDefaultRockets get_nrl_defrockets(id)
    
    
// Title
    
formatex(szItemcharsmax(szItem), "\y%L"id"NRL_MENU1_TITLE")
    
iMenu menu_create(szItem"buy_menu_handler")
    
    
// Item 1: Buy a Rocket Launcher
    
if(zp_get_user_ammo_packs(id) >= iCost && !g_bHasNRL[id])
    {
        
formatex(szItemcharsmax(szItem), "\w%L \y(%d %L)"id"NRL_MENU1_ITEM1"iDefaultRocketsiCostid"NRL_AMMOPACKS")
        
menu_additem(iMenuszItem"1")
    }
    else
    {
        
formatex(szItemcharsmax(szItem), "\d%L (%d %L)"id"NRL_MENU1_ITEM1"iDefaultRocketsiCostid"NRL_AMMOPACKS")
        
menu_additem(iMenuszItem"1")
    }
    
    
// Item 2: Buy a Rocket
    
if(g_bHasNRL[id] && g_bCvar_BuyRockets && zp_get_user_ammo_packs(id) >= iRocketCost)
    {
        
formatex(szItemcharsmax(szItem), "\w%L \y(%d %L)^n"id"NRL_MENU1_ITEM2"iRocketCostid"NRL_AMMOPACKS")
        
menu_additem(iMenuszItem"2")
    }
    else
    {
        
formatex(szItemcharsmax(szItem), "\d%L (%d %L)^n"id"NRL_MENU1_ITEM2"iRocketCostid"NRL_AMMOPACKS")
        
menu_additem(iMenuszItem"2")
    }
    
    
// Item 3: Help
    
formatex(szItemcharsmax(szItem), "\w%L"id"NRL_MENU1_ITEM3")
    
    
// Using "menu_addtext" can do some runtime errors in
    // old amxx versions, so i am going to hack this string
    // with the admin message
    
if((get_user_flags(id) & ACCESS_FLAG) && g_bCvar_AdminFeatures)
    {
        
// Save the completely text
        
new szLangText[64]
        
formatex(szLangTextcharsmax(szLangText),"^n^n\y%L^n"id"NRL_ADMIN_MSG")
        
        
// String modification
        
add(szItemcharsmax(szItem), szLangText)
    }
    
    
// Add the help item
    
menu_additem(iMenuszItem"3")
    
    
// Exit
    
formatex(szItemcharsmax(szItem), "%L"id"NRL_MENU_EXIT")
    
menu_setprop(iMenuMPROP_EXITNAMEszItem)
    
    
// Display
    
menu_display(idiMenu0)
}

public 
show_help_menu(id)
{
    
// Not enabled?
    
if(!g_bCvar_Enabled)
    {
        
client_printcolor(id"/g/y %L"id"NRL_NOT_ACCESS")
        return
    }
    
    
// A var
    
static szItem[100], iMenu
    
    
// Title
    
formatex(szItemcharsmax(szItem), "\y%L"id"NRL_MENU2_TITLE")
    
iMenu menu_create(szItem"help_menu_handler")
    
    
// Item 1: General
    
formatex(szItemcharsmax(szItem), "\w%L"id"NRL_MENU2_ITEM1")
    
menu_additem(iMenuszItem"1")
    
    
// Item 2: How to get this Gun
    
formatex(szItemcharsmax(szItem), "\w%L"id"NRL_MENU2_ITEM2")
    
menu_additem(iMenuszItem"2")
    
    
// Item 3: Gun Usage
    
formatex(szItemcharsmax(szItem), "\w%L"id"NRL_MENU2_ITEM3")
    
menu_additem(iMenuszItem"3")
    
    
// Item 4: Current Configuration
    
formatex(szItemcharsmax(szItem), "\w%L"id"NRL_MENU2_ITEM4")
    
menu_additem(iMenuszItem"4")
    
    
// Exit
    
formatex(szItemcharsmax(szItem), "%L"id"NRL_MENU_EXIT")
    
menu_setprop(iMenuMPROP_EXITNAMEszItem)
    
    
// Display
    
menu_display(idiMenu0)
}

/*================================================================================
 [Menu Handlers]
=================================================================================*/

public buy_menu_handler(idmenuitem)
{
    if(
item == MENU_EXIT || !zp_get_user_nemesis(id) || !g_bIsAlive[id] || !g_bCvar_Enabled)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED;
    }
    
    
// Get Data
    
static szData[6], szName[64], iAccessiCallbackiKey
    menu_item_getinfo
(menuitemiAccessszDatacharsmax(szData), szNamecharsmax(szName), iCallback)
    
    
iKey str_to_num(szData)

    switch(
iKey)
    {
        
// Rocket Launcher
        
case 1:
        {
            
// Admin or Player Cost
            
static iCost 
            iCost 
get_nrl_guncost(id)
            
            
// Already has a Rocket Launcher
            
if(g_bHasNRL[id])
            {
                
client_printcolor(id"/g/y %L"id"NRL_ALREADY_HAS")
                
show_buy_menu(id)
                return 
PLUGIN_CONTINUE
            
}
            
            
// Check cost
            
if(zp_get_user_ammo_packs(id) < iCost)
            {
                
client_printcolor(id"/g/y %L"id"NRL_NOT_ENOUGH_AMMO")
                
show_buy_menu(id)
                return 
PLUGIN_CONTINUE;
            }

            
// Give gun
            
set_user_nrlauncher(id1)
            
            
// Set Ammopacks
            
zp_set_user_ammo_packs(idzp_get_user_ammo_packs(id) - iCost)
        }
        
        
// 1 Rocket
        
case 2:
        {
            static 
iRocketCost
            iRocketCost 
get_nrl_rocketcost(id)
            
            
// Has a Rocket Launcher?
            
if(!g_bHasNRL[id])
            {
                
client_printcolor(id"/g/y %L"id"NRL_NEED_NRL")
                
show_buy_menu(id)
                return 
PLUGIN_CONTINUE
            
}
            
            
// Check
            
if(zp_get_user_ammo_packs(id) < iRocketCost)
            {
                
client_printcolor(id"/g/y %L"id"NRL_NOT_ENOUGH_AMMO")
                
show_buy_menu(id)
                return 
PLUGIN_CONTINUE;
            }
            
            
// Option doesn't enabled
            
if(!g_bCvar_BuyRockets)
            {
                
client_printcolor(id"/g/y %L"id"NRL_OPTION_DISABLED")
                
show_buy_menu(id)
                return 
PLUGIN_CONTINUE
            
}
            
            
// Reload animation it's enabled and does not has rockets?
            
if(nrl_model_seq_reload > -&& !g_iRocketAmount[id])
            {
                
// Do reload animation
                
do_reload_animation(id)
                
                
// Modify his next launch rate time
                
g_flNextLaunchTime[id] = halflife_time() + nrl_reload_seq_time
            
}
            
            
// Give 1 Rocket
            
g_iRocketAmount[id]++
            
            
// Flash ammo in hud
            
message_begin(MSG_ONE_UNRELIABLEg_msgAmmoPickup_id)
            
write_byte(AMMOID_HEGRENADE// ammo id
            
write_byte(1// ammo amount
            
message_end()
            
            
// Play clip purchase sound
            
emit_sound(idCHAN_ITEM"items/9mmclip1.wav"1.0ATTN_NORM0PITCH_NORM)
            
            
// Set Ammopacks
            
zp_set_user_ammo_packs(idzp_get_user_ammo_packs(id) - iRocketCost)
        }
        
// Help
        
case 3:
        {
            
show_help_menu(id)
            return 
PLUGIN_CONTINUE
        
}
    }
    
    
// Show again the menu
    
show_buy_menu(id)
    
    return 
PLUGIN_HANDLED
}

public 
help_menu_handler(idmenuitem)
{
    if(
item == MENU_EXIT || !g_bCvar_Enabled)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED;
    }
    
    
// Get Data
    
static szData[6], szHeader[64], szMotd[1500], iAccessiCallbackiLeniKey
    menu_item_getinfo
(menuitemiAccessszDatacharsmax(szData), szHeadercharsmax(szHeader), iCallback// szHeader will be used to format the header
    
    
iLen 0
    iKey 
str_to_num(szData)

    switch(
iKey)
    {
        
// Here is all the help items
        
case 1:
        {
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_TITLE1""[ZP] Extension: Nemesis Rocket Launcher"PLUG_VERSIONPLUG_AUTH)
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_SUBTITLE1_A")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_A"get_pcvar_num(cvar_bonushp))
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_B"idg_bCvar_BuyRockets "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_C"get_pcvar_num(cvar_launchrate) < get_pcvar_num(cvar_launchrate))
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_D"idg_bCvar_AdminFeatures "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            if(!
g_bCvar_AdminFeaturesiLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_E"g_iCvar_DefaultRockets[iPlayers])
            else 
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L %L"id"NRL_MOTD_INFO1_E"g_iCvar_DefaultRockets[iPlayers], id"NRL_MOTD_INFO1_E2"g_iCvar_DefaultRockets[iAdmins])
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_SUBTITLE1_B")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_F"g_iCvar_APCost[iPlayers])
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_G"g_iCvar_RocketAPCost[iPlayers])
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_SUBTITLE1_C"idg_bCvar_AdminFeatures "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_F"g_iCvar_APCost[iAdmins])
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO1_G"g_iCvar_RocketAPCost[iAdmins])
            
            
formatex(szHeadercharsmax(szHeader), "%L"id"NRL_MENU2_ITEM1")
            
show_motd(idszMotdszHeader)
        }
        case 
2:
        {
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_TITLE2")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO2_A")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO2_B"idg_bCvar_GiveFree "NRL_MOTD_INFO2_B1" "NRL_MOTD_INFO2_B2" )
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO2_C")
            
            
formatex(szHeadercharsmax(szHeader), "%L"id"NRL_MENU2_ITEM2")
            
show_motd(idszMotdszHeader)
        }
        case 
3:
        {
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_TITLE3")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO3_A")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO3_B")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO3_C")
            
            
formatex(szHeadercharsmax(szHeader), "%L"id"NRL_MENU2_ITEM3")
            
show_motd(idszMotdszHeader)
        }
        case 
4:
        {
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_TITLE4")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_A"get_pcvar_num(cvar_explo_radius))
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_B"get_pcvar_num(cvar_explo_damage))
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_C"idget_pcvar_num(cvar_explo_rings) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_D"idget_pcvar_num(cvar_explo_dlight) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_E"idget_pcvar_num(cvar_damage_fade) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_F"idget_pcvar_num(cvar_damage_shake) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_G"get_pcvar_num(cvar_rocket_vel))
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_H"idget_pcvar_num(cvar_rocket_trail) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_I"idget_pcvar_num(cvar_rocket_glow) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_J"idget_pcvar_num(cvar_rocket_dlight) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_K"idget_pcvar_num(cvar_rocket_flare) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen"%L "id"NRL_MOTD_INFO4_L"idget_pcvar_num(cvar_rocket_grav) ? "NRL_MOTD_ENABLED" "NRL_MOTD_DISABLED")
            
            
formatex(szHeadercharsmax(szHeader), "%L"id"NRL_MENU2_ITEM4")
            
show_motd(idszMotdszHeader)
        }
    }
    
    
// Show menu again
    
show_help_menu(id)
    
    return 
PLUGIN_HANDLED
}

/*================================================================================
 [Tasks]
=================================================================================*/

public remove_rockets_in_map()
{
    
// Remove Rockets, and a particle effect + sound is emited
    
static iRocket 
    iRocket 
FM_NULLENT
    
    
// Make a loop searching for rockets
    
while((iRocket find_ent_by_class(FM_NULLENT"nrl_rocket")) != 0)
    {
        
// Get rocket origin
        
static Float:flOrigin[3]
        
entity_get_vector(iRocketEV_VEC_originflOrigin)
        
        
// Slow tracers
        
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin0)
        
write_byte(TE_IMPLOSION// TE id
        
engfunc(EngFunc_WriteCoordflOrigin[0]) // x
        
engfunc(EngFunc_WriteCoordflOrigin[1]) // y
        
engfunc(EngFunc_WriteCoordflOrigin[2]) // z
        
write_byte(200// radius
        
write_byte(40// count
        
write_byte(45// duration
        
message_end()
        
        
// Faster particles
        
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin0)
        
write_byte(TE_PARTICLEBURST// TE id
        
engfunc(EngFunc_WriteCoordflOrigin[0]) // x
        
engfunc(EngFunc_WriteCoordflOrigin[1]) // y
        
engfunc(EngFunc_WriteCoordflOrigin[2]) // z
        
write_short(45// radius
        
write_byte(108// particle color
        
write_byte(10// duration * 10 will be randomized a bit
        
message_end()
        
        
// Remove beam
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY_iRocket)
        
write_byte(TE_KILLBEAM// TE id
        
write_short(iRocket// entity
        
message_end()
        
        
// Sound
        
emit_sound(iRocketCHAN_WEAPON"ambience/particle_suck2.wav"VOL_NORMATTN_NORM0PITCH_NORM)
        
emit_sound(iRocketCHAN_VOICE"ambience/particle_suck2.wav"VOL_NORMATTN_NORM0PITCH_NORM)
        
        
// Remove his flare
        
remove_rocket_flare(iRocket)
        
        
// Remove Entity
        
remove_entity(iRocket)
    }
}

public 
nrl_hudmessage(id)
{
    
set_hudmessage(25500, -1.00.2522.010.0)
    
ShowSyncHudMsg(idg_iSyncMsg"%L^n^n%L"idg_bCvar_GiveFree "NRL_HUDMSG_USE" "NRL_HUDMSG_BUY"id"NRL_HUDMSG_HELP")    
}

public 
do_reload_animation(id)
{
    
// Validation check
    
if(!g_bIsAlive[id] || g_iCurrentWeapon[id] != CSW_KNIFE || !zp_get_user_nemesis(id) || !g_bHasNRL[id])
        return
        
    
// User is holding this gun
    
if(g_bHoldingNRL[id])
    {
        
// Play reload animation
        
set_user_weaponanim(idnrl_model_seq_reload)
    }
}

/*================================================================================
 [Main Events/Messages]
=================================================================================*/

public event_CurWeapon(id)
{    
    
// Not alive...
    
if(!g_bIsAlive[id])
        return 
PLUGIN_CONTINUE
        
    
// Updating weapon array
    
g_iCurrentWeapon[id] = read_data(2)
    
    
// Not nemesis
    
if(!zp_get_user_nemesis(id))
        return 
PLUGIN_CONTINUE
        
    
// Doesn't have a NRL
    
if(!g_bHasNRL[id])
        return 
PLUGIN_CONTINUE;
        
    
// Weaponid is Knife
    
if(g_iCurrentWeapon[id] == CSW_KNIFE)
    {
        
// User is holding a Rocket Launcher
        
if(g_bHoldingNRL[id])
        {
            
entity_set_string(idEV_SZ_viewmodelnrl_gun_viewmodel)
            
entity_set_string(idEV_SZ_weaponmodelnrl_gun_weaponmodel)
        }
    }
        
    return 
PLUGIN_CONTINUE
}

public 
event_RoundStart()
{
    
// Remove all the rockets in the map (if exists anyone)
    
remove_rockets_in_map()
    
    
// Cache Cvars
    
cache_cvars()
    
    
// Update var
    
g_bRoundEnding false
}

public 
message_DeathMsg(msg_idmsg_destid)
{
    
// Some vars
    
static iAttackeriVictim
    
    
// Get attacker and victim
    
iAttacker get_msg_arg_int(1)
    
iVictim get_msg_arg_int(2)
    
    
// Non-player attacker or self kill
    
if(!is_user_connected(iAttacker) || iAttacker == iVictim)
        return 
PLUGIN_CONTINUE
        
    
// Killed by an nrl_rocket
    
if(g_bKilledByRocket[iVictim])
    {    
        
// Change "world" with "nrl_rocket"
        
set_msg_arg_string(4"nrl_rocket")
    }
        
    return 
PLUGIN_CONTINUE
}

/*================================================================================
 [Main Forwards]
=================================================================================*/

public client_putinserver(id
{
    
// Reset Vars
    
set_user_nrlauncher(id0)
    
    
// User is connected
    
g_bIsConnected[id] = true
}
    
public 
client_disconnect(id
{
    
// Reset Vars
    
set_user_nrlauncher(id0)
    
    
// Disconnected user is not alive and is not connected
    
g_bIsAlive[id] = false
    g_bIsConnected
[id] = false
}
    
public 
fw_CmdStart(idhandleseed)
{
    
// Valid alive, or isn't nemesis?
    
if(!is_user_valid_alive(id) || !zp_get_user_nemesis(id))
        return 
FMRES_IGNORED;
        
    
// Current weapon isn't knife?
    
if(g_iCurrentWeapon[id] != CSW_KNIFE)
        return 
FMRES_IGNORED
        
    
// Has this gun?
    
if(!g_bHasNRL[id])
        return 
FMRES_IGNORED
        
    
// Get buttons and game time
    
static iButtonFloat:flCurrentTime
    iButton 
get_uc(handleUC_Buttons)
    
flCurrentTime halflife_time()
    
    
// User pressing +attack Button
    
if(iButton IN_ATTACK)
    {
        
// Isn't holding NRL, or round is ending
        
if(!g_bHoldingNRL[id] || g_bRoundEnding)
            return 
FMRES_IGNORED
        
        
// Reset buttons
        
iButton &= ~IN_ATTACK
        set_uc
(handleUC_ButtonsiButton)
        
        
// Launch rate not over yet
        
if(flCurrentTime g_flNextLaunchTime[id])
        {    
            
// Get launch rate float amount
            
new Float:flLaunchRate get_pcvar_float(cvar_launchrate)
            
            
// Set next launch time
            
g_flNextLaunchTime[id] = flCurrentTime flLaunchRate
            
            
// User have Rockets
            
if(g_iRocketAmount[id] > 0)
            {
                
// Launch a Rocket
                
launch_nrl_rocket(id)
                
g_iRocketAmount[id]--
                
                
// Rocket launch push effect
                
launch_push(idget_pcvar_num(cvar_launchpush))
                
                
// Get the aproximately idle time
                
new Float:flAnimReloadTime 1.5
                
                
// Reload animation it's enabled and has rockets?
                
if(nrl_model_seq_reload > -&& g_iRocketAmount[id])
                {
                    
// Add the aproximately reload anim time
                    
flAnimReloadTime += nrl_reload_seq_time
                    
                    
// Do reload animation in 1.5 seconds
                    
set_task(1.5"do_reload_animation"id)
                    
                    
// Launch rate can bug the reload animation
                    
if(flAnimReloadTime flLaunchRate)
                    {
                        
// Modify his next launch rate time
                        
g_flNextLaunchTime[id] = flCurrentTime flAnimReloadTime
                    
}
                }
                
                
// Call idle animation
                
set_pdata_float(get_pdata_cbase(idm_pActiveItem5), m_flTimeWeaponIdleflAnimReloadTime4)
            }
            else
            {
                
// Message
                
client_print(idprint_center" %L"id"NRL_CPRINT_NOROCKETS")
                
                
// Emit Sound
                
emit_sound(idCHAN_VOICEnrl_norockets_sound[random_num(0sizeof nrl_norockets_sound 1)], VOL_NORMATTN_NORM0PITCH_NORM)
            }
        }
        
    }
    
// User pressing +attack2 Button
    
else if(iButton IN_ATTACK2)
    {
        
// Reset buttons
        
iButton &= ~IN_ATTACK2
        set_uc
(handleUC_ButtonsiButton)
        
        
// Deploy rate not over yet
        
if(flCurrentTime g_flNextDeployTime[id])
        {
            
// To Knife / Rocket Launcher
            
change_melee(idg_bHoldingNRL[id])
            
            
// Set next deploy time
            
g_flNextDeployTime[id] = flCurrentTime 1.0
        
}
    }
    
    return 
FMRES_IGNORED;
}

public 
fw_RocketTouch(rockettoucher)
{    
    
// Valid entity
    
if(is_valid_ent(rocket))
    {
        
// Some vars
        
static iVictimiKillsiAttacker
        
static Float:flDamageFloat:flMaxDamageFloat:flDistanceFloat:flFadeAlphaFloat:flRadiusFloat:flVictimHealth
        
static Float:flEntityOrigin[3]
    
        
// Radius
        
flRadius get_pcvar_float(cvar_explo_radius)
            
        
// Max Damage
        
flMaxDamage get_pcvar_float(cvar_explo_damage)
        
        
// Get entity origin
        
entity_get_vector(rocketEV_VEC_originflEntityOrigin)
        
        
// Get attacker
        
iAttacker entity_get_edict(rocketEV_ENT_owner)
    
        
// Create Blast
        
rocket_blast(rocketflEntityOrigin)
    
        
// Prepare vars
        
iKills 0
        iVictim 
= -1
        
        
// Toucher entity is valid and isn't worldspawn?
        
if((toucher 0) && is_valid_ent(toucher))
        {
            
// Get toucher classname
            
static szTchClass[33]
            
entity_get_string(toucherEV_SZ_classnameszTchClasscharsmax(szTchClass))
    
            
// Is a breakable entity?
            
if(equal(szTchClass"func_breakable"))
            {
                
// Destroy entity
                
force_use(rockettoucher)
            }
        
            
// Player entity
            
else if(equal(szTchClass"player") && is_user_valid_alive(toucher))
            {
                
// An human, and not with Godmode
                
if(!zp_get_user_zombie(toucher) && !zp_get_user_survivor(toucher) && entity_get_float(toucherEV_FL_takedamage) != DAMAGE_NO)
                {
                    
// Victim have been killed by a nrl_rocket
                    
g_bKilledByRocket[toucher] = true
                        
                    
// Instantly kill
                    
iKills++
                    
ExecuteHamB(Ham_KilledtoucheriAttacker2)
                    
                    
// We don't need this again
                    
g_bKilledByRocket[toucher] = false
                
}
            }
        }
        
        
// Process explosion
        
while((iVictim find_ent_in_sphere(iVictimflEntityOriginflRadius)) != 0)
        {
            
// Non-player entity
            
if(!is_user_valid_connected(iVictim))
                continue;
                
            
// Alive, zombie or with Godmode
            
if(!g_bIsAlive[iVictim] || (zp_get_user_zombie(iVictim) && iVictim != iAttacker) || entity_get_float(iVictimEV_FL_takedamage) == DAMAGE_NO)
                continue;
            
            
// Get distance between Entity and Victim
            
flDistance entity_range(rocketiVictim)
    
            
// Process damage and Screenfade Alpha
            
flDamage floatradius(flMaxDamageflRadiusflDistance)
            
flFadeAlpha floatradius(255.0flRadiusflDistance)
            
flVictimHealth entity_get_float(iVictimEV_FL_health)
            
            
// Damage is more than 0
            
if(flDamage 0
            {
                
// Be killed, or be damaged
                
if(flVictimHealth <= flDamage
                {
                    
// Victim have been killed by a nrl_rocket
                    
g_bKilledByRocket[iVictim] = true
                    
                    
// Instantly kill
                    
iKills++
                    
ExecuteHamB(Ham_KillediVictimiAttacker2)
                    
                    
// We don't need this again
                    
g_bKilledByRocket[iVictim] = false
                
}    
                else
                {
                    
// Make damage (not using HamB)
                    
ExecuteHam(Ham_TakeDamageiVictimrocketiAttackerflDamageDMG_BLAST)
                    
                    
// Screenfade
                    
if(get_pcvar_num(cvar_damage_fade))
                    {
                        
message_begin(MSG_ONE_UNRELIABLEg_msgScreenFade_iVictim)
                        
write_short(UNIT_SECOND*1// duration
                        
write_short(UNIT_SECOND*1// hold time
                        
write_short(FFADE_IN// fade type
                        
write_byte(200// r
                        
write_byte(0// g
                        
write_byte(0// b
                        
write_byte(floatround(flFadeAlpha)) // alpha
                        
message_end()
                    }
                    
                    
// Screenshake
                    
if(get_pcvar_num(cvar_damage_shake))
                    {
                        
message_begin(MSG_ONE_UNRELIABLEg_msgScreenShake_iVictim)
                        
write_short(UNIT_SECOND*3// amplitude
                        
write_short(UNIT_SECOND*1// duration
                        
write_short(UNIT_SECOND*3// frequency
                        
message_end() 
                    }
                }
            }
        }
    
        
// Valid connected, alive, more than 1 kill, and is nemesis.
        
if(is_user_valid_connected(iAttacker) && g_bIsAlive[iAttacker] && iKills != && zp_get_user_nemesis(iAttacker))
        {
            
// Check Cvar
            
if(get_pcvar_num(cvar_bonushp))
            {
                
// Get health value
                
static iMultValue
                iMultValue 
iKills get_pcvar_num(cvar_bonushp)
                
                
// Give Health
                
entity_set_float(iAttackerEV_FL_healthentity_get_float(iAttackerEV_FL_health) + iMultValue)
                
                
// Get attacker Origin
                
static iOrigin[3]
                
get_user_origin(iAttackeriOrigin)
                
                
// Tracers
                
message_begin(MSG_PVSSVC_TEMPENTITYiOrigin)
                
write_byte(TE_IMPLOSION// TE id
                
write_coord(iOrigin[0]) // x
                
write_coord(iOrigin[1])  // y
                
write_coord(iOrigin[2])  // z
                
write_byte(iKills 100// radius
                
write_byte(iMultValue// count
                
write_byte(5// duration
                
message_end()
                
                
// Message
                
client_print(iAttackerprint_center" %L"iAttacker"NRL_CPRINT_HEALTH"iKillsiMultValue)
            }        
        }
            
        
// Remove rocket flare
        
remove_rocket_flare(rocket)
        
        
// Remove rocket
        
remove_entity(rocket)
    }
}

public 
client_PreThink(id)
{
    
// Appear Status Text with rocket num
    
if(g_bIsAlive[id] && zp_get_user_nemesis(id) && g_bHasNRL[id] && g_bHoldingNRL[id])
        
status_text(id)
}

public 
fw_PlayerKilled(victimattackershouldgib)
{
    
// Victim is not alive
    
g_bIsAlive[victim] = false
    
    
// Victim has holding the Rocket Launcher
    
if(g_bHasNRL[victim]) 
    {
        
// Only remove
        
status_text(victim)
        
        
// Reset Vars
        
set_user_nrlauncher(victim0)
    }
}

public 
fw_Knife_Deploy_Post(knife)
{
    
// Get Owner...
    
static iPlayer 
    iPlayer 
get_pdata_cbase(knifem_pPlayer4)
    
    
// Has our nrl
    
if(is_user_valid_alive(iPlayer) && zp_get_user_nemesis(iPlayer) && g_bHoldingNRL[iPlayer])
    {
        
// Send draw animation
        
set_user_weaponanim(iPlayernrl_model_seq_draw)
        
        
// Next launch time
        
g_flNextLaunchTime[iPlayer] = halflife_time() + 1.5
        
        
return HAM_HANDLED
    
}
    
    return 
HAM_IGNORED
}

public 
fw_Knife_PrimaryAttack(knife)
{
    
// Get Owner...
    
static iPlayer 
    iPlayer 
get_pdata_cbase(knifem_pPlayer4)
    
    
// Block knife Slash when user is holding the Rocket Launcher
    
if(is_user_valid_alive(iPlayer) && zp_get_user_nemesis(iPlayer) && g_bHoldingNRL[iPlayer])
        return 
HAM_SUPERCEDE;
        
    return 
HAM_IGNORED
}

public 
fw_Knife_SecondaryAttack(knife)
{
    
// Get Owner...
    
static iPlayer 
    iPlayer 
get_pdata_cbase(knifem_pPlayer4)
    
    
// Block secondary attack
    
if(is_user_valid_alive(iPlayer) && zp_get_user_nemesis(iPlayer) && g_bHasNRL[iPlayer])
        return 
HAM_SUPERCEDE
        
    
return HAM_IGNORED
}

public 
fw_PlayerSpawn_Post(id)
{
    
// Not alive...
    
if(!is_user_alive(id))
        return 
HAM_IGNORED
        
    
// Player is alive
    
g_bIsAlive[id] = true
    
    
// Remove Rocket Launcher when user is spawned
    
if(g_bHasNRL[id])
    {
        
// Remove center text
        
status_text(id)
        
        
// Reset Vars
        
set_user_nrlauncher(id0)
        
        
// Attempt model to reset
        
reset_user_knife(id)
    }
    
    return 
HAM_IGNORED
}

public 
fw_Impulse(id)
{
    
// User press Spray Button
    
if(zp_get_user_nemesis(id) && g_bIsAlive[id] && g_bCvar_Enabled)
    {
        
// Show NRL Shop
        
show_buy_menu(id)
        
        
// Block spray
        
return PLUGIN_HANDLED
    
}

    return 
PLUGIN_CONTINUE
}

/*================================================================================
 [Internal Functions]
=================================================================================*/

get_nrl_defrockets(id)
{
    return 
g_bCvar_AdminFeatures ? (get_user_flags(id) & ACCESS_FLAG g_iCvar_DefaultRockets[iAdmins] : g_iCvar_DefaultRockets[iPlayers]) : g_iCvar_DefaultRockets[iPlayers]
}

get_nrl_guncost(id)
{
    return 
g_bCvar_AdminFeatures ? (get_user_flags(id) & ACCESS_FLAG g_iCvar_APCost[iAdmins] : g_iCvar_APCost[iPlayers]) : g_iCvar_APCost[iPlayers]
}

get_nrl_rocketcost(id)
{
    return 
g_bCvar_AdminFeatures ? (get_user_flags(id) & ACCESS_FLAG g_iCvar_RocketAPCost[iAdmins] : g_iCvar_RocketAPCost[iPlayers]) : g_iCvar_RocketAPCost[iPlayers]
}

launch_nrl_rocket(id)
{
    
// Fire Effect
    
entity_set_vector(idEV_VEC_punchangleFloat:{ -10.50.00.0 })
    
set_user_weaponanim(idnrl_model_seq_fire
    
    
// Some vars
    
static Float:flOrigin[3], Float:flAngles[3], Float:flVelocity[3]
    
    
// Get position from eyes (agreeing to rocket launcher model)
    
get_user_eye_position(idflOrigin)
    
    
// Get View Angles
    
entity_get_vector(idEV_VEC_v_angleflAngles)
    
    
// Create the Entity
    
new iEnt create_entity("info_target")
    
    
// Set Entity Classname
    
entity_set_string(iEntEV_SZ_classname"nrl_rocket")
    
    
// Set Rocket Model
    
entity_set_model(iEntnrl_rocketmodel)
    
    
// Set Entity Size
    
set_size(iEntnrl_rocket_minsnrl_rocket_maxs)
    
entity_set_vector(iEntEV_VEC_minsnrl_rocket_mins)
    
entity_set_vector(iEntEV_VEC_maxsnrl_rocket_maxs)
    
    
// Set Entity Origin
    
entity_set_origin(iEntflOrigin)
    
    
// Set Entity Angles (thanks to Arkshine)
    
make_vector(flAngles)
    
entity_set_vector(iEntEV_VEC_anglesflAngles)
    
    
// Make a Solid Entity
    
entity_set_int(iEntEV_INT_solidSOLID_BBOX)
    
    
// Set a Movetype
    
entity_set_int(iEntEV_INT_movetypeget_pcvar_num(cvar_rocket_grav) ? MOVETYPE_TOSS MOVETYPE_FLY)
    
    
// Gravity
    
entity_set_float(iEntEV_FL_gravity0.1// Gravity works only if entity movetype is MOVETYPE_TOSS (and anothers)
    
    // Set Entity Owner (Launcher)
    
entity_set_edict(iEntEV_ENT_ownerid)
    
    
// Emit Launch Sound
    
emit_sound(iEntCHAN_VOICEnrl_rocketfly_sound[random_num(0sizeof nrl_rocketfly_sound 1)], VOL_NORMATTN_NORM0PITCH_NORM)
    
emit_sound(iEntCHAN_WEAPONnrl_rocketlaunch_sound[random_num(0sizeof nrl_rocketlaunch_sound 1)], VOL_NORMATTN_NORM0PITCH_NORM)
    
    
// Get velocity result
    
static iVelocityResult
    iVelocityResult 
clamp(get_pcvar_num(cvar_rocket_vel), 50get_pcvar_num(cvar_svvel))
    
    
// Set Entity Velocity
    
velocity_by_aim(idiVelocityResultflVelocity)
    
entity_set_vector(iEntEV_VEC_velocityflVelocity)
    
    
// Glow
    
if(get_pcvar_num(cvar_rocket_glow))
        
set_rendering(iEntkRenderFxGlowShellnrl_glow_colors[0], nrl_glow_colors[1], nrl_glow_colors[2], kRenderNormal50)
        
    
// Flare
    
if(get_pcvar_num(cvar_rocket_flare))
        
entity_set_edict(iEntEV_ENT_FLAREcreate_flare(iEntnrl_flare_colors))
    
    
// Dynamic Light
    
if(get_pcvar_num(cvar_rocket_dlight))
        
entity_set_int(iEntEV_INT_effectsentity_get_int(iEntEV_INT_effects) | EF_BRIGHTLIGHT)    
        
    
// Trail
    
if(get_pcvar_num(cvar_rocket_trail))
    {
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_BEAMFOLLOW// TE id
        
write_short(iEnt// entity:attachment to follow
        
write_short(g_sprTrail// sprite index
        
write_byte(30// life in 0.1's
        
write_byte(3// line width in 0.1's
        
write_byte(nrl_trail_colors[0]) // r
        
write_byte(nrl_trail_colors[1]) // g
        
write_byte(nrl_trail_colors[2]) // b
        
write_byte(200// brightness
        
message_end()
    }
}

change_melee(idbool:to_knife)
{
    
// Update var
    
g_bHoldingNRL[id] = !to_knife
    
    
// Reset the User's knife (attempt model to reset)
    
reset_user_knife(id)
    
    
// Reset Status Text
    
status_text(id)
    
    
// Message
    
client_print(idprint_center" %L"idto_knife "NRL_CHANGED_TO_KNIFE" "NRL_CHANGED_TO_NRL")
    
    
// Sound
    
emit_sound(idCHAN_VOICEnrl_deploy_sound[random_num(0sizeof nrl_deploy_sound 1)], VOL_NORMATTN_NORM0PITCH_NORM)
}

create_flare(rocketiRGB[3]) // Thanks to hlstriker for the code!
{
    
// Entity
    
new iEnt create_entity("env_sprite")
    
    
// Is a valid Entity
    
if(!is_valid_ent(iEnt))
        return 
0
        
    
// Set Model
    
entity_set_model(iEnt"sprites/animglow01.spr")
    
    
// Set Classname
    
entity_set_string(iEntEV_SZ_classname"nrl_rocket_flare")
    
    
// Sprite Scale (size)
    
entity_set_float(iEntEV_FL_scale0.7)
        
    
// Entity Spawn Flags
    
entity_set_int(iEntEV_INT_spawnflagsSF_SPRITE_STARTON)
    
    
// Solid style
    
entity_set_int(iEntEV_INT_solidSOLID_NOT)
    
    
// Entity Movetype
    
entity_set_int(iEntEV_INT_movetypeMOVETYPE_FOLLOW)
    
    
// Entity aiment
    
entity_set_edict(iEntEV_ENT_aimentrocket)
    
    
// His owner
    
entity_set_edict(iEntEV_ENT_ownerrocket)
    
    
// Animation frame rate
    
entity_set_float(iEntEV_FL_framerate25.0)
    
    
// Color
    
set_rendering(iEntkRenderFxNoneiRGB[0], iRGB[1], iRGB[2], kRenderTransAdd255)
    
    
// Now the entity need to be spawned
    
DispatchSpawn(iEnt)

    return 
iEnt
}

rocket_blast(entityFloat:flOrigin[3])
{
    
// Explosion
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin0)
    
write_byte(TE_EXPLOSION// TE id
    
engfunc(EngFunc_WriteCoordflOrigin[0]) // x
    
engfunc(EngFunc_WriteCoordflOrigin[1]) // y
    
engfunc(EngFunc_WriteCoordflOrigin[2]) // z
    
write_short(g_sprExplosion)    // sprite index
    
write_byte(120)    // scale in 0.1's    
    
write_byte(10)    // framerate    
    
write_byte(TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NODLIGHTS// flags
    
message_end() 
    
    
// Stop rocket fly sound with new explosion sound
    
emit_sound(entityCHAN_WEAPONnrl_explosion_sound[random_num(0sizeof nrl_explosion_sound 1)], VOL_NORMATTN_NORM0PITCH_NORM)
    
emit_sound(entityCHAN_VOICEnrl_explosion_sound[random_num(0sizeof nrl_explosion_sound 1)], VOL_NORMATTN_NORM0PITCH_NORM)
    
    
// World Decal
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin0)
    
write_byte(TE_WORLDDECAL// TE id
    
engfunc(EngFunc_WriteCoordflOrigin[0]) // x
    
engfunc(EngFunc_WriteCoordflOrigin[1]) // y
    
engfunc(EngFunc_WriteCoordflOrigin[2]) // z
    
write_byte(random_num(4648)) // texture index of precached decal texture name
    
message_end() 

    
// Rings
    
if(get_pcvar_num(cvar_explo_rings))
    {
        static 
j
        
for(03j++)
        {
            
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin0)
            
write_byte(TE_BEAMCYLINDER// TE id
            
engfunc(EngFunc_WriteCoordflOrigin[0]) // x
            
engfunc(EngFunc_WriteCoordflOrigin[1]) // y
            
engfunc(EngFunc_WriteCoordflOrigin[2]) // z
            
engfunc(EngFunc_WriteCoordflOrigin[0]) // x axis
            
engfunc(EngFunc_WriteCoordflOrigin[1]) // y axis
            
engfunc(EngFunc_WriteCoordflOrigin[2] + g_flRingZAxis_Add[j]) // z axis
            
write_short(g_sprRing// sprite
            
write_byte(0// startframe
            
write_byte(0// framerate
            
write_byte(4// life
            
write_byte(60// width
            
write_byte(0// noise
            
write_byte(nrl_ring_colors[0]) // red
            
write_byte(nrl_ring_colors[1]) // green
            
write_byte(nrl_ring_colors[2]) // blue
            
write_byte(200// brightness
            
write_byte(0// speed
            
message_end()
        }
    }
    
    
// Colored Dynamic Light
    
if(get_pcvar_num(cvar_explo_dlight))
    {
        
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin0)
        
write_byte(TE_DLIGHT// TE id
        
engfunc(EngFunc_WriteCoordflOrigin[0]) // x
        
engfunc(EngFunc_WriteCoordflOrigin[1]) // y
        
engfunc(EngFunc_WriteCoordflOrigin[2]) // z
        
write_byte(50// radius
        
write_byte(nrl_dlight_colors[0]) // red
        
write_byte(nrl_dlight_colors[1]) // green
        
write_byte(nrl_dlight_colors[2]) // blue
        
write_byte(10// life
        
write_byte(45// decay rate
        
message_end()
    }
}

remove_rocket_flare(iRocket)
{
    new 
iFlare entity_get_edict(iRocketEV_ENT_FLARE)
        
    if(
is_valid_ent(iFlare)) 
        
remove_entity(iFlare)
        
    return 
FMRES_HANDLED
}

/*================================================================================
 [Stocks]
=================================================================================*/

stock get_user_eye_position(idFloat:flOrigin[3])
{
    static 
Float:flViewOffs[3]
    
entity_get_vector(idEV_VEC_view_ofsflViewOffs)
    
entity_get_vector(idEV_VEC_originflOrigin)
    
xs_vec_add(flOriginflViewOffsflOrigin)
}

stock make_vector(Float:flVec[3])
{
    
flVec[0] -= 30.0
    engfunc
(EngFunc_MakeVectorsflVec)
    
flVec[0] = -(flVec[0] + 30.0)
}

stock set_user_weaponanim(idiAnim)
{
    
entity_set_int(idEV_INT_weaponanimiAnim)
    
message_begin(MSG_ONESVC_WEAPONANIM_id)
    
write_byte(iAnim)
    
write_byte(entity_get_int(idEV_INT_body))
    
message_end()
}

stock set_user_nrlauncher(idactive)
{
    if(!
active)
    {
        
g_bHasNRL[id] = false
        g_bHoldingNRL
[id] = false
        g_iRocketAmount
[id] = 0
    
}
    else
    {
        
g_bHasNRL[id] = true
        g_bHoldingNRL
[id] = false
        g_iRocketAmount
[id] = get_nrl_defrockets(id)
        
        
message_begin(MSG_ONE_UNRELIABLEg_msgAmmoPickup_id)
        
write_byte(AMMOID_HEGRENADE// ammo id
        
write_byte(g_iRocketAmount[id]) // ammo amount
        
message_end()
        
        
emit_sound(idCHAN_ITEM"items/gunpickup2.wav"1.0ATTN_NORM0PITCH_NORM)
        
        
set_task(1.5"nrl_hudmessage"id)
        
client_printcolor(id"/g/y %L"id"NRL_PRINT_USE")
        
client_printcolor(id"/g/y %L"id"NRL_PRINT_HELP")
    }
}

stock launch_push(idvelamount)
{
    static 
Float:flNewVelocity[3], Float:flCurrentVelocity[3]
    
    
velocity_by_aim(id, -velamountflNewVelocity)
    
    
get_user_velocity(idflCurrentVelocity)
    
xs_vec_add(flNewVelocityflCurrentVelocityflNewVelocity)
    
    
set_user_velocity(idflNewVelocity)    
}

stock client_printcolor(id, const input[], any:...)
{
    static 
iPlayersNum[32], iCountiCount 1
    
static szMsg[191]
    
    
vformat(szMsgcharsmax(szMsg), input3)
    
    
replace_all(szMsg190"/g""^4"// green txt
    
replace_all(szMsg190"/y""^1"// orange txt
    
replace_all(szMsg190"/ctr""^3"// team txt
    
replace_all(szMsg190"/w""^0"// team txt
    
    
if(idiPlayersNum[0] = id
    
else get_players(iPlayersNumiCount"ch")
        
    for (new 
0iCounti++)
    {
        if (
g_bIsConnected[iPlayersNum[i]])
        {
            
message_begin(MSG_ONE_UNRELIABLEg_msgSayText_iPlayersNum[i])
            
write_byte(iPlayersNum[i])
            
write_string(szMsg)
            
message_end()
        }
    }
}

stock register_say_command(const szCommand[], const szHandle[], const iFlags=-1, const szDescription[]="", const iFlagManager=-1)
{
    static 
szTemp[64];
    
    
formatex(szTemp63"say /%s"szCommand);
    
register_clcmd(szTempszHandleiFlagsszDescriptioniFlagManager);
    
    
formatex(szTemp63"say .%s"szCommand);
    
register_clcmd(szTempszHandleiFlagsszDescriptioniFlagManager);
    
    
formatex(szTemp63"say_team /%s"szCommand);
    
register_clcmd(szTempszHandleiFlagsszDescriptioniFlagManager);
    
    
formatex(szTemp63"say_team .%s"szCommand);
    
register_clcmd(szTempszHandleiFlagsszDescriptioniFlagManager);
}

stock Float:floatradius(Float:flMaxAmountFloat:flRadiusFloat:flDistance)
{
    return 
floatsub(flMaxAmountfloatmul(floatdiv(flMaxAmountflRadius), flDistance))

Responder
#2
Código PHP:
public zp_user_infected_post(idinfector)
{
    
// User is Nemesis
    
if(zp_get_user_nemesis(id))
    {
        
// Plugin enabled
        
if(g_bCvar_Enabled
        {
            
// Check cvar
            
if(g_bCvar_GiveFree// Free
            
{
                
// Give gun
                
set_user_nrlauncher(id1)
            }
            
// User must buy
            
else 
            {
                
// Reset Vars
                
set_user_nrlauncher(id0)
                
                
// Messages
                
set_task(1.5"nrl_hudmessage"id)
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_BUY")
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_HELP")
            }
        }
    }
    
// is Zombie
    
else
    {
        
// Reset Vars
        
set_user_nrlauncher(id0)
    }


->


Código PHP:
public zp_user_infected_post(idinfector)
{
    
// User is Nemesis
    
if(zp_get_user_nemesis(id) && !TU NATIVE DE MODO ARMAGEDON // Seguramente seria g_armagedonround. Hay vos te fijas, acordate de agregarle el ! adelante
    
{
        
// Plugin enabled
        
if(g_bCvar_Enabled
        {
            
// Check cvar
            
if(g_bCvar_GiveFree// Free
            
{
                
// Give gun
                
set_user_nrlauncher(id1)
            }
            
// User must buy
            
else 
            {
                
// Reset Vars
                
set_user_nrlauncher(id0)
                
                
// Messages
                
set_task(1.5"nrl_hudmessage"id)
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_BUY")
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_HELP")
            }
        }
    }
    
// is Zombie
    
else
    {
        
// Reset Vars
        
set_user_nrlauncher(id0)
    }

Mi unico plugin.
Tutorial de niveles.

Ayudo, pero no de la manera que quieren, si quieren aprender les servirá lo mio, para pedir el codigo en bandeja tienen la sección 'Pedidos'

(09/11/2017, 09:30 PM)SoundBlaster escribió: Espera y llamo a los power rangers para que me digan la linea de error
Responder
#3
Código PHP:
// User is Nemesis
    
if(zp_get_user_nemesis(id) && !g_armageddonround//en esta linea me salta error 

Cita:Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright © 1997-2006 ITB CompuPhase, AMX Mod X Team

Error: Undefined symbol "g_armageddonround" on line 369

1 Error.
Could not locate output file G:\Archivos de programa\Valve\cstrike\Addons\amxmodx\scripting\zp_extension_nrl.amx (compile failed).
Responder
#4
es por que esa no es la native la native del armagedon es zp_get_armagedon haci la tengoyo
Responder
#5
Código PHP:
    // User is Nemesis
    
if(zp_get_user_armageddon(id) && !g_armageddonround 
asi lo tengo y me salta error.
Responder
#6
(17/01/2014, 09:00 PM)EDUCJA escribió:
Código PHP:
    // User is Nemesis
    
if(zp_get_user_armageddon(id) && !g_armageddonround 
asi lo tengo y me salta error.

Sacaste la native desde tu zombie plague ?

Saludos,
cLAANS.-
Mi unico plugin.
Tutorial de niveles.

Ayudo, pero no de la manera que quieren, si quieren aprender les servirá lo mio, para pedir el codigo en bandeja tienen la sección 'Pedidos'

(09/11/2017, 09:30 PM)SoundBlaster escribió: Espera y llamo a los power rangers para que me digan la linea de error
Responder
#7
(18/01/2014, 07:21 AM)cLAANS escribió:
(17/01/2014, 09:00 PM)EDUCJA escribió:
Código PHP:
    // User is Nemesis
    
if(zp_get_user_armageddon(id) && !g_armageddonround 
asi lo tengo y me salta error.

Sacaste la native desde tu zombie plague ?

Saludos,
cLAANS.-

si la saque de mi zombieplague42
Responder
#8
si tienes bien hecho tu zp:
Código PHP:
if (!zp_get_user_nemesis(id) && !zp_is_armageddon_round()) 
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
Responder
#9
me sigue saltando error te dejo el code para que le de un vistazo
Código PHP:
public zp_user_infected_post(idinfector)
{
    
// User is Nemesis
    
if (!zp_get_user_nemesis(id) && !zp_is_armageddon_round()) // En esta linea 
    
{
        
// Plugin enabled
        
if(g_bCvar_Enabled
        {
            
// Check cvar
            
if(g_bCvar_GiveFree// Free
            
{
                
// Give gun
                
set_user_nrlauncher(id1)
            }
            
// User must buy
            
else 
            {
                
// Reset Vars
                
set_user_nrlauncher(id0)
                
                
// Messages
                
set_task(1.5"nrl_hudmessage"id)
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_BUY")
                
client_printcolor(id"/g/y %L"id"NRL_PRINT_HELP")
            }
        }
    }
    
// is Zombie
    
else
    {
        
// Reset Vars
        
set_user_nrlauncher(id0)
    }

Responder
#10
eso es porque te falta crear esa native, es decir, tienes mal hecho el zp
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
Responder
#11
mucha gracias a todos. pueden cerrar el tema
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)