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

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

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

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

3 страниц V   1 2 »

amx_ips под русские ники

, нужно адаптировать плагин под русские ники
strikerman
сообщение 10.3.2015, 12:46
Сообщение #1
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Проблема в связке новый дпрото + плагин amx_ips + русский ник.
На линукс серваке 5787 установлен плагин, который по amx_ips показывает окно - список ников игроков с их IP адресами.
После обновления дпрото до 0.9.534 на сервер начали заходить игроки с русскими никами.

Если на сервере игроки с английскими никами - то amx_ips каботает отлично.
Но если есть хотя бы 1 русский ник, то когда пишеш amx_ips сервер крашится!
Не знаю, дпрото криво передаёт плагину русские ники или сам плагин кривой?
Помогите адаптировать плагин и убрать краш сервера.

Код:

/* AMX Mod script.
*
*
* 1.74.1SL [2007/07/19] by Simon Logic
! now '<' & '>' symbols within player names display properly on MOTD
*/

#include <amxmod>
#include <amxmisc>
#include <geoip>

new strbuf[33][65]
new g_Buffer[2048]
new logfilename[256]

public admin_banip(id, level, cid) {
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new ban_time = 0
new arg[32]
new ip[16]
read_argv(1, arg, 31)
new player = find_player("d",arg)
if (!player) {
player = cmd_target(id,arg,1)
if (!player) return PLUGIN_HANDLED
get_user_ip(player,ip,15,1)
} else {
copy(ip, 15, arg)
}
new ban_times[13]
read_argv(2, ban_times, 12)
ban_time = str_to_num(ban_times)
if(!ban_time)
ban_time = 0
new authid[16], name[32]
get_user_authid(id,authid,15)
get_user_name(id,name,31)
log_to_file(logfilename,"^"%s<%d><%s><>^" ban ^"%s^" (minutes ^"%i^") (reason ^"^")", name,get_user_userid(id),authid, ip, ban_time)
new srvcmd[65]
format(srvcmd, 64, "addip %i %s", ban_time, ip)
if (ban_time == 0) {
server_cmd("addip 0 %s; writeip", ip)
} else {
server_cmd("addip %d %s", ban_time, ip)
}
return PLUGIN_HANDLED_MAIN

}

public admin_unbanip(id, level, cid) {
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new ip[16]
read_argv(1, ip, 15)
new authid[16], name[32]
get_user_authid(id,authid,15)
get_user_name(id,name,31)
log_to_file(logfilename,"^"%s<%d><%s><>^" unban ^"%s^" (reason ^"^")", name,get_user_userid(id),authid, ip)
server_cmd("removeip %s; writeip", ip)
return PLUGIN_HANDLED_MAIN

}

public admin_ips(id, level, cid) {
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
new players[32], name[64], buf[2048], ip[17]
// new country[3]
new i, inum, tmpip, j, pos
new tmpbuf[65]
new nip[33]
get_players(players, inum)
pos = format(g_Buffer, 2047, "<pre>%16s %-28.27s %6s^n", "nick", "IP address", "country")
for(i = 0; i < inum; i++) {
get_user_name(players[i], name, sizeof(name)-1)
if(contain(name, "<") >= 0)
replace(name, sizeof(name)-1, "<", "&lt;")
if(contain(name, ">") >= 0)
replace(name, sizeof(name)-1, ">", "&gt;");

get_user_ip(players[i], ip, 16, 1)
// geoip_code2(ip, country)
nip[i] = ip_to_number(ip)
// format(strbuf[i], 64,"%16s %-28.27s %6s^n", name, ip, country)
format(strbuf[i], 64,"%16s %-28.27s N/A^n", name, ip)
// format(strbuf[i], 64, "%s ... %s .. %s^n", name, ip, country)
}
for(i = 0; i < inum - 1; i++) {
for (j = i + 1; j < inum; j++) {
if (nip[j] < nip[i]) {
copy(tmpbuf, 64, strbuf[i])
tmpip = nip[i]
strbuf[i][0] = 0

copy(strbuf[i], 64, strbuf[j])
nip[i] = nip[j]
strbuf[j][0] = 0

copy(strbuf[j], 64, tmpbuf)
nip[j] = tmpip
tmpbuf[0] = 0
}
}
}

for(i = 0; i < inum; i++) {
pos += format(g_Buffer[pos], 2047 - pos, "%s", strbuf[i])
}
format(g_Buffer[pos],2047-pos,"</pre>")
if (id == 0) {
console_print(id, buf)
} else {
show_motd(id, g_Buffer, "Player's IP")
}
return PLUGIN_HANDLED_MAIN
}

public admin_ipl(id, level, cid) {
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
new buf[2049], ip[33], temp[65]
new len
if (file_exists("listip.cfg")) {
for(new i=0; i < 100 && read_file("listip.cfg", i, ip, 32, len) != 0; i += 1) {
read_file("listip.cfg", i, ip, 32, len)
format(temp, 32, "%s ^n", ip)
add(buf, 2048, temp)
}
}
show_motd(id, buf, "Banned IP")
return PLUGIN_HANDLED_MAIN
}

public plugin_init()
{
register_plugin("IPTools", "1.74.1SL", "SYZo")
register_concmd("amx_ips", "admin_ips", ADMIN_BAN)
register_clcmd("amx_ipl", "admin_ipl", ADMIN_BAN)
// register_concmd("amx_banip", "admin_banip", ADMIN_BAN, "<ip address | nick> [time]")
// register_concmd("amx_unbanip", "admin_unbanip", ADMIN_BAN,"<ip address>")
get_time("addons/amxx/logs/admin%m%d.log", logfilename, 255)
return PLUGIN_CONTINUE
}

ip_to_number(userip[17])
{
new ipb1[12]
new ipb2[12]
new ipb3[12]
new ipb4[12]
new ip
new nipb1
new nipb2
new nipb3
new nipb4
new uip[16]
copy(uip, 16, userip)
while(replace(uip, 16, ".", " ")){}
parse(uip, ipb1, 12, ipb2, 12, ipb3, 12, ipb4, 12)
nipb1 = strtonum(ipb1)
nipb2 = strtonum(ipb2)
nipb3 = strtonum(ipb3)
nipb4 = strtonum(ipb4)
ip = ((((nipb1 * 256) + nipb2) * 256) + nipb3) + ((((((nipb1 * 256) + nipb2) * 256) + nipb3) * 255) + nipb4)
return ip
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 10.3.2015, 12:48
Сообщение #2


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

dproto вообще никак не влияет на ники игроков
а вот Билд твой не поддерживает их
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 10.3.2015, 13:01
Сообщение #3
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Цитата(GOOD FELLOW @ 10.3.2015, 14:48) *
dproto вообще никак не влияет на ники игроков
а вот Билд твой не поддерживает их


Стоял дпрото 0.9.497 игроков с русскими никами на сервере не было.
Обновил дпрото до версии 0.9.534 русские ники на сервере появились.
В истории версий дпрото написано, что добавлена поддержка русских ников.

Вопрос что нужно пофиксить в плагине, чтобы он мог выводить русские ники и не крашить сервер.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 10.3.2015, 13:03
Сообщение #4


Стаж: 12 лет

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

GOOD FELLOW, влияет
Цитата
0.9.519:
-Additional checks and cleanup of setinfo fields on player connect.
-Process setinfo command arguments.
-Allow to use UTF8 nicks on older server builds (< 6xxx).
-Set console to UTF8 mode on Windows (TrueType font should be selected to be able to read UTF8 texts).
-Closed fullupdate backdoor.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 10.3.2015, 13:06
Сообщение #5


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

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Bloo, походу я пропустил это, когда читал
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 10.3.2015, 16:33
Сообщение #6
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Ребята, ну в своей неграмотности разобрались... но вопрос - как пофиксить плагин?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя JIuXeP
сообщение 10.3.2015, 17:19
Сообщение #7


Стаж: 12 лет

Сообщений: 338
Благодарностей: 205
Полезность: 792

Цитата(strikerman @ 10.3.2015, 16:33) *
Ребята, ну в своей неграмотности разобрались... но вопрос - как пофиксить плагин?


Ну внимательно же читай... Ты же сам написал, что у тебя билд 5787, так?
Теперь сюда глянь:
Цитата
-Allow to use UTF8 nicks on older server builds (< 6xxx).


1. Обнови билд сервера до версии 6ххх
2. Перекомпилируй плагин в кодировке utf-8 (без BOM)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 10.3.2015, 17:26
Сообщение #8


Стаж: 12 лет

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

JIuXeP, вы тоже не внимательно читаете) Там сказано что добавлена поддержка UTF-8 ников на билдах ниже 6XXX
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 10.3.2015, 18:51
Сообщение #9
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Цитата(JIuXeP @ 10.3.2015, 19:19) *
Ну внимательно же читай... Ты же сам написал, что у тебя билд 5787, так?
Теперь сюда глянь:


1. Обнови билд сервера до версии 6ххх
2. Перекомпилируй плагин в кодировке utf-8 (без BOM)


1. Как раз там написано что поддержка для версий ниже 6ххх
2. Всё так и сделано, но ты понимаешь в самом плагине нет русских букв.
Проблема что плагин не может нормально воспринимать русские буквы которые ему передаются из-вне.

Блу, а вообще если можешь удали все посты кроме первого,
я написал конкретно проблему. Один что-то недопонял и понеслось.... Совсем съехали с темы.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 11.3.2015, 9:17
Сообщение #10
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

может кто поможет??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 12.3.2015, 12:57
Сообщение #11
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Уважаемые скриптеры, прошу помощи.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 13.3.2015, 16:51
Сообщение #12
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Такой нужный плагин надо пофиксить.
И хоть бы кто откликнулся...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 15.3.2015, 18:44
Сообщение #13
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Сколько будет стоить фикс этого плагина???
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 192168099
сообщение 15.3.2015, 21:35
Сообщение #14


Стаж: 13 лет

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

Если вы ещё пару постов самому себе напишите, возможно и сами разберётесь с выше отвеченными постами.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 16.3.2015, 0:31
Сообщение #15
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Цитата(192168099 @ 15.3.2015, 23:35) *
Если вы ещё пару постов самому себе напишите, возможно и сами разберётесь с выше отвеченными постами.


В вышеотвеченных постах ответов не было.
Только удивления что дпрото теперь обеспечивает русские ники на старых билдах...

А мне нужно плагин настроить, что в 1-м посте, чтобы при русском нике не крашил сервер.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Valer4
сообщение 16.3.2015, 1:46
Сообщение #16
Стаж: 11 лет

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

Попробуй заменить get_user_name(players[i], name, sizeof(name)-1) в 76 строчке на get_user_info(players[i], "name", name, sizeof(name)-1)
Или попробуй установить этот плагин
Скрытый текст
http://www.amx-x.ru/viewtopic.php?f=12&t=269&p=53922

В plugins.ini он должен быть раньше твоего IPTools.
Потом добавь в свой IPTools native get_user_rusname(index, name[], len)
И замени get_user_name(players[i], name, sizeof(name)-1) на get_user_rusname(players[i], name, sizeof(name)-1).
Отпишись если поможет.
Вообще get_user_name поганая функция, никогда не использую.

Отредактировал: Valer4, - 16.3.2015, 1:59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
strikerman
сообщение 16.3.2015, 16:27
Сообщение #17
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Цитата(Valer4 @ 16.3.2015, 2:46) *
Попробуй заменить get_user_name(players[i], name, sizeof(name)-1) в 76 строчке на get_user_info(players[i], "name", name, sizeof(name)-1)


Спасибо.
Заменил строчку, перекомпилил и залил на сервер.
Жду пока зайдёт игрок с русским ником.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
XyLiGaN
сообщение 16.3.2015, 16:29
Сообщение #18
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

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

strikerman, IP дай в ЛС, а то пол года будешь ждать.

Отредактировал: XyLiGaN, - 16.3.2015, 16:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
strikerman
сообщение 16.3.2015, 16:39
Сообщение #19
Стаж: 11 лет

Сообщений: 67
Благодарностей: 5
Полезность: 46

Цитата(XyLiGaN @ 16.3.2015, 18:29) *
strikerman, IP дай в ЛС, а то пол года будешь ждать.


Прикольно вроде помогло!
Русский ник отобразился кракозяблями но сервер не упал!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Valer4
сообщение 16.3.2015, 17:37
Сообщение #20
Стаж: 11 лет

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

Цитата(strikerman @ 16.3.2015, 18:39) *
Прикольно вроде помогло!
Русский ник отобразился кракозяблями но сервер не упал!!!

Чтобы сделать не крякозябрами, нужно узнать какая кодировка используется у тебя и у игроков. Есть специальные таблицы - коды символов. Делаешь плагин переводчик - два списка байтов, для каждой кодировки, потом в этих никах побитово заменяешь символы. Тебе понадобиться изучить битовые операции. Это геморно)))
Определить UTF8 или ANSI можно по спискам - проводишь цикл по байтам, если все символы есть в ANSI значит не русский или только по каким-то закономерностям.

Отредактировал: Valer4, - 16.3.2015, 18:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
3 страниц V   1 2 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 2 гостей читают эту тему: