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

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

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

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

Chat for me =D

Статус пользователя DumoH4uk
сообщение 7.8.2014, 19:28
Сообщение #1


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Здравствуйте! thank_you2.gif

Делаю чат для себя (своего сервера)
Вот что у меня вышло:

Код
Код:
public Chatter(id)
{
new len
new say_team[9]
new message[256]
new formessage[256]
new messagetag[64]

read_args(message, charsmax(message))
remove_quotes(message)

replace_all(message, charsmax(message), "%", "")

if(equal(message, "") || message[0] == '/')
return PLUGIN_HANDLED;

for(new j; j < charsmax(EngTranslit); j++)
replace_all(message, charsmax(message), EngTranslit[j], RusTranslit[j])

if(strlen(message) >= 190)
{
client_print(id, print_chat, "Dlinnoe message!")
return PLUGIN_HANDLED;
}

get_user_name(id, g_Data[id][NAME], 32)

read_argv(0, say_team, charsmax(say_team))

if(ACCESS_ADMIN(id))
formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_ADMIN")
else
if(ACCESS_VIP(id))
formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_VIP")
else
if(ACCESS_SECURITY(id))
formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_SECURITY")
else
formatex(messagetag, charsmax(messagetag), "%s", g_DataStat[g_Data[id][RANK]][RANKS])

if((equal(say_team, "say_team")))
{
formatex(g_Text, charsmax(g_Text), "GKM_TEAM_%i", cs_get_user_team(id))

if(is_user_alive(id))
len = format(formessage[len], charsmax(formessage) - 1, "^1[^3%L^1] ^1[^4%s^1]", 0, g_Text, messagetag)
else
len = format(formessage[len], charsmax(formessage) - 1, "^3*^1[^3%L^1]^3* ^1[^4%s^1]", 0, g_Text, messagetag)

len += format(formessage[len], charsmax(formessage) - 1, " ^3%s ^1: ", g_Data[id][NAME])
len += format(formessage[len], charsmax(formessage) - 1, "%s", message)

get_players(Players, Num, "ch")

for(new i; i < Num; i++)
{
Player = Players[i]

if(!is_user_connected(Player) || cs_get_user_team(id) != cs_get_user_team(Player))
continue;

ColorText(Player, TEAM + id, formessage)
}
}else{
if(is_user_alive(id))
len = format(formessage[len], charsmax(formessage) - 1, "^1[^4%s^1]", messagetag)
else
len = format(formessage[len], charsmax(formessage) - 1, "^3*^1[^4%s^1]^3*", messagetag)

len += format(formessage[len], charsmax(formessage) - 1, " ^3%s ^1: ", g_Data[id][NAME])
len += format(formessage[len], charsmax(formessage) - 1, "%s", message)

ColorText(0, TEAM + id, formessage)
}
return PLUGIN_HANDLED;
}


Меня в нем волнуют такие моменты:

Код:
if(ACCESS_ADMIN(id))
formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_ADMIN")
else
if(ACCESS_VIP(id))
formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_VIP")
else
if(ACCESS_SECURITY(id))
formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_SECURITY")
else
formatex(messagetag, charsmax(messagetag), "%s", g_DataStat[g_Data[id][RANK]][RANKS])


Может можно сделать как-то проще ибо вообще иначе?

Код:
get_players(Players, Num, "ch")

for(new i; i < Num; i++)
{
Player = Players[i]

if(!is_user_connected(Player) || cs_get_user_team(id) != cs_get_user_team(Player))
continue;

ColorText(Player, TEAM + id, formessage)
}


Правильно ли я отправляю сообщения своей команде?

Подскажите мои косяки blush2.gif
Может вообще весь код отстойный psych.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 9.8.2014, 21:16
Сообщение #2
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

DumoH4uk,
зачем такая путанина с проверками?
делайте проще....

Код
get_players(Players, Num, "ch")

for(new i = 0; i < Num; i++)
{
         if(is_user_connected(Players[i]) || cs_get_user_team(id) == cs_get_user_team(Players[i]))
                ColorText(Player, TEAM + id, formessage);
}


смысл будет одинаковый, но если сделать так весь код, то объем кода будет куда меньше, и понятней при первом открытие...

Цитата
Меня в нем волнуют такие моменты

ну и пусть, изменить нельзя.
можно вручную указать объем массива.... и т.д.
но последовательность менять нельзя.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя DumoH4uk
сообщение 9.8.2014, 22:23
Сообщение #3


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Цитата(Orty_Hart @ 9.8.2014, 23:16) *
DumoH4uk,
зачем такая путанина с проверками?
делайте проще....

Код
get_players(Players, Num, "ch")

for(new i = 0; i < Num; i++)
{
         if(is_user_connected(Players[i]) || cs_get_user_team(id) == cs_get_user_team(Players[i]))
                ColorText(Player, TEAM + id, formessage);
}


смысл будет одинаковый, но если сделать так весь код, то объем кода будет куда меньше, и понятней при первом открытие...


ну и пусть, изменить нельзя.
можно вручную указать объем массива.... и т.д.
но последовательность менять нельзя.


То есть мой код не такой уж и отстойный? Его можно использовать? =D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 9.8.2014, 22:26
Сообщение #4
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

DumoH4uk,
ну а почему нет? работает хорошо? используйте и не придумывайте...)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя DumoH4uk
сообщение 9.8.2014, 22:31
Сообщение #5


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Цитата(Orty_Hart @ 10.8.2014, 0:26) *
DumoH4uk,
ну а почему нет? работает хорошо? используйте и не придумывайте...)


Да, все работает как надо pardon.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DumoH4uk
сообщение 12.8.2014, 11:33
Сообщение #6


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Ы, второй день туплю psych.gif

Вот, что вышло у меня:

Скрытый текст
Код:
public Chatter(id)
{
new len
new say_team[9]
new message[256]
new formessage[256]
new messagetag[64]

read_args(message, charsmax(message))
remove_quotes(message)

replace_all(message, charsmax(message), "%", "")
replace_all(message, charsmax(message), "#", "")

if(equal(message, "/rus"))
{
if(!g_RusTranslit[id])
{
ColorText(id, TEAM, "%L %L", id, "GKM_PREFIX", id, "GKM_CHAT_RUSINFO_ON")
g_RusTranslit[id] = true
return PLUGIN_HANDLED;
}else{
ColorText(id, TEAM, "%L %L", id, "GKM_PREFIX", id, "GKM_CHAT_RUSINFO")
return PLUGIN_HANDLED;
}
}

if(equal(message, "/eng"))
{
if(g_RusTranslit[id])
{
ColorText(id, TEAM, "%L %L", id, "GKM_PREFIX", id, "GKM_CHAT_ENGINFO_ON")
g_RusTranslit[id] = false
return PLUGIN_HANDLED;
}else{
ColorText(id, TEAM, "%L %L", id, "GKM_PREFIX", id, "GKM_CHAT_ENGINFO")
return PLUGIN_HANDLED;
}
}

if(g_RusTranslit[id])
for(new j; j < charsmax(EngTranslit); j++)
replace_all(message, charsmax(message), EngTranslit[j], RusTranslit[j])

for(new x; x < charsmax(Censored); x++)
replace_all(message, charsmax(message), Censored[x], PreventCensored[x])

if(equal(message, "") || message[0] == '/')
return PLUGIN_HANDLED;

if(strlen(message) >= 190)
{
ColorText(id, RED, "%L %L", id, "GKM_PREFIX", id, "GKM_CHAT_LENINFO")
return PLUGIN_HANDLED;
}

if(ACCESS_ADMIN(id)) formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_ADMIN")
else
if(ACCESS_VIP(id)) formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_VIP")
else
if(ACCESS_SECURITY(id)) formatex(messagetag, charsmax(messagetag), "%L", id, "GKM_TAG_SECURITY")
else
if(g_PrefixSet[id]) formatex(messagetag, charsmax(messagetag), "%s", g_Prefix[id][1])
else
formatex(messagetag, charsmax(messagetag), "%s", g_DataStat[g_Data[id][RANK]][RANKS])

get_user_name(id, g_Data[id][NAME], 32)
read_argv(0, say_team, charsmax(say_team))

if((equal(say_team, "say_team")))
{
formatex(g_Text, charsmax(g_Text), "GKM_TEAM_%i", cs_get_user_team(id))

if(is_user_alive(id))
len = format(formessage[len], charsmax(formessage) - 1, "^1[^3%L^1]", 0, g_Text)
else
len = format(formessage[len], charsmax(formessage) - 1, "^4*^1[^3%L^1]^4*", 0, g_Text)

len += format(formessage[len], charsmax(formessage) - 1, " ^3%s ^1: ", g_Data[id][NAME])
len += format(formessage[len], charsmax(formessage) - 1, "%s", message)

get_players(Players, Num, "ch")

for(new i; i < Num; i++)
{
if(is_user_connected(Players[i]) && cs_get_user_team(id) == cs_get_user_team(Players[i]))
ColorText(Players[i], TEAM + id, formessage)
}
}else{
if(is_user_alive(id))
len = format(formessage[len], charsmax(formessage) - 1, "^1[^4%s^1]", messagetag)
else
len = format(formessage[len], charsmax(formessage) - 1, "^4*^1[^4%s^1]^4*", messagetag)

len += format(formessage[len], charsmax(formessage) - 1, " ^3%s ^1: ", g_Data[id][NAME])
len += format(formessage[len], charsmax(formessage) - 1, "%s", message)

ColorText(0, TEAM + id, formessage)
}
return PLUGIN_HANDLED;
}


Сделал транслит -> почему бы не сделать анти-мат.
Сделал по аналогии с транслитом, но, когда я пишу на русском, то происходит следующая ситуация:
Написал "Хрен" и мне его заменило на "СасайАзазаSasai", то есть заменяет на 3-2 слова из списка.

Список
Цитата
"Хрен" "Сасай"
"Жопа" "Азаза"
"Hren" "Sasai"
"Jopa" "azaza"


Какой-то конфликт межу русс.чатом и анти-матом... Пытался другими способами сделать замену символов, но чет не выходит pardon.gif

Psss, размеры массивов нормальны?

Цитата
new EngTranslit[128][10]
new RusTranslit[128][10]

new Censored[128][10]
new PreventCensored[128][10]
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 12.8.2014, 11:39
Сообщение #7
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

чат - [191]


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DumoH4uk
сообщение 12.8.2014, 11:44
Сообщение #8


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Цитата(csnet @ 12.8.2014, 13:39) *
чат - [191]


Если делать такой размер массива, то if(strlen(message) >= 190) - не срабатывает =\
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DumoH4uk
сообщение 12.8.2014, 21:09
Сообщение #9


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Код:
for(new x; read_file(g_LoadCensored, x, ParseCensored, charsmax(ParseCensored), Num); x++) 
{
if(Num > 0 && ParseCensored[0] != ';')
{
parse(ParseCensored, Censored, charsmax(Censored), PreventCensored, charsmax(PreventCensored))
while(replace(message, charsmax(message), Censored, PreventCensored)) {}
}
}


Я бед-бой dirol.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DumoH4uk
сообщение 16.9.2014, 17:21
Сообщение #10


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Ребята, помогите с функцией containi.

По идее эта функция сравнивает текст в строчке НЕЗАВИСИМО от регистра, то есть: Hren, HREN, hren. hRen и т.д. должно отлавливать, но у меня не получается, отлавливает только "Hren" т.к. только это прописано в мат-листе.

Код:
for(new x; read_file(g_LoadCensored, x, ParseCensored, charsmax(ParseCensored), iNum); x++)
{
if(iNum > 0 && ParseCensored[0] != ';')
{
parse(ParseCensored, Censored, charsmax(Censored))

if(containi(message, Censored) != -1)
{
formatex(g_Text, charsmax(g_Text), "%L", id, "GKM_CHAT_ANTIMAT")
replace_all(message, charsmax(message), Censored, g_Text)
}
}
}


Или я как-то не правильно эту функцию понял?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 16.9.2014, 17:27
Сообщение #11


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

if(containi(message, Censored) != -1)

может местами поменять?
if(containi(Censored ,message) != -1)
хз что у тебя хранит Censored, а что message
думаю что и в чем именно ищешь

а еще проще плагин античата глянь и посмотри как там сделано...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DumoH4uk
сообщение 16.9.2014, 17:45
Сообщение #12


Стаж: 14 лет

Сообщений: 188
Благодарностей: 81
Полезность: 122

Цитата(Legenda @ 16.9.2014, 19:27) *
if(containi(message, Censored) != -1)

может местами поменять?
if(containi(Censored ,message) != -1)
хз что у тебя хранит Censored, а что message
думаю что и в чем именно ищешь

а еще проще плагин античата глянь и посмотри как там сделано...


message - строка в которой производится поиск
Censored - слова для поиска (берутся из ini файла)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 16.9.2014, 17:46
Сообщение #13


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

ой...
антимата
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: