Page 1 of 1

Различие сообщений в журнале.

Posted: 2006-05-21 12:47:33
by alconst
Как заставить инжу отличать сообщения сервера от речи игроков?

Я имею ввиду сообщения типа "There is no ore..." или "You are frozen..." и т.п.

P.S.
на пример, скрипте:

Code: Select all

if uo.injournal("There is no ore") then 
uo.exec.......
так вот, это сработает даже если какой-нить чар напишет эту строку. Как сделать, чтобы обрабатывались только сообщения, посланные сервером?

Re: Различие сообщений в журнале.

Posted: 2006-05-21 13:03:29
by Kynep
alconst wrote:Как заставить инжу отличать сообщения сервера от речи игроков?

Я имею ввиду сообщения типа "There is no ore..." или "You are frozen..." и т.п.

P.S.
на пример, скрипте:

Code: Select all

if uo.injournal("There is no ore") then 
uo.exec.......
так вот, это сработает даже если какой-нить чар напишет эту строку. Как сделать, чтобы обрабатывались только сообщения, посланные сервером?


ИМХО Никак... :roll:

Re: Различие сообщений в журнале.

Posted: 2006-05-21 13:13:54
by alconst
Cooper wrote:ИМХО Никак... :roll:

Я где-то видел, что можно, но тогда не обратил внимания.. А сейчас не могу найти...
Может быть как-то по цвету различать, или еще что-то? Например, если это пишет чар, то в журнале перед текстом пишется ник (типа Player: ...) Так вот н-пр не реагировать, если перед сообщением двоеточие стоит?

Я прост новичек в этом деле, поэтому и обращаюсь за помощью

Posted: 2006-05-21 13:44:29
by Edred
Только так и можно. Написать собственную функцию в скрипте по поиску строки в журнале, где дополнительной проверкой ввести проверку на многоточие в строке. В принципе, ничего сложного.

Posted: 2006-05-21 13:53:53
by alconst
Edred wrote:Только так и можно. Написать собственную функцию в скрипте по поиску строки в журнале, где дополнительной проверкой ввести проверку на многоточие в строке. В принципе, ничего сложного.

Спасибо, но не могли бы вы объяснить/показать это на примере?

Posted: 2006-05-21 14:30:31
by Edred
Что именно? Делай в скрипте так:

Code: Select all

if MyInJournal("There is no ore") then 
uo.exec.......


А дальше в файл добавь функции:

Code: Select all

Sub MyInJournal( mes )
   VAR nom, st
   nom = uo.InJournal( mes )
   If mes > 0 Then
      ; найдена строка в журнале
      st = UO.Journal( nom - 1 )
      ; тут уже проверяем, есть ли в строке двоеточие.
      If CheckColon( st )  == 1 Then
         return 0
      else
         return 1
      endif
   endif
   return 0
endsub

Sub CheckColon( st )
   ; Функция ищет в переданной строке двоеточие и возвращает 1 если найдено, 0 если нет.
.........
endsub


ЗЫ: естественно, не забудь написать последнюю функцию. Поищи, тут на форуме кто-то где-то клал функцию поиска подстроки в строке. Кроме того такую функцию легко слепить на основе GetWord.

Posted: 2006-05-21 15:28:17
by 1a2a3a4a5a6a
Edred wrote:Поищи, тут на форуме кто-то где-то клал функцию поиска подстроки в строке. Кроме того такую функцию легко слепить на основе GetWord.

Тут.

Posted: 2006-05-21 17:03:53
by Destruction
Эмм, а journalserial отменили?

Сервер обычно с одного серийника рисует..

Posted: 2006-05-21 18:45:47
by Edred
Destruction wrote:Эмм, а journalserial отменили?

Сервер обычно с одного серийника рисует..


Гимор это. Нет гарантий никаких что сервер будет с одного серийника "рисовать" все время...

Posted: 2006-05-21 19:42:48
by Destruction
Edred wrote:
Destruction wrote:Эмм, а journalserial отменили?

Сервер обычно с одного серийника рисует..


Гимор это. Нет гарантий никаких что сервер будет с одного серийника "рисовать" все время...

Ну хз, у меня с одного рисует, и гемора никакого..

if uo.journalserial(uo.injournal( "My Message" )) == ServerID then
...
endif

Как раз надо в первую очередь проверять такой вариант, а затем изобретать гимор. Еще можно графический тип получить, побаловаться.

Posted: 2006-05-21 20:25:26
by alconst
Destruction wrote:if uo.journalserial(uo.injournal( "My Message" )) == ServerID then
...
endif

А где взять ServerID?

пробвал

Code: Select all

UO.Print(UO.JournalSerial(uo.InJournal("сообщение...")))
UO.Print(UO.JournalSerial( uo.InJournal() ) )
UO.Print(UO.JournalSerial(uo.InJournal(-1)))

Всегда выдает 0x00000000, но с ним не пашет.
Еще пробвал 0x01010101 (как о большинстве серверных сказано в хелпе), тож не пашет.