Код:
/*
**| Rocket AT Crowbar |**
Description:
This plugin make rocket at crowbar when player has ammo of rpg
Credits:
Thanks to lev for quick help in some wrong codes
Thanks to LetiLetiLepestok for some code
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <hl>
#define PLUGIN "Rocket_AT_Crowbar"
#define VERSION "0.2"
#define AUTHOR "abdobiskra"
#define RC_W_NAME "weapon_rocketcrowbar"
#define RC_SPRITE_HUD_TXT "sprites/weapon_rocketcrowbar.txt"
#define RC_W_MODEL_ROCKET "models/v_rocketcrowbar.mdl"
#define RC_W_MODEL_DEFAULT "models/v_crowbar.mdl"
#define RC_SPRITE_TRAIL "sprites/smoke.spr"
new const
extraoffset_weapon = 4,
m_flNextSecondaryAttack = 36;
new g_EntTrial
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward(FM_PlayerPreThink,"Fw_FmPlayerPostThinkPost", 1)
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_crowbar", "Crowbar_SecondaryAttack_Post", 0 )
RegisterHam(Ham_Item_Deploy, "weapon_crowbar", "fw_Item_Deploy_Post", 1)
RegisterHam(Ham_Item_Holster, "weapon_crowbar", "fw_Item_Holster_Post", 1);
register_clcmd(RC_W_NAME, "RC_cmd");
register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
register_message(get_user_msgid("DeathMsg"), "Message_DeathMsg")
}
public Event_CurWeapon(id){
new weaponID = read_data(2)
if (weaponID != HLW_GAUSS)
return PLUGIN_CONTINUE
set_pev(id, pev_weaponmodel2, "models/v_gauss.mdl");
set_pev(id, pev_viewmodel2, "models/v_gauss.mdl");
return PLUGIN_CONTINUE
}
public Message_DeathMsg() {
static const nameWeapon[] = "rpg_rocket"
static text[64]
new iAttacker = get_msg_arg_int( 1 );
get_msg_arg_string(3, text, 63)
if (equal(text, nameWeapon) && get_user_weapon(iAttacker) == HLW_CROWBAR)
{
set_msg_arg_string( 3, "crowbar" )
}
return PLUGIN_CONTINUE
}
public plugin_precache()
{
g_EntTrial = precache_model(RC_SPRITE_TRAIL)
precache_model(RC_W_MODEL_DEFAULT)
precache_model(RC_W_MODEL_ROCKET)
precache_model("models/v_gauss.mdl")
precache_generic(RC_SPRITE_HUD_TXT)
}
public Fw_FmPlayerPostThinkPost(id) {
if(!is_user_alive(id))
{
return FMRES_HANDLED
}
new Weapon = get_user_weapon(id);
new Ammo = hl_get_user_bpammo(id, HLW_RPG)
if(Weapon == HLW_CROWBAR && Ammo != 0 )
{
set_pev(id, pev_weaponmodel2, RC_W_MODEL_ROCKET);
set_pev(id, pev_viewmodel2, RC_W_MODEL_ROCKET);
return FMRES_IGNORED
}else if(pev(id,pev_button) & IN_ATTACK2 && Weapon == HLW_CROWBAR && Ammo <= 0){
set_pev(id, pev_weaponmodel2, RC_W_MODEL_DEFAULT);
set_pev(id, pev_viewmodel2, RC_W_MODEL_DEFAULT);
return FMRES_IGNORED
}
return FMRES_HANDLED
}
public Crowbar_SecondaryAttack_Post(const crowbar)
{
new Id = pev(crowbar, pev_owner)
new Ammo = hl_get_user_bpammo(Id, HLW_RPG)
if(!Ammo)
{
return HAM_SUPERCEDE
}
new Float:origin[3], Float:view_ofs[3], Float:angles[3], Float:velocity[3]
Ammo--
hl_set_user_bpammo(Id, HLW_RPG, Ammo)
new Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "rpg_rocket"))
pev(Id, pev_origin, origin)
pev(Id, pev_view_ofs, view_ofs)
pev(Id, pev_v_angle, angles)
origin[0] += view_ofs[0]
origin[1] += view_ofs[1]
origin[2] += view_ofs[2]
velocity_by_aim (Id, 2000, velocity)
set_pev(Ent, pev_origin, origin)
set_pev(Ent, pev_angles, angles)
set_pev(Ent, pev_owner, Id)
client_cmd(0, "mp3 stop; stopsound");
DispatchSpawn(Ent)
engfunc(EngFunc_SetModel, Ent, "models/rpgrocket.mdl")
set_pev(Ent, pev_effects, pev(Ent, pev_effects) | EF_LIGHT)
if(pev_valid(crowbar))
{
ExecuteHamB(Ham_Weapon_PrimaryAttack, crowbar)// show animation attack for others
UTIL_PlayWeaponAnimation (Id, 5)
}
set_pev( Ent, pev_velocity, velocity);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMFOLLOW);
write_short(Ent); // entity
write_short(g_EntTrial); // model
write_byte(25); // life
write_byte(12); // width
write_byte(random_num(0, 255)); // r, g, b
write_byte(random_num(0, 255)); // r, g, b
write_byte(random_num(0, 255)); // r, g, b
write_byte(255); // brightness
message_end();
set_pdata_float (crowbar, m_flNextSecondaryAttack, 2.0, extraoffset_weapon)
return HAM_HANDLED
}
public fw_Item_Deploy_Post(ent)
{
new id = pev(ent, pev_owner);
if(!is_user_alive(id))
{
return FMRES_HANDLED
}
message_begin( MSG_ONE, get_user_msgid( "WeaponList" ), .player = id );
{
write_string( RC_W_NAME ); // WeaponName
write_byte( -1 ); // PrimaryAmmoID
write_byte( -1 ); // PrimaryAmmoMaxAmount
write_byte( 6 ); // SecondaryAmmoID (rpg)
write_byte( -1 ); // SecondaryAmmoMaxAmount
write_byte( 0 ); // SlotID (0...N)
write_byte( 1 ); // NumberInSlot (1...N)
write_byte( HLW_CROWBAR ); // WeaponID
write_byte( 0 ); // Flags
message_end();
}
set_hudmessage(0, 255, 0, 0.38, 0.89, 0, 0.2, 10.0)
show_hudmessage(id, " | ROCKET~AT~CROWBAR | ^nPick Up RPG Ammo & Launched it useing Secondary Attack")
return HAM_IGNORED
}
public fw_Item_Holster_Post(ent) {
new id = pev(ent, pev_owner);
set_hudmessage(0, 255, 0, 0.38, 0.89, 0, 0.2, 1.0)
show_hudmessage(id, "")
return HAM_IGNORED;
}
public RC_cmd(id)
{
engclient_cmd(id, "weapon_crowbar" );
return 1
}
stock UTIL_PlayWeaponAnimation (const Player, const Sequence)
{
set_pev (Player, pev_weaponanim, Sequence)
message_begin (MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(0)
message_end()
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ fbidis\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ ltrpar\\ lang1033\\ f0\\ fs16 \n\\ par }
*/