Многопользовательский мир АЛАДОН



Страницы: (7) « Первая ... 4 5 [6] 7   ( Перейти к первому непрочитанному сообщению ) Reply to this topicStart new topic

> Новый JMC, Есть еще энтузиасты )
Колко
Отправлено: Jan 12 2018, 15:41
Quote Post


Мидл
***

Группа: Участники
Сообщений: 234
Пользователь №: 2761
Регистрация: 11-February 11



Сделать возможность поставить тикер меньше чем на 10 секунд. Удобно при каче - поставил 3-ех секундный тикер и по срабатыванию тикера выпад и ходишь чаек попиваешь.


--------------------
Шрайк
PMEmail Poster
Top
Фелей
Отправлено: Jan 13 2018, 16:12
Quote Post


Ньюб
*

Группа: Участники
Сообщений: 75
Пользователь №: 2167
Регистрация: 26-February 09



Если необходимо выполнять некоторое действие просто с некоторым периодом, то все уже реализовано. Для этого можно использовать циклы. Ниже приведен отрывок справки Nerevar, с полным текстом которой можно ознакомится по адресу http://nerevar.github.io/jmc/pages/command/
CODE

#loop

Syntax:
#<num>, #loop
Обе команды переданы под контроль отдельного цикла, каждой добавлена возможность задержки (в децисекундах, 1/10 секунды).

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

#<num>[:<delay>]
цикл от 1 до num.

#loop {<from>[,<to>][:<delay>]}
#loop начинает выполнять указанные команды в цикле, сохраняя текущее значение счетчика в переменной %0.
если указан второй параметр, то от from до to, иначе от from до 0.
Если delay не указан, считается нулем и цикл не задействует таймер, иначе ищется свободный таймер и цикл передается под его контроль.
Всего выделены под это дело 16 таймеров (0..15). если свободный таймер не найден, то и цикла не получится.
Может быть, позже будет выделено больше. Пока нет необходимости, 16 - это много.

#break {<tID>|all}
Прерывает цикл(ы). второй вызов убивает (обнуляет).

#abort {<tID>|all}
Убивает (обнуляет) цикл(ы) сразу.

#resume {<tID>|all}, #pinch [all]
Возобновляет цикл(ы), если он неактивен и работоспособен (есть первая/вторая граница, команда и задержка)

#llist, #tmlist
Список активных циклов.

Примеры:
#5 {sing}
В мад уйдет команда sing;sing;sing;sing;sing - Вы споете (sing) 5 песен.

#10 {eat bread;drink water}
Вы поедите хлеба (eat bread) и выпьете воды (drink water) 10 раз.

#loop {2,5} {взять все %0.сундук} Вы возьмете все предметы из 2-го, 3-го, 4-го и 5-го сундуков.


Например, для того чтобы постоянно каждые три 3 секунды выполнять выпад, можно набрать команду
CODE

#100000:30 выпад

Первое число задает количество повторений (100000 каждые три секунды будут длиться больше 3-х суток). Второй аргумент определяет период повторения в десятых долях секунды - в приведенном примере, 30 десятых дает 3 секунды.
Каждый цикл для своей работы требует отдельного таймера. Сейчас в jmc на эти цели выделено 16 таймеров, т.е. можно одновременно запустить до 16-ти независимых циклов, с разными периодами и командами.
PMEmail Poster
Top
Колко
Отправлено: Jan 15 2018, 14:10
Quote Post


Мидл
***

Группа: Участники
Сообщений: 234
Пользователь №: 2761
Регистрация: 11-February 11



И еще у меня есть вредная привычка, заспамливать действия.
Бывает нажму разгром слишком много раз, команды запишутся в очередь на выполнение, а потом сбежать не могу.
Приходится в быстром порядку через #zap рвать связи и конектится по новой.
Может есть какая команда или сочетание клавишь, чтобы очередь команд чистить.

В http://nerevar.github.io/jmc/pages/command/ сказано что #wt 0 должна очищать очередь команд - реально же она это не делает.


--------------------
Шрайк
PMEmail Poster
Top
Фелей
Отправлено: Jan 16 2018, 20:02
Quote Post


Ньюб
*

Группа: Участники
Сообщений: 75
Пользователь №: 2167
Регистрация: 26-February 09



Когда вы много раз нажимаете команду, например, тот же разгром, то задержка в их исполнении возникает не со стороны jmc, а со стороны сервера. Jmc отправляет команды сразу без задержек. В этом можно легко убедиться воспользовавшись сниффером. Принятые на стороне сервера команды находятся в буфере, связанном с открытым соединением между клиентом (jmc) и сервером (Аладоном). Клиент не имеет доступа к буферам находящимся на сервере, и отправленные команды просто так удалить невозможно. Когда вы разрываете соединение, буфер со всеми заспамленными командами становится недоступным. Все оставшиеся в нем команды по факту теряются, и при повторном соединении вы можете спокойно вводить новые. Это все я к тому, что нельзя сделать команду в jmc, позволяющую очищать заспамленные команды, т.к. они уже переданы на сервер. Могу лишь порекомендовать не спамить кучу команд разом.

Насчет команды #wt или #wait.
Они позволяют формировать очередь команд со стороны jmc. Если набрать команду
CODE

#wt 50; разгром

то, через 5 секунд на сервер будет отправлена команда "разгром". Особенность в том, что задержка в этом случае формируется со стороны клиента. Команды задерживаются в специальном буфере в jmc, к которому естественно есть полный доступ. Если до истечения указанных 5-ти секунд, набрать команду #wait cancel, то команда "разгром" отправлена не будет.
С описанием команды #wt 0 есть неточность - она не очищает очередь команд, а просто сбрасывает таймер и все задержанные команды мгновенно уходят на сервер. Это так и задумывалось. Неточность в справке.
PMEmail Poster
Top
Энерхан
Отправлено: Apr 7 2018, 14:41
Quote Post


Ньюб
*

Группа: Аватары
Сообщений: 66
Пользователь №: 3653
Регистрация: 12-March 18



Ребята не убивайте сразу,но у меня есть два вопроса.
1.Возможно ли сделать какой то алиас или тригер для вывода информации о СТАТУСЕ группе(хп,манна и т.д.) в отдельное окошко?
2.Как сделать тригер-команду для вывода автоматического ГГ мол Вася призвал меня к себе в такую то комнату?.

Спасибо.
PMEmail Poster
Top
Фелей
Отправлено: Apr 26 2018, 21:33
Quote Post


Ньюб
*

Группа: Участники
Сообщений: 75
Пользователь №: 2167
Регистрация: 26-February 09



1. Проще всего через внешние скрипты
CODE

function group(l,t,n,h,hp,m,mp,v,vp,x){
var s='';
if (t=='Моб'){
s='[';
}else{
s='&Y[&w';
}
if (l<10){
s=s+' ';
}
s=s+l+' '+t;
if (t=='Моб'){
s=s+']';
}else{
s=s+'&Y]&w';
}
s=s+' '+n+' ';
if (h<hp/2){
s=s+'&R'+h+'&w';
}else{
s=s+h;
}
s=s+'/';
if (hp<10){
s=s+' ';
}
if (hp<100){
s=s+' ';
}
if (hp<1000){
s=s+' ';
}
s=s+hp+' &D|&w ';
if (m<10){
s=s+' ';
}
if (m<100){
s=s+' ';
}
if (m<1000){
s=s+' ';
}
if (m<mp/2){
s=s+'&C'+m+'&w';
}else{
s=s+m;
}
s=s+'/';
if (mp<10){
s=s+' ';
}
if (mp<100){
s=s+' ';
}
if (mp<1000){
s=s+' ';
}
s=s+mp+' &D|&w ';
if (v<10){
s=s+' ';
}
if (v<100){
s=s+' ';
}
if (v<1000){
s=s+' ';
}
if (v<vp/2){
s=s+'&Y'+v+'&w';
}else{
s=s+v;
}
s=s+'/';
if (vp<10){
s=s+' ';
}
if (vp<100){
s=s+' ';
}
if (vp<1000){
s=s+' ';
}
s=s+vp+' &D|&w ';
if (t=='Моб'){
if (x<4){
s=s+'&R'+x+'&w';
}else{
s=s+x;
}
s=s+'-ч';
}
jmc.showme(jmc.FromColored(s));
}

jmc.Parse("#alias {гр}{#action COLOR {/\\[(.?\\d+) (\\w+)\\] (.+?) (\\d+)\\/ *(\\d+).+?(\\d+)\\/ *(\\d+).+?(\\d+)\\/ *(\\d+).+?(\\d+)/}{#drop;#s group(%0,'%1','%2','%3',%4,%5,%6,%7,%8,%9)};#action TEXT {/группа/}{#action {/<\\d+hp/}{#unaction {*[(.?*};#unaction {/<\\\\d+hp/}};#unaction {/группа/}};груп}{default}");

этот код необходимо сохранить в отдельном файле и добавить в список файлов скриптов. Этот скрипт выполняет следующее: при наборе команды "гр" будет выводиться примерно та же информация о группе, но с подсветкой малых хп, маны, мувов. Если надо вывести в отдельное окошко, то вместо команды showme надо поставить woutput.

2. Например так:
CODE

#action TEXT {%1 призывает тебя!} {#var prizval %1;#var priziv 1;#play 7.wav;#if {$nepriz=1} {#var war ВНИМАНИЕ!!};#if {$nepriz!=1} {#var {war} {=)};неприз};#action TEXT {/^(\|.{28}\|| ) *(\w.+)/}{#var place %1;#unaction {/^(\\|.{28}\\|| ) *(\\w.+)/}};#action TEXT {^[Видимые выходы: %1} {гг $war $prizval призвал меня "$place";#var priziv 0;#unaction {^[Видимые выходы: %1}}} {5} {default}


Это для версии 3.7+, для более ранних версий надо делать проверку на *эмо
Не работает, если призывают в темное место и не видите в темноте и без света
PMEmail Poster
Top
Колко
Отправлено: May 24 2018, 14:20
Quote Post


Мидл
***

Группа: Участники
Сообщений: 234
Пользователь №: 2761
Регистрация: 11-February 11



Подскажите, а как сделать автоввод команды на коннект к серверу при открытии клиента?


--------------------
Шрайк
PMEmail Poster
Top
Фелей
Отправлено: May 24 2018, 18:33
Quote Post


Ньюб
*

Группа: Участники
Сообщений: 75
Пользователь №: 2167
Регистрация: 26-February 09



Можно, например, вписать команду в файл скрипта через Parse. Что удобно, в этом случае к моменту вызова команды уже будут загружены все переменные, триггеры и алиасы из конфигурационного файла.
Ниже простейший пример.
CODE

jmc.Parse("#connect aladon.sovintel.ru 9000");

Строчку сохраните в отдельный файл и добавьте в список используемых скриптов (Меню->Опции->Объекты JMC->файлы скриптов)
Если закроете клиент и откроете снова, то сразу после загрузки конфигурационного файла будет выполнена команда #connect aladon.sovintel.ru 9000.
Если хотите не просто соединится с сервером, а еще и войти персонажем, то можно написать простейшие алиасы:
CODE

#alias {зайти} {#connect aladon.sovintel.ru 9000;#action {You select:[2]}{2j;#unaction {You select:[2]}};#action {Твое имя?}{%0;#unaction {Твое имя?}};#action {Пароль}{#variable myname %0;ВАШ_ПАРОЛЬ;#unaction {Пароль}};#action {Enter}{#cr;#unaction {Enter}}} {default}

#alias {зайтипоследним} {#connect aladon.sovintel.ru 9000;#action {You select:[2]}{2j;#unaction {You select:[2]}};#action {Твое имя?}{$myname;#unaction {Твое имя?}};#action {Пароль}{ВАШ_ПАРОЛЬ;#unaction {Пароль}};#action {Enter}{#cr;#unaction {Enter}}} {default}

После этого в том подключаемом файле, где писали строчку jmc.Parse("#connect aladon.sovintel.ru 9000");, заменяем ее на jmc.Parse("зайтипоследним");. Тогда каждый раз при открытии клиента вы будете входить последним персонажем, которым вошли с помощью алиаса 'зайти'. Соответственно, чтобы эта строчка сработала, необходимо хотя бы раз войти с помощью алиаса 'зайти' (чтобы инициализировалась переменная myname).

P.S.: алиас 'зайти' принимает один аргумент - имя персонажа. Например, 'зайти Колко'

Это сообщение отредактировал Фелей - May 24 2018, 18:40
PMEmail Poster
Top
Ауст
Отправлено: Jul 18 2018, 06:46
Quote Post


Ньюб
*

Группа: Участники
Сообщений: 33
Пользователь №: 1136
Регистрация: 13-June 05



Добавь пожалуйста в клиент регулятор громкости, просто так.


--------------------
Иной
PMEmail PosterICQ
Top
Калевала
Отправлено: Nov 9 2018, 10:28
Quote Post


Хозяин Хелльстада
******

Группа: Администраторы
Сообщений: 1893
Пользователь №: 55
Регистрация: 15-April 04



Все ж таки хотелось бы вернуться к выводу инфы в разные окна и так чтобы в главное окно не выводилось эта инфа с прокруткой. Неужто так трудно сие чудо запилить?


--------------------
Кодерус Аладонус
PMEmail PosterUsers Website
Top
Калевала
Отправлено: Nov 9 2018, 12:07
Quote Post


Хозяин Хелльстада
******

Группа: Администраторы
Сообщений: 1893
Пользователь №: 55
Регистрация: 15-April 04



Да и еще, после обновления движка JScript в винде у меня перестали полностью запускать скрипты в жабе даже не знаю в чем тут может быть дело,
вообще команда #script перестала работать даже с VBA не пашет


--------------------
Кодерус Аладонус
PMEmail PosterUsers Website
Top
Фелей
Отправлено: Dec 29 2018, 19:32
Quote Post


Ньюб
*

Группа: Участники
Сообщений: 75
Пользователь №: 2167
Регистрация: 26-February 09



QUOTE

Добавь пожалуйста в клиент регулятор громкости, просто так.


Добавил. Новая версия https://github.com/Rrahh/jmc/releases/tag/3720
Регулирование громкости в окне настроек Главное Меню->Опции->Настройки, там поле с соответствующим названием, в котором можно установить громкость в процентах от системной. Для сохранения совместимости с Windows XP, пришлось сделать анализ звукового файла и перекодирование. Разбираться со всеми возможными форматами не хотелось, поэтому регулирование громкости задействуется только для файлов без сжатия с глубиной звука 8 и 16 бит, для остальных файлов используется старый код со 100-процентной громкостью.

QUOTE

Все ж таки хотелось бы вернуться к выводу инфы в разные окна и так чтобы в главное окно не выводилось эта инфа с прокруткой. Неужто так трудно сие чудо запилить?


Сложность в том, что нет простой возможности определить какие строки в какое окно вывести. Это необходимо объяснить жабе с помощью программы - встроенного или внешнего скрипта. И с их помощью можно распределить по окнам как угодно, примеры приводил в этой же теме.

Для вывода отладочной информации можно пойти по другому пути - добавить к строкам префикс со стороны аладона и не выводить при ее выводе пустые строки и промпт. Для этого надо сделать отдельный вариант функции вывода. Тогда в жабе скрипт будет очень простым - отлавливание строк с заданным префиксом, и перемещение в отдельное окно. При этом в главном окне не будет никаких следов от отладочной информации.

QUOTE

Да и еще, после обновления движка JScript в винде у меня перестали полностью запускать скрипты в жабе даже не знаю в чем тут может быть дело,
вообще команда #script перестала работать даже с VBA не пашет

Сейчас, наверное, уже не актуально, но отвечу для других пользователей с такой же проблемой. Больше похоже на то, что необходимо перерегистрировать библиотеку ttcoreex.dll. Это можно сдать либо запустив скрипт ttcoreex.bat, который лежит в папке жабы, либо вручную - выполнив от администратора команду regsvr32.exe /u ttcoreex.dll, а затем regsvr32.exe ttcoreex.dll
PMEmail Poster
Top
Калевала
Отправлено: Jan 11 2019, 23:26
Quote Post


Хозяин Хелльстада
******

Группа: Администраторы
Сообщений: 1893
Пользователь №: 55
Регистрация: 15-April 04



Актуально. Попробую на работе в понедельник, хотя у меня смутное ощущение, что я это уже делал. Почему бы если строка выбрасывается куда-то посредством команды woutput просто не выводить ее в главное окно?
Я гото в принципе вообще пойти на специализированный формат обмена сообщениями с клиентом жабы, но это к сожалению сделает ее узкоспециализированной под Аладон. А может можно какой-нибудь аддончик прикрутить к жабе специально для Аладона?
Формат обмена мы в принципе делали с Кроникисом когда он флэш-клиент допиливал для Аладона. Можно его развить. Там правда было в формате XML, сейчас наверное я бы предпочел JSON.


--------------------
Кодерус Аладонус
PMEmail PosterUsers Website
Top
Калевала
Отправлено: Jan 22 2019, 11:18
Quote Post


Хозяин Хелльстада
******

Группа: Администраторы
Сообщений: 1893
Пользователь №: 55
Регистрация: 15-April 04



Получилось перерегистрировать ttcoreex.dll там переписан ttcoreex.bat по другим версиям под десятку не выходило ничего. Ну и да все заработало.


--------------------
Кодерус Аладонус
PMEmail PosterUsers Website
Top
Фелей
Отправлено: Jan 22 2019, 19:21
Quote Post


Ньюб
*

Группа: Участники
Сообщений: 75
Пользователь №: 2167
Регистрация: 26-February 09



QUOTE

Получилось перерегистрировать ttcoreex.dll там переписан ttcoreex.bat по другим версиям под десятку не выходило ничего. Ну и да все заработало.

Не понял, проблема с ttcoreex.bat? С моим, который в инсталяционном пакете, или со старым без автоматического запроса привилегий? Поясни, пожалуйста, подробнее, чтобы понять где что поправить.

QUOTE

Почему бы если строка выбрасывается куда-то посредством команды woutput просто не выводить ее в главное окно?

Текущее решение более гибкое. Если пользователь хочет убрать строку из основного окна, то ему необходимо всего лишь добавить одну команду #drop (для встроенных скриптов) или jmc.DropEvent() (для внешних). Например, при выводе разговоров в отдельное окно, многим привычнее оставлять исходные строки в основном окне. Это я к тому, что вывод в дополнительное окно не подразумевает обязательного удаления из основного. И в текущей реализации клиента, для этих не связанных между собой действий предусмотрены отдельные функции, что кажется логичным.

Могу добавить дополнительную функцию, некую woutput2(), которая будет в конце вызывать drop строки из основного окна. Но, как мне кажется, это лишнее нагромождение дублирующих друг друга функций.

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

QUOTE

Я готов в принципе вообще пойти на специализированный формат обмена сообщениями с клиентом жабы, но это к сожалению сделает ее узкоспециализированной под Аладон. А может можно какой-нибудь аддончик прикрутить к жабе специально для Аладона?

Имел в виду, что в жабе можно вообще ничего не менять, и получить удобный вывод отладочной информации просто изменив вывод этой инфы со стороны самого аладона. Не знаю каким образом посылается сейчас, ниже будут лишь догадки, возможно мне непонятны какие-либо проблемы. Если возможно более подробно описать каким образом сейчас выводится отладочная информация, то это помогло бы мне лучше понять суть проблемы.
Итак, каким образом мне представляется решение:
Пусть сейчас вывод отладочной инфы идет через функцию send_to_char (char *str, CHAR_DATA *ch). Вводим еще одну функцию
CODE

const char *prefix = "PREFIX5953465";
void send_to_char_debug( const char *txt, CHAR_DATA *ch )
{
   if ( txt != NULL && ch->desc != NULL )
   {
       write_to_buffer( ch->desc, prefix, strlen(prefix) );
       write_to_buffer( ch->desc, txt, strlen(txt) );
   }
   return;
}

По сравнению с исходной функцией, вначале строки передается специальная кодовая последовательность, которая не должна встречаться в обычном тексте. В префиксе намеренно не поставлен символ новой строки, чтобы она шла единой строкой с полезной информацией.
На стороне жабы просто добавляем триггер
CODE

#action COLOR {/PREFIX5953465(.*)/}{#woutput 2 {colorcodes} %0;#drop}{1}{default}

Триггер выведет полученную строку с префиксом (которая послана с помощью новой функции) во второе окно, удалив из вывода в основное. Приоритет триггера лучше сделать повыше.

Если требуется вывести несколько каналов отладочной информации в разные окна, то это легко реализовать введя несколько разных префиксов. И на каждый префикс в жабе сформировать свой триггер, в котором указать требуемое окно вывода.

Не разбирался пока, на каком этапе в rom добавляется пустая строка и промпт. Похоже, что send_to_char в результате отправляет и с тем и другим. Поэтому надо вместо send_to_char взять функцию, которая отправляет только строку без промпта.
PMEmail Poster
Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Topic Options Страницы: (7) « Первая ... 4 5 [6] 7  Reply to this topicStart new topic

 



[ Script Execution time: 0.0613 ]   [ 14 queries used ]   [ GZIP включён ]