Но проблема в том что я ,не могу добиться чтобы в меню при выборе пункта,регестрировалась команда drop.Чтобы после этого игрок когда выбрал класс,при нажатии на кнопку G использовал способность.Я смог этого добиться только если меню находиться в одном плагине а не по отдельности.Пробовал через нативы не получалось.Могу заплатить тому кто это сделает. Меню отдельно нужна для того чтобы я смог потом подключать и другие классы.
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <fun>
#include <cstrike>
#include <xs>
#include <dhudmessage>
#define PLUGIN "Admin models menu"
#define VERSION "1.0"
#define AUTHOR "UmWaR"
new const ball_name[] = "dragon_ball";
new const ball_model[] = "models/w_hiddentail.mdl";
new const ball_firespritemdl[] = "sprites/flame2.spr";
new const ball_spriteexplodemdl[] = "sprites/zerogxplode.spr"
new const zclass_screamsounds[][] = { "UmWaR/SASKE.wav" }
new sprFlame, sprSmoke
new cvar_dragondmg , cvar_dragondelay , cvar_dragonvelocity , cvar_dragonballhealth , cvar_dragonballradius , cvar_dragonballpower , cvar_burndmg , cvar_burntime , cvar_burn
new g_msgScreenShake , g_smoke , sTrail , ball_firesprite , ball_spriteexplode , g_explode[512] , g_can[33] , g_msgScoreInfo , g_roundend , bool:g_AlreadyBurn[ 33 ] , Time[ 33 ]
public plugin_init() {
register_clcmd("UM_SK", "amodels");
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
cvar_dragondelay = register_cvar("zp_classdragon_delay","15")
cvar_dragondmg = register_cvar("zp_classdragonball_dmg","70.0")
cvar_dragonvelocity = register_cvar("zp_classdragonball_velocity","600")
cvar_dragonballhealth = register_cvar("zp_classdragonball_health","6")
cvar_dragonballradius = register_cvar("zp_classdragonball_radius","300.0")
cvar_dragonballpower = register_cvar ( "zp_classdragonball_power", "800" )
cvar_burn = register_cvar ( "zp_classdragonball_enable", "1" )
cvar_burntime = register_cvar ( "zp_classdragonball_burntime", "3" )
cvar_burndmg = register_cvar ( "zp_classdragonball_burndmg", "3" )
register_touch(ball_name, "worldspawn", "touchWorld")
register_touch(ball_name, "func_wall", "touchWorld")
register_touch(ball_name, "func_door", "touchWorld")
register_touch(ball_name, "func_door_rotating", "touchWorld")
register_touch(ball_name, "func_wall_toggle", "touchWorld")
register_touch(ball_name, "func_breakable", "touchWorld")
register_think(ball_name,"ball_think")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
g_msgScoreInfo = get_user_msgid("ScoreInfo")
g_msgScreenShake = get_user_msgid("ScreenShake")
}
public plugin_precache() {
precache_model("models/player/SASKE/SASKE.mdl")
precache_model(ball_model)
g_smoke = precache_model( "sprites/steam1.spr" );
sTrail = precache_model("sprites/laserbeam.spr")
ball_firesprite = precache_model(ball_firespritemdl)
ball_spriteexplode = precache_model(ball_spriteexplodemdl)
sprFlame = precache_model( "sprites/flame.spr" )
sprSmoke = precache_model( "sprites/black_smoke3.spr" )
static i
for(i = 0; i < sizeof zclass_screamsounds; i++)
precache_sound(zclass_screamsounds[i])
}
public amodels(id) {
new i_Menu = menu_create("\rÂûáåðè \yìîäåëü", "amodels_handler");
if(get_user_flags(id) & ADMIN_LEVEL_H)
menu_additem(i_Menu, "\wÓ÷èõà Ñàñêå", "1", 0);
else
menu_additem(i_Menu, "\dÓ÷èõà Ñàñêå", "1", 0);
menu_setprop(i_Menu, MPROP_NEXTNAME, "\rÄàëåå");
menu_setprop(i_Menu, MPROP_BACKNAME, "\rÍàçàä");
menu_setprop(i_Menu, MPROP_EXITNAME, "\rÂûõîä");
menu_display(id, i_Menu, 0)
}
public amodels_handler(id, menu, item) {
if( item < 0 ) return PLUGIN_CONTINUE;
new cmd[3], access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new Choise = str_to_num(cmd)
switch (Choise) {
case 1:
if(get_user_flags(id) & ADMIN_LEVEL_H)
{
cs_set_user_model(id, "SASKE")
register_clcmd("drop","dragon_cmd")
}
else
{
chat_color(id, "!g[Ñèñòåìà] !tÍåäîñòàòî÷íî ïðàâ!")
}
}
return PLUGIN_HANDLED;
}
public dragon_cmd(id)
{
if(g_can[id])
{
set_dhudmessage( 0, 255, 255, -1.0, 0.59, 0, 6.0, 1.0)
show_dhudmessage(id, "ÑÏÎÑÎÁÍÎÑÒÜ ÁÓÄÅÒ ÃÎÒÎÂÀ.×ÅÐÅÇ %d ÑÅÊ.",g_can[id])
return PLUGIN_HANDLED;
}
static Float:origin[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3];
static Float:OriginX[3]
pev(id, pev_v_angle, angles);
pev(id, pev_origin, OriginX);
engfunc(EngFunc_MakeVectors, angles);
global_get(glb_v_forward, v_forward);
global_get(glb_v_right, v_right);
global_get(glb_v_up, v_up);
//m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
pev(id, pev_origin, player_origin);
pev(id, pev_view_ofs, player_view_offset);
xs_vec_add(player_origin, player_view_offset, gun_position);
xs_vec_mul_scalar(v_forward, 13.0, v_forward);
xs_vec_mul_scalar(v_right, 0.0, v_right);
xs_vec_mul_scalar(v_up, 5.0, v_up);
xs_vec_add(gun_position, v_forward, origin);
xs_vec_add(origin, v_right, origin);
xs_vec_add(origin, v_up, origin);
new Float:StartOrigin[3]
StartOrigin[0] = origin[0];
StartOrigin[1] = origin[1];
StartOrigin[2] = origin[2];
new Float:fVelocity[3] , Float:flOrigin[3] , Float:flAngle[3]
pev(id,pev_origin,flOrigin)
pev(id,pev_angles,flAngle)
new ball = create_entity("info_target")
if (!ball) return PLUGIN_HANDLED
g_explode[ball] = 0
entity_set_string(ball, EV_SZ_classname, ball_name)
entity_set_model(ball, ball_model)
entity_set_origin(ball, StartOrigin)
entity_set_vector(ball, EV_VEC_angles, flAngle)
new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(ball, EV_VEC_mins, MinBox)
entity_set_vector(ball, EV_VEC_maxs, MaxBox)
entity_set_int(ball, EV_INT_solid, SOLID_SLIDEBOX)
entity_set_int(ball, EV_INT_movetype, MOVETYPE_BOUNCE)
entity_set_edict(ball, EV_ENT_owner, id)
entity_set_int(ball, EV_INT_effects, EF_BRIGHTLIGHT)
VelocityByAim(id, get_pcvar_num(cvar_dragonvelocity ), fVelocity)
entity_set_vector(ball , EV_VEC_velocity, fVelocity)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // Temporary entity ID
write_short(ball) // Entity
write_short(sTrail) // Sprite index
write_byte(10) // Life
write_byte(3) // Line width
write_byte(255) // Red
write_byte(150) // Green
write_byte(20) // Blue
write_byte(255) // Alpha
message_end()
UTIL_PlayPlayerAnimation(id,10)
UTIL_PlayWeaponAnimation(id,8)
g_can[id] = get_pcvar_num(cvar_dragondelay)
set_task(1.0,"ability_zero",id)
entity_set_float(ball, EV_FL_health , get_pcvar_float(cvar_dragonballhealth))
entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)
emit_sound(id, CHAN_STREAM, zclass_screamsounds[random_num(0, sizeof zclass_screamsounds - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_HANDLED;
}
public touchWorld(ball, world) {
new Float:v[3]
entity_get_vector(ball, EV_VEC_velocity, v)
v[0] = (v[0] * 0.85)
v[1] = (v[1] * 0.85)
v[2] = (v[2] * 0.85)
entity_set_vector(ball, EV_VEC_velocity, v)
return PLUGIN_HANDLED
}
public ball_think(ball)
{
if(!is_valid_ent(ball))
return;
new Float:oldangles[3],Float:angles[3]
pev(ball,pev_angles,oldangles)
angles[0] = oldangles[0] + random_float(20.0,100.0)
angles[1] = oldangles[1] + random_float(10.0,80.0)
angles[2] = oldangles[2] + random_float(10.0,80.0)
set_pev(ball,pev_angles,angles)
new Float:v[3]
entity_get_vector(ball, EV_VEC_velocity, v)
if(v[2] < 40.0 && v[1] < 40.0 && v[0] < 40.0)
{
if(!g_explode[ball])
{
set_task(0.5,"firesprite_ball",ball)
g_explode[ball] = 1
}
entity_set_float(ball, EV_FL_health, entity_get_float(ball,EV_FL_health) - 0.2)
if(entity_get_float(ball,EV_FL_health) <= 20.0)
{
ball_explode(ball)
remove_entity(ball)
g_explode[ball] = 0
return;
}
}
entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)
}
public firesprite_ball(ball)
{
if(!is_valid_ent(ball))
return;
new Float:flOrigin[3]
pev(ball,pev_origin,flOrigin)
engfunc ( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0 )
write_byte ( TE_SPRITE )
engfunc ( EngFunc_WriteCoord, flOrigin [ 0 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 1 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 2 ] + 45.0 )
write_short ( ball_firesprite )
write_byte ( 5 )
write_byte ( 185 )
message_end ( )
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_SMOKE );
engfunc ( EngFunc_WriteCoord, flOrigin [ 0 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 1 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 2 ] + 45.0 )
write_short( g_smoke );
write_byte( 10 );
write_byte( 10 );
message_end();
if(entity_get_float(ball,EV_FL_health) >= 1.0) set_task(0.5,"firesprite_ball",ball)
}
public ball_explode ( Entity )
{
if ( Entity < 0 )
return
static Float:flOrigin [ 3 ]
pev ( Entity, pev_origin, flOrigin )
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION) // Temporary entity ID
engfunc(EngFunc_WriteCoord, flOrigin[0]) // engfunc because float
engfunc(EngFunc_WriteCoord, flOrigin[1])
engfunc(EngFunc_WriteCoord, flOrigin[2])
write_short(ball_spriteexplode) // Sprite index
write_byte(50) // Scale
write_byte(15) // Framerate
write_byte(0) // Flags
message_end()
new iOwner = entity_get_edict ( Entity, EV_ENT_owner )
for ( new i = 1; i <= 32 ; i++ )
{
if ( !is_user_alive( i ))
continue
new Float:flVictimOrigin [ 3 ]
pev ( i, pev_origin, flVictimOrigin )
new Float:flDistance = get_distance_f ( flOrigin, flVictimOrigin )
if ( flDistance <= get_pcvar_float(cvar_dragonballradius) )
{
static Float:flSpeed
flSpeed = get_pcvar_float ( cvar_dragonballpower )
static Float:flNewSpeed
flNewSpeed = flSpeed * ( 1.0 - ( flDistance / get_pcvar_float(cvar_dragonballradius) ) )
static Float:flVelocity [ 3 ]
get_speed_vector ( flOrigin, flVictimOrigin, flNewSpeed, flVelocity )
set_pev ( i, pev_velocity,flVelocity )
message_begin(MSG_ONE, g_msgScreenShake, {0,0,0}, i)
write_short(1<<14) // Amount
write_short(1<<14) // Duration
write_short(1<<14) // Frequency
message_end()
radius_damage_ab( flVictimOrigin, flOrigin , i , iOwner)
if(!g_AlreadyBurn[ i ] && get_pcvar_num(cvar_burn ) == 1 )
{
// Burn / ON
g_AlreadyBurn[ i ] = true
// Set burn time
Time[ i ] = get_pcvar_num(cvar_burntime)
// Burn victim
Burn( i )
}
}
}
}
public radius_damage_ab(Float:originF[3] , Float:flOrigin[3] , iVictim , iAttacker)
{
if(g_roundend || !is_user_connected(iAttacker) || !is_user_connected(iVictim))
return;
new Float:dist = get_distance_f(originF, flOrigin);
new Float:dmg = get_pcvar_float(cvar_dragondmg) - ( get_pcvar_float(cvar_dragondmg) / get_pcvar_float(cvar_dragonballradius) ) * dist;
if(pev(iVictim,pev_health) - dmg <= 0)
{
new headshot
if(dist < 20.0) headshot = 1
if(dist >= 20.0) headshot = 0
message_begin( MSG_ALL, get_user_msgid("DeathMsg"),{0,0,0},0)
write_byte(iAttacker)
write_byte(iVictim)
write_byte(headshot)
write_string("dragon")
message_end()
user_silentkill(iVictim)
set_pev(iAttacker, pev_frags, float(pev(iAttacker, pev_frags) + 1))
cs_set_user_money(iAttacker, cs_get_user_money(iAttacker) + 1)
fm_cs_set_user_deaths(iVictim, cs_get_user_deaths(iVictim) + 1)
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(iAttacker) // id
write_short(pev(iAttacker, pev_frags)) // frags
write_short(cs_get_user_deaths(iAttacker)) // deaths
write_short(0) // class?
write_short(fm_cs_get_user_team(iAttacker)) // team
message_end()
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(iVictim) // id
write_short(pev(iVictim, pev_frags)) // frags
write_short(cs_get_user_deaths(iVictim)) // deaths
write_short(0) // class?
write_short(fm_cs_get_user_team(iVictim)) // team
message_end()
}else{
if(dmg > 0) set_pev(iVictim , pev_health , pev(iVictim,pev_health) - dmg)
if(dmg <= 0) set_pev(iVictim , pev_health , pev(iVictim,pev_health) + dmg)
}
}
public remove_values(id)
{
remove_task(id)
g_can[id] = 0
}
public ability_zero(id)
{
g_can[id] -= 1
set_dhudmessage( 0, 255, 255, -1.0, 0.59, 0, 6.0, 3.0)
if(!g_can[id])show_dhudmessage(id, "ÑÏÎÑÎÁÍÎÑÒÜ ÃÎÒÎÂÀ.")
if(g_can[id]) set_task(1.0,"ability_zero",id)
}
public Burn( victim )
{
// Get user origin
static Origin[ 3 ] ; get_user_origin( victim, Origin )
// If burn time is over or victim are in water
if( Time[ victim ] <= 0 || get_entity_flags( victim ) & FL_INWATER )
{
// Show Smoke sprite
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SMOKE ) // TE id
write_coord( Origin[0] ) // x
write_coord( Origin[1] ) // y
write_coord( Origin[2]-50 ) // z
write_short( sprSmoke ) // sprite
write_byte( random_num(15, 20) ) // scale
write_byte( random_num(10, 20) ) // framerate
message_end( )
// Delay to allow burn again
set_task( float(get_pcvar_num(cvar_burntime)), "Stop", victim )
// Exit
return
}
else
{
// Flame sprite
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SPRITE ) // TE id
write_coord( Origin[0]+random_num(-5, 5) ) // x
write_coord( Origin[1]+random_num(-5, 5) ) // y
write_coord( Origin[2]+random_num(-10, 10) ) // z
write_short( sprFlame ) // sprite
write_byte( random_num(5, 10) ) // scale
write_byte( 200 ) // brightness
message_end( )
// Decrease Time
Time[ victim ]--
// Decrease life (random)
if(get_user_health(victim) - get_pcvar_num(cvar_burndmg) > 0) set_user_health( victim, get_user_health( victim ) - get_pcvar_num(cvar_burndmg))
// Stop fire if health <= min health.
if( get_user_health( victim ) <= get_pcvar_num(cvar_burndmg))
{
g_AlreadyBurn[ victim ] = false
return
}
// Repeat
set_task( 0.5, "Burn", victim )
}
}
public Stop( victim )
g_AlreadyBurn[ victim ] = false // Allow burn again
public zp_user_humanized_post(id)remove_values(id)
public fw_PlayerKilled(id, attacker, shouldgib) remove_values(id)
public client_connect(id) remove_values(id)
public zp_round_ended() g_roundend = 1
public client_command(id)
{
new arg[13]
read_argv(0, arg , 12)
for (new a = 0; a < 34; a++)
{
if(equal("chooseteam", arg))
{
amodels(id)
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}
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(pev(Player, pev_body))
message_end()
}
stock UTIL_PlayPlayerAnimation(const id, const Sequence , Float:frame = 1.0 , Float:framerate = 1.0)
{
entity_set_int(id, EV_INT_sequence, Sequence)
entity_set_int(id, EV_INT_gaitsequence, 1)
entity_set_float(id, EV_FL_frame, frame)
entity_set_float(id, EV_FL_framerate, framerate)
}
stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num
return 1;
}
stock fm_cs_set_user_deaths(id, value)
{
set_pdata_int(id, 444, value, 5)
}
stock fm_cs_get_user_team(id)
{
return get_pdata_int(id, 114, 5);
}
stock chat_color(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") //Green Color
replace_all(msg, 190, "!y", "^1") //Default Color
replace_all(msg, 190, "!t", "^3") //Team Color
if(id)
players[0] = id
else
get_players(players, count, "ch")
for(new i=0; i<count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}