• Пожалуйста, создайте название темы отражающее ее смысл
  • Для ускорения решения Вашего вопроса заполните обязательные поля и подробно опишите возникшую проблему

Помощь navigation_area_info

TauJieP

Участник
Сообщения
79
Реакции
5
Баллы
8
Скриптеры подскажите как решить?

L 09/28/2020 - 15:35:41: Start of error session.
L 09/28/2020 - 15:35:41: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20200928.log")
L 09/28/2020 - 15:35:41: [AMXX] Displaying debug trace (plugin "navigation_area_info.amxx", version "1.0.3")
L 09/28/2020 - 15:35:41: [AMXX] Run time error 4: index out of bounds
L 09/28/2020 - 15:35:41: [AMXX] [0] navigation_area_info.sma::Hook_SayTeam (line 778
 
Источник плагина (ссылка на сайт или тему)
[SPOILER="Плагин"]
[code=cpp]/*

==----------=--=-=======-==-=============-=-=-=======--===--=-
___ ___ _______ __ _ _______ _______
/__ /\ /__ /| /_____ /| /__/| /_/| /_______/| /_______/|
| \/ | | / _ | | | |/ |' | ___ |' | ___ |'
| | | | |/ | | | < ||/ / /__ ||/ / /__
| |\/| | | | /| | | | < \ / /__//| / /__//|
| | || | | | | | | | | \ /| / /___|| | / /___|| |
|___|/ |___|/ |___|/|__|/ |___|\___|/ |________|/ |________|/

+ + + +
+ + +
+ + + +
+ + + +

*/
#include <amxmisc>
#include <fakemeta>

#define VERSION "1.0.3"
#define CLASS_NAME "nai_zone"
#define TASK_BASIS_SHOWZONES 1000
#define MAX_NAMES 106

new g_Enabled, g_MsgMode, gMsgLocation, gMsgTeamInfo, gMsgSayText, i_MaxZones, i_MaxNames, g_Dot, g_Editor,
Index, g_NameMenu, Direction, g_iMaxPlayers, setupunits = 10

new g_LastLocation[33]
new g_LocNames[MAX_NAMES][20], zone[100]

new const g_TeamNames[][] =
{
"",
"Terrorist",
"Counter-Terrorist",
"Spectator"
}

public plugin_init()
{
register_plugin ( "Navigation Area Info", VERSION, "Makzz" )

g_Enabled = register_cvar ( "nai_enabled", "1" )
g_MsgMode = register_cvar ( "nai_msgmode", "1" ) // [0] - CZ Style, [1] - HUD ( Recommended )

register_dictionary ( "navigation_area_info.txt" )

register_forward ( FM_Touch, "Fwd_Touch" )
//register_forward ( FM_Voice_SetClientListening, "Fwd_SetVoice" )
register_message ( get_user_msgid ( "TextMsg" ), "Message_TextMsg" )

gMsgLocation = get_user_msgid ( "Location" )
gMsgTeamInfo = get_user_msgid ( "TeamInfo" )
gMsgSayText = get_user_msgid ( "SayText" )
g_iMaxPlayers = get_maxplayers ();

register_menu ( "MainMenu", -1, "MainMenuAction" )
register_menu ( "EditMenu", -1, "EditMenuAction" )
register_menu ( "KillMenu", -1, "KillMenuAction" )

register_clcmd ( "nai_menu", "InitNaiMenu", ADMIN_RCON )
register_clcmd ( "say_team", "Hook_SayTeam" )

set_task ( 0.2, "LoadAreaNameFile" )
}

public client_disconnect ( id )
{
if ( g_Editor == id )
{
g_Editor = 0

for ( new i; i < i_MaxZones; i++ )
{
new z = zone
[I] remove_task ( TASK_BASIS_SHOWZONES + z )
}
}
}

public client_putinserver ( id )
g_LastLocation[id] = -1

public plugin_precache ()
g_Dot = precache_model ( "sprites/dot.spr" )

public Fwd_Touch ( zone, id )
{
if ( !i_MaxZones || id > g_iMaxPlayers || !get_pcvar_num ( g_Enabled ) )
return FMRES_IGNORED

if ( !is_user_alive ( id ) /*|| is_user_bot ( id )*/ )
return FMRES_IGNORED

static s_ClassName[32]
pev ( zone, pev_classname, s_ClassName, sizeof s_ClassName - 1 )

if ( equal ( s_ClassName, CLASS_NAME ) ) // Мы в зоне!!
{
new i_Name = pev ( zone, pev_iuser1 )
if( i_Name != g_LastLocation[id] )
{
if ( get_pcvar_num ( g_MsgMode ) )
{
set_hudmessage ( 0, 255, 0, 0.01, 0.30, 2, 0.1, 6.0, 0.05, 2.0, 2 )
show_hudmessage ( id, "%L", id, g_LocNames[i_Name][1] )
}
else
{
message_begin ( MSG_ONE, gMsgLocation, _, id )
write_byte ( 1 )
write_string ( g_LocNames[i_Name] )
message_end ()
}

g_LastLocation[id] = i_Name // We need to save i_Name also for bots
}
}
return PLUGIN_CONTINUE
}

public Message_TextMsg ( msg_id, dest, id )
{
if ( get_msg_args() != 5 || !i_MaxZones || !get_pcvar_num ( g_Enabled ) )
return PLUGIN_CONTINUE

static s_Msg[32], s_Name[32], s_RadioMsg[32], s_NewMsg[256], s_Player[3]
get_msg_arg_string ( 3, s_Msg, sizeof s_Msg - 1 )

if ( equal ( s_Msg, "#Game_radio" ) )
{
get_msg_arg_string ( 2, s_Player, sizeof s_Player - 1 ) // Caller

new i_Player = str_to_num ( s_Player )
if ( i_Player > g_iMaxPlayers || !i_Player || g_LastLocation[i_Player] == -1 )
{
//server_print("Oops %i",i_Player)
return PLUGIN_CONTINUE
}

get_msg_arg_string ( 4, s_Name, sizeof s_Name - 1 )
get_msg_arg_string ( 5, s_RadioMsg, sizeof s_RadioMsg - 1 )

if ( equal ( s_RadioMsg, "#Fire_in_the_hole" ) )
{
new sTextGrenade[3], sNewTeam[12]
switch ( get_user_weapon ( i_Player ) )
{
case CSW_HEGRENADE:
{
sNewTeam = "TERRORIST"
sTextGrenade = "HE"
}
case CSW_FLASHBANG:
{
sNewTeam = "CT"
sTextGrenade = "FB"
}
case CSW_SMOKEGRENADE:
{
sNewTeam = "SPECTATOR"
sTextGrenade = "SG"
}
}

if ( sTextGrenade[0] )
{
formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^1%s^1 @^4 %L^1 (%L): %L ^3(%s)", s_Name, i_Player, g_LocNames[g_LastLocation[i_Player]][1], i_Player, "Radio", i_Player, "Fire_in_the_hole", sTextGrenade )

new sTeam[12]
get_user_team ( i_Player, sTeam, 11 )

message_begin ( MSG_ONE, gMsgTeamInfo, _, id )
write_byte ( id )
write_string ( sNewTeam ) // Посылаем новую
message_end ()

message_begin ( MSG_ONE, gMsgSayText, _, id )
write_byte ( id )
write_string( s_NewMsg )
message_end ()

message_begin ( MSG_ONE, gMsgTeamInfo, _, id )
write_byte ( id )
write_string ( sTeam )
message_end ()

return PLUGIN_HANDLED
}
}

formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^3%s^1 @^4 %L^1 (%L): %L", s_Name, i_Player, g_LocNames[g_LastLocation[i_Player]][1], i_Player, "Radio", i_Player, s_RadioMsg[1] )

message_begin ( MSG_ONE, gMsgSayText, _, id )
write_byte ( id )
write_string( s_NewMsg )
message_end ()

return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public LoadAreaNameFile ()
{
new s_File[64]
get_configsdir ( s_File, sizeof s_File -1 )

format ( s_File, sizeof s_File -1, "%s/navigation_area/area_names.ini", s_File )

if ( file_exists ( s_File ) )
{
new Input[48], Line, Len
while ( ( Line = read_file ( s_File, Line, Input, sizeof Input -1, Len ) ) != 0 )
{
if ( !Len || ( Input[0] == '/' ) )
continue // Коментарий или пустота

if ( Input[0] == '#' ) // Name?
{
copy ( g_LocNames[i_MaxNames], 19, Input )
i_MaxNames++
}
}
server_print ( "[NAI] Loaded %i navigation area names", i_MaxNames )
LoadAreaFile ()
return
}

server_print ( "[NAI] File not found '%s'", s_File )
}

public LoadAreaFile ()
{
new s_File[64], s_MapName[32]
get_configsdir ( s_File, sizeof s_File -1 )
get_mapname ( s_MapName, sizeof s_MapName - 1 )

format ( s_File, sizeof s_File -1, "%s/navigation_area/%s.nai", s_File , s_MapName )

if ( file_exists ( s_File ) )
{
new Input[48], Line, Len
while ( ( Line = read_file ( s_File, Line, Input, sizeof Input -1, Len ) ) != 0 )
{
if ( !Len || ( Input[0] == '/' ) )
continue // Коментарий или пустота

new Data[20][10], Float:mins[3], Float:maxs[3], Float:pos[3]

parse ( Input, Data[0], 19, Data[1], 19, Data[2], 19, Data[3], 19, Data[4], 19,
Data[5], 19, Data[6], 19, Data[7], 19, Data[8], 19, Data[9], 19 )

pos[0] = str_to_float ( Data[0] )
pos[1] = str_to_float ( Data[1] )
pos[2] = str_to_float ( Data[2] )

mins[0] = str_to_float ( Data[3] )
mins[1] = str_to_float ( Data[4] )
mins[2] = str_to_float ( Data[5] )

maxs[0] = str_to_float ( Data[6] )
maxs[1] = str_to_float ( Data[7] )
maxs[2] = str_to_float ( Data[8] )

new zm = str_to_num ( Data[9] )

zone[i_MaxZones] = CreateZone ( pos, mins, maxs, zm )
i_MaxZones++
}
server_print ( "[NAI] Loaded %i navigation areas",i_MaxZones)
set_pcvar_num ( g_Enabled, 1 )
}
else
{
server_print ( "[NAI] File not found '%s'", s_File )
set_pcvar_num ( g_Enabled, 0 )
}
}

stock CreateZone ( Float:position[3], Float:mins[3], Float:maxs[3], zm )
{
new ent = engfunc ( EngFunc_CreateNamedEntity, engfunc ( EngFunc_AllocString, "info_target" ) )

set_pev ( ent, pev_classname, CLASS_NAME ) // Имя класса
dllfunc ( DLLFunc_Spawn, ent )
engfunc ( EngFunc_SetOrigin, ent, position )
set_pev ( ent, pev_movetype, MOVETYPE_FLY )
set_pev ( ent, pev_solid, SOLID_TRIGGER )
engfunc ( EngFunc_SetSize, ent, mins, maxs )

set_pev ( ent, pev_iuser1, zm )

return ent
}
//--------------------------------------
public FindAllZones ()
{
new entity = -1
i_MaxZones = 0
while ( ( entity = engfunc ( EngFunc_FindEntityByString, entity, "classname", CLASS_NAME ) ) )
{
zone[i_MaxZones] = entity
i_MaxZones++
}
}

public ShowAllZones ()
{
FindAllZones ()

for ( new i; i < i_MaxZones; i++ )
{
new z = zone
[I] remove_task ( TASK_BASIS_SHOWZONES + z )
set_task ( 0.2, "ShowZoneBox", TASK_BASIS_SHOWZONES + z, _, _, "b" )
}
}

public InitNaiMenu ( id )
{
if ( !( get_user_flags ( id ) & ADMIN_RCON ) )
return PLUGIN_CONTINUE

g_Editor = id

FindAllZones ()
ShowAllZones ()

//set_task ( 0.1, "OpenLocMenu", id )
OpenLocMenu ( id )

return PLUGIN_HANDLED
}

public ShowZoneBox ( entity )
{
entity -= TASK_BASIS_SHOWZONES

if ( ( !pev_valid ( entity ) ) || !g_Editor )
return

new Float:pos[3], Float:editorpos[3]

pev ( entity, pev_origin, pos )
pev ( g_Editor, pev_origin, editorpos )

if ( entity == zone[Index] )
DrawLine(editorpos[0], editorpos[1], editorpos[2] - 16.0, pos[0], pos[1], pos[2], { 255, 0, 0 } )

new Float:hitpoint[3]
fm_trace_line(-1, editorpos, pos, hitpoint)

new Float:dh = vector_distance ( editorpos, pos ) - vector_distance ( editorpos, hitpoint )
if ( ( floatabs ( dh ) > 128.0 ) && ( entity != zone[Index] ) )
return

new Float:mins[3], Float:maxs[3]
pev ( entity, pev_mins, mins )
pev ( entity, pev_maxs, maxs )

mins[0] += pos[0]
mins[1] += pos[1]
mins[2] += pos[2]
maxs[0] += pos[0]
maxs[1] += pos[1]
maxs[2] += pos[2]

new g_ZoneColorYellow[3] = { 255, 255, 0 }, g_ZoneColorRed[3] = { 255, 0, 0 }, color[3] = { 0, 255, 50 }
// Нижняя часть
DrawLine ( mins[0], mins[1], mins[2], mins[0], maxs[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 0?g_ZoneColorRed:color))//5
DrawLine ( mins[0], maxs[1], mins[2], maxs[0], maxs[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 1?g_ZoneColorYellow:color))//8
DrawLine ( maxs[0], maxs[1], mins[2], maxs[0], mins[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 0?g_ZoneColorYellow:color))//9
DrawLine ( mins[0], mins[1], mins[2], maxs[0], mins[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 1?g_ZoneColorRed:color))//4

if ( entity != zone[Index] )
return
// Верхняя
DrawLine ( mins[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorRed:color))//12
DrawLine ( maxs[0], maxs[1], maxs[2], mins[0], maxs[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 1?g_ZoneColorYellow:color))//1
DrawLine ( maxs[0], maxs[1], maxs[2], maxs[0], mins[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorYellow:color))//2
DrawLine ( maxs[0], mins[1], maxs[2], mins[0], mins[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 1?g_ZoneColorRed:color))//11
// Лево
DrawLine ( mins[0], mins[1], mins[2], mins[0], mins[1], maxs[2], Direction == 1?(g_ZoneColorRed):(Direction == 0?g_ZoneColorRed:color))//6
DrawLine ( maxs[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], Direction == 1?(g_ZoneColorRed):(Direction == 0?g_ZoneColorYellow:color))//10

DrawLine ( maxs[0], maxs[1], maxs[2], maxs[0], maxs[1], mins[2], Direction == 1?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorYellow:color))//3
DrawLine ( mins[0], maxs[1], maxs[2], mins[0], maxs[1], mins[2], Direction == 1?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorRed:color)) // 7
}

public DrawLine ( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, color[3] )
{
message_begin ( MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, g_Editor )
write_byte ( TE_BEAMPOINTS )
write_coord ( floatround( x1 ) )
write_coord ( floatround( y1 ) )
write_coord ( floatround( z1 ) )
write_coord ( floatround( x2 ) )
write_coord ( floatround( y2 ) )
write_coord ( floatround( z2 ) )
write_short ( g_Dot )
write_byte ( 1 ) // начало кадра
write_byte ( 1 ) // размер кадра
write_byte ( 4 ) // жизнь за 0.1'с
write_byte ( 4 ) // ширина
write_byte ( 0 ) // шум
write_byte ( color[0] ) // r, g, b
write_byte ( color[1] ) // r, g, b
write_byte ( color[2] ) // r, g, b
write_byte ( 250 ) // яркость
write_byte ( 0 ) // скорость
message_end()
}
//-----------------------------------------
public OpenLocMenu ( id )
{
new menu[512], len, zm = -1,
menukeys = MENU_KEY_0 + MENU_KEY_4 + MENU_KEY_9 // По умолчанию есть Выход, Создать и Сохранить

if ( pev_valid ( zone[Index] ) )
zm = pev ( zone[Index], pev_iuser1 )

len += formatex ( menu[len], charsmax ( menu ) - len, "\y%L^n\w", id, "MENU_TITLE" )
//len += formatex ( menu[len], charsmax ( menu ) - len, "^n<<%i %L", i_MaxZones, id, "MENU_EXIST" )

if ( zm != -1 )
{
menukeys += MENU_KEY_1 + MENU_KEY_2 + MENU_KEY_3 // Добавляем кнопки 1 2 3
//len += formatex ( menu[len], charsmax ( menu ) - len, " \y|\w (%L #%i -> '\y%s\w')>>", id, "MENU_CURRENT", Index + 1, zm>i_MaxNames?"\rError\w":g_LocNames[zm])
len += formatex ( menu[len], charsmax ( menu ) - len, "%L: '\y%L\w' (%i/%i)", id, "MENU_CURRENT", id, g_LocNames[zm][1], Index + 1, i_MaxZones )
len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r1.\w %L", id, "MENU_EDIT" ) // 1
len += formatex ( menu[len], charsmax ( menu ) - len, "^n \y 2\w <- %L \y3\w -> %L", id, "MENU_PREVIOUS", id, "MENU_NEXT" )
}

len += formatex(menu[len], charsmax(menu) - len, "^n\r4.\w %L", id, "MENU_CREATE" ) // 4

if (zm != -1)
{
menukeys += MENU_KEY_6 // Добавляем кнопку 6
len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r6. %L", id, "MENU_DELETE" )
}

len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r9.\y %L", id, "MENU_SAVE" ) // 9
len += formatex ( menu[len], charsmax ( menu ) - len, "^n\r0.\w %L", id, "MENU_EXIT" ) // 0

show_menu ( id, menukeys, menu, -1, "MainMenu" )

client_cmd ( id, "spk sound/buttons/button9.wav" )
}

public MainMenuAction ( id, i_Key )
{
switch ( i_Key ) // key = ( key == 10 ) ? 0 : key + 1
{
case 0:
{
if ( pev_valid ( zone[Index] ) )
OpenEditMenu ( id )
else
OpenLocMenu ( id )
}
case 1: // Предыдущая
{
Index = (Index > 0) ? Index - 1 : Index
OpenLocMenu ( id )
}
case 2: // Следующая
{
Index = (Index < i_MaxZones - 1) ? Index + 1 : Index
OpenLocMenu ( id )
}
case 3: // Создать
{
if ( i_MaxZones < 100 - 1 )
{
new Float:position[3]
pev ( id, pev_origin, position )
new entity = CreateZone ( position, Float:{ -32.0, -32.0, -32.0 }, Float:{ 32.0, 32.0, 32.0 }, 1 )
FindAllZones()
for ( new c; c < i_MaxZones; c++ )
{
if ( zone[c] == entity )
Index = c
}
ShowAllZones()
OpenEditMenu ( id )
}
else
{
client_print(id, print_chat, "[NAI] To many areas")
client_cmd ( id, "spk sound/buttons/button10.wav" )
set_task ( 0.5, "OpenLocMenu", id )
}
}
case 5: // Удалить
{
OpenKillMenu ( id )
}
case 8: // Сохранить
{
g_Editor = 0
Save_Zones ( id )
}
case 9:
{
g_Editor = 0
}
}
return PLUGIN_HANDLED
}

public OpenEditMenu ( id )
{
new menu[354], dir[3], len, zm = -1, menukeys = MENU_KEY_0 + MENU_KEY_1 + MENU_KEY_2 + MENU_KEY_4 + MENU_KEY_5 + MENU_KEY_6 + MENU_KEY_7 + MENU_KEY_8

if ( pev_valid ( zone[Index] ) )
zm = pev ( zone[Index], pev_iuser1 )

if ( zm == -1 )
{
//server_print("OOps")
return
}

len += formatex ( menu[len], charsmax ( menu ) - len, "\y%L\w: %L^n", id, "MENU_TILTE_EDIT", id, g_LocNames[zm][1] )

//if ( zm != -1 )
len += formatex ( menu[len], charsmax(menu) - len, "^n\r1.\w %L", id, "MENU_TITLE_NAME" ) // 1

switch ( Direction )
{
case 0:
formatex ( dir, 2, "X" )
case 1:
formatex ( dir, 2, "Y" )
case 2:
formatex ( dir, 2, "Z" )
}

len += formatex(menu[len], charsmax(menu) - len, "^n\r2.\w %L", id, "MENU_SIZE_STEP", setupunits ) // 2
len += formatex(menu[len], charsmax(menu) - len, "^n\r4.\w %L '\d%s\w'", id, "MENU_SIZE_INIT", dir ) // 4
len += formatex(menu[len], charsmax(menu) - len, "^n \r 5 <- %L 6 -> %L\w", id, "MENU_STRIP", id, "MENU_WIDER" ) // 5 6
len += formatex(menu[len], charsmax(menu) - len, "^n \y 7 <- %L 8 -> %L\w^n", id, "MENU_STRIP", id, "MENU_WIDER" ) // 7 8
len += formatex(menu[len], charsmax(menu) - len, "^n\r0.\w %L", id, "MENU_BACK" ) // 0

show_menu ( id, menukeys, menu, -1, "EditMenu" )

client_cmd ( id, "spk sound/buttons/lightswitch2.wav" )
}

public EditMenuAction ( id, i_Key )
{
switch ( i_Key )
{
case 0:
{
OpenNameMenu ( id, 0 )
}
case 1: // Приращение
{
setupunits = (setupunits < 100) ? setupunits * 10 : 1
OpenEditMenu ( id )
}
case 3: // В каком направлении будут изменения
{
Direction = ( Direction < 2 ) ? Direction + 1 : 0
OpenEditMenu ( id )
}
case 4: // Сторона "mins" / уменьшить красные линии -> "уже"
{
ResizeLines ( 0, 1 )
OpenEditMenu ( id )
}
case 5: // Сторона "mins" / увеличить красные линии -> "шире"
{
ResizeLines ( 1, 1 )
OpenEditMenu ( id )
}
case 6: // Сторона "maxs" / уменьшить жёлтые линии -> "уже"
{
ResizeLines ( 0, 0 )
OpenEditMenu ( id )
}
case 7: // Сторона "maxs" / увеличить жёлтые линии -> "шире"
{
ResizeLines ( 1, 0 )
OpenEditMenu ( id )
}
case 9:
{
OpenLocMenu ( id )
}
}
return PLUGIN_HANDLED
}

public ResizeLines ( direction, color )
{
new entity = zone[Index], Float:pos[3], Float:mins[3], Float:maxs[3]
pev ( entity, pev_origin, pos )
pev ( entity, pev_mins, mins )
pev ( entity, pev_maxs, maxs )

if( direction ) // Увеличение
{
mins[Direction] -= float(setupunits) / 2.0
maxs[Direction] += float(setupunits) / 2.0

// Красные
color ? (pos[Direction] -= float(setupunits) / 2.0) : (pos[Direction] += float(setupunits) / 2.0)
}
else // Уменьшение
{
if ((floatabs(mins[Direction]) + maxs[Direction]) < setupunits + 1) return
mins[Direction] += float(setupunits) / 2.0
maxs[Direction] -= float(setupunits) / 2.0

// Красные
color ? (pos[Direction] += float(setupunits) / 2.0) : (pos[Direction] -= float(setupunits) / 2.0)
}

set_pev ( entity, pev_origin, pos )
engfunc ( EngFunc_SetSize, entity, mins, maxs )
}

public OpenKillMenu ( id )
{
new menu[256]

format ( menu, sizeof menu - 1, "%L^n\y1\w - %L^n \r0\w - %L", id, "MENU_TITLE_DELETE", id, "MENU_NO", id, "MENU_YES" )

show_menu ( id, MENU_KEY_1 + MENU_KEY_0, menu, -1, "KillMenu" )
client_cmd ( id, "spk sound/debris/bustglass1.wav" )
}

public KillMenuAction ( id, i_Key )
{
switch ( i_Key )
{
case 0:
client_print ( id, print_chat, "[NAI] Area not deleted")
case 9:
{
engfunc(EngFunc_RemoveEntity, zone[Index])
Index--
if (Index < 0) Index = 0
client_print ( id, print_chat, "[NAI] Area deleted" )
FindAllZones ()
}
}
OpenLocMenu ( id )
}

public Save_Zones ( id )
{
new s_File[64], s_MapName[32]
get_configsdir ( s_File, sizeof s_File -1 )
get_mapname ( s_MapName, sizeof s_MapName - 1 )

format ( s_File, sizeof s_File -1, "%s/navigation_area", s_File )
if (!dir_exists ( s_File ) ) mkdir ( s_File )

format( s_File, sizeof s_File -1, "%s/%s.nai", s_File , s_MapName )
delete_file ( s_File )

FindAllZones ()

new s_Name[32], s_Out[64]
get_user_name ( id, s_Name, sizeof s_Name - 1 )
formatex ( s_Out, sizeof s_Out - 1, "// Created by %s^n", s_Name )
write_file ( s_File, s_Out )

for(new i; i < i_MaxZones; i++)
{
new z = zone
[I] new zm = pev(z, pev_iuser1) // Имя зоны

new Float:pos[3], Float:mins[3], Float:maxs[3]
pev(z, pev_origin, pos)
pev(z, pev_mins, mins)
pev(z, pev_maxs, maxs)

new output[500]
format(output, sizeof output - 1, "%.1f %.1f %.1f %.1f %.1f %.1f", pos[0], pos[1], pos[2], mins[0], mins[1], mins[2])
format(output, sizeof output - 1, "%s %.1f %.1f %.1f %d", output, maxs[0], maxs[1], maxs[2], zm)

replace_all ( output, sizeof output - 1, ".0", "" ) // I don't understend, but %.0f doesn't work :/

write_file ( s_File, output )
}

client_print ( id, print_chat, "[NAI] Saved" )
}

public OpenNameMenu ( id, i_Page )
{
new s_Str[128]

formatex ( s_Str, charsmax(s_Str), "%L '%L'\w", id, "MENU_TITLE_NAME", id, g_LocNames[pev(zone[Index],pev_iuser1 )][1])
g_NameMenu = menu_create ( s_Str,"MenuAction_Name" )

for ( new i; i < i_MaxNames; i++ )
{
formatex ( s_Str,sizeof s_Str - 1,"%L", id, g_LocNames[I][1] )
menu_additem ( g_NameMenu,s_Str )
}

formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_BACK" )
menu_setprop ( g_NameMenu, MPROP_BACKNAME, s_Str )
formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_NEXT" )
menu_setprop ( g_NameMenu, MPROP_NEXTNAME, s_Str )
formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_EXIT" )
menu_setprop ( g_NameMenu, MPROP_EXITNAME, s_Str )

menu_display ( id, g_NameMenu, i_Page )
}

public MenuAction_Name ( id, menu, i_Key )
{
new i_Null, i_Page
player_menu_info ( id, i_Null, i_Null, i_Page )
switch ( i_Key )
{
case MENU_BACK: // Назад
{
OpenNameMenu ( id, i_Page-- )
return PLUGIN_HANDLED
}
case MENU_MORE: // Ещё
{
OpenNameMenu ( id, i_Page++ )
return PLUGIN_HANDLED
}
case MENU_EXIT: // Выход
{
menu_destroy ( g_NameMenu )
OpenEditMenu ( id )
return PLUGIN_HANDLED
}
default:
{
set_pev ( zone[Index], pev_iuser1, i_Key )
OpenEditMenu ( id )
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}

stock fm_trace_line ( ignoreent, const Float:start[3], const Float:end[3], Float:ret[3] )
{
engfunc ( EngFunc_TraceLine, start, end, ignoreent == -1 ? 1 : 0, ignoreent, 0 )

new ent = get_tr2 ( 0, TR_pHit )
get_tr2 ( 0, TR_vecEndPos, ret )

return pev_valid ( ent ) ? ent : 0
}

public Hook_SayTeam ( sender_id )
{
if ( !i_MaxZones || !get_pcvar_num ( g_Enabled ) )
return PLUGIN_CONTINUE

new s_Msg[256]
read_args ( s_Msg, sizeof s_Msg - 1 )

remove_quotes ( s_Msg )

if ( !strlen ( s_Msg ) || s_Msg[0] == '@' || s_Msg[0] == '!' || s_Msg[0] == '/')
return PLUGIN_CONTINUE

new s_Name[32], s_NewMsg[256], sender_team = get_user_team ( sender_id )
get_user_name ( sender_id, s_Name, charsmax ( s_Name ) )

formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^1%s(%s)^3 %s^1 @^4 %s^1 : %s", is_user_alive(sender_id) ? "" : "*DEAD*", g_TeamNames[sender_team], s_Name, g_LocNames[g_LastLocation[sender_id]][1], s_Msg )

new s_Players[32], i_Num
get_players( s_Players, i_Num)

for ( new i; i < i_Num ; i++ )
{
new id = s_Players
[I]
if ( is_user_connected ( id ) && sender_team == get_user_team ( id ) )
{
message_begin ( MSG_ONE, gMsgSayText, _, id )
write_byte ( id )
write_string( s_NewMsg )
message_end ()
}
}

server_print ( "(%s) %s : %s", g_TeamNames[sender_team], s_Name, s_Msg )

return PLUGIN_HANDLED
}

/*
public Fwd_SetVoice(receiver, sender, bool:bListen)
{
// Doesn't work :/

if(!is_user_connected(receiver) || !is_user_connected(sender) || receiver == sender)
return FMRES_IGNORED

message_begin(MSG_ONE, get_user_msgid("BotVoice"), _, receiver )
write_byte(bListen) // Show/Hide
write_byte(sender) // Sender id
message_end()

return FMRES_SUPERCEDE
}
*/[/I][/I][/I][/I][/I]
[/code]
[/SPOILER]
[SPOILER="Лог"]
L 09/28/2020 - 00:11:30: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 00:26:31: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 00:41:41: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 00:56:39: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 01:11:30: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 01:12:19: -------- Mapchange to awp_india --------
L 09/28/2020 - 01:12:20: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 01:12:21: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 01:30:30: [mapmanager.amxx] StartVote: timeleft 114
L 09/28/2020 - 01:30:59: -------- Mapchange to de_dust2_3x3 --------
L 09/28/2020 - 01:31:00: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 01:31:01: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 01:50:23: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 01:51:10: -------- Mapchange to cs_mansion --------
L 09/28/2020 - 01:51:11: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 01:51:11: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 01:52:10: [mapmanager.amxx] Map changed to default[$2000$]
L 09/28/2020 - 01:52:25: -------- Mapchange to $2000$ --------
L 09/28/2020 - 01:52:25: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 01:52:26: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 02:10:46: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 02:25:57: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 04:11:49: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 05:27:44: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 05:28:31: -------- Mapchange to cs_mansion --------
L 09/28/2020 - 05:28:32: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 05:28:32: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 05:47:40: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 05:48:24: -------- Mapchange to $2000$ --------
L 09/28/2020 - 05:48:25: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 05:48:26: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 06:07:00: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 06:22:02: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 06:36:50: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 06:37:38: -------- Mapchange to de_dust2_2x2_b_new --------
L 09/28/2020 - 06:37:39: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 06:37:40: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 06:57:17: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 06:58:05: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 06:58:06: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 06:58:07: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 07:16:56: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 07:18:26: -------- Mapchange to de_dust2_3x3 --------
L 09/28/2020 - 07:18:27: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 07:18:28: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 07:23:53: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 07:37:37: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 07:38:37: -------- Mapchange to $2000$ --------
L 09/28/2020 - 07:38:38: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 07:38:39: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 07:38:51: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 07:41:55: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 07:57:11: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 07:57:54: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 07:57:55: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 07:57:56: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 08:09:43: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 08:17:29: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 08:18:29: -------- Mapchange to $2000$ --------
L 09/28/2020 - 08:18:30: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 08:18:31: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 08:37:11: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 08:43:22: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 08:52:31: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 08:53:27: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 08:53:32: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 08:53:33: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 08:53:34: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 08:53:34: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 09:01:40: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 09:15:19: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 09:24:22: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 09:24:49: [plmenu.amxx] Cmd: "Beast | TauJIeP<STEAM_0:1:61333168>" slay "Troy<BOT>"
L 09/28/2020 - 09:24:54: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 09:25:44: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 09:26:01: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 09:26:07: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 09:26:16: -------- Mapchange to awp_india --------
L 09/28/2020 - 09:26:17: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 09:26:18: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 09:26:18: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 09:28:20: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 09:28:23: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 09:28:23: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 09:28:42: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 09:28:43: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 09:28:44: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 09:28:58: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 09:30:29: [adminchat.amxx] Chat: "Beast | TauJIeP<5><STEAM_0:1:61333168><>" tsay "vk.com/uraaalsk"
L 09/28/2020 - 09:30:30: [adminchat.amxx] Chat: "Beast | TauJIeP<5><STEAM_0:1:61333168><>" tsay "vk.com/uraaalsk"
L 09/28/2020 - 09:48:16: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 09:49:07: -------- Mapchange to $2000$ --------
L 09/28/2020 - 09:49:08: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 09:49:09: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 09:49:09: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 10:01:57: [gamecms_api_5.3.5.amxx] Авторизация... "<BombermaG><STEAM_0:1:552671464>" (аккаунт "STEAM_0:1:552671464" / id= 95) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 10:08:00: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 10:13:39: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 10:22:57: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 10:33:27: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 10:37:46: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 10:52:59: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 11:07:43: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 11:22:43: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 11:38:02: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 11:52:58: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 12:07:59: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 12:16:59: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 12:23:04: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 12:23:44: -------- Mapchange to de_dust2_3x3 --------
L 09/28/2020 - 12:23:45: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 12:23:45: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 12:23:45: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 12:37:29: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 12:41:48: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 12:42:34: -------- Mapchange to awp_india --------
L 09/28/2020 - 12:42:35: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 12:42:36: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 12:42:36: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 12:46:03: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 12:55:59: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 13:00:45: [mapmanager.amxx] StartVote: timeleft 114
L 09/28/2020 - 13:02:48: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 13:02:58: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 13:08:14: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 13:12:02: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 13:15:45: [mapmanager.amxx] StartVote: timeleft 113
L 09/28/2020 - 13:16:01: -------- Mapchange to $2000$ --------
L 09/28/2020 - 13:16:01: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 13:16:02: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 13:16:02: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 13:21:30: [plmenu.amxx] Cmd: "87 V.M<STEAM_1:0:166133560>" slap with 0 damage "Hulumulu<STEAM_1:0:1533185540>"
L 09/28/2020 - 13:21:36: [plmenu.amxx] Cmd: "87 V.M<STEAM_1:0:166133560>" slap with 0 damage "Hulumulu<STEAM_1:0:1533185540>"
L 09/28/2020 - 13:21:38: [plmenu.amxx] Cmd: "87 V.M<STEAM_1:0:166133560>" slap with 0 damage "Hulumulu<STEAM_1:0:1533185540>"
L 09/28/2020 - 13:21:54: [plmenu.amxx] Cmd: "87 V.M<STEAM_1:0:166133560>" slap with 0 damage "rrrrr<STEAM_1:0:413346917>"
L 09/28/2020 - 13:21:57: [plmenu.amxx] Cmd: "87 V.M<STEAM_1:0:166133560>" slap with 0 damage "rrrrr<STEAM_1:0:413346917>"
L 09/28/2020 - 13:34:32: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 13:34:46: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 13:41:18: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 13:49:32: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 14:04:37: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 14:05:10: -------- Mapchange to $7000$ --------
L 09/28/2020 - 14:05:11: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 14:05:12: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 14:11:14: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 14:22:31: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 14:24:06: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 14:24:39: -------- Mapchange to awp_india --------
L 09/28/2020 - 14:24:40: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 14:24:41: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 14:26:37: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 14:33:12: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 14:42:50: [mapmanager.amxx] StartVote: timeleft 114
L 09/28/2020 - 14:43:06: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 14:43:07: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 14:43:07: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 14:52:27: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 15:02:24: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 15:09:33: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 15:10:39: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 15:17:23: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 15:32:34: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 15:41:40: [gamecms_api_5.3.5.amxx] Авторизация... "<87 V.M><STEAM_1:0:166133560>" (аккаунт "STEAM_1:0:166133560" / id= 94) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 15:45:50: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | TauJIeP><STEAM_0:1:61333168>" (аккаунт "STEAM_0:1:61333168" / id= 96) (флаги "alpt") (услуга "Системный администратор")
L 09/28/2020 - 15:47:48: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 15:52:09: [blind_rbs.amxx] ADMIN "Beast | TauJIeP<609><STEAM_0:1:61333168><212.13.185.245>" ослепил "87 V.M<598><STEAM_1:0:166133560><178.121.225.162>" на 4 сек
L 09/28/2020 - 15:56:48: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 15:57:08: -------- Mapchange to $2000$ --------
L 09/28/2020 - 15:57:09: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 15:57:09: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 16:09:47: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 16:15:29: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 16:31:11: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 16:45:29: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 17:00:46: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 17:15:41: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 17:30:48: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 17:45:50: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 18:00:37: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 18:16:05: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 18:31:01: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 18:31:51: -------- Mapchange to cs_mansion --------
L 09/28/2020 - 18:31:52: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 18:31:53: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 18:50:42: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 18:51:34: -------- Mapchange to cs_assault --------
L 09/28/2020 - 18:51:35: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 18:51:36: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 19:03:02: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 19:03:45: -------- Mapchange to $2000$ --------
L 09/28/2020 - 19:03:46: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 19:03:47: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 19:22:33: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 19:37:30: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 19:52:35: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 20:07:53: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 20:22:23: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 20:37:32: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 20:52:36: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 21:03:57: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:03:59: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:05:58: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 21:06:21: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 21:07:37: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 21:08:11: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 21:08:12: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 21:08:13: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 21:08:13: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 21:08:13: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:27:51: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 21:30:16: -------- Mapchange to de_inferno --------
L 09/28/2020 - 21:30:18: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 21:30:18: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 21:30:19: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 21:30:19: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:30:43: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:31:47: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:32:41: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:34:55: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:34:57: [mapsmenu.amxx] Администратор Beast | WTF*** сменил карту на $2000$
L 09/28/2020 - 21:35:19: -------- Mapchange to $2000$ --------
L 09/28/2020 - 21:35:20: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 21:35:20: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 21:35:20: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 21:35:21: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:35:22: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 21:45:20: [mapsmenu.amxx] Администратор Beast | WTF*** сменил карту на awp_india
L 09/28/2020 - 21:45:53: -------- Mapchange to awp_india --------
L 09/28/2020 - 21:45:54: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 21:45:54: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 21:45:55: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 21:45:55: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 22:04:03: [mapmanager.amxx] StartVote: timeleft 114
L 09/28/2020 - 22:04:19: -------- Mapchange to $7000$ --------
L 09/28/2020 - 22:04:20: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 22:04:21: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 22:04:21: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 22:16:22: [mapsmenu.amxx] Администратор NEPOSREDSTVENNO PODOLSK запустил голосование за карты
L 09/28/2020 - 22:16:39: [mapsmenu.amxx] Голосование успешно! Следующая карта de_dust2_2x2
L 09/28/2020 - 22:16:44: -------- Mapchange to de_dust2_2x2 --------
L 09/28/2020 - 22:16:45: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 22:16:46: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 22:16:46: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 22:24:10: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 22:36:16: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 22:37:00: -------- Mapchange to aim_headshot --------
L 09/28/2020 - 22:37:01: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 22:37:02: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 22:37:02: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 22:40:11: [mapsmenu.amxx] Администратор NEPOSREDSTVENNO PODOLSK сменил карту на cs_mansion
L 09/28/2020 - 22:40:17: -------- Mapchange to cs_mansion --------
L 09/28/2020 - 22:40:18: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 22:40:18: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 22:40:19: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 22:56:05: [mapsmenu.amxx] Администратор NEPOSREDSTVENNO PODOLSK запустил голосование за карты
L 09/28/2020 - 22:56:25: [mapsmenu.amxx] Голосование успешно! Следующая карта awp_india
L 09/28/2020 - 22:56:50: -------- Mapchange to awp_india --------
L 09/28/2020 - 22:56:51: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 22:56:52: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 22:56:52: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 23:08:59: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 23:09:41: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 23:14:25: [gamecms_api_5.3.5.amxx] Авторизация... "<Beast | WTF***><STEAM_0:1:174274456>" (аккаунт "STEAM_0:1:174274456" / id= 93) (флаги "alpt") (услуга "Генеральный администратор")
L 09/28/2020 - 23:15:01: [mapmanager.amxx] StartVote: timeleft 113
L 09/28/2020 - 23:15:16: -------- Mapchange to de_dust2_2x2_b_new --------
L 09/28/2020 - 23:15:17: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 23:15:18: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 23:15:18: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 23:15:20: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 23:34:10: [mapmanager.amxx] StartVote: timeleft 0, new round
L 09/28/2020 - 23:35:42: -------- Mapchange to $2000$ --------
L 09/28/2020 - 23:35:43: [gamecms_api_5.3.5.amxx] Соединение с базой данных GameCMS установлено
L 09/28/2020 - 23:35:44: [gamecms_api_5.3.5.amxx] Загружено из базы данных: услуг по флагам 5 шт. / других услуг: 0 шт.
L 09/28/2020 - 23:35:44: [gamecms_api_5.3.5.amxx] Авторизация... "<NEPOSREDSTVENNO PODOLSK><STEAM_0:1:198148529>" (аккаунт "STEAM_0:1:198148529" / id= 97) (флаги "apt") (услуга "GoldVIP привилегии + Админ")
L 09/28/2020 - 23:54:25: [mapmanager.amxx] StartVote: timeleft 0, new round
[/SPOILER]
[SPOILER="Лог"]
L 09/28/2020 - 15:35:41: Start of error session.
L 09/28/2020 - 15:35:41: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20200928.log")
L 09/28/2020 - 15:35:41: [AMXX] Displaying debug trace (plugin "navigation_area_info.amxx", version "1.0.3")
L 09/28/2020 - 15:35:41: [AMXX] Run time error 4: index out of bounds
L 09/28/2020 - 15:35:41: [AMXX] [0] navigation_area_info.sma::Hook_SayTeam (line 778)
[/SPOILER]
Список плагинов (amx_plugins)
[ 1] GameCMS_API 5.3.5 zhorzh78 gamecms_api_5.3 running
[ 2] ScreenMaker 1.1 neygomon screen_maker.am running
[ 3] FreshBans 1.4.3b kanagava fresh_bans_143_ running
[ 4] Map Manager 2.5.61 Mistrick mapmanager.amxx running
[ 5] say /other_motd 2.0 CSotherMOTD motds.amxx running
[ 6] CSStatsX SQL 0.7.4+2 serfreeman1337 csstatsx_sql.am running
[ 7] Ping Control 1.31 neygomon Ping_Control.am running
[ 8] AuthEmu API 1.0 Dev-MS Team authemu.amxx running
[ 9] AFK Manager 1.2 Xramer afk_manager.amx running
[ 10] AES: StatsX 0.5+1 serfreeman1337 aes_statsx_cstr running
[ 11] VKCallAdmin 0.1 uMk0 vkcalladmin.amx running
[ 12] Navigation Area Info 1.0.3 Makzz navigation_area debug
[ 13] Millennium Menu 0.3f Reeps menu_server.amx running
[ 14] [ReAPI] No Team Flash 0.0.2 Vaqtincha no_team_flash.a running
[ 15] Nice Killer 1.7 Got Milk? / HoHo nice_killer.amx running
[ 16] [190] Blind RBS 20.06.06 SKAJIbnEJIb blind_rbs.amxx running
[ 17] Anti Radio Flood 1.1 Leo_[BH], AcE antiflood_radio running
[ 18] resetscore(ReAPI) 1.0 Phantom resetscore.amxx running
[ 19] Private Message 1.1 Denzer pm.amxx running
[ 20] GameName Changer 1.0 neugomon gamename_change running
[ 21] Knife Duel with Telepo 1.2 neygomon knife_duel.amxx running
[ 22] C4 Timer on roundtime 0.3.3a neygomon c4timer.amxx running
[ 23] Connect Info 1.1 Hypa_[KZ] connect_info.am running
[ 24] GameCMS_GagManager 2.2.3 ReAP zhorzh78 gamecms_gagmana running
[ 25] From Rock to Ban 1.02 Safety1st++ rock2gag.amxx running
[ 26] Restart Round 1.1 MakapoH. auto_rr.amxx paused
[ 27] Game Sounds 1.1 maFFyoZZyk game_sounds.amx running
[ 28] Check Admin & Vip 2.2 Leo_[BH] check_admin_vip running
[ 29] Lite Admin ESP 1.0 neygomon admin_esp.amxx running
[ 30] SF Warn Menu 0.1.4g serfreeman1337 sf_admin_warns. running
[ 31] Lite Kill Assist 1.17 neygomon lite_kill_assis running
[ 32] GSClient: List 1.0 Hypa_[KZ] gsclient_list.a running
[ 33] [ReAPI] AWPoff 1.3 PAffAEJIkA :3 awp_off.amxx running
[ 34] Mode 2x2 2.5re s1lent mode.amxx running
[ 35] Stats Configuration 1.9.0.5263 AMXX Dev Team statscfg.amxx running
[ 36] Parachute for ALL [ReA 3.0 Leo_[BH] parachute.amxx running
[ 37] Fake Ping For Bots 1.0 fl0wer fake_ping_for_b running
[ 38] Auto-Give Privileges 1.0 SerGrib night_vips.amxx running
[ 39] Advert Messages 1.2.2 neygomon adverts.amxx running
[ 40] Slots Reservation 1.2 pUzzlik admin_slots.amx running
[ 41] Menus Front-End 1.5 neugomon menufront.amxx running
[ 42] Commands Menu 1.9.0.5263 AMXX Dev Team cmdmenu.amxx running
[ 43] Players Menu 1.7 neugomon plmenu.amxx running
[ 44] Maps Menu 1.4.1 neugomon mapsmenu.amxx running
[ 45] Say me and Say hp 1.4 neygomon sayme.amxx running
[ 46] GameCMS Time Awards 1.4 API_5 zhorzh78 gamecms_time_aw running
[ 47] Admin Chat 1.9.0.5263 AMXX Dev Team adminchat.amxx running
[ 48] DemoRecoder 1.1 neygomon amx_demorec.amx running
[ 49] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
[ 50] Admin Votes 1.9.0.5263 AMXX Dev Team adminvote.amxx running
[ 51] Restrict Weapons 1.9.0.5263 AMXX Dev Team restmenu.amxx running
[ 52] Voice protection 0.3 AMXX.Shop voice_protectio running
[ 53] StatsX 1.9.0.5263 AMXX Dev Team statsx.amxx running
[ 54] Yet Another Voteban 1.8 AndrewZ/voed voteban.amxx running
[ 55] Lite Translit 2.8 neygomon lite_translit.a running
[ 56] Advanced Experience Sy 0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 57] AES: CStrike Addon 0.5.9 [REA serfreeman1337/s aes_exp_cstrike running
[ 58] AES: Informer 0.5.9 [REA serfreeman1337/s aes_informer.am running
[ 59] AES: Admin Tools 0.5.9 [REA serfreeman1337/s aes_exp_editor. running
[ 60] AES: Bonus System 0.5.9 Vega serfreeman1337/s aes_bonus_syste stopped
[ 61] AES: Bonus CSTRIKE 0.5.9.1 [R serfreeman1337/s aes_bonus_cstri stopped
[ 62] AES: Status Info 0.1 serfreeman1337 aes_status_info running
[ 63] AES Bonus: Flags 0.1 Sonyx aes_bonus_flags running
[ 64] V.I.P Custom Weapons 1.0.0 Vaqtincha vip_custom.amxx debug
[ 65] unknown unknown unknown custom_deagle.a paused
[ 66] unknown unknown unknown custom_m4a1.amx paused
[ 67] unknown unknown unknown custom_ak47.amx paused
[ 68] unknown unknown unknown custom_awp.amxx paused
[ 69] Block Pickup Gold 0.1 Vaqtincha BlockPickupGold running
69 plugins, 62 running
Список модулей (meta list)
[ 1] SafeNameAndChat RUN - SafeNameAndChat.so v1.1 ini ANY ANY
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.0.92c ini Start Never
[ 3] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5263 ini Start ANY
[ 4] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC4 ini ANY ANY
[ 5] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 6] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 7] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 8] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 9] WHBlocker RUN - whblocker_mm_i386.so v1.5.696 ini Chlvl ANY
[10] AuthEmu RUN - authemu_amxx_i386.so v4.2.12.311-dev+m pl3 ANY Never
[11] MySQL RUN - mysql_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[12] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[13] ReAPI RUN - reapi_amxx_i386.so v5.15.0.197-dev pl3 ANY Never
[14] CURL AMXX RUN - curl_amxx_i386.so v1.1.1 pl3 ANY ANY
[15] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[16] Engine RUN - engine_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[17] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[18] Fun RUN - fun_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[19] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl3 ANY Never
19 plugins, 19 running
TauJieP, Полный текст ошибки дайте
Добавлено:

Сомнительно, что вы смогли скомпилировать ваш код.

C++:
/*

==----------=--=-=======-==-=============-=-=-=======--===--=-
   ___    ___      _______     __    _     _______     _______
/__ /\ /__ /|    /_____ /|  /__/| /_/|  /_______/|  /_______/|
|    \/    | |  /   _   | | |   |/   |' | ___    |' | ___    |'
|          | | |   |/   | | |       <   ||/  /  /__ ||/  /  /__
|   |\/|   | | |    /|  | | |     <   \    /  /__//|   /  /__//|
|   | ||   | | |   | |  | | |       \ /| /  /___|| | /  /___|| |
|___|/ |___|/  |___|/|__|/  |___|\___|/ |________|/ |________|/

    +                 +             +          +
          +                      +                   +
              +         +           +      +
          +        +            +        +

*/
#include <amxmisc>
#include <fakemeta>

#define VERSION            "1.0.3"
#define CLASS_NAME        "nai_zone"
#define TASK_BASIS_SHOWZONES    1000
#define MAX_NAMES        106

new g_Enabled, g_MsgMode, gMsgLocation, gMsgTeamInfo, gMsgSayText, i_MaxZones, i_MaxNames, g_Dot, g_Editor,
Index, g_NameMenu, Direction, g_iMaxPlayers, setupunits = 10

new g_LastLocation[33]
new g_LocNames[MAX_NAMES][20], zone[100]

new const g_TeamNames[][] =
{
    "",
    "Terrorist",
    "Counter-Terrorist",
    "Spectator"
}

public plugin_init()
{
    register_plugin ( "Navigation Area Info", VERSION, "Makzz" )
 
    g_Enabled = register_cvar ( "nai_enabled", "1" )
    g_MsgMode = register_cvar ( "nai_msgmode", "1" ) // [0] - CZ Style, [1] - HUD ( Recommended )
 
    register_dictionary ( "navigation_area_info.txt" )
 
    register_forward ( FM_Touch, "Fwd_Touch" )
    //register_forward ( FM_Voice_SetClientListening, "Fwd_SetVoice" )
    register_message ( get_user_msgid ( "TextMsg" ), "Message_TextMsg" )
 
    gMsgLocation = get_user_msgid ( "Location" )
    gMsgTeamInfo = get_user_msgid ( "TeamInfo" )
    gMsgSayText = get_user_msgid ( "SayText" )
    g_iMaxPlayers = get_maxplayers ();
 
    register_menu ( "MainMenu", -1, "MainMenuAction" )
    register_menu ( "EditMenu", -1, "EditMenuAction" )
    register_menu ( "KillMenu", -1, "KillMenuAction" )
 
    register_clcmd ( "nai_menu", "InitNaiMenu", ADMIN_RCON )
    register_clcmd ( "say_team", "Hook_SayTeam" )
 
    set_task ( 0.2, "LoadAreaNameFile" )
}

public client_disconnect ( id )
{
    if ( g_Editor == id )
    {
        g_Editor = 0
      
        for ( new i; i < i_MaxZones; i++ )
        {
            new z = zone[i]           
            remove_task ( TASK_BASIS_SHOWZONES + z )
        }
    }
}

public client_putinserver ( id )
    g_LastLocation[id] = -1

public plugin_precache ()
    g_Dot = precache_model ( "sprites/dot.spr" )

public Fwd_Touch ( zone, id )
{
    if ( !i_MaxZones || id > g_iMaxPlayers || !get_pcvar_num ( g_Enabled )  )
        return FMRES_IGNORED
    
    if ( !is_user_alive ( id ) /*|| is_user_bot ( id )*/ )
        return FMRES_IGNORED
    
    static s_ClassName[32]
    pev ( zone, pev_classname, s_ClassName, sizeof s_ClassName - 1 )
    
    if ( equal ( s_ClassName, CLASS_NAME ) ) // Мы в зоне!!
    {
        new i_Name = pev ( zone, pev_iuser1 )
        if( i_Name != g_LastLocation[id] )
        {
            if ( get_pcvar_num ( g_MsgMode ) )
            {
                set_hudmessage ( 0, 255, 0, 0.01, 0.30, 2, 0.1, 6.0, 0.05, 2.0, 2 )
                show_hudmessage ( id, "%L", id, g_LocNames[i_Name][1] )
            }
            else
            {
                message_begin ( MSG_ONE, gMsgLocation, _, id )
                write_byte ( 1 )
                write_string ( g_LocNames[i_Name] )
                message_end ()
            }
            
            g_LastLocation[id] = i_Name // We need to save i_Name also for bots
        }
    }
    return PLUGIN_CONTINUE
}

public Message_TextMsg ( msg_id, dest, id )
{
    if ( get_msg_args() != 5 || !i_MaxZones || !get_pcvar_num ( g_Enabled ) )
        return PLUGIN_CONTINUE
    
    static s_Msg[32], s_Name[32], s_RadioMsg[32], s_NewMsg[256], s_Player[3]
    get_msg_arg_string ( 3, s_Msg, sizeof s_Msg - 1 )
    
    if ( equal ( s_Msg, "#Game_radio" ) )
    {
        get_msg_arg_string ( 2, s_Player, sizeof s_Player - 1 ) // Caller
        
        new i_Player = str_to_num ( s_Player )
        if ( i_Player > g_iMaxPlayers || !i_Player || g_LastLocation[i_Player] == -1 )
        {
            //server_print("Oops %i",i_Player)
            return PLUGIN_CONTINUE
        }
        
        get_msg_arg_string ( 4, s_Name, sizeof s_Name - 1 )
        get_msg_arg_string ( 5, s_RadioMsg, sizeof s_RadioMsg - 1 )
        
        if ( equal ( s_RadioMsg, "#Fire_in_the_hole" ) )
        {
            new sTextGrenade[3], sNewTeam[12]
            switch ( get_user_weapon ( i_Player ) )
            {
                case CSW_HEGRENADE:
                {
                    sNewTeam = "TERRORIST"
                    sTextGrenade = "HE"
                }
                case CSW_FLASHBANG:
                {
                    sNewTeam = "CT"
                    sTextGrenade = "FB"
                }
                case CSW_SMOKEGRENADE:
                {
                    sNewTeam = "SPECTATOR"
                    sTextGrenade = "SG"
                }
            }
            
            if ( sTextGrenade[0] )
            {
                formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^1%s^1 @^4 %L^1 (%L): %L ^3(%s)", s_Name, i_Player, g_LocNames[g_LastLocation[i_Player]][1], i_Player, "Radio", i_Player, "Fire_in_the_hole", sTextGrenade )
                
                new sTeam[12]
                get_user_team ( i_Player, sTeam, 11 )
                
                message_begin ( MSG_ONE, gMsgTeamInfo, _, id )
                write_byte ( id )
                write_string ( sNewTeam ) // Посылаем новую
                message_end ()
                
                message_begin ( MSG_ONE, gMsgSayText, _, id )
                write_byte ( id )
                write_string( s_NewMsg )
                message_end ()
                
                message_begin ( MSG_ONE, gMsgTeamInfo, _, id )
                write_byte ( id )
                write_string ( sTeam )
                message_end ()
                
                return PLUGIN_HANDLED
            }
        }
        
        formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^3%s^1 @^4 %L^1 (%L): %L", s_Name, i_Player, g_LocNames[g_LastLocation[i_Player]][1], i_Player, "Radio", i_Player, s_RadioMsg[1] )
        
        message_begin ( MSG_ONE, gMsgSayText, _, id )
        write_byte ( id )
        write_string( s_NewMsg )
        message_end ()
        
        return PLUGIN_HANDLED
    }
    
    return PLUGIN_CONTINUE
}

public LoadAreaNameFile ()
{
    new s_File[64]
    get_configsdir ( s_File, sizeof s_File -1 )
    
    format ( s_File, sizeof s_File -1, "%s/navigation_area/area_names.ini", s_File )
    
    if ( file_exists ( s_File ) )
    {
        new Input[48], Line, Len
        while ( ( Line = read_file ( s_File, Line, Input, sizeof Input -1, Len ) ) != 0 )
        {
            if ( !Len || ( Input[0] == '/' ) )
                continue // Коментарий или пустота
            
            if ( Input[0] == '#' ) // Name?
            {
                copy ( g_LocNames[i_MaxNames], 19, Input )
                i_MaxNames++
            }
        }
        server_print ( "[NAI] Loaded %i navigation area names", i_MaxNames )
        LoadAreaFile ()
        return
    }
    
    server_print ( "[NAI] File not found '%s'", s_File )   
}

public LoadAreaFile ()
{
    new s_File[64], s_MapName[32]
    get_configsdir ( s_File, sizeof s_File -1 )
    get_mapname ( s_MapName, sizeof s_MapName - 1 )
    
    format ( s_File, sizeof s_File -1, "%s/navigation_area/%s.nai", s_File , s_MapName )
    
    if ( file_exists ( s_File ) )
    {
        new Input[48], Line, Len
        while ( ( Line = read_file ( s_File, Line, Input, sizeof Input -1, Len ) ) != 0 )
        {
            if ( !Len || ( Input[0] == '/' ) )
                continue // Коментарий или пустота
            
            new Data[20][10], Float:mins[3], Float:maxs[3], Float:pos[3]
            
            parse ( Input, Data[0], 19, Data[1], 19, Data[2], 19, Data[3], 19, Data[4], 19,
            Data[5], 19, Data[6], 19, Data[7], 19, Data[8], 19, Data[9], 19 )
            
            pos[0] = str_to_float ( Data[0] )
            pos[1] = str_to_float ( Data[1] )
            pos[2] = str_to_float ( Data[2] )
            
            mins[0] = str_to_float ( Data[3] )
            mins[1] = str_to_float ( Data[4] )
            mins[2] = str_to_float ( Data[5] )
            
            maxs[0] = str_to_float ( Data[6] )
            maxs[1] = str_to_float ( Data[7] )
            maxs[2] = str_to_float ( Data[8] )
            
            new zm = str_to_num ( Data[9] )
            
            zone[i_MaxZones] = CreateZone ( pos, mins, maxs, zm )
            i_MaxZones++
        }
        server_print ( "[NAI] Loaded %i navigation areas",i_MaxZones)
        set_pcvar_num ( g_Enabled, 1 )
    }
    else
    {
        server_print ( "[NAI] File not found '%s'", s_File )
        set_pcvar_num ( g_Enabled, 0 )
    }
}

stock CreateZone ( Float:position[3], Float:mins[3], Float:maxs[3], zm )
{
    new ent = engfunc ( EngFunc_CreateNamedEntity, engfunc ( EngFunc_AllocString, "info_target" ) )
    
    set_pev ( ent, pev_classname, CLASS_NAME ) // Имя класса
    dllfunc ( DLLFunc_Spawn, ent )
    engfunc ( EngFunc_SetOrigin, ent, position )
    set_pev ( ent, pev_movetype, MOVETYPE_FLY )
    set_pev ( ent, pev_solid, SOLID_TRIGGER )
    engfunc ( EngFunc_SetSize, ent, mins, maxs )
    
    set_pev ( ent, pev_iuser1, zm )
    
    return ent
}
//--------------------------------------
public FindAllZones ()
{
    new entity = -1
    i_MaxZones = 0
    while ( ( entity = engfunc ( EngFunc_FindEntityByString, entity, "classname", CLASS_NAME ) ) )
    {
        zone[i_MaxZones] = entity
        i_MaxZones++
    }
}

public ShowAllZones ()
{
    FindAllZones ()
    
    for ( new i; i < i_MaxZones; i++ )
    {
        new z = zone[i]       
        remove_task ( TASK_BASIS_SHOWZONES + z )
        set_task ( 0.2, "ShowZoneBox", TASK_BASIS_SHOWZONES + z, _, _, "b" )
    }
}

public InitNaiMenu ( id )
{
    if ( !( get_user_flags ( id ) & ADMIN_RCON ) )
        return PLUGIN_CONTINUE
    
    g_Editor = id
    
    FindAllZones ()
    ShowAllZones ()
    
    //set_task ( 0.1, "OpenLocMenu", id )
    OpenLocMenu ( id )

    return PLUGIN_HANDLED
}

public ShowZoneBox ( entity )
{
    entity -= TASK_BASIS_SHOWZONES
    
    if ( ( !pev_valid ( entity ) ) || !g_Editor )
        return
    
    new Float:pos[3], Float:editorpos[3]
    
    pev ( entity, pev_origin, pos )
    pev ( g_Editor, pev_origin, editorpos )
    
    if ( entity == zone[Index] )
        DrawLine(editorpos[0], editorpos[1], editorpos[2] - 16.0, pos[0], pos[1], pos[2], { 255, 0, 0 } )
    
    new Float:hitpoint[3]
    fm_trace_line(-1, editorpos, pos, hitpoint)
    
    new Float:dh = vector_distance ( editorpos, pos ) - vector_distance ( editorpos, hitpoint )
    if ( ( floatabs ( dh ) > 128.0 ) && ( entity != zone[Index] ) )
        return
    
    new Float:mins[3], Float:maxs[3]
    pev ( entity, pev_mins, mins )
    pev ( entity, pev_maxs, maxs )
    
    mins[0] += pos[0]
    mins[1] += pos[1]
    mins[2] += pos[2]
    maxs[0] += pos[0]
    maxs[1] += pos[1]
    maxs[2] += pos[2]
    
    new g_ZoneColorYellow[3] = { 255, 255, 0 }, g_ZoneColorRed[3] = { 255, 0, 0 }, color[3] = { 0, 255, 50 }
    // Нижняя часть
    DrawLine ( mins[0], mins[1], mins[2], mins[0], maxs[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 0?g_ZoneColorRed:color))//5
    DrawLine ( mins[0], maxs[1], mins[2], maxs[0], maxs[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 1?g_ZoneColorYellow:color))//8
    DrawLine ( maxs[0], maxs[1], mins[2], maxs[0], mins[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 0?g_ZoneColorYellow:color))//9
    DrawLine ( mins[0], mins[1], mins[2], maxs[0], mins[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 1?g_ZoneColorRed:color))//4
    
    if ( entity != zone[Index] )
        return
    // Верхняя
    DrawLine ( mins[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorRed:color))//12
    DrawLine ( maxs[0], maxs[1], maxs[2], mins[0], maxs[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 1?g_ZoneColorYellow:color))//1
    DrawLine ( maxs[0], maxs[1], maxs[2], maxs[0], mins[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorYellow:color))//2
    DrawLine ( maxs[0], mins[1], maxs[2], mins[0], mins[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 1?g_ZoneColorRed:color))//11
    // Лево
    DrawLine ( mins[0], mins[1], mins[2], mins[0], mins[1], maxs[2], Direction == 1?(g_ZoneColorRed):(Direction == 0?g_ZoneColorRed:color))//6
    DrawLine ( maxs[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], Direction == 1?(g_ZoneColorRed):(Direction == 0?g_ZoneColorYellow:color))//10
    
    DrawLine ( maxs[0], maxs[1], maxs[2], maxs[0], maxs[1], mins[2], Direction == 1?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorYellow:color))//3
    DrawLine ( mins[0], maxs[1], maxs[2], mins[0], maxs[1], mins[2], Direction == 1?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorRed:color)) // 7
}

public DrawLine ( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, color[3] )
{
    message_begin ( MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, g_Editor )
    write_byte ( TE_BEAMPOINTS )
    write_coord ( floatround( x1 ) )
    write_coord ( floatround( y1 ) )
    write_coord ( floatround( z1 ) )
    write_coord ( floatround( x2 ) )
    write_coord ( floatround( y2 ) )
    write_coord ( floatround( z2 ) )
    write_short ( g_Dot )
    write_byte ( 1 )        // начало кадра
    write_byte ( 1 )        // размер кадра
    write_byte ( 4 )        // жизнь за 0.1'с
    write_byte ( 4 )        // ширина
    write_byte ( 0 )         // шум
    write_byte ( color[0] )       // r, g, b
    write_byte ( color[1] )      // r, g, b
    write_byte ( color[2] )       // r, g, b
    write_byte ( 250 )     // яркость
    write_byte ( 0 )           // скорость
    message_end()
}
//-----------------------------------------
public OpenLocMenu ( id )
{
    new menu[512], len, zm = -1,
    menukeys = MENU_KEY_0 + MENU_KEY_4 + MENU_KEY_9 // По умолчанию есть Выход, Создать и Сохранить
    
    if ( pev_valid ( zone[Index] ) )
        zm = pev ( zone[Index], pev_iuser1 )
    
    len += formatex ( menu[len], charsmax ( menu ) - len, "\y%L^n\w", id, "MENU_TITLE" )
    //len += formatex ( menu[len], charsmax ( menu ) - len, "^n<<%i %L", i_MaxZones, id, "MENU_EXIST" )
    
    if ( zm != -1 )
    {
        menukeys += MENU_KEY_1 + MENU_KEY_2 + MENU_KEY_3 // Добавляем кнопки 1 2 3
        //len += formatex ( menu[len], charsmax ( menu ) - len, " \y|\w (%L #%i -> '\y%s\w')>>", id, "MENU_CURRENT", Index + 1, zm>i_MaxNames?"\rError\w":g_LocNames[zm])
        len += formatex ( menu[len], charsmax ( menu ) - len, "%L: '\y%L\w' (%i/%i)", id, "MENU_CURRENT", id, g_LocNames[zm][1], Index + 1, i_MaxZones )
        len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r1.\w %L", id, "MENU_EDIT" ) // 1
        len += formatex ( menu[len], charsmax ( menu ) - len, "^n \y          2\w <- %L     \y3\w -> %L", id, "MENU_PREVIOUS", id, "MENU_NEXT" )
    }
    
    len += formatex(menu[len], charsmax(menu) - len, "^n\r4.\w %L", id, "MENU_CREATE" ) // 4
    
    if (zm != -1)
    {
        menukeys += MENU_KEY_6 // Добавляем кнопку 6
        len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r6. %L", id, "MENU_DELETE" )
    }
    
    len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r9.\y %L", id, "MENU_SAVE" ) // 9
    len += formatex ( menu[len], charsmax ( menu ) - len, "^n\r0.\w %L", id, "MENU_EXIT" ) // 0
    
    show_menu ( id, menukeys, menu, -1, "MainMenu" )
    
    client_cmd ( id, "spk sound/buttons/button9.wav" )
}

public MainMenuAction ( id, i_Key )
{
    switch ( i_Key ) // key = ( key == 10 ) ? 0 : key + 1
    {
        case 0:
        {
            if ( pev_valid ( zone[Index] ) )
                OpenEditMenu ( id )
            else
                OpenLocMenu ( id )
        }
        case 1: // Предыдущая
        {
            Index = (Index > 0) ? Index - 1 : Index
            OpenLocMenu ( id )
        }
        case 2: // Следующая
        {
            Index = (Index < i_MaxZones - 1) ? Index + 1 : Index
            OpenLocMenu ( id )
        }
        case 3: // Создать
        {
            if ( i_MaxZones < 100 - 1 )
            {
                new Float:position[3]
                pev ( id, pev_origin, position )
                new entity = CreateZone ( position, Float:{ -32.0, -32.0, -32.0 }, Float:{ 32.0, 32.0, 32.0 }, 1 )
                FindAllZones()
                for ( new c; c < i_MaxZones; c++ )
                {
                    if ( zone[c] == entity )
                        Index = c
                }
                ShowAllZones()
                OpenEditMenu ( id )
            }
            else
            {
                client_print(id, print_chat, "[NAI] To many areas")
                client_cmd ( id, "spk sound/buttons/button10.wav" )
                set_task ( 0.5, "OpenLocMenu", id )
            }
        }
        case 5: // Удалить
        {
            OpenKillMenu ( id )
        }
        case 8: // Сохранить
        {
            g_Editor = 0
            Save_Zones ( id )
        }
        case 9:
        {
            g_Editor = 0
        }
    }
    return PLUGIN_HANDLED
}

public OpenEditMenu ( id )
{
    new menu[354], dir[3], len, zm = -1, menukeys = MENU_KEY_0 + MENU_KEY_1 + MENU_KEY_2 + MENU_KEY_4 + MENU_KEY_5 + MENU_KEY_6 + MENU_KEY_7 + MENU_KEY_8
    
    if ( pev_valid ( zone[Index] ) )
        zm = pev ( zone[Index], pev_iuser1 )
    
    if ( zm == -1 )
    {
        //server_print("OOps")
        return
    }
    
    len += formatex ( menu[len], charsmax ( menu ) - len, "\y%L\w: %L^n", id, "MENU_TILTE_EDIT", id, g_LocNames[zm][1] )   
    
    //if ( zm != -1 )
    len += formatex ( menu[len], charsmax(menu) - len, "^n\r1.\w %L", id, "MENU_TITLE_NAME" ) // 1
    
    switch ( Direction )
    {
        case 0:
            formatex ( dir, 2, "X" )
        case 1:
            formatex ( dir, 2, "Y" )
        case 2:
            formatex ( dir, 2, "Z" )
    }
    
    len += formatex(menu[len], charsmax(menu) - len, "^n\r2.\w %L", id, "MENU_SIZE_STEP", setupunits ) // 2
    len += formatex(menu[len], charsmax(menu) - len, "^n\r4.\w %L '\d%s\w'", id, "MENU_SIZE_INIT", dir ) // 4
    len += formatex(menu[len], charsmax(menu) - len, "^n \r          5 <- %L       6 -> %L\w", id, "MENU_STRIP", id, "MENU_WIDER" ) // 5 6
    len += formatex(menu[len], charsmax(menu) - len, "^n \y          7 <- %L       8 -> %L\w^n", id, "MENU_STRIP", id, "MENU_WIDER" ) // 7 8
    len += formatex(menu[len], charsmax(menu) - len, "^n\r0.\w %L", id, "MENU_BACK" ) // 0
    
    show_menu ( id, menukeys, menu, -1, "EditMenu" )
    
    client_cmd ( id, "spk sound/buttons/lightswitch2.wav" )
}

public EditMenuAction ( id, i_Key )
{
    switch ( i_Key )
    {
        case 0:
        {
            OpenNameMenu ( id, 0 )
        }
        case 1: // Приращение
        {
            setupunits = (setupunits < 100) ? setupunits * 10 : 1
            OpenEditMenu ( id )
        }
        case 3: // В каком направлении будут изменения
        {
            Direction = ( Direction < 2 ) ? Direction + 1 : 0
            OpenEditMenu ( id )
        }
        case 4: // Сторона "mins" / уменьшить красные линии -> "уже"
        {
            ResizeLines ( 0, 1 )
            OpenEditMenu ( id )
        }
        case 5: // Сторона "mins" / увеличить красные линии -> "шире"
        {
            ResizeLines ( 1, 1 )
            OpenEditMenu ( id )
        }
        case 6: // Сторона "maxs" / уменьшить жёлтые линии -> "уже"
        {
            ResizeLines ( 0, 0 )
            OpenEditMenu ( id )
        }
        case 7: // Сторона "maxs" / увеличить жёлтые линии -> "шире"
        {
            ResizeLines ( 1, 0 )
            OpenEditMenu ( id )
        }
        case 9:
        {
            OpenLocMenu ( id )
        }
    }
    return PLUGIN_HANDLED
}

public ResizeLines ( direction, color )
{
    new entity = zone[Index], Float:pos[3], Float:mins[3], Float:maxs[3]
    pev ( entity, pev_origin, pos )
    pev ( entity, pev_mins, mins )
    pev ( entity, pev_maxs, maxs )
    
    if( direction ) // Увеличение
    {
        mins[Direction] -= float(setupunits) / 2.0
        maxs[Direction] += float(setupunits) / 2.0
        
        // Красные
        color ? (pos[Direction] -= float(setupunits) / 2.0) : (pos[Direction] += float(setupunits) / 2.0)
    }
    else // Уменьшение
    {
        if ((floatabs(mins[Direction]) + maxs[Direction]) < setupunits + 1) return
        mins[Direction] += float(setupunits) / 2.0
        maxs[Direction] -= float(setupunits) / 2.0
        
        // Красные
        color ? (pos[Direction] += float(setupunits) / 2.0) : (pos[Direction] -= float(setupunits) / 2.0)
    }
        
    set_pev ( entity, pev_origin, pos )
    engfunc ( EngFunc_SetSize, entity, mins, maxs )
}

public OpenKillMenu ( id )
{
    new menu[256]
    
    format ( menu, sizeof menu - 1, "%L^n\y1\w - %L^n  \r0\w - %L", id, "MENU_TITLE_DELETE", id, "MENU_NO", id, "MENU_YES" )
    
    show_menu ( id, MENU_KEY_1 + MENU_KEY_0, menu, -1, "KillMenu" )
    client_cmd ( id, "spk sound/debris/bustglass1.wav" )
}

public KillMenuAction ( id, i_Key )
{
    switch ( i_Key )
    {
        case 0:
            client_print ( id, print_chat, "[NAI] Area not deleted")
        case 9:
        {
            engfunc(EngFunc_RemoveEntity, zone[Index])
            Index--
            if (Index < 0) Index = 0
            client_print ( id, print_chat, "[NAI] Area deleted" )
            FindAllZones ()
        }
    }
    OpenLocMenu ( id )
}

public Save_Zones ( id )
{
    new s_File[64], s_MapName[32]
    get_configsdir ( s_File, sizeof s_File -1 )
    get_mapname ( s_MapName, sizeof s_MapName - 1 )
    
    format ( s_File, sizeof s_File -1, "%s/navigation_area", s_File )
    if (!dir_exists ( s_File ) ) mkdir ( s_File )
    
    format( s_File, sizeof s_File -1, "%s/%s.nai", s_File , s_MapName )
    delete_file ( s_File )
    
    FindAllZones ()
    
    new s_Name[32], s_Out[64]
    get_user_name ( id, s_Name, sizeof s_Name - 1 )
    formatex ( s_Out, sizeof s_Out - 1, "// Created by %s^n", s_Name )
    write_file ( s_File, s_Out )
    
    for(new i; i < i_MaxZones; i++)
    {
        new z = zone[i]       
        new zm = pev(z, pev_iuser1) // Имя зоны
        
        new Float:pos[3], Float:mins[3], Float:maxs[3]
        pev(z, pev_origin, pos)
        pev(z, pev_mins, mins)
        pev(z, pev_maxs, maxs)
        
        new output[500]
        format(output, sizeof output - 1, "%.1f %.1f %.1f %.1f %.1f %.1f", pos[0], pos[1], pos[2], mins[0], mins[1], mins[2])
        format(output, sizeof output - 1, "%s %.1f %.1f %.1f %d", output, maxs[0], maxs[1], maxs[2], zm)
        
        replace_all ( output, sizeof output - 1, ".0", "" ) // I don't understend, but %.0f doesn't work :/
        
        write_file ( s_File, output )
    }
    
    client_print ( id, print_chat, "[NAI] Saved" )
}

public OpenNameMenu ( id, i_Page )
{
    new s_Str[128]
    
    formatex ( s_Str, charsmax(s_Str), "%L '%L'\w", id, "MENU_TITLE_NAME", id, g_LocNames[pev(zone[Index],pev_iuser1 )][1])
    g_NameMenu = menu_create ( s_Str,"MenuAction_Name" )
    
    for ( new i; i < i_MaxNames; i++ )
    {
        formatex ( s_Str,sizeof s_Str - 1,"%L", id, g_LocNames[i][1] )
        menu_additem ( g_NameMenu,s_Str )
    }
    
    formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_BACK" )
    menu_setprop ( g_NameMenu, MPROP_BACKNAME, s_Str )
    formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_NEXT" )
    menu_setprop ( g_NameMenu, MPROP_NEXTNAME, s_Str )
    formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_EXIT" )
    menu_setprop ( g_NameMenu, MPROP_EXITNAME, s_Str )
    
    menu_display ( id, g_NameMenu, i_Page )
}

public MenuAction_Name ( id, menu, i_Key )
{
    new i_Null, i_Page
    player_menu_info ( id, i_Null, i_Null, i_Page )
    switch ( i_Key )
    {
        case MENU_BACK: // Назад
        {
            OpenNameMenu ( id, i_Page-- )
            return PLUGIN_HANDLED
        }
        case MENU_MORE: // Ещё
        {
            OpenNameMenu ( id, i_Page++ )
            return PLUGIN_HANDLED
        }
        case MENU_EXIT: // Выход
        {
            menu_destroy ( g_NameMenu )
            OpenEditMenu ( id )
            return PLUGIN_HANDLED
        }
        default:
        {
            set_pev ( zone[Index], pev_iuser1, i_Key )
            OpenEditMenu ( id )
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}

stock fm_trace_line ( ignoreent, const Float:start[3], const Float:end[3], Float:ret[3] )
{
    engfunc ( EngFunc_TraceLine, start, end, ignoreent == -1 ? 1 : 0, ignoreent, 0 )

    new ent = get_tr2 ( 0, TR_pHit )
    get_tr2 ( 0, TR_vecEndPos, ret )

    return pev_valid ( ent ) ? ent : 0
}

#define m_iTeam                114
public Hook_SayTeam ( sender_id )
{
    if ( !i_MaxZones || !get_pcvar_num ( g_Enabled ) )
        return PLUGIN_CONTINUE
    
    new s_Msg[256]
    read_args ( s_Msg, sizeof s_Msg - 1 )
    
    remove_quotes ( s_Msg )
    
    if ( !strlen ( s_Msg ) || s_Msg[0] == '@' ||  s_Msg[0] == '!' ||  s_Msg[0] == '/')
        return PLUGIN_CONTINUE
    
    new s_Name[32], s_NewMsg[256], sender_team = get_pdata_int(sender_id, m_iTeam)
    get_user_name ( sender_id, s_Name, charsmax ( s_Name ) )
    
    formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^1%s(%s)^3 %s^1 @^4 %s^1 :  %s", is_user_alive(sender_id) ? "" : "*DEAD*", g_TeamNames[sender_team], s_Name, g_LocNames[g_LastLocation[sender_id]][1], s_Msg )
    
    new s_Players[32], i_Num
    get_players( s_Players, i_Num)
    
    for ( new i; i < i_Num ; i++ )
    {
        new id = s_Players[i]       
        if ( is_user_connected ( id ) && sender_team == get_pdata_int(id, m_iTeam))
        {
            message_begin ( MSG_ONE, gMsgSayText, _, id )
            write_byte ( id )
            write_string( s_NewMsg )
            message_end ()
        }
    }
    
    server_print ( "(%s) %s : %s", g_TeamNames[sender_team], s_Name, s_Msg )
    
    return PLUGIN_HANDLED
}

/*
public Fwd_SetVoice(receiver, sender, bool:bListen)
{
    // Doesn't work :/
    
    if(!is_user_connected(receiver) || !is_user_connected(sender) || receiver == sender)
        return FMRES_IGNORED
    
    message_begin(MSG_ONE, get_user_msgid("BotVoice"), _, receiver )
    write_byte(bListen) // Show/Hide
    write_byte(sender) // Sender id
    message_end()
    
    return FMRES_SUPERCEDE
}
*/
 
Последнее редактирование:
TauJieP, Полный текст ошибки дайте
Добавлено:

Сомнительно, что вы смогли скомпилировать ваш код.

C++:
/*

==----------=--=-=======-==-=============-=-=-=======--===--=-
   ___    ___      _______     __    _     _______     _______
/__ /\ /__ /|    /_____ /|  /__/| /_/|  /_______/|  /_______/|
|    \/    | |  /   _   | | |   |/   |' | ___    |' | ___    |'
|          | | |   |/   | | |       <   ||/  /  /__ ||/  /  /__
|   |\/|   | | |    /|  | | |     <   \    /  /__//|   /  /__//|
|   | ||   | | |   | |  | | |       \ /| /  /___|| | /  /___|| |
|___|/ |___|/  |___|/|__|/  |___|\___|/ |________|/ |________|/

    +                 +             +          +
          +                      +                   +
              +         +           +      +
          +        +            +        +

*/
#include <amxmisc>
#include <fakemeta>

#define VERSION            "1.0.3"
#define CLASS_NAME        "nai_zone"
#define TASK_BASIS_SHOWZONES    1000
#define MAX_NAMES        106

new g_Enabled, g_MsgMode, gMsgLocation, gMsgTeamInfo, gMsgSayText, i_MaxZones, i_MaxNames, g_Dot, g_Editor,
Index, g_NameMenu, Direction, g_iMaxPlayers, setupunits = 10

new g_LastLocation[33]
new g_LocNames[MAX_NAMES][20], zone[100]

new const g_TeamNames[][] =
{
    "",
    "Terrorist",
    "Counter-Terrorist",
    "Spectator"
}

public plugin_init()
{
    register_plugin ( "Navigation Area Info", VERSION, "Makzz" )

    g_Enabled = register_cvar ( "nai_enabled", "1" )
    g_MsgMode = register_cvar ( "nai_msgmode", "1" ) // [0] - CZ Style, [1] - HUD ( Recommended )

    register_dictionary ( "navigation_area_info.txt" )

    register_forward ( FM_Touch, "Fwd_Touch" )
    //register_forward ( FM_Voice_SetClientListening, "Fwd_SetVoice" )
    register_message ( get_user_msgid ( "TextMsg" ), "Message_TextMsg" )

    gMsgLocation = get_user_msgid ( "Location" )
    gMsgTeamInfo = get_user_msgid ( "TeamInfo" )
    gMsgSayText = get_user_msgid ( "SayText" )
    g_iMaxPlayers = get_maxplayers ();

    register_menu ( "MainMenu", -1, "MainMenuAction" )
    register_menu ( "EditMenu", -1, "EditMenuAction" )
    register_menu ( "KillMenu", -1, "KillMenuAction" )

    register_clcmd ( "nai_menu", "InitNaiMenu", ADMIN_RCON )
    register_clcmd ( "say_team", "Hook_SayTeam" )

    set_task ( 0.2, "LoadAreaNameFile" )
}

public client_disconnect ( id )
{
    if ( g_Editor == id )
    {
        g_Editor = 0
     
        for ( new i; i < i_MaxZones; i++ )
        {
            new z = zone[i]          
            remove_task ( TASK_BASIS_SHOWZONES + z )
        }
    }
}

public client_putinserver ( id )
    g_LastLocation[id] = -1

public plugin_precache ()
    g_Dot = precache_model ( "sprites/dot.spr" )

public Fwd_Touch ( zone, id )
{
    if ( !i_MaxZones || id > g_iMaxPlayers || !get_pcvar_num ( g_Enabled )  )
        return FMRES_IGNORED
   
    if ( !is_user_alive ( id ) /*|| is_user_bot ( id )*/ )
        return FMRES_IGNORED
   
    static s_ClassName[32]
    pev ( zone, pev_classname, s_ClassName, sizeof s_ClassName - 1 )
   
    if ( equal ( s_ClassName, CLASS_NAME ) ) // Мы в зоне!!
    {
        new i_Name = pev ( zone, pev_iuser1 )
        if( i_Name != g_LastLocation[id] )
        {
            if ( get_pcvar_num ( g_MsgMode ) )
            {
                set_hudmessage ( 0, 255, 0, 0.01, 0.30, 2, 0.1, 6.0, 0.05, 2.0, 2 )
                show_hudmessage ( id, "%L", id, g_LocNames[i_Name][1] )
            }
            else
            {
                message_begin ( MSG_ONE, gMsgLocation, _, id )
                write_byte ( 1 )
                write_string ( g_LocNames[i_Name] )
                message_end ()
            }
           
            g_LastLocation[id] = i_Name // We need to save i_Name also for bots
        }
    }
    return PLUGIN_CONTINUE
}

public Message_TextMsg ( msg_id, dest, id )
{
    if ( get_msg_args() != 5 || !i_MaxZones || !get_pcvar_num ( g_Enabled ) )
        return PLUGIN_CONTINUE
   
    static s_Msg[32], s_Name[32], s_RadioMsg[32], s_NewMsg[256], s_Player[3]
    get_msg_arg_string ( 3, s_Msg, sizeof s_Msg - 1 )
   
    if ( equal ( s_Msg, "#Game_radio" ) )
    {
        get_msg_arg_string ( 2, s_Player, sizeof s_Player - 1 ) // Caller
       
        new i_Player = str_to_num ( s_Player )
        if ( i_Player > g_iMaxPlayers || !i_Player || g_LastLocation[i_Player] == -1 )
        {
            //server_print("Oops %i",i_Player)
            return PLUGIN_CONTINUE
        }
       
        get_msg_arg_string ( 4, s_Name, sizeof s_Name - 1 )
        get_msg_arg_string ( 5, s_RadioMsg, sizeof s_RadioMsg - 1 )
       
        if ( equal ( s_RadioMsg, "#Fire_in_the_hole" ) )
        {
            new sTextGrenade[3], sNewTeam[12]
            switch ( get_user_weapon ( i_Player ) )
            {
                case CSW_HEGRENADE:
                {
                    sNewTeam = "TERRORIST"
                    sTextGrenade = "HE"
                }
                case CSW_FLASHBANG:
                {
                    sNewTeam = "CT"
                    sTextGrenade = "FB"
                }
                case CSW_SMOKEGRENADE:
                {
                    sNewTeam = "SPECTATOR"
                    sTextGrenade = "SG"
                }
            }
           
            if ( sTextGrenade[0] )
            {
                formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^1%s^1 @^4 %L^1 (%L): %L ^3(%s)", s_Name, i_Player, g_LocNames[g_LastLocation[i_Player]][1], i_Player, "Radio", i_Player, "Fire_in_the_hole", sTextGrenade )
               
                new sTeam[12]
                get_user_team ( i_Player, sTeam, 11 )
               
                message_begin ( MSG_ONE, gMsgTeamInfo, _, id )
                write_byte ( id )
                write_string ( sNewTeam ) // Посылаем новую
                message_end ()
               
                message_begin ( MSG_ONE, gMsgSayText, _, id )
                write_byte ( id )
                write_string( s_NewMsg )
                message_end ()
               
                message_begin ( MSG_ONE, gMsgTeamInfo, _, id )
                write_byte ( id )
                write_string ( sTeam )
                message_end ()
               
                return PLUGIN_HANDLED
            }
        }
       
        formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^3%s^1 @^4 %L^1 (%L): %L", s_Name, i_Player, g_LocNames[g_LastLocation[i_Player]][1], i_Player, "Radio", i_Player, s_RadioMsg[1] )
       
        message_begin ( MSG_ONE, gMsgSayText, _, id )
        write_byte ( id )
        write_string( s_NewMsg )
        message_end ()
       
        return PLUGIN_HANDLED
    }
   
    return PLUGIN_CONTINUE
}

public LoadAreaNameFile ()
{
    new s_File[64]
    get_configsdir ( s_File, sizeof s_File -1 )
   
    format ( s_File, sizeof s_File -1, "%s/navigation_area/area_names.ini", s_File )
   
    if ( file_exists ( s_File ) )
    {
        new Input[48], Line, Len
        while ( ( Line = read_file ( s_File, Line, Input, sizeof Input -1, Len ) ) != 0 )
        {
            if ( !Len || ( Input[0] == '/' ) )
                continue // Коментарий или пустота
           
            if ( Input[0] == '#' ) // Name?
            {
                copy ( g_LocNames[i_MaxNames], 19, Input )
                i_MaxNames++
            }
        }
        server_print ( "[NAI] Loaded %i navigation area names", i_MaxNames )
        LoadAreaFile ()
        return
    }
   
    server_print ( "[NAI] File not found '%s'", s_File )  
}

public LoadAreaFile ()
{
    new s_File[64], s_MapName[32]
    get_configsdir ( s_File, sizeof s_File -1 )
    get_mapname ( s_MapName, sizeof s_MapName - 1 )
   
    format ( s_File, sizeof s_File -1, "%s/navigation_area/%s.nai", s_File , s_MapName )
   
    if ( file_exists ( s_File ) )
    {
        new Input[48], Line, Len
        while ( ( Line = read_file ( s_File, Line, Input, sizeof Input -1, Len ) ) != 0 )
        {
            if ( !Len || ( Input[0] == '/' ) )
                continue // Коментарий или пустота
           
            new Data[20][10], Float:mins[3], Float:maxs[3], Float:pos[3]
           
            parse ( Input, Data[0], 19, Data[1], 19, Data[2], 19, Data[3], 19, Data[4], 19,
            Data[5], 19, Data[6], 19, Data[7], 19, Data[8], 19, Data[9], 19 )
           
            pos[0] = str_to_float ( Data[0] )
            pos[1] = str_to_float ( Data[1] )
            pos[2] = str_to_float ( Data[2] )
           
            mins[0] = str_to_float ( Data[3] )
            mins[1] = str_to_float ( Data[4] )
            mins[2] = str_to_float ( Data[5] )
           
            maxs[0] = str_to_float ( Data[6] )
            maxs[1] = str_to_float ( Data[7] )
            maxs[2] = str_to_float ( Data[8] )
           
            new zm = str_to_num ( Data[9] )
           
            zone[i_MaxZones] = CreateZone ( pos, mins, maxs, zm )
            i_MaxZones++
        }
        server_print ( "[NAI] Loaded %i navigation areas",i_MaxZones)
        set_pcvar_num ( g_Enabled, 1 )
    }
    else
    {
        server_print ( "[NAI] File not found '%s'", s_File )
        set_pcvar_num ( g_Enabled, 0 )
    }
}

stock CreateZone ( Float:position[3], Float:mins[3], Float:maxs[3], zm )
{
    new ent = engfunc ( EngFunc_CreateNamedEntity, engfunc ( EngFunc_AllocString, "info_target" ) )
   
    set_pev ( ent, pev_classname, CLASS_NAME ) // Имя класса
    dllfunc ( DLLFunc_Spawn, ent )
    engfunc ( EngFunc_SetOrigin, ent, position )
    set_pev ( ent, pev_movetype, MOVETYPE_FLY )
    set_pev ( ent, pev_solid, SOLID_TRIGGER )
    engfunc ( EngFunc_SetSize, ent, mins, maxs )
   
    set_pev ( ent, pev_iuser1, zm )
   
    return ent
}
//--------------------------------------
public FindAllZones ()
{
    new entity = -1
    i_MaxZones = 0
    while ( ( entity = engfunc ( EngFunc_FindEntityByString, entity, "classname", CLASS_NAME ) ) )
    {
        zone[i_MaxZones] = entity
        i_MaxZones++
    }
}

public ShowAllZones ()
{
    FindAllZones ()
   
    for ( new i; i < i_MaxZones; i++ )
    {
        new z = zone[i]      
        remove_task ( TASK_BASIS_SHOWZONES + z )
        set_task ( 0.2, "ShowZoneBox", TASK_BASIS_SHOWZONES + z, _, _, "b" )
    }
}

public InitNaiMenu ( id )
{
    if ( !( get_user_flags ( id ) & ADMIN_RCON ) )
        return PLUGIN_CONTINUE
   
    g_Editor = id
   
    FindAllZones ()
    ShowAllZones ()
   
    //set_task ( 0.1, "OpenLocMenu", id )
    OpenLocMenu ( id )

    return PLUGIN_HANDLED
}

public ShowZoneBox ( entity )
{
    entity -= TASK_BASIS_SHOWZONES
   
    if ( ( !pev_valid ( entity ) ) || !g_Editor )
        return
   
    new Float:pos[3], Float:editorpos[3]
   
    pev ( entity, pev_origin, pos )
    pev ( g_Editor, pev_origin, editorpos )
   
    if ( entity == zone[Index] )
        DrawLine(editorpos[0], editorpos[1], editorpos[2] - 16.0, pos[0], pos[1], pos[2], { 255, 0, 0 } )
   
    new Float:hitpoint[3]
    fm_trace_line(-1, editorpos, pos, hitpoint)
   
    new Float:dh = vector_distance ( editorpos, pos ) - vector_distance ( editorpos, hitpoint )
    if ( ( floatabs ( dh ) > 128.0 ) && ( entity != zone[Index] ) )
        return
   
    new Float:mins[3], Float:maxs[3]
    pev ( entity, pev_mins, mins )
    pev ( entity, pev_maxs, maxs )
   
    mins[0] += pos[0]
    mins[1] += pos[1]
    mins[2] += pos[2]
    maxs[0] += pos[0]
    maxs[1] += pos[1]
    maxs[2] += pos[2]
   
    new g_ZoneColorYellow[3] = { 255, 255, 0 }, g_ZoneColorRed[3] = { 255, 0, 0 }, color[3] = { 0, 255, 50 }
    // Нижняя часть
    DrawLine ( mins[0], mins[1], mins[2], mins[0], maxs[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 0?g_ZoneColorRed:color))//5
    DrawLine ( mins[0], maxs[1], mins[2], maxs[0], maxs[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 1?g_ZoneColorYellow:color))//8
    DrawLine ( maxs[0], maxs[1], mins[2], maxs[0], mins[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 0?g_ZoneColorYellow:color))//9
    DrawLine ( mins[0], mins[1], mins[2], maxs[0], mins[1], mins[2], Direction == 2?(g_ZoneColorRed):(Direction == 1?g_ZoneColorRed:color))//4
   
    if ( entity != zone[Index] )
        return
    // Верхняя
    DrawLine ( mins[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorRed:color))//12
    DrawLine ( maxs[0], maxs[1], maxs[2], mins[0], maxs[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 1?g_ZoneColorYellow:color))//1
    DrawLine ( maxs[0], maxs[1], maxs[2], maxs[0], mins[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorYellow:color))//2
    DrawLine ( maxs[0], mins[1], maxs[2], mins[0], mins[1], maxs[2], Direction == 2?(g_ZoneColorYellow):(Direction == 1?g_ZoneColorRed:color))//11
    // Лево
    DrawLine ( mins[0], mins[1], mins[2], mins[0], mins[1], maxs[2], Direction == 1?(g_ZoneColorRed):(Direction == 0?g_ZoneColorRed:color))//6
    DrawLine ( maxs[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], Direction == 1?(g_ZoneColorRed):(Direction == 0?g_ZoneColorYellow:color))//10
   
    DrawLine ( maxs[0], maxs[1], maxs[2], maxs[0], maxs[1], mins[2], Direction == 1?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorYellow:color))//3
    DrawLine ( mins[0], maxs[1], maxs[2], mins[0], maxs[1], mins[2], Direction == 1?(g_ZoneColorYellow):(Direction == 0?g_ZoneColorRed:color)) // 7
}

public DrawLine ( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, color[3] )
{
    message_begin ( MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, g_Editor )
    write_byte ( TE_BEAMPOINTS )
    write_coord ( floatround( x1 ) )
    write_coord ( floatround( y1 ) )
    write_coord ( floatround( z1 ) )
    write_coord ( floatround( x2 ) )
    write_coord ( floatround( y2 ) )
    write_coord ( floatround( z2 ) )
    write_short ( g_Dot )
    write_byte ( 1 )        // начало кадра
    write_byte ( 1 )        // размер кадра
    write_byte ( 4 )        // жизнь за 0.1'с
    write_byte ( 4 )        // ширина
    write_byte ( 0 )         // шум
    write_byte ( color[0] )       // r, g, b
    write_byte ( color[1] )      // r, g, b
    write_byte ( color[2] )       // r, g, b
    write_byte ( 250 )     // яркость
    write_byte ( 0 )           // скорость
    message_end()
}
//-----------------------------------------
public OpenLocMenu ( id )
{
    new menu[512], len, zm = -1,
    menukeys = MENU_KEY_0 + MENU_KEY_4 + MENU_KEY_9 // По умолчанию есть Выход, Создать и Сохранить
   
    if ( pev_valid ( zone[Index] ) )
        zm = pev ( zone[Index], pev_iuser1 )
   
    len += formatex ( menu[len], charsmax ( menu ) - len, "\y%L^n\w", id, "MENU_TITLE" )
    //len += formatex ( menu[len], charsmax ( menu ) - len, "^n<<%i %L", i_MaxZones, id, "MENU_EXIST" )
   
    if ( zm != -1 )
    {
        menukeys += MENU_KEY_1 + MENU_KEY_2 + MENU_KEY_3 // Добавляем кнопки 1 2 3
        //len += formatex ( menu[len], charsmax ( menu ) - len, " \y|\w (%L #%i -> '\y%s\w')>>", id, "MENU_CURRENT", Index + 1, zm>i_MaxNames?"\rError\w":g_LocNames[zm])
        len += formatex ( menu[len], charsmax ( menu ) - len, "%L: '\y%L\w' (%i/%i)", id, "MENU_CURRENT", id, g_LocNames[zm][1], Index + 1, i_MaxZones )
        len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r1.\w %L", id, "MENU_EDIT" ) // 1
        len += formatex ( menu[len], charsmax ( menu ) - len, "^n \y          2\w <- %L     \y3\w -> %L", id, "MENU_PREVIOUS", id, "MENU_NEXT" )
    }
   
    len += formatex(menu[len], charsmax(menu) - len, "^n\r4.\w %L", id, "MENU_CREATE" ) // 4
   
    if (zm != -1)
    {
        menukeys += MENU_KEY_6 // Добавляем кнопку 6
        len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r6. %L", id, "MENU_DELETE" )
    }
   
    len += formatex ( menu[len], charsmax ( menu ) - len, "^n^n\r9.\y %L", id, "MENU_SAVE" ) // 9
    len += formatex ( menu[len], charsmax ( menu ) - len, "^n\r0.\w %L", id, "MENU_EXIT" ) // 0
   
    show_menu ( id, menukeys, menu, -1, "MainMenu" )
   
    client_cmd ( id, "spk sound/buttons/button9.wav" )
}

public MainMenuAction ( id, i_Key )
{
    switch ( i_Key ) // key = ( key == 10 ) ? 0 : key + 1
    {
        case 0:
        {
            if ( pev_valid ( zone[Index] ) )
                OpenEditMenu ( id )
            else
                OpenLocMenu ( id )
        }
        case 1: // Предыдущая
        {
            Index = (Index > 0) ? Index - 1 : Index
            OpenLocMenu ( id )
        }
        case 2: // Следующая
        {
            Index = (Index < i_MaxZones - 1) ? Index + 1 : Index
            OpenLocMenu ( id )
        }
        case 3: // Создать
        {
            if ( i_MaxZones < 100 - 1 )
            {
                new Float:position[3]
                pev ( id, pev_origin, position )
                new entity = CreateZone ( position, Float:{ -32.0, -32.0, -32.0 }, Float:{ 32.0, 32.0, 32.0 }, 1 )
                FindAllZones()
                for ( new c; c < i_MaxZones; c++ )
                {
                    if ( zone[c] == entity )
                        Index = c
                }
                ShowAllZones()
                OpenEditMenu ( id )
            }
            else
            {
                client_print(id, print_chat, "[NAI] To many areas")
                client_cmd ( id, "spk sound/buttons/button10.wav" )
                set_task ( 0.5, "OpenLocMenu", id )
            }
        }
        case 5: // Удалить
        {
            OpenKillMenu ( id )
        }
        case 8: // Сохранить
        {
            g_Editor = 0
            Save_Zones ( id )
        }
        case 9:
        {
            g_Editor = 0
        }
    }
    return PLUGIN_HANDLED
}

public OpenEditMenu ( id )
{
    new menu[354], dir[3], len, zm = -1, menukeys = MENU_KEY_0 + MENU_KEY_1 + MENU_KEY_2 + MENU_KEY_4 + MENU_KEY_5 + MENU_KEY_6 + MENU_KEY_7 + MENU_KEY_8
   
    if ( pev_valid ( zone[Index] ) )
        zm = pev ( zone[Index], pev_iuser1 )
   
    if ( zm == -1 )
    {
        //server_print("OOps")
        return
    }
   
    len += formatex ( menu[len], charsmax ( menu ) - len, "\y%L\w: %L^n", id, "MENU_TILTE_EDIT", id, g_LocNames[zm][1] )  
   
    //if ( zm != -1 )
    len += formatex ( menu[len], charsmax(menu) - len, "^n\r1.\w %L", id, "MENU_TITLE_NAME" ) // 1
   
    switch ( Direction )
    {
        case 0:
            formatex ( dir, 2, "X" )
        case 1:
            formatex ( dir, 2, "Y" )
        case 2:
            formatex ( dir, 2, "Z" )
    }
   
    len += formatex(menu[len], charsmax(menu) - len, "^n\r2.\w %L", id, "MENU_SIZE_STEP", setupunits ) // 2
    len += formatex(menu[len], charsmax(menu) - len, "^n\r4.\w %L '\d%s\w'", id, "MENU_SIZE_INIT", dir ) // 4
    len += formatex(menu[len], charsmax(menu) - len, "^n \r          5 <- %L       6 -> %L\w", id, "MENU_STRIP", id, "MENU_WIDER" ) // 5 6
    len += formatex(menu[len], charsmax(menu) - len, "^n \y          7 <- %L       8 -> %L\w^n", id, "MENU_STRIP", id, "MENU_WIDER" ) // 7 8
    len += formatex(menu[len], charsmax(menu) - len, "^n\r0.\w %L", id, "MENU_BACK" ) // 0
   
    show_menu ( id, menukeys, menu, -1, "EditMenu" )
   
    client_cmd ( id, "spk sound/buttons/lightswitch2.wav" )
}

public EditMenuAction ( id, i_Key )
{
    switch ( i_Key )
    {
        case 0:
        {
            OpenNameMenu ( id, 0 )
        }
        case 1: // Приращение
        {
            setupunits = (setupunits < 100) ? setupunits * 10 : 1
            OpenEditMenu ( id )
        }
        case 3: // В каком направлении будут изменения
        {
            Direction = ( Direction < 2 ) ? Direction + 1 : 0
            OpenEditMenu ( id )
        }
        case 4: // Сторона "mins" / уменьшить красные линии -> "уже"
        {
            ResizeLines ( 0, 1 )
            OpenEditMenu ( id )
        }
        case 5: // Сторона "mins" / увеличить красные линии -> "шире"
        {
            ResizeLines ( 1, 1 )
            OpenEditMenu ( id )
        }
        case 6: // Сторона "maxs" / уменьшить жёлтые линии -> "уже"
        {
            ResizeLines ( 0, 0 )
            OpenEditMenu ( id )
        }
        case 7: // Сторона "maxs" / увеличить жёлтые линии -> "шире"
        {
            ResizeLines ( 1, 0 )
            OpenEditMenu ( id )
        }
        case 9:
        {
            OpenLocMenu ( id )
        }
    }
    return PLUGIN_HANDLED
}

public ResizeLines ( direction, color )
{
    new entity = zone[Index], Float:pos[3], Float:mins[3], Float:maxs[3]
    pev ( entity, pev_origin, pos )
    pev ( entity, pev_mins, mins )
    pev ( entity, pev_maxs, maxs )
   
    if( direction ) // Увеличение
    {
        mins[Direction] -= float(setupunits) / 2.0
        maxs[Direction] += float(setupunits) / 2.0
       
        // Красные
        color ? (pos[Direction] -= float(setupunits) / 2.0) : (pos[Direction] += float(setupunits) / 2.0)
    }
    else // Уменьшение
    {
        if ((floatabs(mins[Direction]) + maxs[Direction]) < setupunits + 1) return
        mins[Direction] += float(setupunits) / 2.0
        maxs[Direction] -= float(setupunits) / 2.0
       
        // Красные
        color ? (pos[Direction] += float(setupunits) / 2.0) : (pos[Direction] -= float(setupunits) / 2.0)
    }
       
    set_pev ( entity, pev_origin, pos )
    engfunc ( EngFunc_SetSize, entity, mins, maxs )
}

public OpenKillMenu ( id )
{
    new menu[256]
   
    format ( menu, sizeof menu - 1, "%L^n\y1\w - %L^n  \r0\w - %L", id, "MENU_TITLE_DELETE", id, "MENU_NO", id, "MENU_YES" )
   
    show_menu ( id, MENU_KEY_1 + MENU_KEY_0, menu, -1, "KillMenu" )
    client_cmd ( id, "spk sound/debris/bustglass1.wav" )
}

public KillMenuAction ( id, i_Key )
{
    switch ( i_Key )
    {
        case 0:
            client_print ( id, print_chat, "[NAI] Area not deleted")
        case 9:
        {
            engfunc(EngFunc_RemoveEntity, zone[Index])
            Index--
            if (Index < 0) Index = 0
            client_print ( id, print_chat, "[NAI] Area deleted" )
            FindAllZones ()
        }
    }
    OpenLocMenu ( id )
}

public Save_Zones ( id )
{
    new s_File[64], s_MapName[32]
    get_configsdir ( s_File, sizeof s_File -1 )
    get_mapname ( s_MapName, sizeof s_MapName - 1 )
   
    format ( s_File, sizeof s_File -1, "%s/navigation_area", s_File )
    if (!dir_exists ( s_File ) ) mkdir ( s_File )
   
    format( s_File, sizeof s_File -1, "%s/%s.nai", s_File , s_MapName )
    delete_file ( s_File )
   
    FindAllZones ()
   
    new s_Name[32], s_Out[64]
    get_user_name ( id, s_Name, sizeof s_Name - 1 )
    formatex ( s_Out, sizeof s_Out - 1, "// Created by %s^n", s_Name )
    write_file ( s_File, s_Out )
   
    for(new i; i < i_MaxZones; i++)
    {
        new z = zone[i]      
        new zm = pev(z, pev_iuser1) // Имя зоны
       
        new Float:pos[3], Float:mins[3], Float:maxs[3]
        pev(z, pev_origin, pos)
        pev(z, pev_mins, mins)
        pev(z, pev_maxs, maxs)
       
        new output[500]
        format(output, sizeof output - 1, "%.1f %.1f %.1f %.1f %.1f %.1f", pos[0], pos[1], pos[2], mins[0], mins[1], mins[2])
        format(output, sizeof output - 1, "%s %.1f %.1f %.1f %d", output, maxs[0], maxs[1], maxs[2], zm)
       
        replace_all ( output, sizeof output - 1, ".0", "" ) // I don't understend, but %.0f doesn't work :/
       
        write_file ( s_File, output )
    }
   
    client_print ( id, print_chat, "[NAI] Saved" )
}

public OpenNameMenu ( id, i_Page )
{
    new s_Str[128]
   
    formatex ( s_Str, charsmax(s_Str), "%L '%L'\w", id, "MENU_TITLE_NAME", id, g_LocNames[pev(zone[Index],pev_iuser1 )][1])
    g_NameMenu = menu_create ( s_Str,"MenuAction_Name" )
   
    for ( new i; i < i_MaxNames; i++ )
    {
        formatex ( s_Str,sizeof s_Str - 1,"%L", id, g_LocNames[i][1] )
        menu_additem ( g_NameMenu,s_Str )
    }
   
    formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_BACK" )
    menu_setprop ( g_NameMenu, MPROP_BACKNAME, s_Str )
    formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_NEXT" )
    menu_setprop ( g_NameMenu, MPROP_NEXTNAME, s_Str )
    formatex ( s_Str, charsmax(s_Str), "%L", id, "MENU_EXIT" )
    menu_setprop ( g_NameMenu, MPROP_EXITNAME, s_Str )
   
    menu_display ( id, g_NameMenu, i_Page )
}

public MenuAction_Name ( id, menu, i_Key )
{
    new i_Null, i_Page
    player_menu_info ( id, i_Null, i_Null, i_Page )
    switch ( i_Key )
    {
        case MENU_BACK: // Назад
        {
            OpenNameMenu ( id, i_Page-- )
            return PLUGIN_HANDLED
        }
        case MENU_MORE: // Ещё
        {
            OpenNameMenu ( id, i_Page++ )
            return PLUGIN_HANDLED
        }
        case MENU_EXIT: // Выход
        {
            menu_destroy ( g_NameMenu )
            OpenEditMenu ( id )
            return PLUGIN_HANDLED
        }
        default:
        {
            set_pev ( zone[Index], pev_iuser1, i_Key )
            OpenEditMenu ( id )
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}

stock fm_trace_line ( ignoreent, const Float:start[3], const Float:end[3], Float:ret[3] )
{
    engfunc ( EngFunc_TraceLine, start, end, ignoreent == -1 ? 1 : 0, ignoreent, 0 )

    new ent = get_tr2 ( 0, TR_pHit )
    get_tr2 ( 0, TR_vecEndPos, ret )

    return pev_valid ( ent ) ? ent : 0
}

#define m_iTeam                114
public Hook_SayTeam ( sender_id )
{
    if ( !i_MaxZones || !get_pcvar_num ( g_Enabled ) )
        return PLUGIN_CONTINUE
   
    new s_Msg[256]
    read_args ( s_Msg, sizeof s_Msg - 1 )
   
    remove_quotes ( s_Msg )
   
    if ( !strlen ( s_Msg ) || s_Msg[0] == '@' ||  s_Msg[0] == '!' ||  s_Msg[0] == '/')
        return PLUGIN_CONTINUE
   
    new s_Name[32], s_NewMsg[256], sender_team = get_pdata_int(sender_id, m_iTeam)
    get_user_name ( sender_id, s_Name, charsmax ( s_Name ) )
   
    formatex ( s_NewMsg, sizeof s_NewMsg - 1, "^1%s(%s)^3 %s^1 @^4 %s^1 :  %s", is_user_alive(sender_id) ? "" : "*DEAD*", g_TeamNames[sender_team], s_Name, g_LocNames[g_LastLocation[sender_id]][1], s_Msg )
   
    new s_Players[32], i_Num
    get_players( s_Players, i_Num)
   
    for ( new i; i < i_Num ; i++ )
    {
        new id = s_Players[i]      
        if ( is_user_connected ( id ) && sender_team == get_pdata_int(id, m_iTeam))
        {
            message_begin ( MSG_ONE, gMsgSayText, _, id )
            write_byte ( id )
            write_string( s_NewMsg )
            message_end ()
        }
    }
   
    server_print ( "(%s) %s : %s", g_TeamNames[sender_team], s_Name, s_Msg )
   
    return PLUGIN_HANDLED
}

/*
public Fwd_SetVoice(receiver, sender, bool:bListen)
{
    // Doesn't work :/
   
    if(!is_user_connected(receiver) || !is_user_connected(sender) || receiver == sender)
        return FMRES_IGNORED
   
    message_begin(MSG_ONE, get_user_msgid("BotVoice"), _, receiver )
    write_byte(bListen) // Show/Hide
    write_byte(sender) // Sender id
    message_end()
   
    return FMRES_SUPERCEDE
}
*/
L 09/28/2020 - 15:35:41: Start of error session.
L 09/28/2020 - 15:35:41: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20200928.log")
L 09/28/2020 - 15:35:41: [AMXX] Displaying debug trace (plugin "navigation_area_info.amxx", version "1.0.3")
L 09/28/2020 - 15:35:41: [AMXX] Run time error 4: index out of bounds
L 09/28/2020 - 15:35:41: [AMXX] [0] navigation_area_info.sma::Hook_SayTeam (line 778)
 
Назад
Сверху