Author |
Message |
|||
Senior Member |
|
|||
|
AMX Mod X Plugin Approver |
|
|||
|
Senior Member |
|
|||
|
AMX Mod X Plugin Approver |
|
|||
|
Senior Member |
|
|||
|
AMX Mod X Plugin Approver |
|
|||
|
Senior Member |
|
|||
|
Veteran Member Join Date: Jul 2006 Location: France (95) |
|
|||
|
#1
slow
-
- Пользователь
-
- 7 сообщений
Новичок
Отправлено 05 Июнь 2014 — 23:55
Здравствуйте, помогите пожалуйста решить проблему, вот логи:
L 06/06/2014 — 00:14:54: [AMXX] Displaying debug trace (plugin «zp_addon_supplybox_v1.1.amxx»)
L 06/06/2014 — 00:14:54: [AMXX] Run time error 10: native error (native «zp_force_buy_extra_item»)
L 06/06/2014 — 00:14:54: [AMXX] [0] zp_addon_supplybox_v1.1.sma::fw_supplybox_touch (line 345)
L 06/06/2014 — 00:14:54: [ZP] Invalid extra item id (-1)
L 06/06/2014 — 00:30:24: [AMXX] Displaying debug trace (plugin «zp_addon_supplybox_v1.1.amxx»)
L 06/06/2014 — 00:30:24: [AMXX] Run time error 10: native error (native «zp_force_buy_extra_item»)
L 06/06/2014 — 00:30:24: [AMXX] [0] zp_addon_supplybox_v1.1.sma::fw_supplybox_touch (line 345)
L 06/06/2014 — 00:33:21: [FUN] Invalid player 1
Код:
Нужная часть кода:
public show_supplybox_help() { for(new i = 0; i < get_maxplayers(); i++) { if(is_user_alive(i) && is_user_connected(i) && !zp_get_user_zombie(i)) client_print(i, print_center, "Вы видите припасы на экране!") } }
Сообщение отредактировал slow: 06 Июнь 2014 — 12:27
- Наверх
#2
BaHeK
BaHeK
-
- Модератор
-
- 324 сообщений
Пользователь
Отправлено 06 Июнь 2014 — 20:10
- Наверх
#3
slow
slow
-
- Пользователь
-
- 7 сообщений
Новичок
Отправлено 06 Июнь 2014 — 21:11
Я могу ошибаться, но там же есть проверка на подключение игрока.
А как сделать проверку на валидность, я не понял.
Прошу помощи.
Сообщение отредактировал slow: 06 Июнь 2014 — 21:13
- Наверх
#4
nox904
Отправлено 06 Июнь 2014 — 23:26
)=
Прикрепленные файлы
Сообщение отредактировал nox904: 06 Июнь 2014 — 23:31
- Наверх
#5
slow
slow
-
- Пользователь
-
- 7 сообщений
Новичок
Отправлено 07 Июнь 2014 — 12:29
Я читал это, писал выше, что не понял, и по этому прошу помощи.
- Наверх
#6
Nizami
Nizami
-
- Пользователь
-
- 2 сообщений
Новичок
Отправлено 30 Январь 2017 — 18:13
у меня тоже такой тиме ерор
- Наверх
Содержание
- Run time error 10 native error native registerhookchain
- Run time error 10 native error native registerhookchain
- Izmayl7
- Run time error 10 native error native registerhookchain
- Run time error 10 native error native registerhookchain
- JailBreak Extreme : [AMXX] Run time error 10: native error
- JailBreak Extreme : [AMXX] Run time error 10: native error
Run time error 10 native error native registerhookchain
Hi everyone!
I searched a lot before doing this Thread.
The problem is forward hook_cvar_change() not working.
I used RH_Cvar_DirectSet from ReAPI, It doesn’t work either.
hook_cvar_change(): I changed the value in cvar, I don’t see any message:
This message appears when a server is activated:
// Global Variables.
new g_pCvar_iValue
// Forward called after server activation.
public plugin_init ()
<
// Load plugin.
register_plugin ( «[ZE] Set Rendering» , «1.0» , «z0h1r-LK» )
// Hook Chains.
RegisterHookChain ( RH_Cvar_DirectSet , «fw_Cvar_DirectSet_Post» , 1 )
// Cvars.
g_pCvar_iValue = register_cvar ( «amx_value» , «1» )
hook_cvar_change ( g_pCvar_iValue , «fw_CvarChange_Post» )
>
// Forward called when change value from cvar «amx_value».
public fw_CvarChange_Post ( pCvar , const szOldVal [], const szNewVal [])
<
// Print message on server console.
server_print ( «[AMXX] cvar: %d | old value: %s | new value: %s» , pCvar , szOldVal , szNewVal )
>
// Hook called when change value in any cvar.
public fw_Cvar_DirectSet_Post ( pCvar , const szVal [])
<
// Print message on server console.
server_print ( «[ReAPI] cvar: %d | value: %d» , pCvar , szVal )
>
I use:
OS: Windows
AMX Mod X v1.10.0.5461
ReAPI v5.21.0.252-dev
MetaMod-R v1.3.0.86
ReHLDS v3.10.0.759
Источник
Run time error 10 native error native registerhookchain
Доброго всем времени суток. Установил Ultimate Chats Control от неугомона (последняя версия). Вроде бы сделал все по инструкции. Меню мута и гага открываются, но после ничего не происходит. Жму на ники — меню просто пропадает. Прошу помощи у светлых и благородных умов разобраться, где я накосячил
upd: забыл вытянуть еще одну строку из логов. Полная ошибка выглядит так:
regamedll качал из этого сайта. cs.co кинул в dlls, конфиг в cstrike. Почему сервер его не видит — не знаю.
аналогично с reapi. Стоят последние версии.
upd: наткнулся на решение, может кому пригодится.
1. удалить строчку gamedll dlls/cs.so из конфига addons/metamod/config.ini
2. в папке cstrike/dlls/ из файлов касающиеся к gamedll оставить только cs.so
Izmayl7
Доброго всем времени суток. Установил Ultimate Chats Control от неугомона (последняя версия). Вроде бы сделал все по инструкции. Меню мута и гага открываются, но после ничего не происходит. Жму на ники — меню просто пропадает. Прошу помощи у светлых и благородных умов разобраться, где я накосячил
upd: забыл вытянуть еще одну строку из логов. Полная ошибка выглядит так:
regamedll качал из этого сайта. cs.co кинул в dlls, конфиг в cstrike. Почему сервер его не видит — не знаю.
аналогично с reapi. Стоят последние версии.
upd: наткнулся на решение, может кому пригодится.
Источник
Run time error 10 native error native registerhookchain
Something bad ,please help
[CSTRIKE] Invalid player 1
[AMXX] Displaying debug trace (plugin «alien.amxx»)
[AMXX] Run time error 10: native error (native «cs_get_user_team»)
[AMXX] [0] alien.sma::Spawn (line 30)
#define PLUGIN «Starts creating aliens vs predators»
#define VERSION «1.0»
#define AUTHOR «xbatista»
///This is alien///
new bool : alien [ 33 ]
new CvarZoomVision , CvarAlphaValue , MsgSetFOV
public plugin_init ()
<
register_plugin ( PLUGIN , VERSION , AUTHOR )
CvarZoomVision = register_cvar ( «alien_vision» , «120» )
CvarAlphaValue = register_cvar ( «alien_alpha» , «50» )
////spawn////
RegisterHam ( Ham_Spawn , «player» , «Spawn» , 1 )
MsgSetFOV = get_user_msgid ( «SetFOV» )
>
public Spawn ( id )
<
new CsTeams : team = cs_get_user_team ( id ) // Getting team
// new clip, ammo, wpnid = get_user_weapon(id, clip, ammo)
if ( team == CS_TEAM_T ) // Alien
<
set_user_health ( id , 500 )
screen_alien ( id )
// if ( wpnid == CSW_KNIFE )
// <
// set_pev(id, pev_viewmodel2, «models/alienknife.mdl»)
// >
cs_set_user_model ( id , «alien» ) // Set model Alien
alien [ id ] = true // If team terror then true
>
else if ( team == CS_TEAM_CT ) // Predator
<
set_user_health ( id , 400 )
/// if ( wpnid == CSW_KNIFE )
// <
// set_pev(id, pev_viewmodel2, «models/predatorknife.mdl»)
// >
alien [ id ] = false // If team ct false,is predator
cs_set_user_model ( id , «predator» ) // Set model Predator
>
>
public plugin_precache ()
<
precache_model ( «models/player/alien/alien.mdl» )
precache_model ( «models/player/predator/predator.mdl» )
precache_model ( «models/predatorknife.mdl» )
precache_model ( «models/alienknife.mdl» )
>
public Fadex ( index , red , green , blue , alpha )
<
message_begin ( MSG_ONE_UNRELIABLE , get_user_msgid ( «ScreenFade» ),< 0 , 0 , 0 >, index );
write_short ( 6 10 );
write_short ( 5 10 );
write_short ( 1 12 );
write_byte ( red );
write_byte ( green );
write_byte ( blue );
write_byte ( alpha );
message_end ();
>
public screen_alien ( id )
<
// Prevent cvar from being set too low
new Zoom = get_pcvar_num ( CvarZoomVision )
if ( Zoom 100 )
<
Zoom = 100
set_cvar_num ( «alien_vision» , Zoom )
>
// Set Zoom
message_begin ( MSG_ONE , MsgSetFOV , < 0 , 0 , 0 >, id )
write_byte ( Zoom )
message_end ()
// Set once before loop task
Fadex ( id , 0 , 255 , 0 , 170 );
set_user_rendering ( id , kRenderFxGlowShell , 0 , 0 , 0 , kRenderTransAlpha , get_pcvar_num ( CvarAlphaValue ))
>
Источник
Run time error 10 native error native registerhookchain
[N][E][M][E][C] писал(а): Самое интересное, с контры делают помойку. Ледяной шар и т.д. От сюда я считаю кс и пропала.
JailBreak Extreme : [AMXX] Run time error 10: native error
Модератор: liFe iS GoOD
- Список форумов‹AMX Mod X‹Вопросы по AMXX и его плагинам
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела «Болтовня».
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.
JailBreak Extreme : [AMXX] Run time error 10: native error
data » 30 дек 2011, 22:17
#define TASK_STATUS 2487000
#define TASK_FREEDAY 2487100
#define TASK_ROUND 2487200
#define TASK_HELP 2487300
#define TASK_SAFETIME 2487400
#define TASK_FREEEND 2487500
#define TEAM_MENU «#Team_Select_Spect»
#define TEAM_MENU2 «#Team_Select_Spect»
#define HUD_DELAY Float:4.0
#define CELL_RADIUS Float:200.0
new gp_PrecacheSpawn
new gp_PrecacheKeyValue
new gp_CrowbarMax
new gp_CrowbarMul
new gp_TeamRatio
new gp_CtMax
new gp_BoxMax
new gp_TalkMode
new gp_VoiceBlock
new gp_RetryTime
new gp_RoundMax
new gp_ButtonShoot
new gp_SimonSteps
new gp_SimonRandom
new gp_GlowModels
new gp_AutoLastresquest
new gp_LastRequest
new gp_Motd
new gp_SpectRounds
new gp_NosimonRounds
new gp_AutoOpen
new gp_TeamChange
new g_MaxClients
new g_MsgStatusText
new g_MsgStatusIcon
new g_MsgVGUIMenu
new g_MsgShowMenu
new g_MsgClCorpse
new g_MsgMOTD
new gc_TalkMode
new gc_VoiceBlock
new gc_SimonSteps
new gc_ButtonShoot
new Float : gc_CrowbarMul
// Precache
new const _FistModels [][] = < «models/p_bknuckles.mdl» , «models/v_by_ssss.mdl» >
new const _CrowbarModels [][] = < «models/p_crowbar.mdl» , «models/v_crowbar.mdl» >
new const _FistSounds [][] = < «weapons/cbar_hitbod2.wav» , «weapons/cbar_hitbod1.wav» , «weapons/bullet_hit1.wav» , «weapons/bullet_hit2.wav» >
new const _RemoveEntities [][] = <
«func_hostage_rescue» , «info_hostage_rescue» , «func_bomb_target» , «info_bomb_target» ,
«hostage_entity» , «info_vip_start» , «func_vip_safetyzone» , «func_escapezone»
>
// Reasons
new const g_Reasons [][] = <
«» ,
«JBE_PRISONER_REASON_1» ,
«JBE_PRISONER_REASON_2» ,
«JBE_PRISONER_REASON_3» ,
«JBE_PRISONER_REASON_4» ,
«JBE_PRISONER_REASON_5» ,
«JBE_PRISONER_REASON_6»
>
// Colors: 0:Simon / 1:Freeday / 2:CT Duel / 3:TT Duel
new const g_Colors [][ 3 ] = < < 0 , 255 , 255 >, < 0 , 255 , 0 >, < 0 , 0 , 255 >, < 255 , 42 , 0 >>
new CsTeams : g_PlayerTeam [ 33 ]
new Float : g_SimonRandom
new Trie : g_CellManagers
new g_HelpText [ 512 ]
new g_JailDay
new g_PlayerJoin
new g_PlayerReason [ 33 ]
new g_PlayerSpect [ 33 ]
new g_PlayerSimon [ 33 ]
new g_PlayerNomic
new g_PlayerWanted
new g_PlayerCrowbar
new g_PlayerRevolt
new g_PlayerHelp
new g_PlayerFreeday
new g_PlayerLast
new g_FreedayAuto
new g_FreedayNext
new g_TeamCount [ CsTeams ]
new g_TeamAlive [ CsTeams ]
new g_BoxStarted
new g_CrowbarCount
new g_Simon
new g_SimonAllowed
new g_SimonTalking
new g_SimonVoice
new g_RoundStarted
new g_LastDenied
new g_Freeday
new g_BlockWeapons
new g_RoundEnd
new g_Duel
new g_DuelA
new g_DuelB
new g_SafeTime
new g_Buttons [ 10 ]
public plugin_init ()
<
unregister_forward ( FM_Spawn , gp_PrecacheSpawn )
unregister_forward ( FM_KeyValue , gp_PrecacheKeyValue )
register_plugin ( PLUGIN_NAME , PLUGIN_VERSION , PLUGIN_AUTHOR )
register_cvar ( PLUGIN_CVAR , PLUGIN_VERSION , FCVAR_SERVER | FCVAR_SPONLY )
register_dictionary ( «jbextreme.txt» )
g_MsgStatusText = get_user_msgid ( «StatusText» )
g_MsgStatusIcon = get_user_msgid ( «StatusIcon» )
g_MsgVGUIMenu = get_user_msgid ( «VGUIMenu» )
g_MsgShowMenu = get_user_msgid ( «ShowMenu» )
g_MsgMOTD = get_user_msgid ( «MOTD» )
g_MsgClCorpse = get_user_msgid ( «ClCorpse» )
register_message ( g_MsgStatusText , «msg_statustext» )
register_message ( g_MsgStatusIcon , «msg_statusicon» )
register_message ( g_MsgVGUIMenu , «msg_vguimenu» )
register_message ( g_MsgShowMenu , «msg_showmenu» )
register_message ( g_MsgMOTD , «msg_motd» )
register_message ( g_MsgClCorpse , «msg_clcorpse» )
register_event ( «CurWeapon» , «current_weapon» , «be» , «1=1» , «2=29» )
register_event ( «StatusValue» , «player_status» , «be» , «1=2» , «2!0» )
register_event ( «StatusValue» , «player_status» , «be» , «1=1» , «2=0» )
register_impulse ( 100 , «impulse_100» )
RegisterHam ( Ham_Spawn , «player» , «player_spawn» , 1 )
RegisterHam ( Ham_TakeDamage , «player» , «player_damage» )
RegisterHam ( Ham_TraceAttack , «player» , «player_attack» )
RegisterHam ( Ham_TraceAttack , «func_button» , «button_attack» )
RegisterHam ( Ham_Killed , «player» , «player_killed» , 1 )
RegisterHam ( Ham_Touch , «weapon_hegrenade» , «player_touchweapon» )
RegisterHam ( Ham_Touch , «weaponbox» , «player_touchweapon» )
RegisterHam ( Ham_Touch , «armoury_entity» , «player_touchweapon» )
register_forward ( FM_SetClientKeyValue , «set_client_kv» )
register_forward ( FM_EmitSound , «sound_emit» )
register_forward ( FM_Voice_SetClientListening , «voice_listening» )
register_forward ( FM_CmdStart , «player_cmdstart» , 1 )
register_logevent ( «round_end» , 2 , «1=Round_End» )
register_logevent ( «round_first» , 2 , «0=World triggered» , «1&Restart_Round_» )
register_logevent ( «round_first» , 2 , «0=World triggered» , «1=Game_Commencing» )
register_logevent ( «round_start» , 2 , «0=World triggered» , «1=Round_Start» )
register_menucmd ( register_menuid ( TEAM_MENU ), 51 , «team_select» )
register_menucmd ( register_menuid ( TEAM_MENU2 ), 51 , «team_select» )
register_clcmd ( «jointeam» , «cmd_jointeam» )
register_clcmd ( «joinclass» , «cmd_joinclass» )
register_clcmd ( «+simonvoice» , «cmd_voiceon» )
register_clcmd ( «-simonvoice» , «cmd_voiceoff» )
register_clcmd ( «say /fd» , «cmd_freeday» )
register_clcmd ( «say /freeday» , «cmd_freeday» )
register_clcmd ( «say /day» , «cmd_freeday» )
register_clcmd ( «say /lr» , «cmd_lastrequest» )
register_clcmd ( «say /lastrequest» , «cmd_lastrequest» )
register_clcmd ( «say /duel» , «cmd_lastrequest» )
register_clcmd ( «say /simon» , «cmd_simon» )
register_clcmd ( «say /open» , «cmd_open» )
register_clcmd ( «say /nomic» , «cmd_nomic» )
register_clcmd ( «say /box» , «cmd_box» )
register_clcmd ( «say /help» , «cmd_help» )
register_clcmd ( «jbe_freeday» , «adm_freeday» , ADMIN_RESERVATION )
gp_GlowModels = register_cvar ( «jbe_glowmodels» , «1» )
gp_SimonSteps = register_cvar ( «jbe_simonsteps» , «0» )
gp_CrowbarMul = register_cvar ( «jbe_crowbarmultiplier» , «25.0» )
gp_CrowbarMax = register_cvar ( «jbe_maxcrowbar» , «0» )
gp_TeamRatio = register_cvar ( «jbe_teamratio» , «3» )
gp_TeamChange = register_cvar ( «jbe_teamchange» , «0» ) // 0-disable team change for tt / 1-enable team change
gp_CtMax = register_cvar ( «jbe_maxct» , «5» )
gp_BoxMax = register_cvar ( «jbe_boxmax» , «12» )
gp_RetryTime = register_cvar ( «jbe_retrytime» , «17.0» )
gp_RoundMax = register_cvar ( «jbe_freedayround» , «360.0» )
gp_AutoLastresquest = register_cvar ( «jbe_autolastrequest» , «1» )
gp_LastRequest = register_cvar ( «jbe_lastrequest» , «1» )
gp_Motd = register_cvar ( «jbe_motd» , «1» )
gp_SpectRounds = register_cvar ( «jbe_spectrounds» , «3» )
gp_NosimonRounds = register_cvar ( «jbe_nosimonrounds» , «7» )
gp_SimonRandom = register_cvar ( «jbe_randomsimon» , «0» )
gp_AutoOpen = register_cvar ( «jbe_autoopen» , «1» )
gp_TalkMode = register_cvar ( «jbe_talkmode» , «2» ) // 0-alltak / 1-tt talk / 2-tt no talk
gp_VoiceBlock = register_cvar ( «jbe_blockvoice» , «0» ) // 0-dont block / 1-block voicerecord / 2-block voicerecord except simon
gp_ButtonShoot = register_cvar ( «jbe_buttonshoot» , «0» ) // 0-standard / 1-func_button shoots!
g_MaxClients = get_global_int ( GL_maxClients )
for ( new i = 0 ; i sizeof ( g_HudSync ); i ++)
g_HudSync [ i ][ _hudsync ] = CreateHudSyncObj ()
formatex ( g_HelpText , charsmax ( g_HelpText ), «%L^n^n%L^n^n%L^n^n%L» ,
LANG_SERVER , «JBE_HELP_TITLE» ,
LANG_SERVER , «JBE_HELP_BINDS» ,
LANG_SERVER , «JBE_HELP_GUARD_CMDS» ,
LANG_SERVER , «JBE_HELP_PRISONER_CMDS» )
setup_buttons ()
>
public plugin_precache ()
<
static i
precache_model ( «models/player/jail_ssss/jail_ssss.mdl» )
precache_model ( «models/player/jail_ssss_/jail_ssssT.mdl» )
for ( i = 0 ; i sizeof ( _FistModels ); i ++)
precache_model ( _FistModels [ i ])
for ( i = 0 ; i sizeof ( _CrowbarModels ); i ++)
precache_model ( _CrowbarModels [ i ])
for ( i = 0 ; i sizeof ( _FistSounds ); i ++)
precache_sound ( _FistSounds [ i ])
precache_sound ( «jailB_ssss/duelka.wav» )
precache_sound ( «jailB_ssss/brass_bell_C.wav» )
g_CellManagers = TrieCreate ()
gp_PrecacheSpawn = register_forward ( FM_Spawn , «precache_spawn» , 1 )
gp_PrecacheKeyValue = register_forward ( FM_KeyValue , «precache_keyvalue» , 1 )
>
public precache_spawn ( ent )
<
if ( is_valid_ent ( ent ))
<
static szClass [ 33 ]
entity_get_string ( ent , EV_SZ_classname , szClass , sizeof ( szClass ))
for ( new i = 0 ; i sizeof ( _RemoveEntities ); i ++)
if ( equal ( szClass , _RemoveEntities [ i ]))
remove_entity ( ent )
>
>
public precache_keyvalue ( ent , kvd_handle )
<
static info [ 32 ]
if (! is_valid_ent ( ent ))
return FMRES_IGNORED
get_kvd ( kvd_handle , KV_ClassName , info , charsmax ( info ))
if (! equal ( info , «multi_manager» ))
return FMRES_IGNORED
get_kvd ( kvd_handle , KV_KeyName , info , charsmax ( info ))
TrieSetCell ( g_CellManagers , info , ent )
return FMRES_IGNORED
>
public client_putinserver ( id )
<
clear_bit ( g_PlayerJoin , id )
clear_bit ( g_PlayerHelp , id )
clear_bit ( g_PlayerCrowbar , id )
clear_bit ( g_PlayerNomic , id )
clear_bit ( g_PlayerWanted , id )
clear_bit ( g_SimonTalking , id )
clear_bit ( g_SimonVoice , id )
g_PlayerSpect [ id ] = 0
g_PlayerSimon [ id ] = 0
>
public client_disconnect ( id )
<
if ( g_Simon == id )
<
g_Simon = 0
ClearSyncHud ( 0 , g_HudSync [ 2 ][ _hudsync ])
player_hudmessage ( 0 , 2 , 5.0 , _ , «%L» , LANG_SERVER , «JBE_SIMON_HASGONE» )
>
else if ( g_PlayerLast == id || ( g_Duel && ( id == g_DuelA || id == g_DuelB )))
<
g_Duel = 0
g_DuelA = 0
g_DuelB = 0
g_LastDenied = 0
g_BlockWeapons = 0
g_PlayerLast = 0
>
team_count ()
>
public client_PostThink ( id )
<
if ( id != g_Simon || ! gc_SimonSteps || ! is_user_alive ( id ) ||
!( entity_get_int ( id , EV_INT_flags ) & FL_ONGROUND ) || entity_get_int ( id , EV_ENT_groundentity ))
return PLUGIN_CONTINUE
static Float : origin [ 3 ]
static Float : last [ 3 ]
entity_get_vector ( id , EV_VEC_origin , origin )
if ( get_distance_f ( origin , last ) 32.0 )
<
return PLUGIN_CONTINUE
>
vec_copy ( origin , last )
if ( entity_get_int ( id , EV_INT_bInDuck ))
origin [ 2 ] -= 18.0
else
origin [ 2 ] -= 36.0
message_begin ( MSG_BROADCAST , SVC_TEMPENTITY , < 0 , 0 , 0 >, 0 )
write_byte ( TE_WORLDDECAL )
write_coord ( floatround ( origin [ 0 ]))
write_coord ( floatround ( origin [ 1 ]))
write_coord ( floatround ( origin [ 2 ]))
write_byte ( 105 )
message_end ()
public msg_statustext ( msgid , dest , id )
<
return PLUGIN_HANDLED
>
public msg_statusicon ( msgid , dest , id )
<
static icon [ 5 ]
get_msg_arg_string ( 2 , icon , charsmax ( icon ))
if ( icon [ 0 ] == ‘b’ && icon [ 2 ] == ‘y’ && icon [ 3 ] == ‘z’ )
<
set_pdata_int ( id , 235 , get_pdata_int ( id , 235 ) &
( 1 0 ))
return PLUGIN_HANDLED
>
public msg_vguimenu ( msgid , dest , id )
<
static msgarg1
static CsTeams : team
msgarg1 = get_msg_arg_int ( 1 )
if ( msgarg1 == 2 )
<
team = cs_get_user_team ( id )
if (( team == CS_TEAM_T ) && ! is_user_admin ( id ) && ( is_user_alive ( id ) || ! get_pcvar_num ( gp_TeamChange )))
<
client_print ( id , print_center , «%L» , LANG_SERVER , «JBE_TEAM_CANTCHANGE» )
return PLUGIN_HANDLED
>
show_menu ( id , 51 , TEAM_MENU , — 1 )
return PLUGIN_HANDLED
>
public msg_showmenu ( msgid , dest , id )
<
static msgarg1 , roundloop
static CsTeams : team
msgarg1 = get_msg_arg_int ( 1 )
if ( msgarg1 != 531 && msgarg1 != 563 )
return PLUGIN_CONTINUE
roundloop = floatround ( get_pcvar_float ( gp_RetryTime ) / 2 )
team = cs_get_user_team ( id )
if ( team == CS_TEAM_T )
<
if (! is_user_admin ( id ) && ( is_user_alive ( id ) || ( g_RoundStarted >= roundloop ) || ! get_pcvar_num ( gp_TeamChange )))
<
client_print ( id , print_center , «%L» , LANG_SERVER , «JBE_TEAM_CANTCHANGE» )
return PLUGIN_HANDLED
>
else
<
show_menu ( id , 51 , TEAM_MENU , — 1 )
return PLUGIN_HANDLED
>
>
else
<
show_menu ( id , 51 , TEAM_MENU , — 1 )
return PLUGIN_HANDLED
>
public msg_motd ( msgid , dest , id )
<
if ( get_pcvar_num ( gp_Motd ))
return PLUGIN_HANDLED
public msg_clcorpse ( msgid , dest , id )
<
return PLUGIN_HANDLED
>
public current_weapon ( id )
<
if (! is_user_alive ( id ))
return PLUGIN_CONTINUE
if ( get_bit ( g_PlayerCrowbar , id ))
<
set_pev ( id , pev_viewmodel2 , _CrowbarModels [ 1 ])
set_pev ( id , pev_weaponmodel2 , _CrowbarModels [ 0 ])
>
else
<
set_pev ( id , pev_viewmodel2 , _FistModels [ 1 ])
set_pev ( id , pev_weaponmodel2 , _FistModels [ 0 ])
>
return PLUGIN_CONTINUE
>
public player_status ( id )
<
static type , player , CsTeams : team , name [ 32 ], health
type = read_data ( 1 )
player = read_data ( 2 )
switch ( type )
<
case ( 1 ):
<
ClearSyncHud ( id , g_HudSync [ 1 ][ _hudsync ])
>
case ( 2 ):
<
team = cs_get_user_team ( player )
if (( team != CS_TEAM_T ) && ( team != CS_TEAM_CT ))
return PLUGIN_HANDLED
health = get_user_health ( player )
get_user_name ( player , name , charsmax ( name ))
player_hudmessage ( id , 4 , 2.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER ,
( team == CS_TEAM_T ) ? «JBE_PRISONER_STATUS» : «JBE_GUARD_STATUS» , name , health )
>
>
return PLUGIN_HANDLED
>
public impulse_100 ( id )
<
if ( cs_get_user_team ( id ) == CS_TEAM_T )
return PLUGIN_HANDLED
public player_spawn ( id )
<
static CsTeams : team
if (! is_user_connected ( id ))
return HAM_IGNORED
set_pdata_float ( id , m_fNextHudTextArgsGameTime , get_gametime () + 999999.0 )
player_strip_weapons ( id )
if ( g_RoundEnd )
<
g_RoundEnd = 0
g_JailDay ++
>
set_user_rendering ( id , kRenderFxNone , 0 , 0 , 0 , kRenderNormal , 0 )
clear_bit ( g_PlayerCrowbar , id )
clear_bit ( g_PlayerWanted , id )
team = cs_get_user_team ( id )
switch ( team )
<
case ( CS_TEAM_T ):
<
g_PlayerLast = 0
if (! g_PlayerReason [ id ])
g_PlayerReason [ id ] = random_num ( 1 , 6 )
player_hudmessage ( id , 0 , 5.0 , < 255 , 0 , 255 >, «%L %L» , LANG_SERVER , «JBE_PRISONER_REASON» ,
LANG_SERVER , g_Reasons [ g_PlayerReason [ id ]])
set_user_info ( id , «model» , «jail_ssss» )
entity_set_int ( id , EV_INT_body , 2 )
if ( is_freeday () || get_bit ( g_FreedayAuto , id ))
<
freeday_set ( 0 , id )
clear_bit ( g_FreedayAuto , id )
>
else
<
entity_set_int ( id , EV_INT_skin , random_num ( 0 , 5 ))
>
if ( g_CrowbarCount get_pcvar_num ( gp_CrowbarMax ))
<
if ( random_num ( 0 , g_MaxClients ) > ( g_MaxClients / 2 ))
<
g_CrowbarCount ++
set_bit ( g_PlayerCrowbar , id )
>
>
cs_set_user_armor ( id , 0 , CS_ARMOR_NONE )
>
case ( CS_TEAM_CT ):
<
g_PlayerSimon [ id ]++
set_user_info ( id , «model» , «jail_ssss» )
entity_set_int ( id , EV_INT_body , 3 )
cs_set_user_armor ( id , 100 , CS_ARMOR_VESTHELM )
>
>
first_join ( id )
return HAM_IGNORED
>
public player_damage ( victim , ent , attacker , Float : damage , bits )
<
if (! is_user_connected ( victim ) || ! is_user_connected ( attacker ) || victim == attacker )
return HAM_IGNORED
switch ( g_Duel )
<
case ( 0 ):
<
if ( attacker == ent && get_user_weapon ( attacker ) == CSW_KNIFE && get_bit ( g_PlayerCrowbar , attacker ) && cs_get_user_team ( victim ) != CS_TEAM_T )
<
SetHamParamFloat ( 4 , damage * gc_CrowbarMul )
return HAM_OVERRIDE
>
>
case ( 2 ):
<
if ( attacker != g_PlayerLast )
return HAM_SUPERCEDE
>
default :
<
if (( victim == g_DuelA && attacker == g_DuelB ) || ( victim == g_DuelB && attacker == g_DuelA ))
return HAM_IGNORED
public player_attack ( victim , attacker , Float : damage , Float : direction [ 3 ], tracehandle , damagebits )
<
static CsTeams : vteam , CsTeams : ateam
if (! is_user_connected ( victim ) || ! is_user_connected ( attacker ) || victim == attacker )
return HAM_IGNORED
vteam = cs_get_user_team ( victim )
ateam = cs_get_user_team ( attacker )
if ( ateam == CS_TEAM_CT && vteam == CS_TEAM_CT )
return HAM_SUPERCEDE
switch ( g_Duel )
<
case ( 0 ):
<
if ( ateam == CS_TEAM_CT && vteam == CS_TEAM_T )
<
if ( get_bit ( g_PlayerRevolt , victim ))
<
clear_bit ( g_PlayerRevolt , victim )
hud_status ( 0 )
>
return HAM_IGNORED
>
>
case ( 2 ):
<
if ( attacker != g_PlayerLast )
return HAM_SUPERCEDE
>
default :
<
if (( victim == g_DuelA && attacker == g_DuelB ) || ( victim == g_DuelB && attacker == g_DuelA ))
return HAM_IGNORED
if ( ateam == CS_TEAM_T && vteam == CS_TEAM_T && ! g_BoxStarted )
return HAM_SUPERCEDE
if ( ateam == CS_TEAM_T && vteam == CS_TEAM_CT )
<
if (! g_PlayerRevolt )
revolt_start ()
set_bit ( g_PlayerRevolt , attacker )
>
public button_attack ( button , id , Float : damage , Float : direction [ 3 ], tracehandle , damagebits )
<
if ( is_valid_ent ( button ) && gc_ButtonShoot )
<
ExecuteHamB ( Ham_Use , button , id , 0 , 2 , 1.0 )
entity_set_float ( button , EV_FL_frame , 0.0 )
>
public player_killed ( victim , attacker , shouldgib )
<
static CsTeams : vteam , CsTeams : kteam
if (!( 0 attacker g_MaxClients ) || ! is_user_connected ( attacker ))
kteam = CS_TEAM_UNASSIGNED
else
kteam = cs_get_user_team ( attacker )
vteam = cs_get_user_team ( victim )
if ( g_Simon == victim )
<
g_Simon = 0
ClearSyncHud ( 0 , g_HudSync [ 2 ][ _hudsync ])
player_hudmessage ( 0 , 2 , 5.0 , _ , «%L» , LANG_SERVER , «JBE_SIMON_KILLED» )
>
switch ( g_Duel )
<
case ( 0 ):
<
switch ( vteam )
<
case ( CS_TEAM_CT ):
<
if ( kteam == CS_TEAM_T && ! get_bit ( g_PlayerWanted , attacker ))
<
set_bit ( g_PlayerWanted , attacker )
entity_set_int ( attacker , EV_INT_skin , 7 )
if ( get_pcvar_num ( gp_GlowModels ))
player_glow ( attacker , g_Colors [ 3 ])
>
>
case ( CS_TEAM_T ):
<
clear_bit ( g_PlayerRevolt , victim )
clear_bit ( g_PlayerWanted , victim )
>
>
>
default :
<
if ( g_Duel != 2 && ( attacker == g_DuelA || attacker == g_DuelB ))
<
set_user_rendering ( victim , kRenderFxNone , 0 , 0 , 0 , kRenderNormal , 0 )
set_user_rendering ( attacker , kRenderFxNone , 0 , 0 , 0 , kRenderNormal , 0 )
g_Duel = 0
g_LastDenied = 0
g_BlockWeapons = 0
g_PlayerLast = 0
team_count ()
>
>
>
hud_status ( 0 )
return HAM_IGNORED
>
public player_touchweapon ( id , ent )
<
static model [ 32 ], class [ 32 ]
if ( g_BlockWeapons )
return HAM_SUPERCEDE
if ( is_valid_ent ( id ) && g_Duel != 6 && is_user_alive ( ent ) && cs_get_user_team ( ent ) == CS_TEAM_CT )
<
entity_get_string ( id , EV_SZ_model , model , charsmax ( model ))
if ( model [ 7 ] == ‘w’ && model [ 9 ] == ‘h’ && model [ 10 ] == ‘e’ && model [ 11 ] == ‘g’ )
<
entity_get_string ( id , EV_SZ_classname , class , charsmax (class))
if ( equal (class, «weapon_hegrenade» ))
remove_entity ( id )
public set_client_kv ( id , const info [], const key [])
<
if ( equal ( key , «model» ))
return FMRES_SUPERCEDE
public sound_emit ( id , channel , sample [])
<
if ( is_user_alive ( id ) && equal ( sample , «weapons/knife_» , 14 ))
<
switch ( sample [ 17 ])
<
case ( ‘b’ ):
<
emit_sound ( id , CHAN_WEAPON , «weapons/cbar_hitbod2.wav» , 1.0 , ATTN_NORM , 0 , PITCH_NORM )
>
case ( ‘w’ ):
<
emit_sound ( id , CHAN_WEAPON , «weapons/cbar_hitbod1.wav» , 1.0 , ATTN_NORM , 0 , PITCH_LOW )
>
case ( ‘1’ , ‘2’ ):
<
emit_sound ( id , CHAN_WEAPON , «weapons/bullet_hit2.wav» , random_float ( 0.5 , 1.0 ), ATTN_NORM , 0 , PITCH_NORM )
>
>
return FMRES_SUPERCEDE
>
return FMRES_IGNORED
>
public voice_listening ( receiver , sender , bool : listen )
<
if (( receiver == sender ))
return FMRES_IGNORED
if ( is_user_admin ( sender ))
<
engfunc ( EngFunc_SetClientListening , receiver , sender , true )
return FMRES_SUPERCEDE
>
switch ( gc_VoiceBlock )
<
case ( 2 ):
<
if (( sender != g_Simon ) && (! get_bit ( g_SimonVoice , sender ) && gc_VoiceBlock ))
<
engfunc ( EngFunc_SetClientListening , receiver , sender , false )
return FMRES_SUPERCEDE
>
>
case ( 1 ):
<
if (! get_bit ( g_SimonVoice , sender ) && gc_VoiceBlock )
<
engfunc ( EngFunc_SetClientListening , receiver , sender , false )
return FMRES_SUPERCEDE
>
>
>
if (! is_user_alive ( sender ))
<
engfunc ( EngFunc_SetClientListening , receiver , sender , false )
return FMRES_SUPERCEDE
>
if ( sender == g_Simon )
<
engfunc ( EngFunc_SetClientListening , receiver , sender , true )
return FMRES_SUPERCEDE
>
if ( g_SimonTalking && ( sender != g_Simon ))
<
listen = false
>
else
<
static CsTeams : steam
steam = cs_get_user_team ( sender )
switch ( gc_TalkMode )
<
case ( 2 ):
<
listen = ( steam == CS_TEAM_CT )
>
case ( 1 ):
<
listen = ( steam == CS_TEAM_CT || steam == CS_TEAM_T )
>
>
>
engfunc ( EngFunc_SetClientListening , receiver , sender , listen )
return FMRES_SUPERCEDE
>
public player_cmdstart ( id , uc , random )
<
if ( is_user_alive ( id ) && g_Duel > 3 )
<
cs_set_user_bpammo ( id , _Duel [ g_Duel — 4 ][ _csw ], 1 )
>
>
public round_first ()
<
g_JailDay = 0
for ( new i = 1 ; i g_MaxClients ; i ++)
g_PlayerSimon [ i ] = 0
set_cvar_num ( «sv_alltalk» , 1 )
set_cvar_num ( «mp_roundtime» , 5 )
set_cvar_num ( «mp_limitteams» , 0 )
set_cvar_num ( «mp_autoteambalance» , 0 )
set_cvar_num ( «mp_tkpunish» , 0 )
set_cvar_num ( «mp_friendlyfire» , 1 )
round_end ()
>
public round_end ()
<
static CsTeams : team
static maxnosimon , spectrounds
g_SafeTime = 0
g_PlayerRevolt = 0
g_PlayerFreeday = 0
g_PlayerLast = 0
g_BoxStarted = 0
g_CrowbarCount = 0
g_Simon = 0
g_SimonAllowed = 0
g_RoundStarted = 0
g_LastDenied = 0
g_BlockWeapons = 0
g_TeamCount [ CS_TEAM_T ] = 0
g_TeamCount [ CS_TEAM_CT ] = 0
g_Freeday = 0
g_FreedayNext = ( random_num ( 0 , 99 ) >= 95 )
g_RoundEnd = 1
g_Duel = 0
remove_task ( TASK_STATUS )
remove_task ( TASK_FREEDAY )
remove_task ( TASK_FREEEND )
remove_task ( TASK_ROUND )
maxnosimon = get_pcvar_num ( gp_NosimonRounds )
spectrounds = get_pcvar_num ( gp_SpectRounds )
for ( new i = 1 ; i g_MaxClients ; i ++)
<
if (! is_user_connected ( i ))
continue
menu_cancel ( i )
team = cs_get_user_team ( i )
player_strip_weapons ( i )
switch ( team )
<
case ( CS_TEAM_CT ):
<
if ( g_PlayerSimon [ i ] > maxnosimon )
<
cmd_nomic ( i )
>
>
case ( CS_TEAM_SPECTATOR , CS_TEAM_UNASSIGNED ):
<
g_PlayerSpect [ i ]++
if ( g_PlayerSpect [ i ] > spectrounds )
<
client_cmd ( i , «disconnect» )
server_print ( «[ssss] Razyedeni za afk v spectorah #%i» , i )
>
else
<
show_menu ( i , 51 , TEAM_MENU , — 1 )
>
>
>
>
for ( new i = 0 ; i sizeof ( g_HudSync ); i ++)
ClearSyncHud ( 0 , g_HudSync [ i ][ _hudsync ])
public round_start ()
<
if ( g_RoundEnd )
return
team_count ()
if (! g_Simon && is_freeday ())
<
g_Freeday = 1
emit_sound ( 0 , CHAN_AUTO , «jailB_ssss/brass_bell_C.wav» , 1.0 , ATTN_NORM , 0 , PITCH_NORM )
check_freeday ( TASK_FREEDAY )
>
else
<
set_task ( 60.0 , «check_freeday» , TASK_FREEDAY )
>
set_task ( HUD_DELAY , «hud_status» , TASK_STATUS , _ , _ , «b» )
set_task ( get_pcvar_float ( gp_RetryTime ) + 1.0 , «safe_time» , TASK_SAFETIME )
set_task ( 300.0 , «freeday_end» , TASK_FREEDAY )
g_SimonRandom = get_pcvar_num ( gp_SimonRandom ) ? random_float ( 15.0 , 45.0 ) : 0.0
g_SimonAllowed = 1
g_FreedayNext = 0
>
public cmd_jointeam ( id )
<
return PLUGIN_HANDLED
>
public cmd_joinclass ( id )
<
return PLUGIN_HANDLED
>
public cmd_voiceon ( id )
<
client_cmd ( id , «+voicerecord» )
set_bit ( g_SimonVoice , id )
if ( g_Simon == id || is_user_admin ( id ))
set_bit ( g_SimonTalking , id )
public cmd_voiceoff ( id )
<
client_cmd ( id , «-voicerecord» )
clear_bit ( g_SimonVoice , id )
if ( g_Simon == id || is_user_admin ( id ))
clear_bit ( g_SimonTalking , id )
public cmd_simon ( id )
<
static CsTeams : team , name [ 32 ]
if (! is_user_connected ( id ))
return PLUGIN_HANDLED
team = cs_get_user_team ( id )
if ( g_SimonAllowed && ! g_Freeday && is_user_alive ( id ) && team == CS_TEAM_CT && ! g_Simon )
<
g_Simon = id
get_user_name ( id , name , charsmax ( name ))
entity_set_int ( id , EV_INT_body , 1 )
g_PlayerSimon [ id ]—
hud_status ( 0 )
>
return PLUGIN_HANDLED
>
public cmd_open ( id )
<
if ( id == g_Simon )
jail_open ()
public cmd_nomic ( id )
<
static CsTeams : team
team = cs_get_user_team ( id )
if ( team == CS_TEAM_CT )
<
server_print ( «JBE Transfered guard to prisoners team client #%i» , id )
if ( g_Simon == id )
<
g_Simon = 0
player_hudmessage ( 0 , 2 , 5.0 , _ , «%L» , LANG_SERVER , «JBE_SIMON_TRANSFERED» )
>
if (! is_user_admin ( id ))
set_bit ( g_PlayerNomic , id )
user_silentkill ( id )
cs_set_user_team ( id , CS_TEAM_T )
>
return PLUGIN_HANDLED
>
public cmd_box ( id )
<
static i
if (( id 0 ) || ( is_user_alive ( id ) && g_Simon == id ))
<
if ( g_TeamAlive [ CS_TEAM_T ] get_pcvar_num ( gp_BoxMax ) && g_TeamAlive [ CS_TEAM_T ] > 1 )
<
for ( i = 1 ; i g_MaxClients ; i ++)
if ( is_user_alive ( i ) && cs_get_user_team ( i ) == CS_TEAM_T )
set_user_health ( i , 100 )
set_cvar_num ( «mp_tkpunish» , 0 )
set_cvar_num ( «mp_friendlyfire» , 1 )
g_BoxStarted = 1
player_hudmessage ( 0 , 1 , 3.0 , _ , «%L» , LANG_SERVER , «JBE_GUARD_BOX» )
>
else
<
player_hudmessage ( id , 1 , 3.0 , _ , «%L» , LANG_SERVER , «JBE_GUARD_CANTBOX» )
>
>
return PLUGIN_HANDLED
>
public cmd_help ( id )
<
if ( id > g_MaxClients )
id -= TASK_HELP
remove_task ( TASK_HELP + id )
switch ( get_bit ( g_PlayerHelp , id ))
<
case ( 0 ):
<
set_bit ( g_PlayerHelp , id )
player_hudmessage ( id , 7 , 15.0 , < 230 , 100 , 10 >, «%s» , g_HelpText )
set_task ( 15.0 , «cmd_help» , TASK_HELP + id )
>
default :
<
clear_bit ( g_PlayerHelp , id )
ClearSyncHud ( id , g_HudSync [ 7 ][ _hudsync ])
>
>
>
public cmd_freeday ( id )
<
static menu , menuname [ 32 ], option [ 64 ]
if (! is_freeday () && (( is_user_alive ( id ) && g_Simon == id )))
<
formatex ( menuname , charsmax ( menuname ), «%L» , LANG_SERVER , «JBE_MENU_FREEDAY» )
menu = menu_create ( menuname , «freeday_choice» )
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , «JBE_MENU_FREEDAY_PLAYER» )
menu_additem ( menu , option , «1» , 0 )
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , «JBE_MENU_FREEDAY_ALL» )
menu_additem ( menu , option , «2» , 0 )
menu_display ( id , menu )
>
else <
client_print ( id , print_chat , «Р’С‹ РЅРµ Саймон!» )
>
return PLUGIN_HANDLED
>
public cmd_freeday_player ( id )
<
if (( is_user_alive ( id ) && g_Simon == id ))
menu_players ( id , CS_TEAM_T , id , 1 , «freeday_select» , «%L» , LANG_SERVER , «JBE_MENU_FREEDAY» )
public cmd_lastrequest ( id )
<
static i , num [ 5 ], menu , menuname [ 32 ], option [ 64 ]
if (! get_pcvar_num ( gp_LastRequest ) || g_LastDenied || id != g_PlayerLast || g_RoundEnd || ! is_user_alive ( id ))
return PLUGIN_CONTINUE
formatex ( menuname , charsmax ( menuname ), «%L» , LANG_SERVER , «JBE_MENU_LASTREQ» )
menu = menu_create ( menuname , «lastrequest_select» )
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , «JBE_MENU_LASTREQ_OPT1» )
menu_additem ( menu , option , «1» , 0 )
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , «JBE_MENU_LASTREQ_OPT2» )
menu_additem ( menu , option , «2» , 0 )
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , «JBE_MENU_LASTREQ_OPT3» )
menu_additem ( menu , option , «3» , 0 )
for ( i = 0 ; i sizeof ( _Duel ); i ++)
<
num_to_str ( i + 4 , num , charsmax ( num ))
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , _Duel [ i ][ _opt ])
menu_additem ( menu , option , num , 0 )
>
menu_display ( id , menu )
return PLUGIN_CONTINUE
>
public adm_freeday ( id )
<
static player , user [ 32 ]
if (! is_user_admin ( id ))
return PLUGIN_CONTINUE
read_argv ( 1 , user , charsmax ( user ))
player = cmd_target ( id , user , 2 )
if ( is_user_connected ( player ) && cs_get_user_team ( player ) == CS_TEAM_T )
<
freeday_set ( id , player )
>
return PLUGIN_HANDLED
>
public team_select ( id , key )
<
static CsTeams : team , roundloop , admin
roundloop = get_pcvar_num ( gp_RetryTime ) / 2
team = cs_get_user_team ( id )
admin = is_user_admin ( id )
team_count ()
if (! admin && ( team == CS_TEAM_UNASSIGNED ) && ( g_RoundStarted >= roundloop ) && g_TeamCount [ CS_TEAM_CT ] && g_TeamCount [ CS_TEAM_T ] && ! is_user_alive ( id ))
<
team_join ( id , CS_TEAM_SPECTATOR )
client_print ( id , print_center , «%L» , LANG_SERVER , «JBE_TEAM_CANTJOIN» )
return PLUGIN_HANDLED
>
switch ( key )
<
case ( 0 ):
<
if ( team == CS_TEAM_T )
return PLUGIN_HANDLED
g_PlayerReason [ id ] = random_num ( 1 , 6 )
team_join ( id , CS_TEAM_T )
>
case ( 1 ):
<
if ( team == CS_TEAM_CT || (! admin && get_bit ( g_PlayerNomic , id )))
return PLUGIN_HANDLED
if ( g_TeamCount [ CS_TEAM_CT ] ctcount_allowed () || admin )
team_join ( id , CS_TEAM_CT )
else
client_print ( id , print_center , «%L» , LANG_SERVER , «JBE_TEAM_CTFULL» )
>
case ( 5 ):
<
user_silentkill ( id )
team_join ( id , CS_TEAM_SPECTATOR )
>
>
return PLUGIN_HANDLED
>
public team_join ( id , CsTeams : team )
<
static restore , vgui , msgblock
restore = get_pdata_int ( id , m_iVGUI )
vgui = restore & ( 1 0 )
if ( vgui )
set_pdata_int ( id , m_iVGUI , restore &
switch ( team )
<
case CS_TEAM_SPECTATOR :
<
msgblock = get_msg_block ( g_MsgShowMenu )
set_msg_block ( g_MsgShowMenu , BLOCK_ONCE )
dllfunc ( DLLFunc_ClientPutInServer , id )
set_msg_block ( g_MsgShowMenu , msgblock )
set_pdata_int ( id , m_fGameHUDInitialized , 1 )
engclient_cmd ( id , «jointeam» , «6» )
>
case CS_TEAM_T , CS_TEAM_CT :
<
msgblock = get_msg_block ( g_MsgShowMenu )
set_msg_block ( g_MsgShowMenu , BLOCK_ONCE )
engclient_cmd ( id , «jointeam» , ( team == CS_TEAM_CT ) ? «2» : «1» )
engclient_cmd ( id , «joinclass» , «1» )
set_msg_block ( g_MsgShowMenu , msgblock )
g_PlayerSpect [ id ] = 0
>
>
if ( vgui )
set_pdata_int ( id , m_iVGUI , restore )
>
public team_count ()
<
static CsTeams : team , last
g_TeamCount [ CS_TEAM_UNASSIGNED ] = 0
g_TeamCount [ CS_TEAM_T ] = 0
g_TeamCount [ CS_TEAM_CT ] = 0
g_TeamCount [ CS_TEAM_SPECTATOR ] = 0
g_TeamAlive [ CS_TEAM_UNASSIGNED ] = 0
g_TeamAlive [ CS_TEAM_T ] = 0
g_TeamAlive [ CS_TEAM_CT ] = 0
g_TeamAlive [ CS_TEAM_SPECTATOR ] = 0
for ( new i = 1 ; i g_MaxClients ; i ++)
<
if ( is_user_connected ( i ))
<
team = cs_get_user_team ( i )
g_TeamCount [ team ]++
g_PlayerTeam [ i ] = team
if ( is_user_alive ( i ))
<
g_TeamAlive [ team ]++
if ( team == CS_TEAM_T )
last = i
>
>
else
<
g_PlayerTeam [ i ] = CS_TEAM_UNASSIGNED
>
>
if ( g_TeamAlive [ CS_TEAM_T ] == 1 )
<
if ( last != g_PlayerLast && g_SafeTime )
<
prisoner_last ( last )
>
>
else
<
if ( g_Duel || g_DuelA || g_DuelB )
<
if ( is_user_alive ( g_DuelA ))
<
set_user_rendering ( g_DuelA , kRenderFxNone , 0 , 0 , 0 , kRenderNormal , 0 )
player_strip_weapons ( g_DuelA )
>
if ( is_user_alive ( g_DuelB ))
<
set_user_rendering ( g_DuelB , kRenderFxNone , 0 , 0 , 0 , kRenderNormal , 0 )
player_strip_weapons ( g_DuelB )
>
>
g_PlayerLast = 0
g_DuelA = 0
g_DuelB = 0
g_Duel = 0
>
>
public revolt_start ()
<
client_cmd ( 0 , «speak ambience/siren» )
set_task ( 8.0 , «stop_sound» )
hud_status ( 0 )
>
public stop_sound ( task )
<
client_cmd ( 0 , «stopsound» )
>
public hud_status ( task )
<
static i , n
new name [ 32 ], szStatus [ 64 ], wanted [ 1024 ]
if ( g_RoundStarted ( get_pcvar_num ( gp_RetryTime ) / 2 ))
g_RoundStarted ++
if (! g_Freeday && ! g_Simon && g_SimonAllowed && ( 0.0 g_SimonRandom get_gametime ()))
<
cmd_simon ( random_num ( 1 , g_MaxClients ))
>
n = 0
formatex ( wanted , charsmax ( wanted ), «%L» , LANG_SERVER , «JBE_PRISONER_WANTED» )
n = strlen ( wanted )
for ( i = 0 ; i g_MaxClients ; i ++)
<
if ( get_bit ( g_PlayerWanted , i ) && is_user_alive ( i ) && n charsmax ( wanted ))
<
get_user_name ( i , name , charsmax ( name ))
n += copy ( wanted [ n ], charsmax ( wanted ) — n , «^n^t» )
n += copy ( wanted [ n ], charsmax ( wanted ) — n , name )
>
>
team_count ()
formatex ( szStatus , charsmax ( szStatus ), «%L» , LANG_SERVER , «JBE_STATUS» , g_TeamAlive [ CS_TEAM_T ], g_TeamCount [ CS_TEAM_T ])
message_begin ( MSG_BROADCAST , get_user_msgid ( «StatusText» ), < 0 , 0 , 0 >, 0 )
write_byte ( 0 )
write_string ( szStatus )
message_end ()
if ( g_Simon )
<
get_user_name ( g_Simon , name , charsmax ( name ))
player_hudmessage ( 0 , 2 , HUD_DELAY + 1.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_SIMON_FOLLOW» , name )
>
else if ( g_Freeday )
<
player_hudmessage ( 0 , 2 , HUD_DELAY + 1.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_STATUS_FREEDAY» )
>
if ( g_PlayerWanted )
player_hudmessage ( 0 , 3 , HUD_DELAY + 1.0 , < 255 , 25 , 50 >, «%s» , wanted )
else if ( g_PlayerRevolt )
player_hudmessage ( 0 , 3 , HUD_DELAY + 1.0 , < 255 , 25 , 50 >, «%L» , LANG_SERVER , «JBE_PRISONER_REVOLT» )
player_hudmessage ( 0 , 5 , HUD_DELAY + 1.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_STATUS_DAY» , g_JailDay )
gc_TalkMode = get_pcvar_num ( gp_TalkMode )
gc_VoiceBlock = get_pcvar_num ( gp_VoiceBlock )
gc_SimonSteps = get_pcvar_num ( gp_SimonSteps )
gc_ButtonShoot = get_pcvar_num ( gp_ButtonShoot )
gc_CrowbarMul = get_pcvar_float ( gp_CrowbarMul )
public safe_time ( task )
<
g_SafeTime = 1
>
public check_freeday ( task )
<
static Float : roundmax , i
if (! g_Simon && ! g_PlayerLast )
<
g_Freeday = 1
hud_status ( 0 )
roundmax = get_pcvar_float ( gp_RoundMax )
if ( roundmax > 0.0 )
<
for ( i = 1 ; i g_MaxClients ; i ++)
<
if ( is_user_alive ( i ) && cs_get_user_team ( i ) == CS_TEAM_T )
freeday_set ( 0 , i )
>
emit_sound ( 0 , CHAN_AUTO , «jailB_ssss/brass_bell_C.wav» , 1.0 , ATTN_NORM , 0 , PITCH_NORM )
player_hudmessage ( 0 , 8 , 3.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_STATUS_ENDTIMER» , floatround ( roundmax — 60.0 ))
remove_task ( TASK_ROUND )
set_task ( roundmax — 60.0 , «check_end» , TASK_ROUND )
>
>
if ( get_pcvar_num ( gp_AutoOpen ))
jail_open ()
>
public freeday_end ( task )
<
if ( g_Freeday || g_PlayerFreeday )
<
emit_sound ( 0 , CHAN_AUTO , «jailB_ssss/brass_bell_C.wav» , 1.0 , ATTN_NORM , 0 , PITCH_NORM )
player_hudmessage ( 0 , 8 , 3.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_STATUS_ENDFREEDAY» )
>
>
public check_end ( task )
<
team_count ()
for ( new i = 1 ; i g_MaxClients ; i ++)
<
if ( g_PlayerTeam [ i ] == CS_TEAM_T && is_user_alive ( i ))
<
user_silentkill ( i )
cs_set_user_deaths ( i , get_user_deaths ( i ) — 1 )
>
>
for ( new i = 1 ; i g_MaxClients ; i ++)
<
if ( g_PlayerTeam [ i ] == CS_TEAM_CT && is_user_alive ( i ))
<
user_silentkill ( i )
cs_set_user_deaths ( i , get_user_deaths ( i ) — 1 )
>
>
player_hudmessage ( 0 , 6 , 3.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_STATUS_ROUNDEND» )
>
public prisoner_last ( id )
<
static name [ 32 ], Float : roundmax
if ( is_user_alive ( id ) && cs_get_user_team ( id ) == CS_TEAM_T )
<
roundmax = get_pcvar_float ( gp_RoundMax )
get_user_name ( id , name , charsmax ( name ))
g_PlayerLast = id
player_hudmessage ( 0 , 6 , 5.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_PRISONER_LAST» , name )
remove_task ( TASK_ROUND )
if ( roundmax > 0.0 )
<
player_hudmessage ( 0 , 8 , 3.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_STATUS_ENDTIMER» , floatround ( roundmax — 60.0 ))
set_task ( roundmax — 60.0 , «check_end» , TASK_ROUND )
>
if (( g_TeamAlive [ CS_TEAM_CT ] > 0 ) && get_pcvar_num ( gp_AutoLastresquest ))
cmd_lastrequest ( id )
>
>
public freeday_select ( id , menu , item )
<
if ( item == MENU_EXIT )
<
menu_destroy ( menu )
return PLUGIN_HANDLED
>
static dst [ 32 ], data [ 5 ], player , access , callback
menu_item_getinfo ( menu , item , access , data , charsmax ( data ), dst , charsmax ( dst ), callback )
player = str_to_num ( data )
freeday_set ( id , player )
return PLUGIN_HANDLED
>
public duel_knives ( id , menu , item )
<
if ( item == MENU_EXIT )
<
menu_destroy ( menu )
g_LastDenied = 0
return PLUGIN_HANDLED
>
static dst [ 32 ], data [ 5 ], access , callback , option [ 128 ], player , src [ 32 ]
menu_item_getinfo ( menu , item , access , data , charsmax ( data ), dst , charsmax ( dst ), callback )
get_user_name ( id , src , charsmax ( src ))
player = str_to_num ( data )
formatex ( option , charsmax ( option ), «%L^n%L» , LANG_SERVER , «JBE_MENU_LASTREQ_SEL3» , src , LANG_SERVER , «JBE_MENU_DUEL_SEL» , src , dst )
player_hudmessage ( 0 , 6 , 3.0 , < 0 , 255 , 0 >, option )
g_DuelA = id
clear_bit ( g_PlayerCrowbar , id )
player_strip_weapons ( id )
player_glow ( id , g_Colors [ 3 ])
set_user_health ( id , 100 )
g_DuelB = player
player_strip_weapons ( player )
player_glow ( player , g_Colors [ 2 ])
set_user_health ( player , 100 )
g_BlockWeapons = 1
return PLUGIN_HANDLED
>
public duel_guns ( id , menu , item )
<
if (!( 4 g_Duel 7 ))
return PLUGIN_HANDLED
if ( item == MENU_EXIT )
<
menu_destroy ( menu )
g_LastDenied = 0
g_Duel = 0
return PLUGIN_HANDLED
>
static gun , dst [ 32 ], data [ 5 ], access , callback , option [ 128 ], player , src [ 32 ]
menu_item_getinfo ( menu , item , access , data , charsmax ( data ), dst , charsmax ( dst ), callback )
get_user_name ( id , src , charsmax ( src ))
player = str_to_num ( data )
formatex ( option , charsmax ( option ), «%L^n%L» , LANG_SERVER , _Duel [ g_Duel — 4 ][ _sel ], src , LANG_SERVER , «JBE_MENU_DUEL_SEL» , src , dst )
emit_sound ( 0 , CHAN_AUTO , «jailB_ssss/duelka.wav» , 1.0 , ATTN_NORM , 0 , PITCH_NORM )
player_hudmessage ( 0 , 6 , 3.0 , < 0 , 255 , 0 >, option )
g_DuelA = id
clear_bit ( g_PlayerCrowbar , id )
player_strip_weapons ( id )
gun = give_item ( id , _Duel [ g_Duel — 4 ][ _entname ])
cs_set_weapon_ammo ( gun , 1 )
set_user_health ( id , 100 )
player_glow ( id , g_Colors [ 3 ])
g_DuelB = player
player_strip_weapons ( player )
gun = give_item ( player , _Duel [ g_Duel — 4 ][ _entname ])
cs_set_weapon_ammo ( gun , 1 )
set_user_health ( player , 100 )
player_glow ( player , g_Colors [ 2 ])
g_BlockWeapons = 1
return PLUGIN_HANDLED
>
public freeday_choice ( id , menu , item )
<
if ( item == MENU_EXIT )
<
menu_destroy ( menu )
return PLUGIN_HANDLED
>
static dst [ 32 ], data [ 5 ], access , callback
menu_item_getinfo ( menu , item , access , data , charsmax ( data ), dst , charsmax ( dst ), callback )
menu_destroy ( menu )
get_user_name ( id , dst , charsmax ( dst ))
switch ( data [ 0 ])
<
case ( ‘1’ ):
<
cmd_freeday_player ( id )
>
case ( ‘2’ ):
<
if (( id == g_Simon ) || is_user_admin ( id ))
<
g_Simon = 0
get_user_name ( id , dst , charsmax ( dst ))
client_print ( 0 , print_chat , «%s дал всем свободный день! гуляем. » , dst )
server_print ( «JBE Client %i gives freeday for everyone» , id )
check_freeday ( TASK_FREEDAY )
>
>
>
return PLUGIN_HANDLED
>
public lastrequest_select ( id , menu , item )
<
if ( item == MENU_EXIT )
<
menu_destroy ( menu )
return PLUGIN_HANDLED
>
static i , dst [ 32 ], data [ 5 ], access , callback , option [ 64 ]
menu_item_getinfo ( menu , item , access , data , charsmax ( data ), dst , charsmax ( dst ), callback )
get_user_name ( id , dst , charsmax ( dst ))
switch ( data [ 0 ])
<
case ( ‘1’ ):
<
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , «JBE_MENU_LASTREQ_SEL1» , dst )
player_hudmessage ( 0 , 6 , 3.0 , < 0 , 255 , 0 >, option )
set_bit ( g_FreedayAuto , id )
user_silentkill ( id )
>
case ( ‘2’ ):
<
formatex ( option , charsmax ( option ), «%L» , LANG_SERVER , «JBE_MENU_LASTREQ_SEL2» , dst )
player_hudmessage ( 0 , 6 , 3.0 , < 0 , 255 , 0 >, option )
g_Duel = 2
player_strip_weapons_all ()
i = random_num ( 0 , sizeof ( _WeaponsFree ) — 1 )
give_item ( id , _WeaponsFree [ i ])
g_BlockWeapons = 1
cs_set_user_bpammo ( id , _WeaponsFreeCSW [ i ], _WeaponsFreeAmmo [ i ])
>
case ( ‘3’ ):
<
g_Duel = 3
menu_players ( id , CS_TEAM_CT , 0 , 1 , «duel_knives» , «%L» , LANG_SERVER , «JBE_MENU_DUEL» )
>
default :
<
g_Duel = str_to_num ( data )
menu_players ( id , CS_TEAM_CT , 0 , 1 , «duel_guns» , «%L» , LANG_SERVER , «JBE_MENU_DUEL» )
>
>
g_LastDenied = 1
menu_destroy ( menu )
return PLUGIN_HANDLED
>
public setup_buttons ()
<
new ent [ 3 ]
new Float : origin [ 3 ]
new info [ 32 ]
new pos
while (( pos sizeof ( g_Buttons )) && ( ent [ 0 ] = engfunc ( EngFunc_FindEntityByString , ent [ 0 ], «classname» , «info_player_deathmatch» )))
<
pev ( ent [ 0 ], pev_origin , origin )
while (( ent [ 1 ] = engfunc ( EngFunc_FindEntityInSphere , ent [ 1 ], origin , CELL_RADIUS )))
<
if (! is_valid_ent ( ent [ 1 ]))
continue
entity_get_string ( ent [ 1 ], EV_SZ_classname , info , charsmax ( info ))
if (! equal ( info , «func_door» ))
continue
entity_get_string ( ent [ 1 ], EV_SZ_targetname , info , charsmax ( info ))
if (! info [ 0 ])
continue
if ( TrieKeyExists ( g_CellManagers , info ))
<
TrieGetCell ( g_CellManagers , info , ent [ 2 ])
>
else
<
ent [ 2 ] = engfunc ( EngFunc_FindEntityByString , 0 , «target» , info )
>
if ( is_valid_ent ( ent [ 2 ]) && ( in_array ( ent [ 2 ], g_Buttons , sizeof ( g_Buttons )) 0 ))
<
g_Buttons [ pos ] = ent [ 2 ]
pos ++
break
>
>
>
TrieDestroy ( g_CellManagers )
>
stock in_array ( needle , data [], size )
<
for ( new i = 0 ; i size ; i ++)
<
if ( data [ i ] == needle )
return i
>
return — 1
>
stock freeday_set ( id , player )
<
static src [ 32 ], dst [ 32 ]
get_user_name ( player , dst , charsmax ( dst ))
if ( is_user_alive ( player ) && ! get_bit ( g_PlayerWanted , player ))
<
set_bit ( g_PlayerFreeday , player )
entity_set_int ( player , EV_INT_skin , 6 )
if ( get_pcvar_num ( gp_GlowModels ))
player_glow ( player , g_Colors [ 1 ])
if ( 0 id g_MaxClients )
<
get_user_name ( id , src , charsmax ( src ))
player_hudmessage ( 0 , 6 , 3.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_GUARD_FREEDAYGIVE» , src , dst )
>
else if (! is_freeday ())
<
player_hudmessage ( 0 , 6 , 3.0 , < 0 , 255 , 0 >, «%L» , LANG_SERVER , «JBE_PRISONER_HASFREEDAY» , dst )
>
>
>
stock first_join ( id )
<
if (! get_bit ( g_PlayerJoin , id ))
<
set_bit ( g_PlayerJoin , id )
clear_bit ( g_PlayerHelp , id )
set_task ( 5.0 , «cmd_help» , TASK_HELP + id )
>
>
stock ctcount_allowed ()
<
static count
count = (( g_TeamCount [ CS_TEAM_T ] + g_TeamCount [ CS_TEAM_CT ]) / get_pcvar_num ( gp_TeamRatio ))
if ( count 2 )
count = 2
else if ( count > get_pcvar_num ( gp_CtMax ))
count = get_pcvar_num ( gp_CtMax )
stock player_hudmessage ( id , hudid , Float : time = 0.0 , color [ 3 ] = < 0 , 255 , 0 >, msg [], any . )
<
static text [ 512 ], Float : x , Float : y
x = g_HudSync [ hudid ][ _x ]
y = g_HudSync [ hudid ][ _y ]
if ( time > 0 )
set_hudmessage ( color [ 0 ], color [ 1 ], color [ 2 ], x , y , 0 , 0.00 , time , 0.00 , 0.00 )
else
set_hudmessage ( color [ 0 ], color [ 1 ], color [ 2 ], x , y , 0 , 0.00 , g_HudSync [ hudid ][ _time ], 0.00 , 0.00 )
vformat ( text , charsmax ( text ), msg , 6 )
ShowSyncHudMsg ( id , g_HudSync [ hudid ][ _hudsync ], text )
>
stock menu_players ( id , CsTeams : team , skip , alive , callback [], title [], any . )
<
static i , name [ 32 ], num [ 5 ], menu , menuname [ 32 ]
vformat ( menuname , charsmax ( menuname ), title , 7 )
menu = menu_create ( menuname , callback )
for ( i = 1 ; i g_MaxClients ; i ++)
<
if (! is_user_connected ( i ) || ( alive && ! is_user_alive ( i )) || ( skip == i ))
continue
if (!( team == CS_TEAM_T || team == CS_TEAM_CT ) || (( team == CS_TEAM_T || team == CS_TEAM_CT ) && ( cs_get_user_team ( i ) == team )))
<
get_user_name ( i , name , charsmax ( name ))
num_to_str ( i , num , charsmax ( num ))
menu_additem ( menu , name , num , 0 )
>
>
menu_display ( id , menu )
>
stock player_glow ( id , color [ 3 ], amount = 40 )
<
set_user_rendering ( id , kRenderFxGlowShell , color [ 0 ], color [ 1 ], color [ 2 ], kRenderNormal , amount )
>
stock player_strip_weapons ( id )
<
strip_user_weapons ( id )
give_item ( id , «weapon_knife» )
set_pdata_int ( id , m_iPrimaryWeapon , 0 )
>
stock player_strip_weapons_all ()
<
for ( new i = 1 ; i g_MaxClients ; i ++)
<
if ( is_user_alive ( i ))
<
player_strip_weapons ( i )
>
>
>
stock is_freeday ()
<
return ( g_FreedayNext || g_Freeday || ( g_JailDay == 1 ))
>
public jail_open ()
<
static i
for ( i = 0 ; i sizeof ( g_Buttons ); i ++)
<
if ( g_Buttons [ i ])
<
ExecuteHamB ( Ham_Use , g_Buttons [ i ], 0 , 0 , 1 , 1.0 )
entity_set_float ( g_Buttons [ i ], EV_FL_frame , 0.0 )
>
>
>
Код: Выделить всё L 01/01/2012 — 17:15:59: [FUN] Invalid player 8
L 01/01/2012 — 17:15:59: [AMXX] Displaying debug trace (plugin «jbextreme.amxx»)
L 01/01/2012 — 17:15:59: [AMXX] Run time error 10: native error (native «strip_user_weapons»)
L 01/01/2012 — 17:15:59: [AMXX] [0] jbextreme.sma::player_strip_weapons (line 1790)
L 01/01/2012 — 17:15:59: [AMXX] [1] jbextreme.sma::duel_guns (line 1557)
[L 01/02/2012 — 03:36:56: [FUN] Player out of range (0)
L 01/02/2012 — 03:36:56: [AMXX] Displaying debug trace (plugin «jbextreme.amxx»)
L 01/02/2012 — 03:36:56: [AMXX] Run time error 10: native error (native «set_user_rendering»)
L 01/02/2012 — 03:36:56: [AMXX] [0] jbextreme.sma::player_killed (line 737)
L 01/04/2012 — 21:30:22: [CSTRIKE] Invalid player 32
L 01/04/2012 — 21:30:22: [AMXX] Displaying debug trace (plugin «jbextreme.amxx»)
L 01/04/2012 — 21:30:22: [AMXX] Run time error 10: native error (native «cs_get_user_team»)
L 01/04/2012 — 21:30:22: [AMXX] [0] jbextreme.sma::player_status (line 508)
L 01/06/2012 — 00:22:37: [CSTRIKE] Non-player entity -1 out of range
L 01/06/2012 — 00:22:37: [AMXX] Displaying debug trace (plugin «jbextreme.amxx»)
L 01/06/2012 — 00:22:37: [AMXX] Run time error 10: native error (native «cs_set_weapon_ammo»)
L 01/06/2012 — 00:22:37: [AMXX] [0] jbextreme.sma::duel_guns (line 1559)
L 01/09/2012 — 00:51:47: [CSTRIKE] Non-player entity -1 out of range
L 01/09/2012 — 00:51:47: [AMXX] Displaying debug trace (plugin «jbextreme.amxx»)
L 01/09/2012 — 00:51:47: [AMXX] Run time error 10: native error (native «cs_set_weapon_ammo»)
L 01/09/2012 — 00:51:47: [AMXX] [0] jbextreme.sma::duel_guns (line 1552)
код большой(
ниже буду ошибки выкладывать!
Источник