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

Активация способности на правую кнопку мышки  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

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

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Активация способности на правую кнопку мышки  [Решено]

Сообщение Krikkk » 24 июн 2018, 18:38

Помогите сделать активацию способности на правую кнопку мышки, по умолчанию стоит бинд на F1, заранее спасибо

Код: Выделить всё
#include <amxmodx>
#include <fakemeta_util>
#include <zombieplague>

#define PLUGIN "[ZP] Extra Item: Energy Suit"
#define VERSION "1.3"
#define AUTHOR "Re.Act!ve"

#define TRAIL_LIFE        2
#define TRAIL_WIDTH       10
#define TRAIL_RED         50
#define TRAIL_GREEN       200 
#define TRAIL_BLUE        0
#define TRAIL_BRIGTHNESS  180
new SayText
new const g_tool_name[] =     { "ЭнергоКостюм" // Item name Energy Suit
new const g_tool_cost ;     // Item cost Multimode Tool
new g_tool_packsg_tool_p_invisg_tool_p_speedg_tool_speedg_tool_p_godg_tool_max_packsg_tool_time
new g_mtool_itemg_tool_glow_godgTrailg_tool_timelimitg_tool_regeng_tool_regen_time
new g_Number[32], Energy_Packs[32]
new 
Float:g_time_reload[32]
new 
bool:g_Item[32], g_ability[32], g_ability_esc[32], g_times[32], delete[32], g_speed[32]
new 
buy_sound[] =    { "items/gunpickup2.wav" }
new 
deactivated[] =     { "items/suitchargeno1.wav" }
new 
invisible_on[] =    { "fvox/activated.wav" }
new 
invisible_off[] =     { "fvox/deactivated.wav" }
new 
speed_on[] =     { "fvox/activated.wav" }
new 
speed_off[] =     { "fvox/deactivated.wav" }
new 
godmode_on[] =     { "fvox/activated.wav" }
new 
godmode_off[] =     { "fvox/deactivated.wav" }

public 
plugin_init() 
{
    
g_tool_packs =            register_cvar("enzp_extra_packs""20")     // Number of energy packs to extra Item Energy Suit
    
g_tool_regen =            register_cvar("enzp_regen_energy""1")    // Regeneration Energy packs?  < 1 | 0 >
    
g_tool_regen_time =         register_cvar("enzp_regen_time""1.0")     // (If energy_regen = 1) Time Regeneration energy.
    
g_tool_time =             register_cvar("enzp_energy_time""0.5")    // Everyone Х will get seconds energy packs
    
g_tool_p_invis =            register_cvar("enzp_invisible_packs""1")    // Number Energy packs, has used on energy_time (Invisible)

    
g_tool_p_speed =        register_cvar("enzp_speed_packs""1")    // Number Energy packs, has used on energy_time (Speed)
    
g_tool_speed =             register_cvar("enzp_speed_added""1000.0"// Speed for Humans

    
g_tool_p_god =            register_cvar("enzp_godmone_packs""2"// Number Energy packs, has used on energy_time (GODMODE)
    
g_tool_glow_god =         register_cvar("enzp_godmode_glow""1")    // Glow On, or off? < 1 | 0 >

    
g_tool_max_packs =         register_cvar("enzp_max_packs""20")        // Number Max Energy Packs?
    
g_tool_timelimit =         register_cvar("enzp_timelimit""2.0")        // Time after which it will be possible to use ability again

    // Register Items Multimode & Energy Packs
    
g_mtool_item zp_register_extra_item(g_tool_nameg_tool_costZP_TEAM_HUMAN)
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_event("DeathMsg""Death_attacker""a")
    
register_forward(FM_PlayerPreThink"fw_PlayerPreThink"
    
register_clcmd("mtool""Multimode_Begin")
    
gTrail engfunc(EngFunc_PrecacheModel,"sprites/horror_red.spr")
    
SayText get_user_msgid("SayText")
    
register_dictionary("zp_extra_energy_suit.txt")
}

public 
plugin_precache()
{
        
precache_soundbuy_sound )
        
precache_sounddeactivated )
        
precache_soundspeed_on )
        
precache_soundspeed_off )
        
precache_soundinvisible_on )
        
precache_soundinvisible_off )
        
precache_soundgodmode_on )
        
precache_soundgodmode_off )
}

public 
zp_extra_item_selected(iditem)
{
    if( (
item == g_mtool_item) && !zp_get_user_zombie(id) && !g_Item[id])
    {
        
g_ability[id] = trueg_times[id] = trueg_Item[id] = truedelete[id] = true;
        
g_Number[id] = 0;    
        
client_cmd(id"bind F1 mtool");
        
client_print(idprint_center"[Choosen Mode: Invisible]")
        
emit_sound(idCHAN_STREAMbuy_sound1.0ATTN_NORM0PITCH_NORM)
        
ChatColor(id"!g[ZP] !y%L"LANG_PLAYER"EXTRA_MTOOL")
        
Energy_Packs[id] = get_pcvar_num(g_tool_packs);
        if(
get_pcvar_num(g_tool_regen) == 1)
        
set_task(1.0"Regeneration_Energy"id)

        
set_task(0.1"Show_Hud"id__"b")
    }
    else
    {
        if( (
item == g_mtool_item) && g_Item[id] )
        {
            
zp_set_user_ammo_packs(idzp_get_user_ammo_packs(id) + g_tool_cost)
            
ChatColor(id"!g[ZP]!y %L"LANG_PLAYER"EXTRA_ON")
        }
    }
}

public 
Regeneration_Energy(id)
{
    if(
g_ability[id] && !zp_get_user_zombie(id) && is_user_alive(id))
    {
        if(
Energy_Packs[id] < get_pcvar_num(g_tool_max_packs))
        {

            
Energy_Packs[id] = Energy_Packs[id] + 1;
            
set_task(get_pcvar_float(g_tool_regen_time), "Regeneration_Energy"id)
        }
        else
            
set_task(1.0"Regeneration_Energy"id)
    }
    else
    {
        if(
zp_get_user_zombie(id))
        
remove_task(id)
        else
        
set_task(1.0"Regeneration_Energy"id)
    }
}

public 
zp_user_infected_post(idinfector)
{
    
fm_set_user_godmode(id0)
    
g_speed[id] = false;
    
g_Item[id] = false;
    
g_times[id] = false;
    
delete[id] = false;
}

public 
Death_attacker()
{
    new 
id read_data(2)
    
g_speed[id] = false;
    
g_Item[id] = false;
    
g_times[id] = false;
    
delete[id] = false;
}

public 
Show_Hud(id)
{
    if( 
is_user_alive(id) && !zp_get_user_zombie(id) && delete[id])
    {
        if(!
g_ability[id])
        {
            
set_hudmessage(2006000.470.8501.0get_pcvar_float(g_tool_time), 0.00.0, -1)
            
show_hudmessage(id,"%L"LANG_PLAYER"MTOOL_STATUS"Energy_Packs[id])
        }
        else
        {
            
set_hudmessage(020000.470.8501.0get_pcvar_float(g_tool_time), 0.00.0, -1)
            
show_hudmessage(id,"%L"LANG_PLAYER"MTOOL_STATUS"Energy_Packs[id])
        }
    }
    else
        
remove_task(id);
}

public 
fw_PlayerPreThink(id)
{
       if (!
is_user_alive(id) && zp_get_user_zombie(id))
        return;

    if(
g_Item[id] && g_speed[id] )
    
fm_set_user_maxspeedid fm_get_user_maxspeed(id) + get_pcvar_float(g_tool_speed))
    else
    
fm_set_user_maxspeedid fm_get_user_maxspeed(id) )

    if(
Choosen_Mode(id) && g_Item[id] && g_ability[id])
    {
        
g_time_reload[id] = get_gametime();
        
g_Number[id] = g_Number[id] + 1;
        switch(
g_Number[id])
            { 
                    case 
0
                
client_print(idprint_center"[Choosen Mode: Invisible]")
            case 
1:
                
client_print(idprint_center"[Choosen Mode: Extra Speed]")
            case 
2:
                
client_print(idprint_center"[Choosen Mode: God Mode]")
            case 
3:
            {
                
client_print(idprint_center"[Choosen Mode: Invisible]")    
                
g_Number[id] = 0;
            }
        }
    }
}

Choosen_Mode(id)
{    
       if (
zp_get_user_zombie(id) && zp_get_user_nemesis(id) && !g_Item[id] && g_ability[id] )
        return 
false
    
    
static buttons
    buttons 
pev(idpev_button)
    
    if (!(
buttons IN_USE) && !is_user_bot(id))
    return 
false

        
static Float:reload
        reload 
0.3;
       if ( (
get_gametime() - g_time_reload[id]) < reload)
        return 
false
        
        
return true
}

public 
Multimode_Begin(id)
{
    if(
g_Item[id] && !zp_get_user_zombie(id) && is_user_alive(id) && (Energy_Packs[id] >= 1) && g_times[id])
    {
        switch( 
g_Number[id] ) 
        { 
            case 
0
            {
                if(
g_ability[id])
                {
                    
g_ability_esc[id] = false;
                    
emit_sound(idCHAN_STREAMinvisible_on1.0ATTN_NORM0PITCH_NORM)
                    
set_task(0.1"Invisible"id)
                }
                else
                {
                    
g_ability_esc[id] = true;
                    
emit_sound(idCHAN_STREAMinvisible_off1.0ATTN_NORM0PITCH_NORM)
                    
set_task(0.1"Invisible"id)
                }
            }
            case 
1
            {
                if(
g_ability[id])
                {
                    
g_ability_esc[id] = false;
                    
emit_sound(idCHAN_STREAMspeed_on1.0ATTN_NORM0PITCH_NORM)
                    
set_task(0.1"Speed_Form"id)
                }
                else
                {
                    
g_ability_esc[id] = true;
                    
emit_sound(idCHAN_STREAMspeed_off1.0ATTN_NORM0PITCH_NORM)
                    
set_task(0.1"Speed_Form"id)
                }
            }
            case 
2
            {
                if(
g_ability[id])
                {
                    
g_ability_esc[id] = false;
                    
emit_sound(idCHAN_STREAMgodmode_on1.0ATTN_NORM0PITCH_NORM)
                    
set_task(0.1"GodMode"id)
                }
                else
                {
                    
g_ability_esc[id] = true;
                    
emit_sound(idCHAN_STREAMgodmode_off1.0ATTN_NORM0PITCH_NORM)
                    
set_task(0.1"GodMode"id)
                }
            }
        }
    }
    else
    {
        if( (
Energy_Packs[id] < 1) && g_Item[id])
        
ChatColor(id"!g[ZP]!y %L"LANG_PLAYER"NO_ENERGY")

        
g_speed[id] = false;
    }
}

public 
Reset_Ability(id)
g_times[id] = true;

public 
Invisible(id)
{
    
g_ability[id] = false;
    if(
Energy_Packs[id] > && !g_ability_esc[id])
    {
        
fm_set_user_rendering(idkRenderFxGlowShell000kRenderTransAlpha0)
        
Energy_Packs[id] = Energy_Packs[id] - get_pcvar_num(g_tool_p_invis);
        
set_task(get_pcvar_float(g_tool_time), "Invisible"id);
    }
    else
    {
        if(!
g_ability_esc[id])
        {
            
g_ability[id] = true;
            
ChatColor(id"!g[ZP]!y %L"LANG_PLAYER"ENERGY_END")
            
Energy_Packs[id] = 0;
            
emit_sound(idCHAN_STREAMdeactivated1.0ATTN_NORM0PITCH_NORM)
            
fm_set_renderingid0000kRenderNormal25 
        }
        else
        {
            
g_ability[id] = true;
            
fm_set_renderingid0000kRenderNormal25 
        }
        
g_times[id] = false;
        
set_task(get_pcvar_float(g_tool_timelimit), "Reset_Ability"id)
    }
}

public 
Speed_Form(id)
{
    
g_ability[id] = false;
    if(
Energy_Packs[id] > && !g_ability_esc[id])
    {        
        
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        
write_byte (TE_BEAMFOLLOW)
        
write_short (id)
        
write_short (gTrail)
        
write_byte (TRAIL_LIFE)
        
write_byte (TRAIL_WIDTH)
        
write_byte (TRAIL_RED)
        
write_byte (TRAIL_GREEN)
        
write_byte (TRAIL_BLUE)
        
write_byte (TRAIL_BRIGTHNESS)
        
message_end()
        
g_speed[id] = true;
        
Energy_Packs[id] = Energy_Packs[id] - get_pcvar_num(g_tool_p_speed);
        
set_task(get_pcvar_float(g_tool_time), "Speed_Form"id);
    }
    else
    {
        if(!
g_ability_esc[id])
        {
            
emit_sound(idCHAN_STREAMdeactivated1.0ATTN_NORM0PITCH_NORM)
            
ChatColor(id"!g[ZP]!y %L"LANG_PLAYER"ENERGY_END")
            
g_speed[id] = false;
            
Energy_Packs[id] = 0;
            
g_ability[id] = true;
        }
        else
            
g_ability[id] = true;
        
g_speed[id] = false;
        
g_times[id] = false;
        
set_task(get_pcvar_float(g_tool_timelimit), "Reset_Ability"id)
    }
}

public 
GodMode(id)
{
    
g_ability[id] = false;
    if(
Energy_Packs[id] > && !g_ability_esc[id])
    {    
        
fm_set_user_godmode(id1)
        if(
get_pcvar_num(g_tool_glow_god) == 1)
        
fm_set_rendering(idkRenderFxGlowShell2002000kRenderNormal12)
        
Energy_Packs[id] = Energy_Packs[id] - get_pcvar_num(g_tool_p_god);
        
set_task(get_pcvar_float(g_tool_time), "GodMode"id);
    }
    else
    {
        if(!
g_ability_esc[id])
        {
            
emit_sound(idCHAN_STREAMdeactivated1.0ATTN_NORM0PITCH_NORM)
            
ChatColor(id"!g[ZP]!y %L"LANG_PLAYER"ENERGY_END")
            
Energy_Packs[id] = 0;
            
g_ability[id] = true;
            
fm_set_renderingid0000kRenderNormal25 
        }
        else
        {
            
g_ability[id] = true;
            
fm_set_renderingid0000kRenderNormal25 
        }
        
fm_set_user_godmode(id0)
        
g_times[id] = false;
        
set_task(get_pcvar_float(g_tool_timelimit), "Reset_Ability"id)
    }
}

stock ChatColor(const id, const input[], any:...)
{
    new 
count 1players[32]
    static 
msg[191]
    
vformat(msg190input3)
    
    
replace_all(msg190"!g""^4"// Green Color
    
replace_all(msg190"!y""^1"// Default Color
    
replace_all(msg190"!t""^3"// Team Color
    
replace_all(msg190"!t2""^0"// Team2 Color
    
    
if (idplayers[0] = id; else get_players(playerscount"ch")
    {
        for (new 
0counti++)
        {
            if (
is_user_connected(players[i]))
            {
                
message_begin(MSG_ONE_UNRELIABLESayText_players[i])
                
write_byte(players[i]);
                
write_string(msg);
                
message_end();
            }
        }
    }
Аватара пользователя
Krikkk
 
Сообщения: 16
Зарегистрирован: 18 май 2011, 12:14
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Активация способности на правую кнопку мышки

Сообщение Ternopil62000 » 24 июн 2018, 23:35

client_cmd(id, "bind F1 mtool");
Заменить на
client_cmd(id, "bind MOUSE2 mtool");
«А сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все. Мало кто может это делать»

Виталий Кличко :-D
Аватара пользователя
Ternopil62000
 
Сообщения: 36
Зарегистрирован: 05 апр 2018, 23:25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца

Re: Активация способности на правую кнопку мышки

Сообщение Krikkk » 24 июн 2018, 23:54

а не через бинд? у меня стоит протектор как и у многих игроков....
Аватара пользователя
Krikkk
 
Сообщения: 16
Зарегистрирован: 18 май 2011, 12:14
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Активация способности на правую кнопку мышки

Сообщение KOTOKU » 25 июн 2018, 02:38

Через Ham, client_cmd не катит для ЛКМ, ПКМ
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Активация способности на правую кнопку мышки

Сообщение Mistrick » 25 июн 2018, 05:45

Ternopil62000 писал(а): client_cmd(id, "bind F1 mtool");
Заменить на
client_cmd(id, "bind MOUSE2 mtool");

Руки отрывать за такие бинды надо.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Активация способности на правую кнопку мышки

Сообщение Krikkk » 25 июн 2018, 09:48

есть еще варианты?
Аватара пользователя
Krikkk
 
Сообщения: 16
Зарегистрирован: 18 май 2011, 12:14
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Активация способности на правую кнопку мышки

Сообщение flymic24 » 25 июн 2018, 10:06

Krikkk,
1. Регистрируй на каждое оружие Ham_Weapon_SecondaryAttack и в нем вызывай функцию Multimode_Begin
2. У тебя есть синк игрока:
Код: Выделить всё
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")

По нажатой игроком кнопке отлавливай бит IN_ATTACK2 и вызывай функцию Multimode_Begin
3. Регистрируй новый:
Код: Выделить всё
register_forward(FM_CmdStart, "FmHook_CmdStart")

и по аналогии из метода 2 отлавливай бит кнопки IN_ATTACK2 и вызывай функцию Multimode_Begin

З.Ы. Бинды однозначно идут лесом. Руки бы повыдерал за их использование
Аватара пользователя
flymic24
 
Сообщения: 209
Зарегистрирован: 05 окт 2012, 17:29
Откуда: Bryansk
Благодарил (а): 4 раз.
Поблагодарили: 76 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Активация способности на правую кнопку мышки

Сообщение Dmitry Beast » 25 июн 2018, 11:13

отловить нажатие "второй атаки" и выполнить задачу религия не позволяет?
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: Активация способности на правую кнопку мышки

Сообщение 3BEPb » 26 июн 2018, 10:40

flymic24, ну и способ. Тут же частота обновлений огромная. Серв спасибо не скажет.
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Активация способности на правую кнопку мышки

Сообщение Xelson » 27 июн 2018, 12:32

3BEPb, не будет жаловаться сервер с грамотно использованным prethink
Аватара пользователя
Xelson
 
Сообщения: 365
Зарегистрирован: 06 мар 2016, 14:41
Откуда: Беларусь
Благодарил (а): 16 раз.
Поблагодарили: 46 раз.
Опыт программирования: Больше трех лет

След.

Вернуться в Скриптинг

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7