Иконка ресурса

[INC] More Colors 1.9.2

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #81
Асельдер, inc файл в addons/sourcemod/scripting/include/
 

FlapJack

Участник
Сообщения
93
Реакции
2
Помогите установить morecolors в плагин http://hlmod.ru/forum/plaginy-dlya-sourcemod/223-connect-announce-v-1-6-arg.html а то у меня что-то ничего не получается.
Если что вот посмотрите мой скрипт, все как надо добавил и скомпилировал ошибок не выдавало,но когда я устанавливаю плагин и устанавливаю цвета то при заходе на сервер вообще ничего не отображается даже статистика обо мне, помогите пожалуйста?
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <geoip>
#undef REQUIRE_EXTENSIONS
#include <geoipcity>
#undef REQUIRE_PLUGIN
#include <adminmenu>

#define VERSION "1.6"

/*****************************************************************


G L O B A L V A R S


*****************************************************************/
static g_iSColors[5] = {1, 3, 4, 6, 5};
static String:g_sSColors[5][13] = {"{DEFAULT}", "{LIGHTGREEN}", "{GREEN}", "{YELLOW}", "{OLIVE}"};

new Handle:hTopMenu = INVALID_HANDLE;
new String:g_fileset[128];
new String:g_filesettings[128];
new bool:g_UseGeoIPCity = false;

new Handle:g_CvarConnectDisplayType = INVALID_HANDLE;
/*****************************************************************


L I B R A R Y I N C L U D E S


*****************************************************************/
#include "cannounce/countryshow.sp"
#include "cannounce/joinmsg.sp"
#include "cannounce/geolist.sp"
#include "cannounce/suppress.sp"
#include <morecolors>


/*****************************************************************


P L U G I N I N F O


*****************************************************************/
public Plugin:myinfo =
{
name = "Connect Announce",
author = "Arg!",
description = "Replacement of default player connection message, allows for custom connection messages",
version = VERSION,
url = "http://forums.alliedmods.net/showthread.php?t=77306"
};



/*****************************************************************


F O R W A R D P U B L I C S


*****************************************************************/
public OnPluginStart()
{
LoadTranslations("common.phrases");
LoadTranslations("cannounce.phrases");

CreateConVar("sm_cannounce_version", VERSION, "Connect announce replacement", FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);

g_CvarConnectDisplayType = CreateConVar("sm_ca_connectdisplaytype", "1", "[1|0] if 1 then displays connect message after admin check and allows the {PLAYERTYPE} placeholder. If 0 displays connect message on client auth (earlier) and disables the {PLAYERTYPE} placeholder");

BuildPath(Path_SM, g_fileset, 128, "data/cannounce_messages.txt");
BuildPath(Path_SM, g_filesettings, 128, "data/cannounce_settings.txt");

//event hooks
HookEvent("player_disconnect", event_PlayerDisconnect, EventHookMode_Pre);


//country show
SetupCountryShow();

//custom join msg
SetupJoinMsg();

//geographical player list
SetupGeoList();

//suppress standard connection message
SetupSuppress();

//Account for late loading
new Handle:topmenu;
if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE))
{
OnAdminMenuReady(topmenu);
}

// Check if we have GeoIPCity.ext loaded
g_UseGeoIPCity = LibraryExists("GeoIPCity");

//create config file if not exists
AutoExecConfig(true, "cannounce");
}

public OnMapStart()
{
//get, precache and set downloads for player custom sound files
LoadSoundFilesCustomPlayer();

//precahce and set downloads for sounds files for all players
LoadSoundFilesAll();


OnMapStart_JoinMsg();
}

public OnClientAuthorized(client, const String:auth[])
{
if( GetConVarInt(g_CvarConnectDisplayType) == 0 )
{
if( !IsFakeClient(client) && GetClientCount(true) < MaxClients )
{
OnPostAdminCheck_CountryShow(client);

OnPostAdminCheck_JoinMsg(auth);
}
}
}

public OnClientPostAdminCheck(client)
{
decl String:auth[32];

if( GetConVarInt(g_CvarConnectDisplayType) == 1 )
{
GetClientAuthString( client, auth, sizeof(auth) );

if( !IsFakeClient(client) && GetClientCount(true) < MaxClients )
{
OnPostAdminCheck_CountryShow(client);

OnPostAdminCheck_JoinMsg(auth);
}
}
}

public OnPluginEnd()
{
OnPluginEnd_JoinMsg();

OnPluginEnd_CountryShow();
}


public OnAdminMenuReady(Handle:topmenu)
{
//Block us from being called twice
if (topmenu == hTopMenu)
{
return;
}

//Save the Handle
hTopMenu = topmenu;


OnAdminMenuReady_JoinMsg();
}


public OnLibraryRemoved(const String:name[])
{
//remove this menu handle if adminmenu plugin unloaded
if (strcmp(name, "adminmenu") == 0)
{
hTopMenu = INVALID_HANDLE;
}

// Was the GeoIPCity extension removed?
if(StrEqual(name, "GeoIPCity"))
g_UseGeoIPCity = false;
}


public OnLibraryAdded(const String:name[])
{
// Is the GeoIPCity extension running?
if(StrEqual(name, "GeoIPCity"))
g_UseGeoIPCity = true;
}


/****************************************************************


C A L L B A C K F U N C T I O N S


****************************************************************/
public Action:event_PlayerDisconnect(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));

if( client && !IsFakeClient(client) && !dontBroadcast )
{
event_PlayerDisc_CountryShow(event, name, dontBroadcast);

OnClientDisconnect_JoinMsg();
}


return event_PlayerDisconnect_Suppress( event, name, dontBroadcast );
}


/*****************************************************************


P L U G I N F U N C T I O N S


*****************************************************************/
//Thanks to Darkthrone (https://forums.alliedmods.net/member.php?u=54636)
bool:IsLanIP( String:src[16] )
{
decl String:ip4[4][4];
new ipnum;

if(ExplodeString(src, ".", ip4, 4, 4) == 4)
{
ipnum = StringToInt(ip4[0])*65536 + StringToInt(ip4[1])*256 + StringToInt(ip4[2]);

if((ipnum >= 655360 && ipnum < 655360+65535) || (ipnum >= 11276288 && ipnum < 11276288+4095) || (ipnum >= 12625920 && ipnum < 12625920+255))
{
return true;
}
}

return false;
}

PrintFormattedMessageToAll( String:rawmsg[301], client )
{
decl String:message[301];

GetFormattedMessage( rawmsg, client, message, sizeof(message) );

CPrintToChatAll( "%s", message );
}

PrintFormattedMessageToAdmins( String:rawmsg[301], client )
{
decl String:message[301];

GetFormattedMessage( rawmsg, client, message, sizeof(message) );

for (new i = 1; i <= GetMaxClients(); i++)
{
if( IsClientInGame(i) && CheckCommandAccess( i, "", ADMFLAG_GENERIC, true ) )
{
CPrintToChat(i, "%s", message);
}
}
}

PrintFormattedMsgToNonAdmins( String:rawmsg[301], client )
{
decl String:message[301];

GetFormattedMessage( rawmsg, client, message, sizeof(message) );

for (new i = 1; i <= GetMaxClients(); i++)
{
if( IsClientInGame(i) && !CheckCommandAccess( i, "", ADMFLAG_GENERIC, true ) )
{
CPrintToChat(i, "%s", message);
}
}
}

//GetFormattedMessage - based on code from the DJ Tsunami plugin Advertisements - http://forums.alliedmods.net/showthread.php?p=592536
GetFormattedMessage( String:rawmsg[301], client, String:outbuffer[], outbuffersize )
{
decl String:buffer[256];
decl String:ip[16];
decl String:city[46];
decl String:region[46];
decl String:country[46];
decl String:ccode[3];
decl String:ccode3[4];
decl String:sColor[4];
decl String:sPlayerAdmin[32];
decl String:sPlayerPublic[32];
new bool:bIsLanIp;

decl AdminId:aid;

if( client > -1 )
{
GetClientIP(client, ip, sizeof(ip));

//detect LAN ip
bIsLanIp = IsLanIP( ip );

// Using GeoIPCity extension...
if ( g_UseGeoIPCity )
{
if( !GeoipGetRecord( ip, city, region, country, ccode, ccode3 ) )
{
if( bIsLanIp )
{
Format( city, sizeof(city), "%T", "LAN City Desc", LANG_SERVER );
Format( region, sizeof(region), "%T", "LAN Region Desc", LANG_SERVER );
Format( country, sizeof(country), "%T", "LAN Country Desc", LANG_SERVER );
Format( ccode, sizeof(ccode), "%T", "LAN Country Short", LANG_SERVER );
Format( ccode3, sizeof(ccode3), "%T", "LAN Country Short 3", LANG_SERVER );
}
else
{
Format( city, sizeof(city), "%T", "Unknown City Desc", LANG_SERVER );
Format( region, sizeof(region), "%T", "Unknown Region Desc", LANG_SERVER );
Format( country, sizeof(country), "%T", "Unknown Country Desc", LANG_SERVER );
Format( ccode, sizeof(ccode), "%T", "Unknown Country Short", LANG_SERVER );
Format( ccode3, sizeof(ccode3), "%T", "Unknown Country Short 3", LANG_SERVER );
}
}
}
else // Using GeoIP default extension...
{
if( !GeoipCode2(ip, ccode) )
{
if( bIsLanIp )
{
Format( ccode, sizeof(ccode), "%T", "LAN Country Short", LANG_SERVER );
}
else
{
Format( ccode, sizeof(ccode), "%T", "Unknown Country Short", LANG_SERVER );
}
}

if( !GeoipCountry(ip, country, sizeof(country)) )
{
if( bIsLanIp )
{
Format( country, sizeof(country), "%T", "LAN Country Desc", LANG_SERVER );
}
else
{
Format( country, sizeof(country), "%T", "Unknown Country Desc", LANG_SERVER );
}
}

// Since the GeoIPCity extension isn't loaded, we don't know the city or region.
if( bIsLanIp )
{
Format( city, sizeof(city), "%T", "LAN City Desc", LANG_SERVER );
Format( region, sizeof(region), "%T", "LAN Region Desc", LANG_SERVER );
Format( ccode3, sizeof(ccode3), "%T", "LAN Country Short 3", LANG_SERVER );
}
else
{
Format( city, sizeof(city), "%T", "Unknown City Desc", LANG_SERVER );
Format( region, sizeof(region), "%T", "Unknown Region Desc", LANG_SERVER );
Format( ccode3, sizeof(ccode3), "%T", "Unknown Country Short 3", LANG_SERVER );
}
}

// Fallback for unknown/empty location strings
if( StrEqual( city, "" ) )
{
Format( city, sizeof(city), "%T", "Unknown City Desc", LANG_SERVER );
}

if( StrEqual( region, "" ) )
{
Format( region, sizeof(region), "%T", "Unknown Region Desc", LANG_SERVER );
}

if( StrEqual( country, "" ) )
{
Format( country, sizeof(country), "%T", "Unknown Country Desc", LANG_SERVER );
}

if( StrEqual( ccode, "" ) )
{
Format( ccode, sizeof(ccode), "%T", "Unknown Country Short", LANG_SERVER );
}

if( StrEqual( ccode3, "" ) )
{
Format( ccode3, sizeof(ccode3), "%T", "Unknown Country Short 3", LANG_SERVER );
}

// Add "The" in front of certain countries
if( StrContains( country, "United", false ) != -1 ||
StrContains( country, "Republic", false ) != -1 ||
StrContains( country, "Federation", false ) != -1 ||
StrContains( country, "Island", false ) != -1 ||
StrContains( country, "Netherlands", false ) != -1 ||
StrContains( country, "Isle", false ) != -1 ||
StrContains( country, "Bahamas", false ) != -1 ||
StrContains( country, "Maldives", false ) != -1 ||
StrContains( country, "Philippines", false ) != -1 ||
StrContains( country, "Vatican", false ) != -1 )
{
Format( country, sizeof(country), "The %s", country );
}

if (StrContains(rawmsg, "{PLAYERNAME}") != -1)
{
GetClientName(client, buffer, sizeof(buffer));
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERNAME}", buffer);
}

if (StrContains(rawmsg, "{STEAMID}") != -1)
{
GetClientAuthString(client, buffer, sizeof(buffer));
ReplaceString(rawmsg, sizeof(rawmsg), "{STEAMID}", buffer);
}

if (StrContains(rawmsg, "{PLAYERCOUNTRY}") != -1 )
{
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERCOUNTRY}", country);
}

if (StrContains(rawmsg, "{PLAYERCOUNTRYSHORT}") != -1 )
{
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERCOUNTRYSHORT}", ccode);
}

if (StrContains(rawmsg, "{PLAYERCOUNTRYSHORT3}") != -1 )
{
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERCOUNTRYSHORT3}", ccode3);
}

if (StrContains(rawmsg, "{PLAYERCITY}") != -1 )
{
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERCITY}", city);
}

if (StrContains(rawmsg, "{PLAYERREGION}") != -1 )
{
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERREGION}", region);
}

if (StrContains(rawmsg, "{PLAYERIP}") != -1 )
{
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERIP}", ip);
}

if( StrContains(rawmsg, "{PLAYERTYPE}") != -1 && GetConVarInt(g_CvarConnectDisplayType) == 1 )
{
aid = GetUserAdmin( client );

if( GetAdminFlag( aid, Admin_Generic ) )
{
Format( sPlayerAdmin, sizeof(sPlayerAdmin), "%T", "CA Admin", LANG_SERVER );
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERTYPE}", sPlayerAdmin);
}
else
{
Format( sPlayerPublic, sizeof(sPlayerPublic), "%T", "CA Public", LANG_SERVER );
ReplaceString(rawmsg, sizeof(rawmsg), "{PLAYERTYPE}", sPlayerPublic);
}
}
}

for (new c = 0; c < sizeof(g_iSColors); c++)
{
if ( StrContains(rawmsg, g_sSColors[c]) != -1 )
{
Format(sColor, sizeof(sColor), "%c", g_iSColors[c]);
ReplaceString(rawmsg, sizeof(rawmsg), g_sSColors[c], sColor);
}
}

Format( outbuffer, outbuffersize, "%s", rawmsg );
}
 

масяня

Участник
Сообщения
17
Реакции
6
не туда добавил

#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <geoip>
#undef REQUIRE_EXTENSIONS
#include <geoipcity>
#undef REQUIRE_PLUGIN
#include <adminmenu>

сюда
 

FlapJack

Участник
Сообщения
93
Реакции
2
не туда добавил

#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <geoip>
#undef REQUIRE_EXTENSIONS
#include <geoipcity>
#undef REQUIRE_PLUGIN
#include <adminmenu>

сюда

Плагин вообще не работает если так делать как ты говоришь,sm plugins list вводишь в консоль сервера там отображается что он работает но при заходе на сервер плагин не пишет обо мне статистику.Хотя я плагин настроил.
 

FlapJack

Участник
Сообщения
93
Реакции
2
значит ошибся где то

Да не в этом все дело,оказывается когда игрок подключается то он не видит свою статистику, а вот другие видят. Вот так она работает у меня когда подключаешь morecolors и это глупо что она у меня так работает:( Может кто-нибудь даст мне этот плагин уже скомпилированный с расширением как morecolors?!
 

Серёжа Муляр

Участник
Сообщения
3
Реакции
0
Помогите! Можно ли раскрасить слово Warden в плагине для джайла Jailbreak Warden?
Если да то скажите как? Первый раз делаю что-то подобное
 

Серёжа Муляр

Участник
Сообщения
3
Реакции
0
Скажите как это сделать уже часа 4 мучаюсь не могу сделать, пожалуйста. У меня css v34
 

Серёжа Муляр

Участник
Сообщения
3
Реакции
0
А как это сделать?
В каком файле должно быть это
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <geoip>
#undef REQUIRE_EXTENSIONS
#include <geoipcity>
#undef REQUIRE_PLUGIN
#include <adminmenu>

Я в этом деле полный ноль но для сервера надо сделать а то не видно слова.
 

AtsaCity

Участник
Сообщения
1
Реакции
0
Ребят, кто может помочь?
Срочно нужна помощь!
В плагины цвета добавить.
Исходники вроде есть.
 

A1mSh1k

Участник
Сообщения
8
Реакции
0
Я так понимаю этот плагин на CS:S v34 не идёт?
 

Mr.Rudy

Участник
Сообщения
3
Реакции
0
Поставил всё,как сказали в инклюдс.Но по-прежнему в чате пишет примерно так {RED}текст.Что делать,помогите
 

KN|Старый

Участник
Сообщения
3
Реакции
0
Я наткнулся на данную статью и у меня вроде получилось.

P.S. Но проблема осталась в том, что что когда я прописываю цвета в ".phrases.txt", плагин выводит в чат цветной текст, а в хит боксе дописывается код цвета. Пример с плагином QuickDefuse. Я покрасил провода по их цвету, в чат выводится "Был установлен Синий провод", в хите же при выборе провода, отображается "{blue}Синий". Может кто сталкивался с этим, как это можно исправить?
 
Последнее редактирование:

KN|Старый

Участник
Сообщения
3
Реакции
0
@Серый™, Я то понимаю что там нет цветов. Но чего то не понимаю, куда можно вписать цвета проводов.

Может кто подскажет куда можно втюхнуть цвета?
#include <sourcemod>
#include <sdktools>
#include <morecolors>

#define PLUGIN_VERSION "0.3"

new wire
new Handle:cvar_tchoice

new String:wirecolours[4][] = {"Синий","Желтый","Красный","Зеленый"}

public Plugin:myinfo =
{
name = "QuickDefuse",
author = "pRED*",
description = "Let's CT's choose a wire for quick defusion",
version = PLUGIN_VERSION,
url = "SourceMod: Half-Life 2 Scripting"
};

public OnPluginStart()
{
CreateConVar("sm_quickdefuse_version", PLUGIN_VERSION, "Quick Defuse Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY)

HookEvent("bomb_begindefuse", Event_Defuse, EventHookMode_Post)
HookEvent("bomb_beginplant", Event_Plant, EventHookMode_Post)
HookEvent("bomb_planted", Event_Planted, EventHookMode_PostNoCopy)

HookEvent("bomb_abortdefuse", Event_Abort, EventHookMode_Post)
HookEvent("bomb_abortplant", Event_Abort, EventHookMode_Post)

cvar_tchoice = CreateConVar("qd_tchoice", "1", "Sets whether Terrorists can select a wire colour (QuickDefuse)")
}

public Event_Plant(Handle:event, const String:name[], bool:dontBroadcast)
{
new clientId = GetEventInt(event, "userid")
new client = GetClientOfUserId(clientId)

wire = 0;
//let the planter choose a wire

if (GetConVarInt(cvar_tchoice))
{
new Handle:panel = CreatePanel()

SetPanelTitle(panel, "Выбор провода:" )

DrawPanelText(panel, " ")

DrawPanelText(panel, "CT могут попробовать угадать и разминировать бомбу мгновенно")
DrawPanelText(panel, "Нажмите Выход, или игнорируйте это сообщение для выбора случайного провода")

DrawPanelText(panel, " ")

DrawPanelItem(panel,wirecolours[0])
DrawPanelItem(panel,wirecolours[1])
DrawPanelItem(panel,wirecolours[2])
DrawPanelItem(panel,wirecolours[3])


DrawPanelText(panel, " ");
DrawPanelItem(panel, "Выход")

SendPanelToClient(panel, client, PanelPlant, 5)

CloseHandle(panel)
}
}

public Event_Planted(Handle:event, const String:name[], bool:dontBroadcast)
{
if (wire == 0)
wire = GetRandomInt(1,4)
}


public Event_Defuse(Handle:event, const String:name[], bool:dontBroadcast)
{
new clientId = GetEventInt(event, "userid")
new client = GetClientOfUserId(clientId)
new bool:kit = GetEventBool(event, "haskit")

//show a menu to the client offering a choice to pull/cut the wire

new Handle:panel = CreatePanel()

SetPanelTitle(panel, "Выбор провода:" )
DrawPanelText(panel, "Игнорируйте сообщение для обычного обезвреживания бомбы")

DrawPanelText(panel, " ")

DrawPanelText(panel, "Сделайте правильный выбор и обезвредьте бомбу")
DrawPanelText(panel, "Если ошибетесь бомба взорвется мгновенно")


if (!kit)
{
DrawPanelText(panel, "Если у вас нет defuse kit то вероятность что бомба взорвется 50%")
DrawPanelText(panel, "даже если вы выбрали правильный провод")
}


DrawPanelText(panel, " ")

DrawPanelItem(panel,"Синий")
DrawPanelItem(panel,"Желтый")
DrawPanelItem(panel,"Красный")
DrawPanelItem(panel,"Зеленый")


DrawPanelText(panel, " ");
DrawPanelItem(panel, "Выход")

if (kit)
SendPanelToClient(panel, client, PanelDefuseKit, 5)
else
SendPanelToClient(panel, client, PanelNoKit, 5)

CloseHandle(panel)
}

public PanelPlant(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_Select && param2 > 0 && param2 < 5) //User selected a valid wire colour
{
wire = param2
CPrintToChat(param1,"\x01\x04[Сапер] Вы выбрали %s провод",wirecolours[param2-1])
}
}

public PanelDefuseKit(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_Select && param2 > 0 && param2 < 5) //User selected a valid wire colour
{
new bombent = FindEntityByClassname(-1,"planted_c4")

if (bombent)
{
new String:name[32]
GetClientName(param1,name,sizeof(name))

if (param2 == wire)
{
SetEntPropFloat(bombent, Prop_Send, "m_flDefuseCountDown", 1.0)
CPrintToChatAll("\x01\x04[Сапер] %s правильно выбранный %s провод дает вам шанс на мгновенное обезвреживание C4 (1:4 шансы)",name,wirecolours[param2-1])
}
else
{
SetEntPropFloat(bombent, Prop_Send, "m_flC4Blow", 1.0)
CPrintToChatAll("\x01\x04[Сапер] %s C4 взорвется если провод %s выбран не правильно (3:4 шансы) Правильный провод был %s",name,wirecolours[param2-1],wirecolours[wire-1])
}
}
}
}

public PanelNoKit(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_Select && param2 > 0 && param2 < 5) //User selected a valid wire colour
{
new bombent = FindEntityByClassname(-1,"planted_c4")

if (bombent)
{
new String:name[32]
GetClientName(param1,name,sizeof(name))

if (param2 == wire && GetRandomInt(0,1))
{
SetEntPropFloat(bombent, Prop_Send, "m_flDefuseCountDown", 1.0)
CPrintToChatAll("\x01\x04[Сапер] %s правильно выбранный %s провод дает шансы на обезвреживание бомбы (1:8 шансы)",name,wirecolours[param2-1])
}
else
{
SetEntPropFloat(bombent, Prop_Send, "m_flC4Blow", 1.0)
if (param2 != wire)
CPrintToChatAll("\x01\x04[Сапер] %s бомба взорвана из-за того что выбран %s не правильный провод (7:8 odds) Правильный провод был %s",name,wirecolours[param2-1],wirecolours[wire-1])
else
CPrintToChatAll("\x01\x04[Сапер] %s выбран правильный провод (%s) но бомба все равно взорвалась!",name,wirecolours[param2-1])
}
}
}
}



public Event_Abort(Handle:event, const String:name[], bool:dontBroadcast)
{
new clientId = GetEventInt(event, "userid")
new client = GetClientOfUserId(clientId)

CancelClientMenu(client)
}
 
Последнее редактирование:
Сверху Снизу