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

Choose knifes: некорректно работает отброс

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

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

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

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

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

Choose knifes: некорректно работает отброс

Сообщение Alexius » 01 фев 2018, 13:53

Доброго времени суток.
Я новичок в этом деле и пытаюсь собрать свой сервер.
Пока все на стадии тестирования.

Столкнулся с проблемой при использовании плагина на ножи.
Дело в том, что мой плагин при использовании ножа на отталкивание, отталкивает вверх и вперед.
Если же зажать кнопку, то просто на просто поднимает противника вверх.
При попытке изменить параметр knok результатов не дал.

Можете подсказать какой параметр отвечает за такое действие или в какую сторону копать?

Вот .sma файл плагина:

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

#define PLUGIN    "Choose knifes"
#define VERSION    "1.0"
#define AUTHOR    "CHyC/4e/l"

#define VIP ADMIN_LEVEL_H
#define MAXPLAYERS 32

new combat_v_model[] = "models/zb/v_combat_knife.mdl"
new combat_p_model[] = "models/zb/p_combat_knife.mdl"

new strong_v_model[] = "models/zb/v_strong_knife.mdl"
new strong_p_model[] = "models/zb/p_strong_knife.mdl"

new axe_v_model[] = "models/zb/v_axe_knife.mdl"    
new axe_p_model[] = "models/zb/p_axe_knife.mdl"    

new katana_v_model[] = "models/zb/v_katana_knife.mdl"    
new katana_p_model[] = "models/zb/p_katana_knife.mdl"

new hammer_v_model[] = "models/zb/v_hammer_knife.mdl"    
new hammer_p_model[] = "models/zb/p_hammer_knife.mdl"    

const m_pPlayer 41 
const m_flNextPrimaryAttack 46 
const m_flNextSecondaryAttack 47 
const m_flTimeWeaponIdle 48 

new g_hasSpeed[33], SayText
new bool:g_WasShowed[MAXPLAYERS 1]
new 
g_knife_combat[33], cvar_knife_combat_jumpcvar_knife_combat_spdcvar_knife_combat_dmgcvar_knife_combat_knockcvar_knife_combat_spd_attack2
new g_knife_strong[33], cvar_knife_strong_jumpcvar_knife_strong_spdcvar_knife_strong_dmgcvar_knife_strong_knockcvar_knife_strong_spd_attack2
new g_knife_axe[33], cvar_knife_axe_jumpcvar_knife_axe_spdcvar_knife_axe_dmgcvar_knife_axe_knockcvar_knife_axe_spd_attack2
new g_knife_katana[33], cvar_knife_katana_jumpcvar_knife_katana_spdcvar_knife_katana_dmgcvar_knife_katana_knockcvar_knife_katana_spd_attack2
new g_knife_hammer[33], cvar_knife_hammer_jumpcvar_knife_hammer_spdcvar_knife_hammer_dmgcvar_knife_hammer_knockcvar_hammer_spd_attack2

new const g_sound_knife[] = { "items/gunpickup2.wav" }

new const 
combat_sounds[][] =
{
    
"zmwpn/zb_knife/combat_deploy.wav",
    
"zmwpn/zb_knife/combat_hit.wav"    ,
    
"zmwpn/zb_knife/combat_hit.wav"    ,
    
"zmwpn/zb_knife/combat_hit.wav"    ,
    
"zmwpn/zb_knife/combat_hit.wav"    ,
    
"zmwpn/zb_knife/combat_hitwall.wav",
    
"zmwpn/zb_knife/combat_slash.wav",
    
"zmwpn/zb_knife/combat_slash.wav",
    
"zmwpn/zb_knife/combat_stab.wav"
}

new const 
strong_sounds[][] =
{
    
"zmwpn/zb_knife/strong_deploy.wav",
    
"zmwpn/zb_knife/strong_hit.wav",
    
"zmwpn/zb_knife/strong_hit.wav",
    
"zmwpn/zb_knife/strong_hit.wav",
    
"zmwpn/zb_knife/strong_hit.wav",
    
"zmwpn/zb_knife/strong_hitwall.wav",
    
"zmwpn/zb_knife/strong_slash.wav",
    
"zmwpn/zb_knife/strong_slash.wav",
    
"zmwpn/zb_knife/strong_stab.wav"
}

new const 
axe_sounds[][] =
{
    
"zmwpn/zb_knife/axe_deploy.wav",
    
"zmwpn/zb_knife/axe_hit.wav",
    
"zmwpn/zb_knife/axe_hit.wav",
    
"zmwpn/zb_knife/axe_hit.wav",
    
"zmwpn/zb_knife/axe_hit.wav",
    
"zmwpn/zb_knife/axe_hitwall.wav",
    
"zmwpn/zb_knife/axe_slash.wav",
    
"zmwpn/zb_knife/axe_slash.wav",
    
"zmwpn/zb_knife/axe_stab.wav"
}

new const 
katana_sounds[][] =
{
    
"zmwpn/zb_knife/katana_deploy.wav",
    
"zmwpn/zb_knife/katana_hit.wav",
    
"zmwpn/zb_knife/katana_hit.wav",
    
"zmwpn/zb_knife/katana_hit.wav",
    
"zmwpn/zb_knife/katana_hit.wav",
    
"zmwpn/zb_knife/katana_hitwall.wav",
    
"zmwpn/zb_knife/katana_slash.wav",
    
"zmwpn/zb_knife/katana_slash.wav",
    
"zmwpn/zb_knife/katana_stab.wav"
}

new const 
hammer_sounds[][] =
{
    
"zmwpn/zb_knife/hammer_deploy.wav",
    
"zmwpn/zb_knife/hammer_hit.wav",
    
"zmwpn/zb_knife/hammer_hit.wav",
    
"zmwpn/zb_knife/hammer_hit.wav",
    
"zmwpn/zb_knife/hammer_hit.wav",
    
"zmwpn/zb_knife/hammer_hitwall.wav",
    
"zmwpn/zb_knife/hammer_slash.wav",
    
"zmwpn/zb_knife/hammer_slash.wav",
    
"zmwpn/zb_knife/hammer_stab.wav"
}

new const 
oldknife_sounds[][] =
{
    
"weapons/knife_deploy1.wav",
    
"weapons/knife_hit1.wav",
    
"weapons/knife_hit2.wav",
    
"weapons/knife_hit3.wav",
    
"weapons/knife_hit4.wav",
    
"weapons/knife_hitwall1.wav",
    
"weapons/knife_slash1.wav",
    
"weapons/knife_slash2.wav",
    
"weapons/knife_stab.wav"
}

public 
plugin_init()
{
    
register_plugin(PLUGIN VERSION AUTHOR);
    
register_cvar("zp_addon_knife"VERSIONFCVAR_SERVER);
        
SayText get_user_msgid("SayText")   

     
register_clcmd("say /knife","knife_menu",ADMIN_ALL,"knife_menu")
     
register_clcmd("/knife","knife_menu",ADMIN_ALL,"knife_menu")
    
register_clcmd("combat""give_combat")
    
register_clcmd("strong""give_strong")
    
register_clcmd("axe""give_axe")
    
register_clcmd("katana""give_katana")
    
register_clcmd("hammer""give_hammer")

    
register_event("CurWeapon","checkWeapon","be","1=1");
    
register_event("Damage" "event_Damage" "b" "2>0");

    
register_forward(FM_PlayerPreThink"fw_PlayerPreThink");
    
register_forward(FM_EmitSound"fw_EmitSound");

    
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg");

    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage");
        
RegisterHam(Ham_Weapon_SecondaryAttack"weapon_knife""fw_Knife_SecondaryAttack_Post"1

    
cvar_knife_combat_jumpregister_cvar("zp_knife_combat_jump""290.0");
    
cvar_knife_combat_spd register_cvar("zp_knife_combat_spd""310.0");
    
cvar_knife_combat_dmg register_cvar("zp_knife_combat_dmg" "5.0");
    
cvar_knife_combat_knock register_cvar("zp_knife_combat_knock" "6.0");
    
cvar_knife_combat_spd_attack2 register_cvar("zp_knife_combat_spd_attack2" "1.3");

    
cvar_knife_strong_jumpregister_cvar("zp_knife_strong_jump""290.0");
    
cvar_knife_strong_spd register_cvar("zp_knife_strong_spd""270.0");
    
cvar_knife_strong_dmg register_cvar("zp_knife_strong_dmg" "11.0");
    
cvar_knife_strong_knock register_cvar("zp_knife_strong_knock" "8.0");
    
cvar_knife_strong_spd_attack2 register_cvar("zp_knife_strong_spd_attack2" "1.8");

    
cvar_knife_axe_jumpregister_cvar("zp_knife_axe_jump""335.0");
    
cvar_knife_axe_spd register_cvar("zp_knife_axe_spd""270.0");
    
cvar_knife_axe_dmg register_cvar("zp_knife_axe_dmg" "6.0");
    
cvar_knife_axe_knock register_cvar("zp_knife_axe_knock" "6.0");
    
cvar_knife_axe_spd_attack2 register_cvar("zp_knife_axe_spd_attack2" "1.5");

    
cvar_knife_katana_jumpregister_cvar("zp_knife_katana_jump""290.0");
    
cvar_knife_katana_spd register_cvar("zp_knife_katana_spd""270.0");
    
cvar_knife_katana_dmg register_cvar("zp_knife_katana_dmg" "5.5");
    
cvar_knife_katana_knock register_cvar("zp_knife_katana_knock" "12.5");
    
cvar_knife_katana_spd_attack2 register_cvar("zp_knife_katana_spd_attack2" "1.3");

    
cvar_knife_hammer_jumpregister_cvar("zp_knife_hammer_jump""320.0");
    
cvar_knife_hammer_spdregister_cvar("zp_knife_hammer_spd""300.0");
    
cvar_knife_hammer_dmg register_cvar("zp_knife_hammer_dmg" "12.0");
    
cvar_knife_hammer_knock register_cvar("zp_knife_hammer_knock" "13.0");
    
cvar_hammer_spd_attack2 register_cvar("zp_knife_hammer_spd_attack2" "1.5");

        
register_event("HLTV""event_round_start""a""1=0""2=0")
}

public 
client_connect(id)
{
    
g_knife_combat[id] = false
    g_knife_strong
[id] = false
    g_knife_axe
[id] = false
    g_knife_katana
[id] = false
    g_knife_hammer
[id] = false
    g_hasSpeed
[id] = false
}

public 
client_disconnect(id)
{
    
g_knife_combat[id] = false
    g_knife_strong
[id] = false
    g_knife_axe
[id] = false
    g_knife_katana
[id] = false
    g_knife_hammer
[id] = false
    g_hasSpeed
[id] = false
}

public 
plugin_precache()
{
    
precache_model(combat_v_model)
    
precache_model(combat_p_model)
    
precache_model(strong_v_model)
    
precache_model(strong_p_model)
    
precache_model(axe_v_model)
    
precache_model(axe_p_model)
    
precache_model(katana_v_model)
    
precache_model(katana_p_model)
    
precache_model(hammer_v_model)
    
precache_model(hammer_p_model)

    
precache_sound(g_sound_knife)

    for(new 
0sizeof combat_soundsi++)
        
precache_sound(combat_sounds[i])

    for(new 
0sizeof strong_soundsi++)
        
precache_sound(strong_sounds[i])

    for(new 
0sizeof axe_soundsi++)
        
precache_sound(axe_sounds[i])  

    for(new 
0sizeof katana_soundsi++)
        
precache_sound(katana_sounds[i])

    for(new 
0sizeof hammer_soundsi++)
        
precache_sound(hammer_sounds[i])
}

public 
event_round_start(id)
{
        for (new 
iMAXPLAYERS 1i++)
            
g_WasShowed[i] = false
}

public 
knife_menu(id)
{
        if (
g_WasShowed[id])
        {
            
print_col_chat(id"^1[^4Оружие^1] Меню используется только ^4один ^1раз!")
            return 
PLUGIN_HANDLED
        
}

    if(
is_user_alive(id) && !zp_get_user_zombie(id))
    {
        
my_menu(id)
    }

    return 
PLUGIN_HANDLED
}

public 
my_menu(id)
{
    new 
menu menu_create("\yВыберите нож!""menu_handler");
    
menu_additem(menu"\wCombat \y[ Скорость +40 ]""1"0);
    
menu_additem(menu"\wStrong \y[ Урон +50 ]""2"0);
    
menu_additem(menu"\wAxe \y[ Прыжок +45 ]""3"0);
    
menu_additem(menu"\wKatana \y[ Отброс +55 ]""4"0);
    
menu_additem(menu"\wHammer \r[ . * VIP * . ]""5"0);
    
    
menu_setprop(menuMPROP_EXITMEXIT_ALL);
    
    
menu_display(idmenu0);    


public 
menu_handler(idmenuitem)
{
    if( 
item == MENU_EXIT )
    {
               
menu_destroy(menu);
            return 
PLUGIN_HANDLED;    
    }
    
    new 
data[6], iName[64];
    new 
accesscallback;
    
    
menu_item_getinfo(menuitemaccessdata,5iName63callback);
    
    new 
key str_to_num(data);
    
    switch(
key)
    {
            case 
1:
            {
            
give_combat(id)
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED
        
}
        case 
2:
        {
            
give_strong(id)
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED
        
}
        case 
3:
        {
            
give_axe(id)
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED
        
}
        case 
4:
        {
            
give_katana(id)
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED
        
}
        case 
5:
        {
                       
set_user_armor(idget_user_armor(id) + 50)
            
give_hammer(id)
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED
        
}
    }
    
menu_destroy(menu);
    return 
PLUGIN_HANDLED
}

public 
give_combat(id)
{
    
g_knife_combat[id] = true    
    g_knife_strong
[id] = false
    g_knife_axe
[id] = false    
    g_knife_katana
[id] = false    
    g_knife_hammer
[id] = false
    g_hasSpeed
[id] =  true
    g_WasShowed
[id] = true

    engfunc
(EngFunc_EmitSoundidCHAN_BODYg_sound_knife1.0ATTN_NORM0PITCH_NORM)
}

public 
give_strong(id)
{
    
g_knife_combat[id] = false    
    g_knife_strong
[id] = true    
    g_knife_axe
[id] = false
    g_knife_katana
[id] = false    
    g_knife_hammer
[id] = false
    g_hasSpeed
[id] = true
    g_WasShowed
[id] = true

    engfunc
(EngFunc_EmitSoundidCHAN_BODYg_sound_knife1.0ATTN_NORM0PITCH_NORM)
}

public 
give_axe(id)
{
    
g_knife_combat[id] = false    
    g_knife_strong
[id] = false    
    g_knife_axe
[id] = true
    g_knife_katana
[id] = false    
    g_knife_hammer
[id] = false
    g_hasSpeed
[id] = true
    g_WasShowed
[id] = true

    engfunc
(EngFunc_EmitSoundidCHAN_BODYg_sound_knife1.0ATTN_NORM0PITCH_NORM)
}

public 
give_katana(id)
{
    
g_knife_combat[id] = false    
    g_knife_strong
[id] = false    
    g_knife_axe
[id] = false
    g_knife_katana
[id] = true    
    g_knife_hammer
[id] = false
    g_hasSpeed
[id] = true
    g_WasShowed
[id] = true

    engfunc
(EngFunc_EmitSoundidCHAN_BODYg_sound_knife1.0ATTN_NORM0PITCH_NORM)
}


public 
give_hammer(id)
{
    if (
get_user_flags(id) & VIP)
    {
        
g_knife_combat[id] = false    
        g_knife_strong
[id] = false    
        g_knife_axe
[id] = false
        g_knife_katana
[id] = false
        g_knife_hammer
[id] = true
        g_hasSpeed
[id] =  true
        g_WasShowed
[id] = true

        engfunc
(EngFunc_EmitSoundidCHAN_BODYg_sound_knife1.0ATTN_NORM0PITCH_NORM)
    }
    else 
    {
        
client_cmd(id"/knife")
        
g_WasShowed[id] = true
    
}
}

public 
checkWeapon(id)
{
    new 
plrWeapId
    
    plrWeapId 
get_user_weapon(id)
    
    if (
plrWeapId == CSW_KNIFE && (g_knife_combat[id] || g_knife_strong[id] || g_knife_axe[id] || g_knife_katana[id] || g_knife_hammer[id]))
    {
        
checkModel(id)
    }
}

public 
checkModel(id)
{
    if (
zp_get_user_zombie(id))
        return 
PLUGIN_HANDLED
    
    
if (g_knife_combat[id])
    {
        
set_pev(idpev_viewmodel2combat_v_model)
        
set_pev(idpev_weaponmodel2combat_p_model)
    }

    if (
g_knife_strong[id])
    {
        
set_pev(idpev_viewmodel2strong_v_model)
        
set_pev(idpev_weaponmodel2strong_p_model)
    }

    if (
g_knife_axe[id])
    {
        
set_pev(idpev_viewmodel2axe_v_model)
        
set_pev(idpev_weaponmodel2axe_p_model)
    }

    if (
g_knife_katana[id])
    {
        
set_pev(idpev_viewmodel2katana_v_model)
        
set_pev(idpev_weaponmodel2katana_p_model)
    }

    if (
g_knife_hammer[id])
    {
        
set_pev(idpev_viewmodel2hammer_v_model)
        
set_pev(idpev_weaponmodel2hammer_p_model)
    }
    return 
PLUGIN_HANDLED
}

public 
fw_EmitSound(idchannel, const sound[])
{
    if(!
is_user_alive(id) || zp_get_user_zombie(id))
        return 
FMRES_IGNORED
        
    
for(new 0sizeof combat_soundsi++) 
    for(new 
0sizeof strong_soundsi++)
    for(new 
0sizeof axe_soundsi++)
    for(new 
0sizeof katana_soundsi++)
    for(new 
0sizeof hammer_soundsi++)
    {
        if(
equal(soundoldknife_sounds[i]))
        {
            if (
g_knife_combat[id])
            {
                
emit_sound(idchannelcombat_sounds[i], 1.0ATTN_NORM0PITCH_NORM)
                return 
FMRES_SUPERCEDE
            
}
            if (
g_knife_strong[id])
            {
                
emit_sound(idchannelstrong_sounds[i], 1.0ATTN_NORM0PITCH_NORM)
                return 
FMRES_SUPERCEDE
            
}
            if (
g_knife_axe[id])
            {
                
emit_sound(idchannelaxe_sounds[i], 1.0ATTN_NORM0PITCH_NORM)
                return 
FMRES_SUPERCEDE
            
}
            if (
g_knife_katana[id])
            {
                
emit_sound(idchannelkatana_sounds[i], 1.0ATTN_NORM0PITCH_NORM)
                return 
FMRES_SUPERCEDE
            
}
            if (
g_knife_hammer[id])
            {
                
emit_sound(idchannelhammer_sounds[i], 1.0ATTN_NORM0PITCH_NORM)
                return 
FMRES_SUPERCEDE
            
}
            if (!
g_knife_combat[id] || !g_knife_strong[id] || !g_knife_axe[id] || !g_knife_katana[id] || !g_knife_hammer[id])
            {
                
emit_sound(idchanneloldknife_sounds[i], 1.0ATTN_NORM0PITCH_NORM)
                return 
FMRES_SUPERCEDE
            
}
        }
    }
    return 
FMRES_IGNORED
}

public 
message_DeathMsg(msg_idmsg_destid)
{
    static 
szTruncatedWeapon[33], iattackerivictim
    
    get_msg_arg_string
(4szTruncatedWeaponcharsmax(szTruncatedWeapon))
    
    
iattacker get_msg_arg_int(1)
    
ivictim get_msg_arg_int(2)
    
    if(!
is_user_connected(iattacker) || iattacker == ivictim)
        return 
PLUGIN_CONTINUE

    
if (!zp_get_user_zombie(iattacker))
    {
        if(
equal(szTruncatedWeapon"knife") && get_user_weapon(iattacker) == CSW_KNIFE)
        {
            if(
g_knife_combat[iattacker])
                
set_msg_arg_string(4"Combat knife")
        }
    
        if(
equal(szTruncatedWeapon"knife") && get_user_weapon(iattacker) == CSW_KNIFE)
        {
            if(
g_knife_strong[iattacker])
                
set_msg_arg_string(4"Strong knife")
        }

        if(
equal(szTruncatedWeapon"knife") && get_user_weapon(iattacker) == CSW_KNIFE)
        {
            if(
g_knife_axe[iattacker])
                
set_msg_arg_string(4"Axe knife")
        }

        if(
equal(szTruncatedWeapon"knife") && get_user_weapon(iattacker) == CSW_KNIFE)
        {
            if(
g_knife_katana[iattacker])
                
set_msg_arg_string(4"Katana knife")
        }

        if(
equal(szTruncatedWeapon"knife") && get_user_weapon(iattacker) == CSW_KNIFE)
        {
            if(
g_knife_hammer[iattacker])
                
set_msg_arg_string(4"Ice knife")
        }
    }
    return 
PLUGIN_CONTINUE
}

stock print_col_chat(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  
        
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();  
                    }  
            }  
        }  
}   

public 
fw_PlayerPreThink(id)
{
    if(!
is_user_alive(id) || zp_get_user_zombie(id))
        return 
FMRES_IGNORED

    
new temp[2], weapon get_user_weapon(idtemp[0], temp[1])

    if (
weapon == CSW_KNIFE && g_knife_combat[id])
    {
        
g_hasSpeed[id] = true
        set_pev
(idpev_maxspeedget_pcvar_float(cvar_knife_combat_spd))
    }

    if(
weapon == CSW_KNIFE && g_knife_combat[id])        
        if ((
pev(idpev_button) & IN_JUMP) && !(pev(idpev_oldbuttons) & IN_JUMP))
        {
            new 
flags pev(idpev_flags)
            new 
waterlvl pev(idpev_waterlevel)
            
            if (!(
flags FL_ONGROUND))
                return 
FMRES_IGNORED

            
if (flags FL_WATERJUMP)
                return 
FMRES_IGNORED

            
if (waterlvl 1)
                return 
FMRES_IGNORED
            
            
new Float:fVelocity[3]
            
pev(idpev_velocityfVelocity)
            
            
fVelocity[2] += get_pcvar_num(cvar_knife_combat_jump)
            
            
set_pev(idpev_velocityfVelocity)
            
set_pev(idpev_gaitsequence6)
        }
    if (
weapon == CSW_KNIFE && g_knife_strong[id])
    {
        
g_hasSpeed[id] = true
        set_pev
(idpev_maxspeedget_pcvar_float(cvar_knife_strong_spd))

        if ((
pev(idpev_button) & IN_JUMP) && !(pev(idpev_oldbuttons) & IN_JUMP))
        {
            new 
flags pev(idpev_flags)
            new 
waterlvl pev(idpev_waterlevel)
            
            if (!(
flags FL_ONGROUND))
                return 
FMRES_IGNORED

            
if (flags FL_WATERJUMP)
                return 
FMRES_IGNORED

            
if (waterlvl 1)
                return 
FMRES_IGNORED
            
            
new Float:fVelocity[3]
            
pev(idpev_velocityfVelocity)
            
            
fVelocity[2] += get_pcvar_num(cvar_knife_strong_jump)
            
            
set_pev(idpev_velocityfVelocity)
            
set_pev(idpev_gaitsequence6)
        }
    }
    if (
weapon == CSW_KNIFE && g_knife_axe[id])
    {
        
g_hasSpeed[id] = true
        set_pev
(idpev_maxspeedget_pcvar_float(cvar_knife_axe_spd))

        if ((
pev(idpev_button) & IN_JUMP) && !(pev(idpev_oldbuttons) & IN_JUMP))
        {
            new 
flags pev(idpev_flags)
            new 
waterlvl pev(idpev_waterlevel)
            
            if (!(
flags FL_ONGROUND))
                return 
FMRES_IGNORED

            
if (flags FL_WATERJUMP)
                return 
FMRES_IGNORED

            
if (waterlvl 1)
                return 
FMRES_IGNORED
            
            
new Float:fVelocity[3]
            
pev(idpev_velocityfVelocity)
            
            
fVelocity[2] += get_pcvar_num(cvar_knife_axe_jump)
            
            
set_pev(idpev_velocityfVelocity)
            
set_pev(idpev_gaitsequence6)
        }
    }
    if (
weapon == CSW_KNIFE && g_knife_katana[id])
    {
        
g_hasSpeed[id] = true
        set_pev
(idpev_maxspeedget_pcvar_float(cvar_knife_katana_spd))

        if ((
pev(idpev_button) & IN_JUMP) && !(pev(idpev_oldbuttons) & IN_JUMP))
        {
            new 
flags pev(idpev_flags)
            new 
waterlvl pev(idpev_waterlevel)
            
            if (!(
flags FL_ONGROUND))
                return 
FMRES_IGNORED

            
if (flags FL_WATERJUMP)
                return 
FMRES_IGNORED

            
if (waterlvl 1)
                return 
FMRES_IGNORED
            
            
new Float:fVelocity[3]
            
pev(idpev_velocityfVelocity)
            
            
fVelocity[2] += get_pcvar_num(cvar_knife_katana_jump)
            
            
set_pev(idpev_velocityfVelocity)
            
set_pev(idpev_gaitsequence6)
        }
    }
    if (
weapon == CSW_KNIFE && g_knife_hammer[id])
    {
        
g_hasSpeed[id] = true
        set_pev
(idpev_maxspeedget_pcvar_float(cvar_knife_hammer_spd))

        if ((
pev(idpev_button) & IN_JUMP) && !(pev(idpev_oldbuttons) & IN_JUMP))
        {
            new 
flags pev(idpev_flags)
            new 
waterlvl pev(idpev_waterlevel)
            
            if (!(
flags FL_ONGROUND))
                return 
FMRES_IGNORED

            
if (flags FL_WATERJUMP)
                return 
FMRES_IGNORED

            
if (waterlvl 1)
                return 
FMRES_IGNORED
            
            
new Float:fVelocity[3]
            
pev(idpev_velocityfVelocity)
            
            
fVelocity[2] += get_pcvar_num(cvar_knife_hammer_jump)
            
            
set_pev(idpev_velocityfVelocity)
            
set_pev(idpev_gaitsequence6)
        }
    }
    return 
FMRES_IGNORED
}  

public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if(!
is_user_connected(attacker))
        return 
HAM_IGNORED
    
    
if(zp_get_user_zombie(attacker))
        return 
HAM_IGNORED

    
new weapon get_user_weapon(attacker)

    if (
weapon == CSW_KNIFE && g_knife_combat[attacker])
    {    
        
SetHamParamFloat(4damage get_pcvar_float(cvar_knife_combat_dmg))
    }
    if (
weapon == CSW_KNIFE && g_knife_strong[attacker])
    {    
        
SetHamParamFloat(4damage get_pcvar_float(cvar_knife_strong_dmg))
    }
    if (
weapon == CSW_KNIFE && g_knife_axe[attacker])
    {    
        
SetHamParamFloat(4damage get_pcvar_float(cvar_knife_axe_dmg))
    }
    if (
weapon == CSW_KNIFE && g_knife_katana[attacker])
    {    
        
SetHamParamFloat(4damage get_pcvar_float(cvar_knife_katana_dmg))
    }
        
    if (
weapon == CSW_KNIFE && g_knife_hammer[attacker])
    {     
        
SetHamParamFloat(4damage get_pcvar_float(cvar_knife_hammer_dmg))
    }

    return 
HAM_IGNORED
}

public 
fw_Knife_SecondaryAttack_Post(knife
{     
        static 
id 
        id 
get_pdata_cbase(knifem_pPlayer4

        if(
zp_get_user_zombie(id))
        return 
HAM_IGNORED
    
        
if(is_user_connected(id) && g_knife_combat[id]) 
        { 
            static 
Float:flRate 
            flRate 
get_pcvar_float(cvar_knife_combat_spd_attack2
         
            
set_pdata_float(knifem_flNextPrimaryAttackflRate4
            
set_pdata_float(knifem_flNextSecondaryAttackflRate4
            
set_pdata_float(knifem_flTimeWeaponIdleflRate4
        } 
 
        if(
is_user_connected(id) && g_knife_strong[id]) 
        { 
            static 
Float:flRate 
            flRate 
get_pcvar_float(cvar_knife_strong_spd_attack2
             
            
set_pdata_float(knifem_flNextPrimaryAttackflRate4
            
set_pdata_float(knifem_flNextSecondaryAttackflRate4
            
set_pdata_float(knifem_flTimeWeaponIdleflRate4
        } 

        if(
is_user_connected(id) && g_knife_axe[id]) 
        { 
            static 
Float:flRate 
            flRate 
get_pcvar_float(cvar_knife_axe_spd_attack2
                 
            
set_pdata_float(knifem_flNextPrimaryAttackflRate4
            
set_pdata_float(knifem_flNextSecondaryAttackflRate4
            
set_pdata_float(knifem_flTimeWeaponIdleflRate4
        } 

        if(
is_user_connected(id) && g_knife_katana[id]) 
        { 
            static 
Float:flRate 
            flRate 
get_pcvar_float(cvar_knife_katana_spd_attack2
                 
            
set_pdata_float(knifem_flNextPrimaryAttackflRate4
            
set_pdata_float(knifem_flNextSecondaryAttackflRate4
            
set_pdata_float(knifem_flTimeWeaponIdleflRate4
        } 

        if(
is_user_connected(id) && g_knife_hammer[id]) 
        { 
            static 
Float:flRate 
            flRate 
get_pcvar_float(cvar_hammer_spd_attack2
             
            
set_pdata_float(knifem_flNextPrimaryAttackflRate4
            
set_pdata_float(knifem_flNextSecondaryAttackflRate4
            
set_pdata_float(knifem_flTimeWeaponIdleflRate4
        }     
   
        return 
HAM_IGNORED 


public 
event_Damage(id)
{
    new 
weapon attacker get_user_attacker(id weapon);

    if(!
is_user_alive(attacker))
        return 
PLUGIN_CONTINUE;

    if(
weapon == CSW_KNIFE && g_knife_combat[attacker])
    {
        new 
Float:vec[3];
        new 
Float:oldvelo[3];
        
get_user_velocity(idoldvelo);
        
create_velocity_vector(id attacker vec);
        
vec[0] += oldvelo[0];
        
vec[1] += oldvelo[1];
        
set_user_velocity(id vec);
    }

    if(
weapon == CSW_KNIFE && g_knife_strong[attacker])
    {
        new 
Float:vec[3];
        new 
Float:oldvelo[3];
        
get_user_velocity(idoldvelo);
        
create_velocity_vector(id attacker vec);
        
vec[0] += oldvelo[0];
        
vec[1] += oldvelo[1];
        
set_user_velocity(id vec);
    }

    if(
weapon == CSW_KNIFE && g_knife_axe[attacker])
    {
        new 
Float:vec[3];
        new 
Float:oldvelo[3];
        
get_user_velocity(idoldvelo);
        
create_velocity_vector(id attacker vec);
        
vec[0] += oldvelo[0];
        
vec[1] += oldvelo[1];
        
set_user_velocity(id vec);
    }

    if(
weapon == CSW_KNIFE && g_knife_katana[attacker])
    {
        new 
Float:vec[3];
        new 
Float:oldvelo[3];
        
get_user_velocity(idoldvelo);
        
create_velocity_vector(id attacker vec);
        
vec[0] += oldvelo[0];
        
vec[1] += oldvelo[1];
        
set_user_velocity(id vec);
    }

    if(
weapon == CSW_KNIFE && g_knife_hammer[attacker])
    {
        new 
Float:vec[3];
        new 
Float:oldvelo[3];
        
get_user_velocity(idoldvelo);
        
create_velocity_vector(id attacker vec);
        
vec[0] += oldvelo[0];
        
vec[1] += oldvelo[1];
        
set_user_velocity(id vec);
    }

    return 
PLUGIN_CONTINUE;
}

stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
    if(!
zp_get_user_zombie(victim) || !is_user_alive(attacker))
        return 
0;

    new 
Float:vicorigin[3];
    new 
Float:attorigin[3];
    
entity_get_vector(victim   EV_VEC_origin vicorigin);
    
entity_get_vector(attacker EV_VEC_origin attorigin);

    new 
Float:origin2[3]
    
origin2[0] = vicorigin[0] - attorigin[0];
    
origin2[1] = vicorigin[1] - attorigin[1];

    new 
Float:largestnum 0.0;

    if(
floatabs(origin2[0])>largestnumlargestnum floatabs(origin2[0]);
    if(
floatabs(origin2[1])>largestnumlargestnum floatabs(origin2[1]);

    
origin2[0] /= largestnum;
    
origin2[1] /= largestnum;

    if (
g_knife_combat[attacker])
    {
        
velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife_combat_knock) * 3000) ) / get_entity_distance(victim attacker);
        
velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife_combat_knock) * 3000) ) / get_entity_distance(victim attacker);
    }

    if (
g_knife_strong[attacker])
    {
        
velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife_strong_knock) * 3000) ) / get_entity_distance(victim attacker);
        
velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife_strong_knock) * 3000) ) / get_entity_distance(victim attacker);
    }

    if (
g_knife_axe[attacker])
    {
        
velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife_axe_knock) * 3000) ) / get_entity_distance(victim attacker);
        
velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife_axe_knock) * 3000) ) / get_entity_distance(victim attacker);
    }

    if (
g_knife_katana[attacker])
    {
        
velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife_katana_knock) * 3000) ) / get_entity_distance(victim attacker);
        
velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife_katana_knock) * 3000) ) / get_entity_distance(victim attacker);
    }

    if (
g_knife_hammer[attacker])
    {
        
velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife_hammer_knock) * 3000) ) / get_entity_distance(victim attacker);
        
velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife_hammer_knock) * 3000) ) / get_entity_distance(victim attacker);
    }

    if(
velocity[0] <= 20.0 || velocity[1] <= 20.0)
        
velocity[2] = random_float(200.0 275.0);

    return 
1;
}

public 
client_putinserver(id)
{
    switch(
random_num(00))
    {
        case 
0:
        {
            
g_knife_combat[id] = true
            g_hasSpeed
[id] = true
        
}

    }

Заранее спасибо!

Неинформативное название темы (исправлено) // Subb98
Аватара пользователя
Alexius
 
Сообщения: 2
Зарегистрирован: 01 фев 2018, 13:41
Откуда: Ижевск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Choose knifes: некорректно работает отброс

Сообщение Alexius » 02 фев 2018, 08:26

Доброго времени суток.
Вижу тут форум не особо посещаем.
Может хотя бы подскажите в какую сторону смотреть\копать дабы найти проблему?
Может это проблема не ножей а типов зомби или общие настройки.
Кто сталкивался с похожей проблемой? :shout:
Аватара пользователя
Alexius
 
Сообщения: 2
Зарегистрирован: 01 фев 2018, 13:41
Откуда: Ижевск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Choose knifes: некорректно работает отброс

Сообщение RevCrew » 02 фев 2018, 18:14

Код: Выделить всё
new Float:vec[3];
new Float:oldvelo[3];
get_user_velocity(id, oldvelo);
create_velocity_vector(id , attacker , vec);
vec[0] += oldvelo[0];
vec[1] += oldvelo[1];
set_user_velocity(id , vec); 
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown


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

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

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