Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Админ нож

Статус пользователя DRIVE37
сообщение 27.12.2015, 1:18
Сообщение #1


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Привет всем, подскажите пожалуйста, каким образом сделать последний нож только для админов, с надписью рядом [admin]

Код:
/**=========================================================================
*
* ===== Версии =====
*
* 0.1 - Реализация
* 0.2 - Добавлен вывод вашего ножа
* 0.3 - Оптимизирован код
* 0.4 - Исправлены баги
* 0.5 - Добавлен нож (оптимус)
* 0.6 - Заменены звуки у ножей.
*
===========================================================================*/

#include < amxmodx >
#include < fakemeta_util >
#include < hamsandwich >

native set_user_footsteps( id, set );

#define RegisterMenu(%1,%2) register_menucmd(register_menuid(%1), 1023, %2)
#define NUM_KNIFE 7

new const PLUGIN_NAME[ ] = { "[DR]KnifeMode" } ;
new const PLUGIN_VERSION[ ] = { "0.6" } ;
new const PLUGIN_AUTHOR[ ] = { "by BlackSmoke" } ;

new
iKnife[ 33 ],
Float:g_fLastTime[ 33 ];

const m_id = 41;
const m_pActiveItem = 373;

const OFFSET_LINUX_WEAPONS = 4;
const OFFSET_LINUX = 5;

enum
{
SOUND_DEPLOY = 0,
SOUND_HIT,
SOUND_HITWALL,
SOUND_SLASH,
SOUND_STAB
}

new const s_Models[ 2 ][ NUM_KNIFE ][ ] =
{
{
"models/v_knife.mdl",
"models/system_dr/knife/v_katana.mdl",
"models/system_dr/knife/v_strong.mdl",
"models/system_dr/knife/v_axe.mdl",
"models/system_dr/knife/v_combat.mdl",
"models/system_dr/knife/v_knifered.mdl",
"models/system_dr/knife/v_optimus.mdl"
},

{
"models/p_knife.mdl",
"models/system_dr/knife/p_katana.mdl",
"models/system_dr/knife/p_strong.mdl",
"models/system_dr/knife/p_axe.mdl",
"models/system_dr/knife/p_combat.mdl",
"models/system_dr/knife/p_knifered.mdl",
"models/system_dr/knife/p_optimus.mdl"
}
};

new s_Sound[ NUM_KNIFE ][ 5 ][ ] =
{
{ "", "", "", "", "" },

{
"system_dr/knife/katana/katana_deploy.wav",
"system_dr/knife/katana/katana_hit.wav",
"system_dr/knife/katana/katana_hitwall.wav",
"system_dr/knife/katana/katana_slash.wav",
"system_dr/knife/katana/katana_stab.wav"
},

{
"system_dr/knife/strong/strong_deploy.wav",
"system_dr/knife/strong/strong_hit.wav",
"system_dr/knife/strong/strong_hitwall.wav",
"system_dr/knife/strong/strong_slash.wav",
"system_dr/knife/strong/strong_stab.wav"
},

{
"system_dr/knife/axe/axe_deploy.wav",
"system_dr/knife/axe/axe_hit.wav",
"system_dr/knife/axe/axe_hitwall.wav",
"system_dr/knife/axe/axe_slash.wav",
"system_dr/knife/axe/axe_stab.wav"
},

{
"system_dr/knife/combat/combat_deploy.wav",
"system_dr/knife/combat/combat_hit.wav",
"system_dr/knife/combat/combat_hitwall.wav",
"system_dr/knife/combat/combat_slash.wav",
"system_dr/knife/combat/combat_stab.wav"
},

{
"system_dr/knife/katana/katana_deploy.wav",
"system_dr/knife/katana/katana_hit.wav",
"system_dr/knife/katana/katana_hitwall.wav",
"system_dr/knife/katana/katana_slash.wav",
"system_dr/knife/katana/katana_stab.wav"
},

{
"system_dr/knife/strong/strong_deploy.wav",
"system_dr/knife/strong/strong_hit.wav",
"system_dr/knife/strong/strong_hitwall.wav",
"system_dr/knife/strong/strong_slash.wav",
"system_dr/knife/strong/strong_stab.wav"
}
}

new const s_MassiveSkillAndNameiKnife[ 2 ][ NUM_KNIFE ][ ] =
{
{ "Стандартный", "Катана", "Стронг", "Акс", "Комбат", "Меч", "Оптимус" },
{ "Отсутствует", "Большой урон", "Тихий Бег", "Скорость", "Гравитация", "Регенирация", "Откидывание" }
}

public plugin_init( )
{
register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

RegisterHam( Ham_Item_Deploy, "weapon_knife", "fw__Item_Deploy", 1 );
RegisterHam( Ham_TakeDamage, "player", "fw__Damage" );

register_forward( FM_EmitSound, "fw__EmitSound" );

RegisterMenu( "KnifeModeMenu", "ActionMenuKnfMode" );

register_clcmd( "knife", "Show__knifemenu" );

register_event( "CurWeapon", "fw__CurWeapon", "be", "1=1" );
}

public plugin_precache( )
{
new i;
for( i = 1; i < NUM_KNIFE; i++ )
{
precache_model( s_Models[ 0 ][ i ] );
precache_model( s_Models[ 1 ][ i ] );
}
for( i = 0; i < 5; i++ )
{
precache_sound( s_Sound[ 1 ][ i ] );
precache_sound( s_Sound[ 2 ][ i ] );
precache_sound( s_Sound[ 3 ][ i ] );
precache_sound( s_Sound[ 4 ][ i ] );
precache_sound( s_Sound[ 6 ][ i ] );
}
}

public fw__EmitSound( id, channel, s_SoundPlay[ ] )
{
if( !is_user_alive( id ) || !iKnife[ id ] )
{
return FMRES_IGNORED;
}

if( equali( s_SoundPlay, "weapons/knife_deploy1.wav") ) // Переключение на нож.
{
emit_sound( id, channel, s_Sound[ iKnife[ id ] ][ SOUND_DEPLOY ], 1.0, ATTN_NORM, 0, PITCH_NORM )
return FMRES_SUPERCEDE;
}
else if( equali( s_SoundPlay, "weapons/knife_hit1.wav" ) || equali( s_SoundPlay, "weapons/knife_hit2.wav" ) || equali( s_SoundPlay, "weapons/knife_hit3.wav" ) || equali( s_SoundPlay, "weapons/knife_hit4.wav" ) ) // Удар левой кнопкой.
{
emit_sound(id, channel, s_Sound[ iKnife[ id ] ][ SOUND_HIT ], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE;
}
else if( equali( s_SoundPlay, "weapons/knife_hitwall1.wav" ) ) // Удар по стене.
{
emit_sound(id, channel, s_Sound[ iKnife[ id ] ][ SOUND_HITWALL ], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE;
}
else if( equali( s_SoundPlay, "weapons/knife_slash1.wav" ) || equali( s_SoundPlay, "weapons/knife_slash2.wav" ) ) // Удар по воздуху.
{
emit_sound(id, channel, s_Sound[ iKnife[ id ] ][ SOUND_SLASH ], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE;
}
else if( equali( s_SoundPlay, "weapons/knife_stab.wav" ) ) // Удар правой кнопкой.
{
emit_sound(id, channel, s_Sound[ iKnife[ id ] ][ SOUND_STAB ], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE;
}

return FMRES_IGNORED;
}

public client_authorized( id )
{
iKnife[ id ] = 4;
}

public Show__knifemenu( id )
{
if( is_deathrun_mode( "DUEL" ) )
{
return PLUGIN_HANDLED;
}

new s_Menu[ 512 ], iLen, item, iKey = MENU_KEY_0;
iLen = format( s_Menu[ iLen ], charsmax( s_Menu ) - iLen, "\yВыбирите нож^n\dВыбран: \r%s \w| \dУмение: \r%s^n", s_MassiveSkillAndNameiKnife[ 0 ][ iKnife[ id ] ], s_MassiveSkillAndNameiKnife[ 1 ][ iKnife[ id ] ] );
for( new i ; i < NUM_KNIFE-1 ; i++ )
{
item++;
iLen += format( s_Menu[ iLen ], charsmax( s_Menu ) - iLen, "^n\r%d. \w%s \y( %s%s\y )", item, s_MassiveSkillAndNameiKnife[ 0 ][ item ], iKnife[ id ] != item ? "\d" : "\r", iKnife[ id ] != item ? s_MassiveSkillAndNameiKnife[ 1 ][ item ] : "Выбран" );
if( iKnife[ id ] != item )
iKey |= ( 1 << item-1 ) ;
}
iLen += format( s_Menu[ iLen ], charsmax( s_Menu ) - iLen, "^n^n\r0. \wЗакрыть" );

show_menu( id, iKey, s_Menu, -1, "KnifeModeMenu" );
return PLUGIN_HANDLED;
}

public ActionMenuKnfMode( id, iKey )
{
if( iKey == 9 )
{
show_menu( id, 0, "^n" );
return PLUGIN_CONTINUE;
}

iKnife[ id ] = ( iKey + 1 ) ;

new pEntity = get_pdata_cbase( id, m_pActiveItem, OFFSET_LINUX );

if( pev_valid( pEntity ) )
{
ExecuteHamB (Ham_Item_Deploy, pEntity );
}

Show__knifemenu( id );

return PLUGIN_HANDLED;
}

public fw__CurWeapon( id )
{
if( !is_user_alive( id ) )
return PLUGIN_CONTINUE;

if( is_deathrun_mode( "DUEL" ) && get_user_weapon( id ) == CSW_KNIFE )
{
set_pev( id, pev_viewmodel2, "models/v_knife.mdl" );
set_pev( id, pev_weaponmodel2, "models/p_knife.mdl" );
fm_set_user_gravity( id, 0.9 );
fm_set_user_maxspeed( id, 250.0 );
set_user_footsteps( id, 0 );
iKnife[ id ] = 0;
}

switch( iKnife[ id ] )
{
case 1: fm_set_user_maxspeed( id, get_user_weapon( id ) != CSW_KNIFE ? 250.0 : 190.0 );
case 2: set_user_footsteps( id, get_user_weapon( id ) != CSW_KNIFE ? 0 : 1 );
case 3: fm_set_user_maxspeed( id, get_user_weapon( id ) != CSW_KNIFE ? 250.0 : 320.0 );
case 4:
{
fm_set_user_gravity( id, get_user_weapon( id ) != CSW_KNIFE ? 0.9 : 0.7 );
fm_set_user_maxspeed( id, 250.0 );
}

}
return PLUGIN_CONTINUE;
}

public fw__Damage( victim, inflictor, attacker, Float:damage, bits )
{
if( !is_user_connected( attacker ) || !is_user_connected( victim ) || attacker == victim || get_user_weapon( attacker ) != CSW_KNIFE || get_user_team( victim ) == get_user_team( attacker ))
return HAM_IGNORED;

if( !is_deathrun_mode( "DUEL" ) && iKnife[ attacker ] == 1 )
{
SetHamParamFloat( 4, damage * 2.0 );
}

if( iKnife[ attacker ] == 6 )
{
new Float:fVelocity[ 3 ] ;
pev( victim, pev_velocity, fVelocity ) ;
velocity_by_aim( attacker, 5000, fVelocity ) ;
fVelocity[ 2 ] = 100.0;
set_pev( victim, pev_velocity, fVelocity ) ;
}

return HAM_IGNORED;
}

public client_PreThink( id )
{
if( !is_user_alive( id ) || get_user_weapon ( id ) != CSW_KNIFE || ( get_gametime( ) - g_fLastTime[ id ] ) < 2.0 || pev( id, pev_health ) >= 100.0 || iKnife[ id ] != 5)
return PLUGIN_CONTINUE;

fm_set_user_health( id, pev( id, pev_health ) + 1 );
g_fLastTime[ id ] = get_gametime( );

return PLUGIN_CONTINUE;
}

public fw__Item_Deploy( pEntity )
{
if( pev_valid( pEntity ) != 2 )
return HAM_HANDLED;

new id = get_pdata_cbase( pEntity, m_id, OFFSET_LINUX_WEAPONS );

if( !is_user_alive( id ) )
return HAM_IGNORED;

switch ( iKnife[ id ] )
{
case 1:
{
fm_set_user_maxspeed( id, 190.0 );
fm_set_user_gravity( id, 0.9 );
set_user_footsteps( id, 0 );
}
case 2:
{
set_user_footsteps( id, 1 );
fm_set_user_gravity( id, 0.9 );
fm_set_user_maxspeed( id, 250.0 );
}
case 3:
{
fm_set_user_maxspeed( id, 320.0 );
fm_set_user_gravity( id, 0.9 );
set_user_footsteps( id, 0 );
}
case 4:
{
fm_set_user_gravity( id, 0.7 );
fm_set_user_maxspeed( id, 250.0 );
set_user_footsteps( id, 0);
}
case 5:
{
fm_set_user_maxspeed( id, 250.0 );
fm_set_user_gravity( id, 0.9 );
set_user_footsteps( id, 0 );
}
case 6:
{
fm_set_user_maxspeed( id, 250.0 );
fm_set_user_gravity( id, 0.9 );
set_user_footsteps( id, 0 );
}
}

set_pev( id, pev_viewmodel2, s_Models[ 0 ][ iKnife[ id ] ] );
set_pev( id, pev_weaponmodel2, s_Models[ 1 ][ iKnife[ id ] ] );

return HAM_IGNORED;
}

stock is_deathrun_mode( const s_NameMode[ ] )
{
new s_Mode[ 32 ];
get_cvar_string( "deathrun_mode", s_Mode, 31 )

if( equal( s_Mode, s_NameMode ) )
return 1;

return 0;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Vaqtincha
сообщение 27.12.2015, 13:49
Сообщение #2
Стаж: 11 лет

Сообщений: 981
Благодарностей: 352
Полезность: < 0

быдлокод. Везде не нужная проверка is_user_alive.
Лучше избавится от нее
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 27.12.2015, 14:47
Сообщение #3


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Цитата(Vaqtincha @ 27.12.2015, 14:45) *
быдлокод. Везде не нужная проверка is_user_alive.
Лучше избавится от нее

Логично, я тебя понял, а по моему вопросу ничего не скажешь? Как поступить?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 28.12.2015, 20:29
Сообщение #4


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Еще вопрос, как присвоить какой либо флаг админа именно какому то ножу? например Knife[id] = 4
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: