Доброе время суток. Стоит на сервере AES: Say Tag и upatch для чата. Но не у всех TAB-ом можно переключить язык на нон стиме. Поставил Lite Translit от Неугомона убрав все приставки и зеленый чат. Так пропали приставки AES: Say Tag. Как добавить в AES: Say Tag переключение между языками /rus, /eng и блокировку слешей?
AES: Say Tag Исходник:
Скрытый текст
Код:
/* * Prefix Manager v. 0.1 * by serfreeman1337 */
#include <amxmodx> #include <amxmisc>
#define PLUGIN "Prefix Manger" #define VERSION "0.1" #define AUTHOR "serfreeman1337"
// префикс по флагам #define USE_PREFIX_ACCESS
// префикс для топ игроков #define USE_PREFIX_TOP // cstrike only
// префикс по steamid #define USE_PREFIX_STEAMID
// префикс по клиенту #define USE_PREFIX_DPROTO // no steam only
// префикс звания из AES #define USE_PREFIX_AES
#if defined USE_PREFIX_TOP #include <csstats> #endif
#if defined USE_PREFIX_AES #include <aes_main> #endif
enum _:cvars { CVAR_MAX_PREFIXES }
new cvar[cvars]
enum _:prfx { PREFIX_ALL,
#if defined USE_PREFIX_ACCESS PREFIX_ACCESS, #endif
#if defined USE_PREFIX_TOP PREFIX_TOP, #endif
#if defined USE_PREFIX_STEAMID PREFIX_STEAMID, #endif
#if defined USE_PREFIX_DPROTO PREFIX_DPROTO, #endif
/* * загрузка конфигурации */ public plugin_cfg(){ new configFile[256] get_configsdir(configFile,255) add(configFile,255,"/prefixManager.ini")
new f = fopen(configFile,"rt")
if(!f){ // не удалось открыть конфиг-файл log_amx("config file not found")
return PLUGIN_CONTINUE }
prefixes = ArrayCreate(prefixDataStruct,1)
new buf[512]
new tmpWay[20],tmpData[128],tmpFormat[10],tmpName[128],tmpWeight[10],tmpSkip[20],tmp Uncount[2],tmpGroup[10],datPrefixId new prefixInfo[prefixDataStruct],bool:isTeamFormat,prefixNum
if(!FormatPrefixes(id,formatedMsg,190,len,isTeamMsg)){ if(!strcmp(chatHead,"#Cstrike_Chat_All")) len += formatex(formatedMsg[len],190-len,"^3%%s1^1 : %%s2") else len += formatex(formatedMsg[len],190-len,"%s",chatHead) }
// не допускаем перехода лимита в 190 символов if(strlen(formatedMsg) + strlen(contentMsg) >= 190){ new contentLen = 190 - strlen(chatHead) - strlen(contentMsg)
/* * функция форматирования сообщения с префиксом */ public FormatPrefixes(id,fmt[],maxlen,&len,bool:isTeam){ new prefixInfo[prefixDataStruct] new fmtPrefixes,msgFormer[128] new Array:skipArray
len += formatex(fmt[len],maxlen-len,"^1")
new startLen = len // запоминаем для режима форматирования всего сообщения
static Trie:prefixByGroup,bool:prefixGroup
prefixGroup = false
for(new i ; i < prefixCount ; i++){ ArrayGetArray(prefixes,i,prefixInfo)
#if defined USE_PREFIX_STEAMID case PREFIX_STEAMID:{ if(steamIdPrefix[id] == -1) continue else if(steamIdPrefix[id] != prefixInfo[PREFIX_DATA][0]) continue } #endif
#if defined USE_PREFIX_DPROTO case PREFIX_DPROTO: if(playerClient[id] != prefixInfo[PREFIX_DATA][0]) continue #endif
#if defined USE_PREFIX_AES case PREFIX_AES:{ new aStats[AES_ST_END],levelName[64] aes_get_player_stats(id,aStats) aes_get_level_name(aStats[AES_ST_LEVEL],levelName,63,LANG_SERVER)
// тег команды для чата if(contain(msgFormer,"#team#") != -1){ if(isTeam){ new lngKey[11],teamTag[30] formatex(lngKey,10,"CHAT_TEAM%d",get_user_team(id)) formatex(teamTag,29,"%L",LANG_SERVER,lngKey)
len = formatex(fmt[startLen],maxlen - startLen,msgFormer) }
return msgFormer[0] ? true : false }
check_prefix_for_skip(Array:which,prefixNum){ for(new i ; i < ArraySize(which) ; ++i) if(ArrayGetCell(which,i) == prefixNum) return true
return false }
/* Replaces a contained string iteratively. * This ensures that no infinite replacements will take place by * intelligently moving to the next string position each iteration. */
/* * небольшой фикс от serfreeman1337 * прекращаем заменять если не хвататет места * чтобы избежать проблем с replace() buffer not big enough */ stock replace_all2(string[], len, const what[], const with[]) { new pos = 0;