Примерно месяц занимаюсь сервером ЛА2, сборка Балансёра. Примерно месяц стоит сервер в локалке диалапной. С недавних пор игроки начали стонать: не работают привилегии в кланах. Начал проверять сам, дома. Скачал свежую сборку, запустился, создал 2 аккаунта, два чара, один клан, вошёл в клан чаром. Нажимаю alt+n клан-лидером, в списке новый член есть, нажимаю кнопку "Привелегии", выводится список моих привелегий. Выделяю в списке члена клана, нажимаю "Авторизация"(у меня "руссифицированный" клиент) - пишет: "Цель не найдена в мире" и предлагает нажать "ОК". Нажимаю, повторяю - то же самое. Рестарт сервера и клиентов не помог. Тогда я решил, что у разработчиков дел и так хватает, поэтому напишу сам. Сел, писал часов 6 убил - первый опыт "игры" на Форте. Получилась такая вещица:
Change clan priveleges
called as ".privs"
: bypass_privs ( "Clan" -- )
1 args указыаем число аргументов (???)
int делаем из строкового аргумента численный
DUP копируем его
0 нижний предел
1024 верхний предел
WITHIN проверяем, входит ли число(аргумент) в наши пределы
IF если?
"into diapazon" show "входит"
clan-leader? проверяем вызывающего слово на лидера клана
if если?
"clan leader OK" show "лидер, точно"
"select clanid from characters where char_name like '" вписываем первую половину Мускул запроса
player@ "Name" p@ >slashes s+ выбираем имя вызывавшего
"';" s+ parse query заканчиваем запрос
drop скидываем со стека нолик
player@ выбираем идентификатор плеера
target@ "Name" p@ считываем имя цели вызывавшего
"select clanid from characters where char_name like '" первая половина запроса
swap меняем местами элементы стека, чтобы подсунуть имя цели в середину запроса
>slashes ??
s+ клеим строку, как я понял
"';" s+ parse query заканчиваем запрос
drop дропаем нолик со стека
= if сравнивает clanid двух чаров - вызывавшего и указанного
"Change Clan Privileges Successfull" show "успех"
player@ target@ выбираем цель
"setClanPrivileges" { int.class } jexec записываем цели привилегии клана
player@ target@ выбираем цель
"store" 0 jexec сохраняем значения в БД
else
"Not your clan member!" show облом
then
else
"You are not clan leader" show облом
then
else
"Input number is incorrect" show облом
then
;
: user_privs далее я делал "по подобию" поэтому не объясню :) -- мне бы кто объяснил
'<font color="LEVEL">Target a clan member and choose privileges for him:</font>'
'<table width=250>' s+
'<tr><td><a action="bypass -h jbf_privs 0 "><font color="LEVEL">None Rights</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 1 "><font color="LEVEL">Join a Clan</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 2 "><font color="LEVEL">Give a Title</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 4 "><font color="LEVEL">Viewing the Contents of a Warehouse</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 8 "><font color="LEVEL">Registration of a Clans Crest</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 16 "><font color="LEVEL">Open a Door</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 32 "><font color="LEVEL">Other Clan Hall Rights</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 64 "><font color="LEVEL">Dismiss(Clan Hall)</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 128 "><font color="LEVEL">Opening a Door</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 256 "><font color="LEVEL">Other Castle Rights</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 512 "><font color="LEVEL">Dismiss(Castle)</font></a></td></tr>' s+
'<tr><td><a action="bypass -h jbf_privs 1023 "><font color="LEVEL">All Rights</font></a></td></tr></table>' s+
show
;
Протестил, обрадовался, понравилось... Визжал как поросёнок. Однако сразу же обнаружил, что кнопка "Авторизация" тоже заработала... Задумался. Не могу понять: что повлияло на работоспособность кнопки "Авторизация"? Так как польза данного листинга для меня только как обучение, то я разместил комменты почти на всё - пусть другие учатся. Уважаемые "папы" Форта, раскритикуйте мой код, чтобы я увидел ошибки.