Код за потвърждение: Избери целия код
#include <amxmodx>
#include <xs>
#include <fun>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
new const INT_ROCKET_SPEED = 1500;
new const Float:FL_MAX_DAMAGE = 175.0;
new const Float:FL_EXPLOSION_RADIUS = 200.0;
new const Float:FL_MAX_THROW_SPEED = 1200.0;
new const MODEL_V_BAZOOKA[] = "models/BazookaDM/v_bazooka.mdl";
new const MODEL_P_BAZOOKA[] = "models/BazookaDM/p_bazooka.mdl";
new const MODEL_ROCKET[] = "models/BazookaDM/rocket.mdl";
new const SOUND_LAUNCH[] = "BazookaDM/launch.wav";
new const SOUND_EXPLODE[] = "BazookaDM/explode.wav";
new const SPRITE_TRAIL[] = "sprites/BazookaDM/trail.spr";
new const SPRITE_EXPLOSION[] = "sprites/BazookaDM/explosion.spr";
new g_iExplosion, g_iTrail;
new g_iDeathMsg, g_iBarTimeMsg;
new g_fwdKeyValue;
public plugin_precache()
{
g_fwdKeyValue = register_forward(FM_KeyValue, "fwdKeyValue"); // remove all weapons from map
precache_model(MODEL_V_BAZOOKA);
precache_model(MODEL_P_BAZOOKA);
precache_model(MODEL_ROCKET);
precache_sound(SOUND_LAUNCH);
precache_sound(SOUND_EXPLODE);
g_iTrail = precache_model(SPRITE_TRAIL);
g_iExplosion = precache_model(SPRITE_EXPLOSION);
}
public plugin_init()
{
register_plugin("Bazooka DM: Main", "2.1.0 stable", "didoWEE");
register_cvar( "bzdm_version", "2.1.0", FCVAR_SERVER | FCVAR_SPONLY);
g_iBarTimeMsg = get_user_msgid("BarTime");
g_iDeathMsg = get_user_msgid("DeathMsg");
register_clcmd("jointeam", "cmdTeamChange"); // team change block
register_clcmd("chooseteam", "cmdTeamChange"); // --/--
register_message(get_user_msgid("Radar"), "Message_Radar"); // radar block
register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon"); // buy menu block
register_message(get_user_msgid("HudTextArgs"), "Message_HudTextArgs"); // *spawned with bomb* message block
register_forward(FM_ClientKill, "fwdClientKill"); // kill cmd block
register_forward(FM_GetGameDescription, "fwdGameDescription");
register_touch("rocket", "*", "fwdTouch");
register_event("CurWeapon", "eventCurrent_Weapon", "be", "1=1"); // set bazooka models
RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawnPost", 1);
RegisterHam(Ham_AddPlayerItem, "player", "fwdAddPlayerItemPre"); // bomb remove
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fwdKnifePrimaryAttackPre");
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fwdKnifeSecondaryAttackPre");
unregister_forward(FM_KeyValue, g_fwdKeyValue); // needed only once at the beggining of the map so we remove it
}
public fwdPlayerSpawnPost(id)
{
if(is_user_alive(id))
{
strip_user_weapons(id);
give_item(id, "weapon_knife");
}
}
public fwdAddPlayerItemPre(id , iWeapon)
{
if(cs_get_weapon_id( iWeapon ) == CSW_C4)
{
cs_set_user_plant(id, 0, 0);
entity_set_int(id, EV_INT_body, 0);
SetHamReturnInteger(false);
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public eventCurrent_Weapon(id)
{
if(read_data(2) == CSW_KNIFE)
{
entity_set_string(id, EV_SZ_viewmodel, MODEL_V_BAZOOKA);
entity_set_string(id, EV_SZ_weaponmodel, MODEL_P_BAZOOKA);
}
}
public fwdKnifePrimaryAttackPre(ent)
{
ExecuteHamB(Ham_Weapon_SecondaryAttack, ent);
return HAM_SUPERCEDE;
}
public fwdKnifeSecondaryAttackPre(ent)
{
set_pdata_float(ent, 46, 2.2, 4);
set_pdata_float(ent, 47, 2.2, 4);
Launch(entity_get_edict(ent, EV_ENT_owner));
return HAM_SUPERCEDE;
}
public fwdTouch(ent1, ent2)
{
if(!is_valid_ent(ent1))
return PLUGIN_CONTINUE;
// checking classname to avoid second explosion
static classname[7];
entity_get_string(ent1, EV_SZ_classname, classname, charsmax(classname));
if(!equal(classname, "rocket"))
return PLUGIN_CONTINUE;
Explode(ent1);
return PLUGIN_CONTINUE;
}
Launch(id)
{
showBarTime(id, 2);
static Float:Origin[3], Float:Angle[3], Float:Velocity[3];
static Float:Box[3] = {-1.0, -1.0, -1.0};
entity_get_vector(id, EV_VEC_v_angle, Angle);
entity_get_vector(id, EV_VEC_origin, Origin);
Angle[0] *= -1.0;
Origin[2] += 16.0;
new ent = create_entity("info_target");
entity_set_string(ent, EV_SZ_classname, "rocket");
entity_set_model(ent, MODEL_ROCKET);
entity_set_vector(ent, EV_VEC_origin, Origin);
entity_set_vector(ent, EV_VEC_angles, Angle);
entity_set_vector(ent, EV_VEC_mins, Box);
Box[0] *= -1.0; Box[1] *= -1.0; Box[2] *= -1.0;
entity_set_vector(ent, EV_VEC_maxs, Box);
entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLY);
entity_set_edict(ent, EV_ENT_owner, id);
velocity_by_aim(id, INT_ROCKET_SPEED, Velocity);
entity_set_vector(ent, EV_VEC_velocity, Velocity);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMFOLLOW);
write_short(ent);
write_short(g_iTrail);
write_byte(25);
write_byte(5);
write_byte(255);
write_byte(255);
write_byte(255);
write_byte(255);
message_end();
emit_sound(ent, CHAN_AUTO, SOUND_LAUNCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
showWeaponAnimation(id, 2);
}
Explode(ent)
{
static attacker;
attacker = entity_get_edict(ent, EV_ENT_owner);
if(!is_user_connected(attacker))
{
remove_entity(ent);
return PLUGIN_HANDLED;
}
static Float:vecEntityOrigin[3];
entity_get_vector(ent, EV_VEC_origin, vecEntityOrigin);
emit_sound(ent, CHAN_AUTO, SOUND_EXPLODE, VOL_NORM, ATTN_NORM, 0, PITCH_HIGH);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_SPRITE);
write_coord(floatround(vecEntityOrigin[0]));
write_coord(floatround(vecEntityOrigin[1]));
write_coord(floatround(vecEntityOrigin[2]));
write_short(g_iExplosion);
write_byte(floatround(FL_EXPLOSION_RADIUS/2));
write_byte(255);
message_end();
static Float:vecPlayerOrigin[3];
static Float:vecVelocity[3];
static Float:flDistance;
static Float:flPercent;
static Float:flDamage;
static i, id, iCount, iPlayers[32];
get_players(iPlayers, iCount, "a");
for(i=0; i<iCount; i++)
{
id = iPlayers[i];
entity_get_vector(id, EV_VEC_origin, vecPlayerOrigin);
xs_vec_sub(vecPlayerOrigin, vecEntityOrigin, vecVelocity);
flDistance = vector_length(vecVelocity);
if(flDistance > FL_EXPLOSION_RADIUS)
continue;
flPercent = 1.0 - flDistance / FL_EXPLOSION_RADIUS;
flDamage = flPercent * FL_MAX_DAMAGE;
xs_vec_mul_scalar(vecVelocity, (flPercent * FL_MAX_THROW_SPEED) / flDistance, vecVelocity);
vecVelocity[2] *= 1.5; // more fun
entity_set_vector(id, EV_VEC_velocity, vecVelocity);
if(get_user_health(id) > flDamage)
ExecuteHamB(Ham_TakeDamage, id, ent, attacker, flDamage, DMG_BLAST);
else
{
if(id != attacker)
ExecuteHam(Ham_AddPoints, attacker, 1, 0);
set_msg_block(g_iDeathMsg, BLOCK_SET);
user_kill(id, 1);
set_msg_block(g_iDeathMsg, BLOCK_NOT);
message_begin(MSG_BROADCAST, g_iDeathMsg);
write_byte(attacker)
write_byte(id)
write_byte(0);
write_string("bazooka");
message_end();
showBarTime(id, 0);
}
}
remove_entity(ent);
return PLUGIN_CONTINUE;
}
public cmdTeamChange(id)
{
if(cs_get_user_team(id) != CS_TEAM_T
&& cs_get_user_team(id) != CS_TEAM_CT)
return PLUGIN_CONTINUE;
return PLUGIN_HANDLED;
}
public fwdGameDescription()
{
forward_return(FMV_STRING, "Bazooka DM");
return FMRES_SUPERCEDE;
}
public fwdKeyValue(const ent, const KvdHandle)
{
if(pev_valid(ent))
{
new szClassname[16];
get_kvd(KvdHandle, KV_ClassName, szClassname, charsmax(szClassname));
if(equal(szClassname, "armoury_entity"))
{
engfunc(EngFunc_RemoveEntity, ent);
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public fwdClientKill(id)
return FMRES_SUPERCEDE;
public Message_Radar(iMsgId, iMsgDest, id)
return PLUGIN_HANDLED;
public Message_HudTextArgs(iMsgId, iMsgDest, id)
{
new szMessage[64];
get_msg_arg_string(1, szMessage, charsmax(szMessage));
if(equal(szMessage, "#Hint_you_have_the_bomb"))
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public Message_StatusIcon(iMsgId, iMsgDest, id)
{
static szIcon[8];
get_msg_arg_string(2, szIcon, charsmax(szIcon));
if(!equal(szIcon, "buyzone"))
return PLUGIN_CONTINUE;
if(!get_msg_arg_int(1))
return PLUGIN_CONTINUE;
set_pdata_int(id, 235, get_pdata_int(id, 235, 5) & ~(1<<0), 5);
return PLUGIN_HANDLED;
}
showBarTime(id, time)
{
message_begin(MSG_ONE_UNRELIABLE, g_iBarTimeMsg,. player=id);
write_short(time);
message_end();
}
showWeaponAnimation(id, anim)
{
entity_set_int(id, EV_INT_weaponanim, anim);
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM,. player=id);
write_byte(anim);
write_byte(entity_get_int(id, EV_INT_body));
message_end();
}