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

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

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

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

> Правила раздела

Перед созданием новой темы убедитесь, не искал ли кто-нибудь подобный плагин до вас, для этого следует воспользоваться поиском.

Все вновь созданные темы, с названием типа "Помогите найти", "А что это за плагин", "Ищу плагин", "Нужен плагин", "Подскажите пожалуйста название плагина" - будут удалены.
При создании темы постарайтесь максимально понятно сформулировать её заголовок так, чтобы он соответствовал функциям плагина который Вы ищите. В том случае, если Вам не удается сформулировать мысль и правильно расписать всё в теме, воспользуйтесь графическим редактором, к примеру Paint, что бы примерно изобразить функции нужного Вам плагина.
6 страниц V  « 2 3 4 5 »

[поиск] Плагина префиксы

serfreeman1337
сообщение 22.5.2014, 17:48
Сообщение #41
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Немного ошибся. Забыл сказать что нужно на проверку ставить именно тот флаг, которого нету у других.
Код:
"access" "l" "prefix" "^3[^4Гл.Админ^3]^1" "100"
"access" "n" "prefix" "^3[^4Админ^3]^1" "50"
"access" "o" "prefix" "^3[^4Стажер^3]^1" "10"

Вот так.

Цитата(firante @ 22.5.2014, 20:43) *
Так и сделал теперь Префикс Steam не показывает


У тебя выводит всего 2 префикса?
Почитай кфг и подумай над "неучет префикса для pm_max_count".


Отредактировал: serfreeman1337, - 22.5.2014, 17:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nebo
сообщение 22.5.2014, 18:01
Сообщение #42


Стаж: 13 лет
Город: Казань

Сообщений: 3181
Благодарностей: 1015
Полезность: 701

Поставил, работает, но...
У Гл.Админа пишет: [Гл.Админ] [Админ] у стажера такая же ерунда.
+ теперь на русском нельзя писать, даже на стиме.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 22.5.2014, 18:02
Сообщение #43


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Nebo, pm_max_count 1?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя 9art
сообщение 22.5.2014, 18:05
Сообщение #44


Стаж: 12 лет

Сообщений: 991
Благодарностей: 534
Полезность: 843

Nebo, Попробуй так
Код:
"access" "l" "prefix" "^3[^4Гл.Админ^3]^1" "100" "2,3" "1"
"access" "n" "prefix" "^3[^4Админ^3]^1" "50"
"access" "o" "prefix" "^3[^4Стажер^3]^1" "10"


upd: заменил первую строчку

Отредактировал: 9art, - 22.5.2014, 18:15
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
serfreeman1337
сообщение 22.5.2014, 18:06
Сообщение #45
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Цитата(Nebo @ 22.5.2014, 21:01) *
+ теперь на русском нельзя писать, даже на стиме.


Это проблема твоего сервера. Обнови билд или установи Unicode Patch.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 22.5.2014, 18:11
Сообщение #46


Стаж: 12 лет

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

serfreeman1337,
Сделал так:
prefixManager.ini
Код
; Prefix Manager by serfreeman1337 | http://gf.hldm.org/
; Файл конфигурации версии 0.1
;
; структура:
;    "<тип префикса>" "<параметры для префикса>" "<режим форматирования>" "<текст префикса>" "<вес префикса>" "<пропуск префиксов>" "<учитывать или нет префикс для квара>" "<группа префиксов>"
;
; доступные варианты префиксов (может варьироваться в зависимости от компиляции):
;    all - префикс для всех
;    access - префикс по флагам, в параметрах нужно указать флаги
;    steamid - префикс для steamid, в параметрах указывается steamid
;    top - префикс для топ игроков, в параметрах указывается позиция топа
;        в тексте префикса можно указать #rank# для вывода позиции игрока в префикс
;    dproto - префикс по клиенту игрока, в параметрах указывается значение dproto
;    aes - вания из плагина Advanced Experience System
;        в тексте нужно указать #rank# для вывода звания
;
; режим форматирования
;    prefix - просто добавление префикса в начало сообщения
;    format - режим полного форматирования сообщения
;        %s1 - имя игрока
;        %s2 - его сообщение
;        #prefix# - префиксы
;        #team# - тег команды, если есть
;        #dead# - тег убитого
; текст префикса
;    сюда пишется текст самого префикса, а также отсюда задаются параметры форматирования сообщений
;    возможно использования цветовых кодов:
;        ^1 - обычный
;        ^3 - цвет команды
;        ^4 - зеленый
; вес префикса
;    определяет очередь вывода префиксов
;
; пропуск префиксов
;    через запятую прописываются номера префиксов по их порядку в этом файле, которые не будут выведены вместе с этим префиксом
;    допустим, у нас есть 3 перфикса, которые могут вывестись одновременно и вы хотите чтобы какой-то из них не выводился
;        пример, на флаг d у нас префикс "[АДМИН]"; на флаг s префикс "[АДМИН ДЕВУШКА]"; на флаг t префикс "[VIP]":
;            "access" "d" "prefix" "[АДМИН]" "10"
;            "access" "s" "prefix" "[АДМИН ДЕВУШКА]" "10"
;            "access" "t" "prefix" "[VIP]" "5"
;
;        у игрока есть флаги dst и нужно вывести только префикс "[АДМИН ДЕВУШКА]"
;        для это нужно задать более высокий вес этому префиксу, т.к. свойства префиксов приминяются последовательно
;         и записать в наш 6ой параметр номера этих префиксов:
;            "access" "s" "prefix" "[АДМИН ДЕВУШКА]" "15" "1,3"
;    таким образом выведится только префикс "[АДМИН ДЕВУШКА]"
;
; неучет префикса для pm_max_count
;    укажите 1 если вы не хотите учитывать этот префикс для общего кол-ва префиксов
;    полезно для вывода приставки звания AES или STEAM префикса
;
; группа префикса
;    указывается группа для этого префикса, стандартная группа - 1
;    с помощью групп можно вывести несколько префиксов в разных местах сообщения
;    префиксы из группы можно вывести только в режиме format, выводится они через указание #prefix<номер группы>#
;    для префиксов группы не идет учет общего кол-ва префиксов
;    ЭКСПЕРЕМЕНТАЛЬНАЯ ФУНКЦИЯ.
;

; приставка с отображение ранга у топ 10 игроков
;"top" "10" "prefix" "^1[^3TOP-^4#rank#^1]" "1000"

"aes" "" "prefix" "^4[^3#rank#^4]" "10" "" ""

; приставка [ДНО] для настоящего дна, которое не знает что есть нормальная сборка
;"dproto" "1" "prefix" "^1[^4ДНО^1]" "500"

; приставка [1337] для игрока со SteamID STEAM_0:1:25876755
;"steamid" "STEAM_0:1:25876755" "prefix" "^4[1337]^1" "200"

;"steamid" "STEAM_0:0:47256284" "prefix" "^3[^4Главный Админ^3]^1" "200"

; приставка [ADMIN] для игрока с флагом a
"access" "d" "prefix" "^4[^3Админ^4]^1" "150" "6"

; приставка [Админ Девушка] для игрока с флагом s
;"access" "s" "prefix" "^3[^4Админ Девушка^3]^1" "151" "4,6"

; приставка [Девушка] для игрока с флагом d
;"access" "t" "prefix" "^3[^4Девушка^3]^1" "20" "7"

; приставка [VIP] для игрока с флагом t
"access" "t" "prefix" "^4[^3Вип^4]^1" "15"

; приставка [STEAM] для Steam игрока
"dproto" "2" "prefix" "^4[^3Steam^4]" "5"

; сделаем зеленый цвет cообщения от Steam игрока
;"access" "a" "format" "#prefix2##prefix4##prefix1# ^3%s1^1 :  ^4%s2^1 " "10"

; сделаем зеленый цвет cообщения от Steam игрока
"dproto" "2" "format" "#prefix##dead##team# ^3%s1^1 :  ^4%s2^1" "10"

sma
Код:
/*
* Prefix Manager v. 0.1
* by serfreeman1337 http://gf.hldm.org/
*/

#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

#if defined USE_PREFIX_AES
PREFIX_AES,
#endif

PREFIX_END
}

new prefixWayId[prfx][] = {
"all",

#if defined USE_PREFIX_ACCESS
"access",
#endif

#if defined USE_PREFIX_TOP
"top",
#endif

#if defined USE_PREFIX_STEAMID
"steamid",
#endif

#if defined USE_PREFIX_DPROTO
"dproto",
#endif

#if defined USE_PREFIX_AES
"aes",
#endif

""
}

enum _:prefixDataStruct {
PREFIX_ID,
PREFIX_POS,
PREFIX_DATA[128],
bool:PREFIX_FORMAT,
PREFIX_NAME[128],
PREFIX_WEIGHT,
PREFIX_GROUP,
Array:PREFIX_SKIP,
bool:PREFIX_UNCOUNT
}

new Array:prefixes
new prefixCount

new g_maxplayers

new teamMsgString[][] = {
"#Cstrike_Chat_CT",
"#Cstrike_Chat_T",
"#Cstrike_Chat_CT_Dead",
"#Cstrike_Chat_T_Dead",
"#Cstrike_Chat_Spec"
}

new Trie:teamMsgPointers

#if defined USE_PREFIX_STEAMID
new steamIdPrefix[33]

new Trie:prefixForId
#endif

#if defined USE_PREFIX_DPROTO
new pDprotoProvider

new playerClient[33]
#endif

new prefixMax

public plugin_init(){
register_plugin(PLUGIN,VERSION,AUTHOR)

// Максимальное кол-во префиксов
cvar[CVAR_MAX_PREFIXES] = register_cvar("pm_max_count","1")
}

/*
* загрузка конфигурации
*/
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

// читаем содержимое файла
while(!feof(f)){
fgets(f,buf,511)
trim(buf)

// пропускаем пустые строки и комментарии
if(!buf[0] || buf[0] == ';')
continue

// очищаем предыдущий результат
tmpWay[0] = 0 // указатель префикса
tmpData[0] = 0 // доп. информация для префикса
tmpFormat[0] = 0 // тип модифакции сообщений префиксом
tmpName[0] = 0 // название этого префикса
tmpSkip[0] = 0 // пропуск префиксов
tmpUncount[0] = 0 // не считать данный префикс
tmpGroup[0] = 0 // группа префикса
datPrefixId = -1 // ID префикса

parse(buf,tmpWay,19,tmpData,127,tmpFormat,9,tmpName,127,tmpWeight,9,tmpSkip,19,t
mpUncount,1,tmpGroup,9)

// проверяем наличие признака префикса
for(new i ; i < prfx - 1 ; ++i){
if(strcmp(tmpWay,prefixWayId[i]) != 0)
continue

datPrefixId = i // нашли ID префикса
}

// префикс не найден, пероходим к следующей строке
if(datPrefixId == -1)
continue

arrayset(prefixInfo,0,prefixDataStruct)

// задаем параметры префикса
prefixInfo[PREFIX_ID] = datPrefixId // ID префикса
prefixInfo[PREFIX_POS] = prefixNum++
prefixInfo[PREFIX_FORMAT] = strcmp(tmpFormat,"prefix") == 0 ? false : true // форматирование чата или просто добавление префикса
prefixInfo[PREFIX_WEIGHT] = str_to_num(tmpWeight) // вес
prefixInfo[PREFIX_GROUP] = tmpGroup[0] ? str_to_num(tmpGroup) : 1
prefixInfo[PREFIX_UNCOUNT] = str_to_num(tmpUncount)

// строим массив с префиксами для пропуска
if(tmpSkip[0]){
new stPos,ePos,rawPoint[20]

prefixInfo[PREFIX_SKIP] = _:ArrayCreate(1,1)

do {
ePos = strfind(tmpSkip[stPos],",")

formatex(rawPoint,ePos,tmpSkip[stPos])
ArrayPushCell(prefixInfo[PREFIX_SKIP] ,str_to_num(rawPoint))

stPos += ePos + 1
} while (ePos != -1)
}

replace_all2(tmpName,127,"^^1","^1")
replace_all2(tmpName,127,"^^2","^2")
replace_all2(tmpName,127,"^^3","^3")
replace_all2(tmpName,127,"^^4","^4")
replace_all2(tmpName,127,"%","%%")

// доп. обработка согласно префиксам
switch(datPrefixId){
case PREFIX_ALL: {
}

#if defined USE_PREFIX_ACCESS
case PREFIX_ACCESS:
prefixInfo[PREFIX_DATA][0] = read_flags(tmpData) // считаем бит сумму флагов
#endif

#if defined USE_PREFIX_TOP
case PREFIX_TOP:
prefixInfo[PREFIX_DATA][0] = str_to_num(tmpData)
#endif

#if defined USE_PREFIX_STEAMID
case PREFIX_STEAMID:{
if(prefixForId == Invalid_Trie)
prefixForId = TrieCreate()

prefixInfo[PREFIX_DATA][0] = prefixCount
TrieSetCell(prefixForId,tmpData,prefixCount)
}
#endif

#if defined USE_PREFIX_DPROTO
case PREFIX_DPROTO:
prefixInfo[PREFIX_DATA][0] = str_to_num(tmpData)
#endif

#if defined USE_PREFIX_AES
case PREFIX_AES:{}
#endif

default: continue
}

if(prefixInfo[PREFIX_FORMAT] && contain(tmpName,"#team#") != -1)
isTeamFormat = true

copy(prefixInfo[PREFIX_NAME],127,tmpName)
ArrayPushArray(prefixes,prefixInfo)

prefixCount ++
}

fclose(f)

if(!prefixCount)
return PLUGIN_CONTINUE

// сортировка префиксов по весу

#if AMXX_VERSION_NUM < 183
ArraySort(prefixes,"SortPrefixesByWeight")
#else
ArraySortEx(prefixes,"SortPrefixesByWeight")
#endif

if(isTeamFormat){
teamMsgPointers = TrieCreate()

for(new i ; i < sizeof teamMsgString ; ++i)
TrieSetCell(teamMsgPointers,teamMsgString[i],1)
}

#if defined USE_PREFIX_DPROTO
pDprotoProvider = get_cvar_pointer( "dp_r_id_provider" ) // dproto interface
#endif

g_maxplayers = get_maxplayers()
prefixMax = get_pcvar_num(cvar[CVAR_MAX_PREFIXES])

register_message(get_user_msgid("SayText"),"MsgHook_SayText")
register_dictionary("prefixManager.txt")

return PLUGIN_CONTINUE
}

public client_putinserver(id){
#if defined USE_PREFIX_STEAMID
new authId[36]
get_user_authid(id,authId,35)

if(prefixForId == Invalid_Trie || !TrieGetCell(prefixForId,authId,steamIdPrefix[id]))
steamIdPrefix[id] = -1
#endif

#if defined USE_PREFIX_DPROTO
if(!pDprotoProvider){
playerClient[id] = 0
}else if( is_user_bot(id) || is_user_hltv(id) )
playerClient[id] = 0
else {
server_cmd( "dp_clientinfo %d", id )
server_exec()

playerClient[id] = get_pcvar_num(pDprotoProvider)
}
#endif
}

#if AMXX_VERSION_NUM >= 183
public SortPrefixesByWeight(Array:array, prefix1[], prefix2[]){
if(prefix1[PREFIX_WEIGHT] > prefix2[PREFIX_WEIGHT])
return -1
else if (prefix1[PREFIX_WEIGHT] < prefix2[PREFIX_WEIGHT])
return 1

return 0
}
#else
public SortPrefixesByWeight(Array:array, item1, item2){
new prefix1[prefixDataStruct],prefix2[prefixDataStruct]

ArrayGetArray(array,item1,prefix1)
ArrayGetArray(array,item2,prefix2)

if(prefix1[PREFIX_WEIGHT] > prefix2[PREFIX_WEIGHT])
return -1
else if (prefix1[PREFIX_WEIGHT] < prefix2[PREFIX_WEIGHT])
return 1

return 0
}
#endif

public MsgHook_SayText(msgId,msgDest,reciever){
if(msgDest != MSG_ONE)
return PLUGIN_CONTINUE

new id = get_msg_arg_int(1)

if( !(0 < id <= g_maxplayers) )
return PLUGIN_CONTINUE

static formatedMsg[191],chatHead[191],contentMsg[191]
static msgLastId,Float:msgLastTime

if(msgLastId == id && msgLastTime == get_gametime()){
set_msg_arg_string(2,formatedMsg)
set_msg_arg_string(4,contentMsg)

return PLUGIN_CONTINUE
}

new len,bool:isTeamMsg
get_msg_arg_string(2,chatHead,190) // указатель
get_msg_arg_string(4,contentMsg,190) // сообщение

if(teamMsgPointers)
isTeamMsg = TrieGetCell(teamMsgPointers,chatHead,isTeamMsg)

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)

if(((contentMsg[contentLen - 1] & 0xFF) >= 0xC2) && ((contentMsg[contentLen - 1] & 0xFF) <= 0xEF)) // Don't truncate a double-byte character
contentLen--

contentMsg[contentLen] = 0

set_msg_arg_string(4,contentMsg)
}

set_msg_arg_string(2,formatedMsg)

msgLastId = id
msgLastTime = get_gametime()

return PLUGIN_CONTINUE
}

/*
* функция форматирования сообщения с префиксом
*/
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(!prefixInfo[PREFIX_FORMAT] && fmtPrefixes >= prefixMax)
continue

if(skipArray && check_prefix_for_skip(skipArray,prefixInfo[PREFIX_POS]))
continue

switch(prefixInfo[PREFIX_ID]){
#if defined USE_PREFIX_ACCESS
case PREFIX_ACCESS:
if(!(get_user_flags(id) & prefixInfo[PREFIX_DATA][0]))
continue
#endif

#if defined USE_PREFIX_TOP
case PREFIX_TOP:{
new st[8],rank = get_user_stats(id,st,st)

if(rank > prefixInfo[PREFIX_DATA][0])
continue

new rankStr[10]
num_to_str(rank,rankStr,9)

replace_all2(prefixInfo[PREFIX_NAME],127,"#rank#",rankStr)
}
#endif

#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)

replace_all2(prefixInfo[PREFIX_NAME],127,"#rank#",levelName)
}
#endif
}

if(prefixInfo[PREFIX_SKIP] != Invalid_Array)
skipArray = prefixInfo[PREFIX_SKIP]

// это простой префикс
if(!prefixInfo[PREFIX_FORMAT]){
if(prefixInfo[PREFIX_GROUP] == 1){
len += formatex(fmt[len],maxlen - len,"%s%s",fmtPrefixes ? " " : "",prefixInfo[PREFIX_NAME])

if(!prefixInfo[PREFIX_UNCOUNT])
fmtPrefixes ++
else if(!fmtPrefixes)
len += formatex(fmt[len],maxlen - len," ")
}else{
if(prefixByGroup == Invalid_Trie)
prefixByGroup = TrieCreate()

new groupKey[14],groupText[191],groupLen
formatex(groupKey,13,"#prefix%d#",prefixInfo[PREFIX_GROUP])

TrieGetString(prefixByGroup,groupKey,groupText,190)
groupLen = strlen(groupText)

formatex(groupText[groupLen],190 - groupLen,"%s%s",groupLen ? " " : "",prefixInfo[PREFIX_NAME])

TrieSetString(prefixByGroup,groupKey,groupText)

prefixGroup = true
}
}else if(!msgFormer[0]) // это режим форматирования вида сообщения
copy(msgFormer,127,prefixInfo[PREFIX_NAME])

arrayset(prefixInfo,0,prefixDataStruct)
}

if(fmtPrefixes)
len += formatex(fmt[len],maxlen - len," ")

// форматирование сообщения
if(msgFormer[0]){
replace_all2(msgFormer,127,"#prefix#",fmt) // заменяем на префиксы

if(prefixGroup){ // груповой префикс
new w,l,r = 0
new raw[14],groupText[191]
new fmted

do {
w = contain(msgFormer[l],"#prefix")

if(w == -1)
break

l += w + 7
r = contain(msgFormer[l],"#") + l

if(r - l <= 0)
continue

formatex(raw,r - l,msgFormer[l])
formatex(raw,13,"#prefix%d#",str_to_num(raw))

if(!TrieGetString(prefixByGroup,raw,groupText,190)){
replace(msgFormer,127,raw,"")

l -= strlen(raw) - 2
}else{
formatex(groupText,190,"%s%s",fmted ? " " : "",groupText)
replace_all2(msgFormer,127,raw,groupText)

l += strlen(groupText) - strlen(raw)

fmted ++
}
} while(l != -1)

TrieClear(prefixByGroup)
}

// тег команды для чата
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)

replace_all2(msgFormer,127,"#team#",teamTag)
}else
replace_all2(msgFormer,127,"#team#","")
}

// тег убитого
if(contain(msgFormer,"#dead#") != -1){
if(!is_user_alive(id)){
new deadTag[30]
formatex(deadTag,29,"%L",LANG_SERVER,get_user_team(id) != 0 ? "CHAT_DEAD" : "CHAT_DEAD0")

replace_all2(msgFormer,127,"#dead#",deadTag)
}else
replace_all2(msgFormer,127,"#dead#","")
}

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;

if ((pos = contain(string, what)) == -1)
{
return 0;
}

new total = 0;
new with_len = strlen(with);
new diff = strlen(what) - with_len;
new total_len = strlen(string);
new temp_pos = 0;

while (total_len + with_len < len && replace(string[pos], len - pos, what, with) != 0)
{
total++;

/* jump to position after replacement */
pos += with_len;

/* update cached length of string */
total_len -= diff;

/* will the next call be operating on the last character? */
if (pos >= total_len)
{
break;
}

/* find the next position from our offset */
temp_pos = contain(string[pos], what);

/* if it's invalid, we're done */
if (temp_pos == -1)
{
break;
}

/* otherwise, reposition and update counters */
pos += temp_pos;
}

return total;
}

результат
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 22.5.2014, 18:13
Сообщение #47
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Код:
"aes" "" "prefix" "^4[^3#rank#^4]" "10" "" "1"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 22.5.2014, 18:28
Сообщение #48


Стаж: 12 лет

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

serfreeman1337,
Всё теперь как надо всё ништяк )
Вот только хочу в color подкрасить надписи (Terorrist) (CT) (Spectator) в AES Tag можно было это сделать так как в новой версии уже он встроен удалил Tag теперь как можно подкрасить надписи если вообще можно в этой версии? )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 22.5.2014, 18:30
Сообщение #49
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

В prefixManager.txt загляни. Там имена команд.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя r1nk0
сообщение 22.5.2014, 18:51
Сообщение #50


Стаж: 12 лет

Сообщений: 1417
Благодарностей: 705
Полезность: 349

Цитата(serfreeman1337 @ 22.5.2014, 20:30) *
В prefixManager.txt загляни. Там имена команд.


может плагин достоин новой темы или в главную тему AES ?


Создание и редактирование карт ($) - vk.com/id476857873
Настройка и техническое обслуживание ваших игровых серверов - vk.com/id476857873
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя firante
сообщение 22.5.2014, 21:05
Сообщение #51


Стаж: 12 лет

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

Пацаны помогите добавить colorchat пожалуйста (
Вот в lang сделал но не покрасились теги(
Код
[en]
CHAT_DEAD = (!tDEAD!g)
CHAT_DEAD0 = (!tSPEC!g)
CHAT_TEAM1 = (!tTerrorist!g)
CHAT_TEAM2 = (!tCounter-Terrorist!g)
CHAT_TEAM0 = (!tSpectator!g)

prefixManager.sma
Код:
/*
* Prefix Manager v. 0.1
* by serfreeman1337 http://gf.hldm.org/
*/

#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

#if defined USE_PREFIX_AES
PREFIX_AES,
#endif

PREFIX_END
}

new prefixWayId[prfx][] = {
"all",

#if defined USE_PREFIX_ACCESS
"access",
#endif

#if defined USE_PREFIX_TOP
"top",
#endif

#if defined USE_PREFIX_STEAMID
"steamid",
#endif

#if defined USE_PREFIX_DPROTO
"dproto",
#endif

#if defined USE_PREFIX_AES
"aes",
#endif

""
}

enum _:prefixDataStruct {
PREFIX_ID,
PREFIX_POS,
PREFIX_DATA[128],
bool:PREFIX_FORMAT,
PREFIX_NAME[128],
PREFIX_WEIGHT,
PREFIX_GROUP,
Array:PREFIX_SKIP,
bool:PREFIX_UNCOUNT
}

new Array:prefixes
new prefixCount

new g_maxplayers

new teamMsgString[][] = {
"#Cstrike_Chat_CT",
"#Cstrike_Chat_T",
"#Cstrike_Chat_CT_Dead",
"#Cstrike_Chat_T_Dead",
"#Cstrike_Chat_Spec"
}

new Trie:teamMsgPointers

#if defined USE_PREFIX_STEAMID
new steamIdPrefix[33]

new Trie:prefixForId
#endif

#if defined USE_PREFIX_DPROTO
new pDprotoProvider

new playerClient[33]
#endif

new prefixMax

public plugin_init(){
register_plugin(PLUGIN,VERSION,AUTHOR)

// Максимальное кол-во префиксов
cvar[CVAR_MAX_PREFIXES] = register_cvar("pm_max_count","1")
}

/*
* загрузка конфигурации
*/
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

// читаем содержимое файла
while(!feof(f)){
fgets(f,buf,511)
trim(buf)

// пропускаем пустые строки и комментарии
if(!buf[0] || buf[0] == ';')
continue

// очищаем предыдущий результат
tmpWay[0] = 0 // указатель префикса
tmpData[0] = 0 // доп. информация для префикса
tmpFormat[0] = 0 // тип модифакции сообщений префиксом
tmpName[0] = 0 // название этого префикса
tmpSkip[0] = 0 // пропуск префиксов
tmpUncount[0] = 0 // не считать данный префикс
tmpGroup[0] = 0 // группа префикса
datPrefixId = -1 // ID префикса

parse(buf,tmpWay,19,tmpData,127,tmpFormat,9,tmpName,127,tmpWeight,9,tmpSkip,19,t
mpUncount,1,tmpGroup,9)

// проверяем наличие признака префикса
for(new i ; i < prfx - 1 ; ++i){
if(strcmp(tmpWay,prefixWayId[i]) != 0)
continue

datPrefixId = i // нашли ID префикса
}

// префикс не найден, пероходим к следующей строке
if(datPrefixId == -1)
continue

arrayset(prefixInfo,0,prefixDataStruct)

// задаем параметры префикса
prefixInfo[PREFIX_ID] = datPrefixId // ID префикса
prefixInfo[PREFIX_POS] = prefixNum++
prefixInfo[PREFIX_FORMAT] = strcmp(tmpFormat,"prefix") == 0 ? false : true // форматирование чата или просто добавление префикса
prefixInfo[PREFIX_WEIGHT] = str_to_num(tmpWeight) // вес
prefixInfo[PREFIX_GROUP] = tmpGroup[0] ? str_to_num(tmpGroup) : 1
prefixInfo[PREFIX_UNCOUNT] = str_to_num(tmpUncount)

// строим массив с префиксами для пропуска
if(tmpSkip[0]){
new stPos,ePos,rawPoint[20]

prefixInfo[PREFIX_SKIP] = _:ArrayCreate(1,1)

do {
ePos = strfind(tmpSkip[stPos],",")

formatex(rawPoint,ePos,tmpSkip[stPos])
ArrayPushCell(prefixInfo[PREFIX_SKIP] ,str_to_num(rawPoint))

stPos += ePos + 1
} while (ePos != -1)
}

replace_all2(tmpName,127,"^^1","^1")
replace_all2(tmpName,127,"^^2","^2")
replace_all2(tmpName,127,"^^3","^3")
replace_all2(tmpName,127,"^^4","^4")
replace_all2(tmpName,127,"%","%%")

// доп. обработка согласно префиксам
switch(datPrefixId){
case PREFIX_ALL: {
}

#if defined USE_PREFIX_ACCESS
case PREFIX_ACCESS:
prefixInfo[PREFIX_DATA][0] = read_flags(tmpData) // считаем бит сумму флагов
#endif

#if defined USE_PREFIX_TOP
case PREFIX_TOP:
prefixInfo[PREFIX_DATA][0] = str_to_num(tmpData)
#endif

#if defined USE_PREFIX_STEAMID
case PREFIX_STEAMID:{
if(prefixForId == Invalid_Trie)
prefixForId = TrieCreate()

prefixInfo[PREFIX_DATA][0] = prefixCount
TrieSetCell(prefixForId,tmpData,prefixCount)
}
#endif

#if defined USE_PREFIX_DPROTO
case PREFIX_DPROTO:
prefixInfo[PREFIX_DATA][0] = str_to_num(tmpData)
#endif

#if defined USE_PREFIX_AES
case PREFIX_AES:{}
#endif

default: continue
}

if(prefixInfo[PREFIX_FORMAT] && contain(tmpName,"#team#") != -1)
isTeamFormat = true

copy(prefixInfo[PREFIX_NAME],127,tmpName)
ArrayPushArray(prefixes,prefixInfo)

prefixCount ++
}

fclose(f)

if(!prefixCount)
return PLUGIN_CONTINUE

// сортировка префиксов по весу

#if AMXX_VERSION_NUM < 183
ArraySort(prefixes,"SortPrefixesByWeight")
#else
ArraySortEx(prefixes,"SortPrefixesByWeight")
#endif

if(isTeamFormat){
teamMsgPointers = TrieCreate()

for(new i ; i < sizeof teamMsgString ; ++i)
TrieSetCell(teamMsgPointers,teamMsgString[i],1)
}

#if defined USE_PREFIX_DPROTO
pDprotoProvider = get_cvar_pointer( "dp_r_id_provider" ) // dproto interface
#endif

g_maxplayers = get_maxplayers()
prefixMax = get_pcvar_num(cvar[CVAR_MAX_PREFIXES])

register_message(get_user_msgid("SayText"),"MsgHook_SayText")
register_dictionary("prefixManager.txt")

return PLUGIN_CONTINUE
}

public client_putinserver(id){
#if defined USE_PREFIX_STEAMID
new authId[36]
get_user_authid(id,authId,35)

if(prefixForId == Invalid_Trie || !TrieGetCell(prefixForId,authId,steamIdPrefix[id]))
steamIdPrefix[id] = -1
#endif

#if defined USE_PREFIX_DPROTO
if(!pDprotoProvider){
playerClient[id] = 0
}else if( is_user_bot(id) || is_user_hltv(id) )
playerClient[id] = 0
else {
server_cmd( "dp_clientinfo %d", id )
server_exec()

playerClient[id] = get_pcvar_num(pDprotoProvider)
}
#endif
}

#if AMXX_VERSION_NUM >= 183
public SortPrefixesByWeight(Array:array, prefix1[], prefix2[]){
if(prefix1[PREFIX_WEIGHT] > prefix2[PREFIX_WEIGHT])
return -1
else if (prefix1[PREFIX_WEIGHT] < prefix2[PREFIX_WEIGHT])
return 1

return 0
}
#else
public SortPrefixesByWeight(Array:array, item1, item2){
new prefix1[prefixDataStruct],prefix2[prefixDataStruct]

ArrayGetArray(array,item1,prefix1)
ArrayGetArray(array,item2,prefix2)

if(prefix1[PREFIX_WEIGHT] > prefix2[PREFIX_WEIGHT])
return -1
else if (prefix1[PREFIX_WEIGHT] < prefix2[PREFIX_WEIGHT])
return 1

return 0
}
#endif

public MsgHook_SayText(msgId,msgDest,reciever){
if(msgDest != MSG_ONE)
return PLUGIN_CONTINUE

new id = get_msg_arg_int(1)

if( !(0 < id <= g_maxplayers) )
return PLUGIN_CONTINUE

static formatedMsg[191],chatHead[191],contentMsg[191]
static msgLastId,Float:msgLastTime

if(msgLastId == id && msgLastTime == get_gametime()){
set_msg_arg_string(2,formatedMsg)
set_msg_arg_string(4,contentMsg)

return PLUGIN_CONTINUE
}

new len,bool:isTeamMsg
get_msg_arg_string(2,chatHead,190) // указатель
get_msg_arg_string(4,contentMsg,190) // сообщение

if(teamMsgPointers)
isTeamMsg = TrieGetCell(teamMsgPointers,chatHead,isTeamMsg)

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)

if(((contentMsg[contentLen - 1] & 0xFF) >= 0xC2) && ((contentMsg[contentLen - 1] & 0xFF) <= 0xEF)) // Don't truncate a double-byte character
contentLen--

contentMsg[contentLen] = 0

set_msg_arg_string(4,contentMsg)
}

set_msg_arg_string(2,formatedMsg)

msgLastId = id
msgLastTime = get_gametime()

return PLUGIN_CONTINUE
}

/*
* функция форматирования сообщения с префиксом
*/
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(!prefixInfo[PREFIX_FORMAT] && fmtPrefixes >= prefixMax)
continue

if(skipArray && check_prefix_for_skip(skipArray,prefixInfo[PREFIX_POS]))
continue

switch(prefixInfo[PREFIX_ID]){
#if defined USE_PREFIX_ACCESS
case PREFIX_ACCESS:
if(!(get_user_flags(id) & prefixInfo[PREFIX_DATA][0]))
continue
#endif

#if defined USE_PREFIX_TOP
case PREFIX_TOP:{
new st[8],rank = get_user_stats(id,st,st)

if(rank > prefixInfo[PREFIX_DATA][0])
continue

new rankStr[10]
num_to_str(rank,rankStr,9)

replace_all2(prefixInfo[PREFIX_NAME],127,"#rank#",rankStr)
}
#endif

#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)

replace_all2(prefixInfo[PREFIX_NAME],127,"#rank#",levelName)
}
#endif
}

if(prefixInfo[PREFIX_SKIP] != Invalid_Array)
skipArray = prefixInfo[PREFIX_SKIP]

// это простой префикс
if(!prefixInfo[PREFIX_FORMAT]){
if(prefixInfo[PREFIX_GROUP] == 1){
len += formatex(fmt[len],maxlen - len,"%s%s",fmtPrefixes ? " " : "",prefixInfo[PREFIX_NAME])

if(!prefixInfo[PREFIX_UNCOUNT])
fmtPrefixes ++
else if(!fmtPrefixes)
len += formatex(fmt[len],maxlen - len," ")
}else{
if(prefixByGroup == Invalid_Trie)
prefixByGroup = TrieCreate()

new groupKey[14],groupText[191],groupLen
formatex(groupKey,13,"#prefix%d#",prefixInfo[PREFIX_GROUP])

TrieGetString(prefixByGroup,groupKey,groupText,190)
groupLen = strlen(groupText)

formatex(groupText[groupLen],190 - groupLen,"%s%s",groupLen ? " " : "",prefixInfo[PREFIX_NAME])

TrieSetString(prefixByGroup,groupKey,groupText)

prefixGroup = true
}
}else if(!msgFormer[0]) // это режим форматирования вида сообщения
copy(msgFormer,127,prefixInfo[PREFIX_NAME])

arrayset(prefixInfo,0,prefixDataStruct)
}

if(fmtPrefixes)
len += formatex(fmt[len],maxlen - len," ")

// форматирование сообщения
if(msgFormer[0]){
replace_all2(msgFormer,127,"#prefix#",fmt) // заменяем на префиксы

if(prefixGroup){ // груповой префикс
new w,l,r = 0
new raw[14],groupText[191]
new fmted

do {
w = contain(msgFormer[l],"#prefix")

if(w == -1)
break

l += w + 7
r = contain(msgFormer[l],"#") + l

if(r - l <= 0)
continue

formatex(raw,r - l,msgFormer[l])
formatex(raw,13,"#prefix%d#",str_to_num(raw))

if(!TrieGetString(prefixByGroup,raw,groupText,190)){
replace(msgFormer,127,raw,"")

l -= strlen(raw) - 2
}else{
formatex(groupText,190,"%s%s",fmted ? " " : "",groupText)
replace_all2(msgFormer,127,raw,groupText)

l += strlen(groupText) - strlen(raw)

fmted ++
}
} while(l != -1)

TrieClear(prefixByGroup)
}

// тег команды для чата
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)

replace_all2(msgFormer,127,"#team#",teamTag)
}else
replace_all2(msgFormer,127,"#team#","")
}

// тег убитого
if(contain(msgFormer,"#dead#") != -1){
if(!is_user_alive(id)){
new deadTag[30]
formatex(deadTag,29,"%L",LANG_SERVER,get_user_team(id) != 0 ? "CHAT_DEAD" : "CHAT_DEAD0")

replace_all2(msgFormer,127,"#dead#",deadTag)
}else
replace_all2(msgFormer,127,"#dead#","")
}

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;

if ((pos = contain(string, what)) == -1)
{
return 0;
}

new total = 0;
new with_len = strlen(with);
new diff = strlen(what) - with_len;
new total_len = strlen(string);
new temp_pos = 0;

while (total_len + with_len < len && replace(string[pos], len - pos, what, with) != 0)
{
total++;

/* jump to position after replacement */
pos += with_len;

/* update cached length of string */
total_len -= diff;

/* will the next call be operating on the last character? */
if (pos >= total_len)
{
break;
}

/* find the next position from our offset */
temp_pos = contain(string[pos], what);

/* if it's invalid, we're done */
if (temp_pos == -1)
{
break;
}

/* otherwise, reposition and update counters */
pos += temp_pos;
}

return total;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 9art
сообщение 22.5.2014, 21:10
Сообщение #52


Стаж: 12 лет

Сообщений: 991
Благодарностей: 534
Полезность: 843

firante,
Код
[en]
CHAT_DEAD = (!gDEAD!t)
CHAT_DEAD0 = (!gSPEC!t)
CHAT_TEAM1 = (!gTerrorist!t)
CHAT_TEAM2 = (!gCounter-Terrorist!t)
CHAT_TEAM0 = (!gSpectator!t)


Отредактировал: 9art, - 22.5.2014, 21:10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 22.5.2014, 21:12
Сообщение #53


Стаж: 12 лет

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

9art,
А у меня что? )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 9art
сообщение 22.5.2014, 21:16
Сообщение #54


Стаж: 12 лет

Сообщений: 991
Благодарностей: 534
Полезность: 843

firante, сравни
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 22.5.2014, 21:21
Сообщение #55


Стаж: 12 лет

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

9art,
Ты цвета поменял и всё )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 22.5.2014, 21:23
Сообщение #56
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

  • !g = ^4
  • !t = ^3
  • !n = ^1


Отредактировал: serfreeman1337, - 22.5.2014, 21:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 9art
сообщение 22.5.2014, 21:26
Сообщение #57


Стаж: 12 лет

Сообщений: 991
Благодарностей: 534
Полезность: 843

firante, Сорри не прочитал хайд.
Это делается в конфиге. Например: "^3[^4Админ^3]^1" цвета ^1, ^3, ^4.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя firante
сообщение 22.5.2014, 21:31
Сообщение #58


Стаж: 12 лет

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

9art,
В конфиге нет тегов spec dead CT TT )

serfreeman1337,
Помоги пожалуйста сделать вроде правильно прописал хз почему не получилось

Отредактировал: firante, - 22.5.2014, 21:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TJhack
сообщение 23.5.2014, 10:24
Сообщение #59
Стаж: 12 лет

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

serfreeman1337,
Не показывает префикс [Steam]
ini
Код
; Prefix Manager by serfreeman1337 | [url="http://c-s.net.ua/url?u=http%3A%2F%2Fgf.hldm.org%2F"]http://gf.hldm.org/[/url]
; Файл конфигурации версии 0.1
;
; структура:
;    "<тип префикса>" "<параметры для префикса>" "<режим форматирования>" "<текст префикса>" "<вес префикса>" "<пропуск префиксов>" "<учитывать или нет префикс для квара>" "<группа префиксов>"
;
; доступные варианты префиксов (может варьироваться в зависимости от компиляции):
;    all - префикс для всех
;    access - префикс по флагам, в параметрах нужно указать флаги
;    steamid - префикс для steamid, в параметрах указывается steamid
;    top - префикс для топ игроков, в параметрах указывается позиция топа
;        в тексте префикса можно указать #rank# для вывода позиции игрока в префикс
;    dproto - префикс по клиенту игрока, в параметрах указывается значение dproto
;    aes - вания из плагина Advanced Experience System
;        в тексте нужно указать #rank# для вывода звания
;
; режим форматирования
;    prefix - просто добавление префикса в начало сообщения
;    format - режим полного форматирования сообщения
;        %s1 - имя игрока
;        %s2 - его сообщение
;        #prefix# - префиксы
;        #team# - тег команды, если есть
;        #dead# - тег убитого
; текст префикса
;    сюда пишется текст самого префикса, а также отсюда задаются параметры форматирования сообщений
;    возможно использования цветовых кодов:
;        ^1 - обычный
;        ^3 - цвет команды
;        ^4 - зеленый
; вес префикса
;    определяет очередь вывода префиксов
;
; пропуск префиксов
;    через запятую прописываются номера префиксов по их порядку в этом файле, которые не будут выведены вместе с этим префиксом
;    допустим, у нас есть 3 перфикса, которые могут вывестись одновременно и вы хотите чтобы какой-то из них не выводился
;        пример, на флаг d у нас префикс "[АДМИН]"; на флаг s префикс "[АДМИН ДЕВУШКА]"; на флаг t префикс "[VIP]":
;            "access" "d" "prefix" "[АДМИН]" "10"
;            "access" "s" "prefix" "[АДМИН ДЕВУШКА]" "10"
;            "access" "t" "prefix" "[VIP]" "5"
;
;        у игрока есть флаги dst и нужно вывести только префикс "[АДМИН ДЕВУШКА]"
;        для это нужно задать более высокий вес этому префиксу, т.к. свойства префиксов приминяются последовательно
;         и записать в наш 6ой параметр номера этих префиксов:
;            "access" "s" "prefix" "[АДМИН ДЕВУШКА]" "15" "1,3"
;    таким образом выведится только префикс "[АДМИН ДЕВУШКА]"
;
; неучет префикса для pm_max_count
;    укажите 1 если вы не хотите учитывать этот префикс для общего кол-ва префиксов
;    полезно для вывода приставки звания AES или STEAM префикса
;
; группа префикса
;    указывается группа для этого префикса, стандартная группа - 1
;    с помощью групп можно вывести несколько префиксов в разных местах сообщения
;    префиксы из группы можно вывести только в режиме format, выводится они через указание #prefix<номер группы>#
;    для префиксов группы не идет учет общего кол-ва префиксов
;    ЭКСПЕРЕМЕНТАЛЬНАЯ ФУНКЦИЯ.
;

; приставка с отображение ранга у топ 10 игроков
;"top" "10" "prefix" "^1[^3TOP-^4#rank#^1]" "1000"

"aes" "" "prefix" "^4[^3#rank#^4]" "15" "" "1"

; приставка [ДНО] для настоящего дна, которое не знает что есть нормальная сборка
;"dproto" "1" "prefix" "^1[^4ДНО^1]" "500"

; приставка [1337] для игрока со SteamID STEAM_0:1:25876755
;"steamid" "STEAM_0:1:25876755" "prefix" "^4[1337]^1" "200"

;"steamid" "STEAM_0:0:47256284" "prefix" "^3[^4Главный Админ^3]^1" "200"

; приставка [ADMIN] для игрока с флагом a
"access" "d" "prefix" "^4[^3ADMIN^4]" "10" "6"

; приставка [Админ Девушка] для игрока с флагом s
;"access" "s" "prefix" "^3[^4Админ Девушка^3]^1" "151" "4,6"

; приставка [Девушка] для игрока с флагом d
;"access" "t" "prefix" "^3[^4Девушка^3]^1" "20" "7"

; приставка [VIP] для игрока с флагом t
"access" "t" "prefix" "^4[^3VIP^4]^1" "10"

; приставка [STEAM] для Steam игрока
"dproto" "2" "prefix" "^4[^3STEAM^4]" "5"

; сделаем зеленый цвет cообщения от Steam игрока
;"access" "a" "format" "#prefix2##prefix4##prefix1# ^3%s1^1 :  ^4%s2^1 " "10"

; сделаем зеленый цвет cообщения от Steam игрока
"dproto" "2" "format" "#prefix##dead##team# ^3%s1^1 :  ^4%s2^1" "10"

sma
Код:
/*
* Prefix Manager v. 0.1
* by serfreeman1337 http://gf.hldm.org/
*/

#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

#if defined USE_PREFIX_AES
PREFIX_AES,
#endif

PREFIX_END
}

new prefixWayId[prfx][] = {
"all",

#if defined USE_PREFIX_ACCESS
"access",
#endif

#if defined USE_PREFIX_TOP
"top",
#endif

#if defined USE_PREFIX_STEAMID
"steamid",
#endif

#if defined USE_PREFIX_DPROTO
"dproto",
#endif

#if defined USE_PREFIX_AES
"aes",
#endif

""
}

enum _:prefixDataStruct {
PREFIX_ID,
PREFIX_POS,
PREFIX_DATA[128],
bool:PREFIX_FORMAT,
PREFIX_NAME[128],
PREFIX_WEIGHT,
PREFIX_GROUP,
Array:PREFIX_SKIP,
bool:PREFIX_UNCOUNT
}

new Array:prefixes
new prefixCount

new g_maxplayers

new teamMsgString[][] = {
"#Cstrike_Chat_CT",
"#Cstrike_Chat_T",
"#Cstrike_Chat_CT_Dead",
"#Cstrike_Chat_T_Dead",
"#Cstrike_Chat_Spec"
}

new Trie:teamMsgPointers

#if defined USE_PREFIX_STEAMID
new steamIdPrefix[33]

new Trie:prefixForId
#endif

#if defined USE_PREFIX_DPROTO
new pDprotoProvider

new playerClient[33]
#endif

new prefixMax

public plugin_init(){
register_plugin(PLUGIN,VERSION,AUTHOR)

// Максимальное кол-во префиксов
cvar[CVAR_MAX_PREFIXES] = register_cvar("pm_max_count","1")
}

/*
* загрузка конфигурации
*/
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

// читаем содержимое файла
while(!feof(f)){
fgets(f,buf,511)
trim(buf)

// пропускаем пустые строки и комментарии
if(!buf[0] || buf[0] == ';')
continue

// очищаем предыдущий результат
tmpWay[0] = 0 // указатель префикса
tmpData[0] = 0 // доп. информация для префикса
tmpFormat[0] = 0 // тип модифакции сообщений префиксом
tmpName[0] = 0 // название этого префикса
tmpSkip[0] = 0 // пропуск префиксов
tmpUncount[0] = 0 // не считать данный префикс
tmpGroup[0] = 0 // группа префикса
datPrefixId = -1 // ID префикса

parse(buf,tmpWay,19,tmpData,127,tmpFormat,9,tmpName,127,tmpWeight,9,tmpSkip,19,t
mpUncount,1,tmpGroup,9)

// проверяем наличие признака префикса
for(new i ; i < prfx - 1 ; ++i){
if(strcmp(tmpWay,prefixWayId[i]) != 0)
continue

datPrefixId = i // нашли ID префикса
}

// префикс не найден, пероходим к следующей строке
if(datPrefixId == -1)
continue

arrayset(prefixInfo,0,prefixDataStruct)

// задаем параметры префикса
prefixInfo[PREFIX_ID] = datPrefixId // ID префикса
prefixInfo[PREFIX_POS] = prefixNum++
prefixInfo[PREFIX_FORMAT] = strcmp(tmpFormat,"prefix") == 0 ? false : true // форматирование чата или просто добавление префикса
prefixInfo[PREFIX_WEIGHT] = str_to_num(tmpWeight) // вес
prefixInfo[PREFIX_GROUP] = tmpGroup[0] ? str_to_num(tmpGroup) : 1
prefixInfo[PREFIX_UNCOUNT] = str_to_num(tmpUncount)

// строим массив с префиксами для пропуска
if(tmpSkip[0]){
new stPos,ePos,rawPoint[20]

prefixInfo[PREFIX_SKIP] = _:ArrayCreate(1,1)

do {
ePos = strfind(tmpSkip[stPos],",")

formatex(rawPoint,ePos,tmpSkip[stPos])
ArrayPushCell(prefixInfo[PREFIX_SKIP] ,str_to_num(rawPoint))

stPos += ePos + 1
} while (ePos != -1)
}

replace_all2(tmpName,127,"^^1","^1")
replace_all2(tmpName,127,"^^2","^2")
replace_all2(tmpName,127,"^^3","^3")
replace_all2(tmpName,127,"^^4","^4")
replace_all2(tmpName,127,"%","%%")

// доп. обработка согласно префиксам
switch(datPrefixId){
case PREFIX_ALL: {
}

#if defined USE_PREFIX_ACCESS
case PREFIX_ACCESS:
prefixInfo[PREFIX_DATA][0] = read_flags(tmpData) // считаем бит сумму флагов
#endif

#if defined USE_PREFIX_TOP
case PREFIX_TOP:
prefixInfo[PREFIX_DATA][0] = str_to_num(tmpData)
#endif

#if defined USE_PREFIX_STEAMID
case PREFIX_STEAMID:{
if(prefixForId == Invalid_Trie)
prefixForId = TrieCreate()

prefixInfo[PREFIX_DATA][0] = prefixCount
TrieSetCell(prefixForId,tmpData,prefixCount)
}
#endif

#if defined USE_PREFIX_DPROTO
case PREFIX_DPROTO:
prefixInfo[PREFIX_DATA][0] = str_to_num(tmpData)
#endif

#if defined USE_PREFIX_AES
case PREFIX_AES:{}
#endif

default: continue
}

if(prefixInfo[PREFIX_FORMAT] && contain(tmpName,"#team#") != -1)
isTeamFormat = true

copy(prefixInfo[PREFIX_NAME],127,tmpName)
ArrayPushArray(prefixes,prefixInfo)

prefixCount ++
}

fclose(f)

if(!prefixCount)
return PLUGIN_CONTINUE

// сортировка префиксов по весу

#if AMXX_VERSION_NUM < 183
ArraySort(prefixes,"SortPrefixesByWeight")
#else
ArraySortEx(prefixes,"SortPrefixesByWeight")
#endif

if(isTeamFormat){
teamMsgPointers = TrieCreate()

for(new i ; i < sizeof teamMsgString ; ++i)
TrieSetCell(teamMsgPointers,teamMsgString[i],1)
}

#if defined USE_PREFIX_DPROTO
pDprotoProvider = get_cvar_pointer( "dp_r_id_provider" ) // dproto interface
#endif

g_maxplayers = get_maxplayers()
prefixMax = get_pcvar_num(cvar[CVAR_MAX_PREFIXES])

register_message(get_user_msgid("SayText"),"MsgHook_SayText")
register_dictionary("prefixManager.txt")

return PLUGIN_CONTINUE
}

public client_putinserver(id){
#if defined USE_PREFIX_STEAMID
new authId[36]
get_user_authid(id,authId,35)

if(prefixForId == Invalid_Trie || !TrieGetCell(prefixForId,authId,steamIdPrefix[id]))
steamIdPrefix[id] = -1
#endif

#if defined USE_PREFIX_DPROTO
if(!pDprotoProvider){
playerClient[id] = 0
}else if( is_user_bot(id) || is_user_hltv(id) )
playerClient[id] = 0
else {
server_cmd( "dp_clientinfo %d", id )
server_exec()

playerClient[id] = get_pcvar_num(pDprotoProvider)
}
#endif
}

#if AMXX_VERSION_NUM >= 183
public SortPrefixesByWeight(Array:array, prefix1[], prefix2[]){
if(prefix1[PREFIX_WEIGHT] > prefix2[PREFIX_WEIGHT])
return -1
else if (prefix1[PREFIX_WEIGHT] < prefix2[PREFIX_WEIGHT])
return 1

return 0
}
#else
public SortPrefixesByWeight(Array:array, item1, item2){
new prefix1[prefixDataStruct],prefix2[prefixDataStruct]

ArrayGetArray(array,item1,prefix1)
ArrayGetArray(array,item2,prefix2)

if(prefix1[PREFIX_WEIGHT] > prefix2[PREFIX_WEIGHT])
return -1
else if (prefix1[PREFIX_WEIGHT] < prefix2[PREFIX_WEIGHT])
return 1

return 0
}
#endif

public MsgHook_SayText(msgId,msgDest,reciever){
if(msgDest != MSG_ONE)
return PLUGIN_CONTINUE

new id = get_msg_arg_int(1)

if( !(0 < id <= g_maxplayers) )
return PLUGIN_CONTINUE

static formatedMsg[191],chatHead[191],contentMsg[191]
static msgLastId,Float:msgLastTime

if(msgLastId == id && msgLastTime == get_gametime()){
set_msg_arg_string(2,formatedMsg)
set_msg_arg_string(4,contentMsg)

return PLUGIN_CONTINUE
}

new len,bool:isTeamMsg
get_msg_arg_string(2,chatHead,190) // указатель
get_msg_arg_string(4,contentMsg,190) // сообщение

if(teamMsgPointers)
isTeamMsg = TrieGetCell(teamMsgPointers,chatHead,isTeamMsg)

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)

if(((contentMsg[contentLen - 1] & 0xFF) >= 0xC2) && ((contentMsg[contentLen - 1] & 0xFF) <= 0xEF)) // Don't truncate a double-byte character
contentLen--

contentMsg[contentLen] = 0

set_msg_arg_string(4,contentMsg)
}

set_msg_arg_string(2,formatedMsg)

msgLastId = id
msgLastTime = get_gametime()

return PLUGIN_CONTINUE
}

/*
* функция форматирования сообщения с префиксом
*/
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(!prefixInfo[PREFIX_FORMAT] && fmtPrefixes >= prefixMax)
continue

if(skipArray && check_prefix_for_skip(skipArray,prefixInfo[PREFIX_POS]))
continue

switch(prefixInfo[PREFIX_ID]){
#if defined USE_PREFIX_ACCESS
case PREFIX_ACCESS:
if(!(get_user_flags(id) & prefixInfo[PREFIX_DATA][0]))
continue
#endif

#if defined USE_PREFIX_TOP
case PREFIX_TOP:{
new st[8],rank = get_user_stats(id,st,st)

if(rank > prefixInfo[PREFIX_DATA][0])
continue

new rankStr[10]
num_to_str(rank,rankStr,9)

replace_all2(prefixInfo[PREFIX_NAME],127,"#rank#",rankStr)
}
#endif

#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)

replace_all2(prefixInfo[PREFIX_NAME],127,"#rank#",levelName)
}
#endif
}

if(prefixInfo[PREFIX_SKIP] != Invalid_Array)
skipArray = prefixInfo[PREFIX_SKIP]

// это простой префикс
if(!prefixInfo[PREFIX_FORMAT]){
if(prefixInfo[PREFIX_GROUP] == 1){
len += formatex(fmt[len],maxlen - len,"%s%s",fmtPrefixes ? " " : "",prefixInfo[PREFIX_NAME])

if(!prefixInfo[PREFIX_UNCOUNT])
fmtPrefixes ++
else if(!fmtPrefixes)
len += formatex(fmt[len],maxlen - len," ")
}else{
if(prefixByGroup == Invalid_Trie)
prefixByGroup = TrieCreate()

new groupKey[14],groupText[191],groupLen
formatex(groupKey,13,"#prefix%d#",prefixInfo[PREFIX_GROUP])

TrieGetString(prefixByGroup,groupKey,groupText,190)
groupLen = strlen(groupText)

formatex(groupText[groupLen],190 - groupLen,"%s%s",groupLen ? " " : "",prefixInfo[PREFIX_NAME])

TrieSetString(prefixByGroup,groupKey,groupText)

prefixGroup = true
}
}else if(!msgFormer[0]) // это режим форматирования вида сообщения
copy(msgFormer,127,prefixInfo[PREFIX_NAME])

arrayset(prefixInfo,0,prefixDataStruct)
}

if(fmtPrefixes)
len += formatex(fmt[len],maxlen - len," ")

// форматирование сообщения
if(msgFormer[0]){
replace_all2(msgFormer,127,"#prefix#",fmt) // заменяем на префиксы

if(prefixGroup){ // груповой префикс
new w,l,r = 0
new raw[14],groupText[191]
new fmted

do {
w = contain(msgFormer[l],"#prefix")

if(w == -1)
break

l += w + 7
r = contain(msgFormer[l],"#") + l

if(r - l <= 0)
continue

formatex(raw,r - l,msgFormer[l])
formatex(raw,13,"#prefix%d#",str_to_num(raw))

if(!TrieGetString(prefixByGroup,raw,groupText,190)){
replace(msgFormer,127,raw,"")

l -= strlen(raw) - 2
}else{
formatex(groupText,190,"%s%s",fmted ? " " : "",groupText)
replace_all2(msgFormer,127,raw,groupText)

l += strlen(groupText) - strlen(raw)

fmted ++
}
} while(l != -1)

TrieClear(prefixByGroup)
}

// тег команды для чата
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)

replace_all2(msgFormer,127,"#team#",teamTag)
}else
replace_all2(msgFormer,127,"#team#","")
}

// тег убитого
if(contain(msgFormer,"#dead#") != -1){
if(!is_user_alive(id)){
new deadTag[30]
formatex(deadTag,29,"%L",LANG_SERVER,get_user_team(id) != 0 ? "CHAT_DEAD" : "CHAT_DEAD0")

replace_all2(msgFormer,127,"#dead#",deadTag)
}else
replace_all2(msgFormer,127,"#dead#","")
}

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;

if ((pos = contain(string, what)) == -1)
{
return 0;
}

new total = 0;
new with_len = strlen(with);
new diff = strlen(what) - with_len;
new total_len = strlen(string);
new temp_pos = 0;

while (total_len + with_len < len && replace(string[pos], len - pos, what, with) != 0)
{
total++;

/* jump to position after replacement */
pos += with_len;

/* update cached length of string */
total_len -= diff;

/* will the next call be operating on the last character? */
if (pos >= total_len)
{
break;
}

/* find the next position from our offset */
temp_pos = contain(string[pos], what);

/* if it's invalid, we're done */
if (temp_pos == -1)
{
break;
}

/* otherwise, reposition and update counters */
pos += temp_pos;
}

return total;
}

C правами админа не выводит префикс STEAM

Простой Юзер выводит префикс STEAM


Отредактировал: TJhack, - 23.5.2014, 10:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 23.5.2014, 10:33
Сообщение #60
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Думай. Подсказка: pm_max_count, вес префикса, не учет префикса.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
6 страниц V  « 2 3 4 5 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: