Русское сообщество по скриптингу

Связь с другим плагином!

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Связь с другим плагином!

Сообщение UmWaR » 22 мар 2020, 10:55

Здравствуйте! Не могу никак разделить плагин .Мне надо чтобы меню работало отдельно он класса .
Но проблема в том что я ,не могу добиться чтобы в меню при выборе пункта,регестрировалась команда 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
(= 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()
        }
    }
}
Аватара пользователя
UmWaR
 
Сообщения: 3
Зарегистрирован: 15 мар 2020, 04:27
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 6