nerevar / jmc

JMC - Jaba Mud Client
25 stars 15 forks source link

jmc.DropEvent() не работает или работает некорректно #86

Open Lakssoc opened 2 years ago

Lakssoc commented 2 years ago

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

например: /action {%0 вошел в комнату} {/scri BlaBla("%0")}

В BlaBla() обрабатывались данные %0 и при необходимости "%0 вошел в комнату" дропалась. А сейчас приходится через jmc.Parse("/drop") ее ронять...

konelav commented 2 years ago

Так и есть, это появилось в версии 3.7.0.1 (или 3.7.0.2?) https://github.com/konelav/jmc/commit/e171ed67a42577f624d968366b364b66bc0bbf93 :

@@ -220,7 +226,6 @@ STDMETHODIMP CJmcObj::DropEvent()
 {
    // m_pvarEventParams[0].Clear();
     m_bDropped = TRUE;
-    drop_command("\0");
    return S_OK;
 }

По-видимому, правка есть часть большей работы по более строгому разграничению (разделению) пространства и логики работы "собственного" скриптового движка (TinTin, т.е. команды-триггеры-алиасы-...) и "стороннего" (встраиваемого, будь то JScript, VBScript или любой другой ActiveScript). Идея была в том, что TinTin работает со строками (приходящими с сервера или отправляемыми -- вводом пользователя), а ActiveScript работает с событиями (среди которых тоже есть событие Incoming(), соответствующее получению строки с сервера, но это единственная их связь, далее триггеры/сабы работают отдельно, а ActiveScript отдельно). При этом, по идее, jmc.Parse() и #script должны были остаться единственными "дорожками" из одного движка в другой (к тому же нелогично делать доступ к каким-то отдельным командам TinTin "напрямую" и не делать его для других, типа если есть jmc.drop(), то нужны и jmc.connect() и jmc.action() и т.д., а зачем, если есть jmc.Parse()).

Соответственно, если стоит задача "сбросить строку из JScript", то jmc.Parse("#drop"); -- это именно предлагаемое "единственно верное решение", а не "костыль" %) Это моё видение и аргументация сделанной правки, вполне допускаю, что кому-то может быть удобен другой подход. Лично мне во вполне конкретной ситуации было неудобно в старом подходе именно то, что нельзя было прекратить обработку события Incoming в JScript и при этом оставить строку для TinTin'a (дропалось сразу и там и там).

Lakssoc commented 1 year ago

Здравствуйте! Пользуюсь сейчас вашей сборкой JMC 3720. Все отлично, но есть маленькое пожелание: можно ли сделать окошки статуса (jmc.SetStatus) немного шире? Раза в 1.5 было бы отлично! Либо сделать возможность самому задавать ширину этих окон (каждого отдельно — вообще шикарно), и их количество.   Если возможно удовлетворить мое пожелание, то буду очень благодарен за ссылку на скачивание )     С уважением,

Дмитрий       

Понедельник, 8 августа 2022, 11:41 +03:00 от konelav @.>:     Так и есть, это появилось в версии 3.7.0.1 (или 3.7.0.2?) @. : @@ -220,7 +226,6 @@ STDMETHODIMP CJmcObj::DropEvent() { // m_pvarEventParams[0].Clear(); m_bDropped = TRUE;

  • drop_command("\0"); return S_OK; }

По-видимому, правка есть часть большей работы по более строгому разграничению (разделению) пространства и логики работы "собственного" скриптового движка (TinTin, т.е. команды-триггеры-алиасы-...) и "стороннего" (встраиваемого, будь то JScript, VBScript или любой другой ActiveScript). Идея была в том, что TinTin работает со строками (приходящими с сервера или отправляемыми -- вводом пользователя), а ActiveScript работает с событиями (среди которых тоже есть событие Incoming(), соответствующее получению строки с сервера, но это единственная их связь, далее триггеры/сабы работают отдельно, а ActiveScript отдельно). При этом, по идее, jmc.Parse() и #script должны были остаться единственными "дорожками" из одного движка в другой (к тому же нелогично делать доступ к каким-то отдельным командам TinTin "напрямую" и не делать его для других, типа если есть jmc.drop(), то нужны и jmc.connect() и jmc.action() и т.д., а зачем, если есть jmc.Parse()). Соответственно, если стоит задача "сбросить строку из JScript", то jmc.Parse("#drop"); -- это именно предлагаемое "единственно верное решение", а не "костыль" %) Это моё видение и аргументация сделанной правки, вполне допускаю, что кому-то может быть удобен другой подход. Лично мне во вполне конкретной ситуации было неудобно в старом подходе именно то, что нельзя было прекратить обработку события Incoming в JScript и при этом оставить строку для TinTin'a (дропалось сразу и там и там). — Reply to this email directly, view it on GitHub , or unsubscribe . You are receiving this because you authored the thread. Message ID: <nerevar/jmc/issues/86/1207835999 @ github . com>