I ask for help to tell you what I did wrong here.
And make a ban on raising the Model when the player has the maximum Health and Armor
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <dhudmessage>
#include <engine>
#include <fun>
#include <zombieplague>
new const PLUGIN_NAME[ ] = "[ZP] Bonus Box";
new const PLUGIN_VERSION[ ] = "0.0.2";
new const PLUGIN_AUTHOR[ ] = "Shurik";
const MAX_CLIENTS = 32;
const PDATA_SAFE = 2;
const OFFSET_CSMONEY = 115;
const OFFSET_LINUX = 5;
new const g_szClassName[ ] = "ZombiesBBox";
#define LIFE_TIME 25.0 // Сколько секунд до исчезновения Мешка
#define STEP 10.0
#define VERTICAL_SPEED 20.0
#define HORISONTAL_SPEED 60.0
enum (+= 1) {
STATUS_NONE = 0,
STATUS_EFFECT,
STATUS_KILL
}
const LIMIT_HEALTH = 300;
const LIMIT_ARMOR = 250;
#define ZombiesBBox "models/zp_bonus_box/zp_bonus_box.mdl"
new Money_Sound[] = "zp_bonus_box/zp_bonus_money.wav";
new Medkit_Sound[] = "zp_bonus_box/zp_bonus_medkit.wav"
new Armor_Sound[] = "zp_bonus_box/zp_bonus_armor.wav";
new Float:g_vecOrigin[ MAX_CLIENTS + 1 ][ 3 ];
new g_pEntity, g_msgScreenFade
new g_hamczbots, cvar_botquota;
new i_shockwave;
public plugin_precache( )
{
precache_model(ZombiesBBox);
precache_sound(Money_Sound)
precache_sound(Medkit_Sound);
precache_sound(Armor_Sound);
i_shockwave = precache_model("sprites/shockwave.spr");
}
public plugin_init( )
{
register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );
register_event("HLTV", "eventHLTV", "a", "1=0", "2=0");
RegisterHam( Ham_Killed, "player", "CBasePlayer__Killed_Post", .Post = true );
RegisterHam( Ham_Touch, "info_target", "CBaseEntity__Touch_Pre", .Post = false );
register_think("ZombiesBBox", "BoxThink")
register_think("ZombiesBBox", "think_supply")
cvar_botquota = get_cvar_pointer( "bot_quota" );
g_msgScreenFade = get_user_msgid("ScreenFade")
}
public eventHLTV( )
{
new entity = -1;
while((entity = find_ent_by_class(entity, g_szClassName)))
{
remove_entity(entity);
}
}
public CBasePlayer__Killed_Post( pevVictim )
{
if( !zp_get_user_zombie( pevVictim ) )
{
return HAM_IGNORED;
}
pev( pevVictim, pev_origin, g_vecOrigin[ pevVictim ] );
CreateBBox( g_vecOrigin[ pevVictim ] );
return HAM_IGNORED;
}
public CreateBBox( Float:vOrigin[ 3 ] )
{
g_pEntity = engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString,"info_target" ) );
if( !pev_valid( g_pEntity ) )
{
return;
}
set_pev( g_pEntity, pev_classname, g_szClassName );
set_pev( g_pEntity, pev_model, ZombiesBBox );
engfunc( EngFunc_SetModel, g_pEntity, ZombiesBBox );
engfunc( EngFunc_SetSize, g_pEntity, Float:{ -1.0, -1.0, -1.0}, Float:{ 2.5, 2.5, 2.5 });
engfunc( EngFunc_SetOrigin, g_pEntity, vOrigin );
new Float:velocity[3]
velocity[0] = random_float(50.0, 100.0)
velocity[1] = random_float(50.0, 100.0)
velocity[2] = random_float(200.0, 250.0)
set_pev( g_pEntity, pev_velocity, velocity)
set_pev( g_pEntity , pev_body , random_num( 0 , 2 ) )
set_pev( g_pEntity, pev_solid, SOLID_TRIGGER);
set_pev( g_pEntity, pev_movetype, MOVETYPE_TOSS);
set_pev( g_pEntity, pev_sequence, 1);
set_pev( g_pEntity, pev_gaitsequence, 1);
set_pev( g_pEntity, pev_framerate, 1.0);
set_pev( g_pEntity, pev_frame, 0.0);
set_pev( g_pEntity, pev_rendermode, kRenderFxNone);
set_pev( g_pEntity, pev_nextthink, get_gametime() + LIFE_TIME)
}
public think_supply(ent) {
if(!pev_valid(ent) && !drop_to_floor(ent))
return
new Float:o[3]
pev(ent, pev_origin, o)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, o, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, o[0]) // x
engfunc(EngFunc_WriteCoord, o[1]) // y
engfunc(EngFunc_WriteCoord, o[2] + 1.0) // z
engfunc(EngFunc_WriteCoord, o[0] + 500.0) // x axis
engfunc(EngFunc_WriteCoord, o[1] + 500.0) // y axis
engfunc(EngFunc_WriteCoord, o[2] + 50.0) // z axis
write_short(i_shockwave) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life (4)
write_byte(5) // width (20)
write_byte(0) // noise
write_byte(255) // red
write_byte(255) // green
write_byte(0) // blue
write_byte(255) // brightness
write_byte(0) // speed
message_end()
set_pev(ent, pev_nextthink, get_gametime() + 3.0)
}
public CBaseEntity__Touch_Pre( pEntity , pPlayer )
{
if( !pev_valid( pEntity ) || !is_user_alive( pPlayer ) || !UTIL_get_user_human( pPlayer ) )
{
return HAM_IGNORED;
}
if ((get_user_health(pPlayer) > LIMIT_HEALTH && get_user_armor(pPlayer) > LIMIT_ARMOR))
return HAM_IGNORED;
static zsClassname[ 32 ];
pev( pEntity, pev_classname, zsClassname, charsmax( zsClassname ) );
if( !equal( zsClassname, g_szClassName ) )
{
return HAM_IGNORED;
}
switch ( pev( pEntity, pev_body) )
{
case 0:
{
set_pev( pPlayer, pev_health, float(min(pev(pPlayer, pev_health) + random_num(15, 50), LIMIT_HEALTH)));
set_dhudmessage(255, 255, 0, 0.16, 0.96, 0, 0.0, 0.0, 2.0);
show_dhudmessage(pPlayer, "+ Здоровье");
screen_fade_medkit(pPlayer);
client_cmd(pPlayer,"spk %s",Medkit_Sound);
}
case 1:
{
set_pev( pPlayer, pev_armorvalue, float(min(pev(pPlayer, pev_armorvalue) + random_num(10, 30), LIMIT_ARMOR)));
set_dhudmessage(0, 80, 255, 0.36, 0.96, 0, 0.0, 0.0, 2.0);
show_dhudmessage(pPlayer, "+ Броня");
screen_fade_armor(pPlayer);
client_cmd(pPlayer,"spk %s",Armor_Sound);
}
case 2:
{
zp_set_user_ammo_packs( pPlayer , zp_get_user_ammo_packs( pPlayer ) + random_num(1, 3));
set_dhudmessage(0, 255, 0, 0.90, 0.87, 0, 0.0, 0.0, 1.0);
show_dhudmessage(pPlayer, "+ Деньги");
screen_fade_money(pPlayer);
client_cmd(pPlayer,"spk %s",Money_Sound);
}
}
engfunc( EngFunc_RemoveEntity , pEntity );
return HAM_IGNORED;
}
public BoxThink(ent) {
if (!pev_valid(ent)) {
return HAM_IGNORED;
}
switch(pev(ent, pev_impulse)) {
case STATUS_NONE:{
set_pev(ent, pev_movetype, MOVETYPE_FLY);
set_pev(ent, pev_solid, SOLID_NOT);
set_pev(ent, pev_rendermode, kRenderTransAlpha);
set_pev(ent, pev_renderamt, 100.0);
set_pev(ent, pev_velocity, Float:{0.0, 0.0, VERTICAL_SPEED});
set_pev(ent, pev_avelocity, Float:{0.0, HORISONTAL_SPEED, 0.0})
set_pev(ent, pev_impulse, STATUS_EFFECT);
}
case STATUS_EFFECT: {
if (pev(ent, pev_renderamt) > 0.0) {
set_pev(ent, pev_renderamt, floatmax(0.0, pev(ent, pev_renderamt) - STEP));
} else {
set_pev(ent, pev_flags, FL_KILLME);
set_pev(ent, pev_impulse, STATUS_KILL);
}
}
}
set_pev(ent,pev_nextthink,get_gametime() + 0.1)
return HAM_SUPERCEDE;
}
public screen_fade_medkit(pPlayer) {
message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, pPlayer)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte(255)
write_byte(150)
write_byte(0)
write_byte(75)
message_end()
}
public screen_fade_armor(pPlayer) {
message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, pPlayer)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte(0)
write_byte(0)
write_byte(255)
write_byte(75)
message_end()
}
public screen_fade_money(pPlayer) {
message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, pPlayer)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte(0)
write_byte(150)
write_byte(0)
write_byte(75)
message_end()
}
stock UTIL_get_user_human( pPlayer )
{
return ( !zp_get_user_zombie( pPlayer ) && !zp_get_user_nemesis( pPlayer ) && !zp_get_user_survivor( pPlayer ) )
}
public register_ham_czbots( pPlayer )
{
if( g_hamczbots || !is_user_connected( pPlayer ) || !get_pcvar_num( cvar_botquota ) )
{
return;
}
RegisterHamFromEntity( Ham_Killed, pPlayer, "CBasePlayer__Killed_Post", 1 );
g_hamczbots = true;
}
public client_putinserver( pPlayer )
{
if( is_user_bot( pPlayer ) && !g_hamczbots && cvar_botquota )
{
set_task( 0.1, "register_ham_czbots", pPlayer );
}
}