Yoko http://forum.yoko.com.ua/ |
|
Script.dll + include http://forum.yoko.com.ua/viewtopic.php?f=12&t=16689 |
Page 1 of 10 |
Author: | Juicy Fruit [ 2011-06-24 22:22:38 ] |
Post subject: | Script.dll + include |
Вообщем накалякал поддержку include файлов в скриптовый модуль. Ссылка: http://rghost.ru/48433355 UP! 28.08.2013 Стандартное оформление. Ссылка: http://rghost.ru/48433366 UP! 28.08.2013 Новое оформление с дополнительным окошком. Ссылка: http://rghost.ru/48433372 UP! 28.08.2013 English version. Доступные функции: В названии функций обязательно учитывать регистр. #include(File) - заменяет данную строку содержимым файла 'File' Например: #include(C:/includes/test.sc) #SETPATH Path - задаёт дефолтный патч ко всем последующим инкладам Пример: #SETPATH C:/includes/ #include(test.sc) - добавит файл 'C:/includes/test.sc' #include(testinc/test.sc) - добавит файл 'C:/includes/testinc/test.sc' Однако, #include(C:/includes/test.sc) - будет искать файл 'C:/includes/C:/includes/test.sc' #UNSETPATH - удалит дефолтный путь к инклад файлам #SETSHOW - установит галочку Show в окне инжи (о галках чуть позже.) #UNSETSHOW - снимет галочку Show #SETMSGS - установит галочку Messages #UNSETMSGS - снимет галочку Messages #SETLINK File - установит полный путь к файлу, из которого будет черпать функции #link(functions) - заменяет данную строку функциями 'functions' из файла, указанного в '#SETLINK File' Пример: #SETLINK C:/includes/test.sc #link(main,CheckCrime,WalkToChar) - добавит в скрипт функции 'main', 'CheckCrime', 'WalkToChar' (В названии функций обязательно учитывать регистр.) #UNSETLINK - удалит дефолтный путь к link файлам Галки: Show - показывает проанализированный скрипт в окошке скриптов Messages - показывает/скрывает некоторые сообщения редактора в окне УО Чуть ниже видел темку Beyonder'a с подобным, судя по комментам в ней, отличается следующим: Работает ',terminate fun' и ',terminate all' и, соответственно, 'uo.exec("terminate fun")' и 'uo.exec("terminate all")' Работает autoload. Автоматически анализирует скрипт при автостарте, загрузке или изменении скрипта. И на счёт ,terminate - мб что-то намудрил когда писал её, но теперь он мгновенно обрубает функцию, в модуле Yoko функция висит в списке некоторое время, как я понял - ждёт завершения одного из wait(...), если на него попало. Но с этим проблемм не возникало) 2 суток стабильной работы) На счёт совместимости с ASM - переименуйте файл в scriptengine.dll - и будет Вам счастье ^^ По крайней мере у меня с 'ASM-3 [Частная редакция] [604.21]' проблемм не наблюдалось. Авторасстановка отступов и подсветка синтаксиса. Добавил метод 'terminate alln_<fun>' Вырубает все функции, кроме функций, с названием '<fun>' Пример: ,terminate alln_main - оставит работающими только функции 'main' Комманда uo.CloseHandle() закрывает оно УО, даже если ещё не вошли в игру, либо при дисконнекте. Вообщем там, где uo.CloseUO() не помогает) Комманда uo.ActivateHandle() делает активным окно УО (выводит на 1 план) Функция Remain(Source,Div) возвращает true в случае остатка от деления Source на Div Загрузка скрипта: Функция скрипта uo.exec("exec __PauseAll") поставит на паузу все запущенные скрипты. В игре: ,exec __PauseAll Функция скрипта uo.exec("exec __ResumeAll") восстановит работу всех скриптов, которые были поставлены на паузу. В игре: ,exec __ResumeAll Функция скрипта uo.exec("exec __LoadSC#<File>") загрузит скрипт по пути 'File' и проанализирует его. Единственное НО - в пути 'File' не должно быть пробелов, иначе инжа крашанёт( Пример: Code: Sub Loading() Добавил 2 функции по работе со строками: StrUp(str) - возвращает строку str всю в верхнем регистре. StrLow(str) - возвращает строку str всю в нижнем регистре. Добавил класс Buffer: Предназначен для хранения массива строк и чисел. Мб многим не пригодится, но мне понадобился) Объявление: var b=Buffer(Length) где Length - длинна массива (максимум 1000), при длине более 1к - она автоматически изменится на 1к. Если Length=-1 - устанавливается автозаполнение массива для строк и чисел отдельно. Функции: b.GetLen() - вернёт длину массива b.SetStr(str,pos) - установит str в позицию pos строчного массива b.SetNum(num,pos) - установит num в позицию pos числового массива b.GetStr(pos) - вернёт строку массива позиции pos b.GetNum(pos) - вернёт число массива позиции pos b.AddStr(str) - Добавит str в последнюю ячейку массива строк b.AddNum(num) - Добавит num в последнюю ячейку массива чисел b.GetStrCount() - Вернёт длину автозаполненного массива строк b.GetNumCount() - Вернёт длину автозаполненного массива чисел b.Delete() - удалит Buffer При загрузке/сохранении скрипта делает активным окно УО и, если открыт редактор - выводит его на 1 план. Кнопки в редакторе: Sweep Code - расставляет пробелы во всём тексте 'sub' и 'end sub' начинаются с самого начала строчки, всё что между ними - приводится в "нормальный" вид Реализована поддержка else if в конструкции if else endif. Реализована "Перегрузка процедур и функций" Пример использования: Code: sub main() Реализована работа с *.mul файлами Ультимы. Класс поиска пути на карте (пока что не кротчайшего): Code: PathFind(UOPath, MapNum, Z, Alg) - Первый конструктор. UOPath - путь к папке УО с *.mul файлами, MapNum - номер карты, для которой вычисляется путь, Z координата (пока что не работает), Alg - Выбор алгоритма поиска пути, может принимать значения 0 (волновой алгоритм поиска) и 1 (алгоритм поиска А*) см. википедию по сути алгоритмов. Работает с файлами: map*.mul, statics*.mul, staidx*.mul, tiledata.mul, multi.mul, art.mul, artidx.mul, verdata.mul Карта, созданная классом: Пример кода поиска пути: Code: var UOPath='E:\Ultima Online Abyss' #Путь к папке с *.mul файлами УО Может застревать на входах/выходах из пещер, там сложная статика, пока ещё не разобрался с ней. Клиент не может пройти на свободном месте. Добавил функции по работе с тайлами: Code: UO.SetMulPath(Path) - Установить путь к папке с *.mul файлами (map*.mul, statics*.mul, staidx*.mul, tiledata.mul). Path - строка. GetLandscapeTile возвращает информацию в формате TileID, при включенной ShowZ в формате TileID(Z) GetStaticTiles так же, как и GetLandscapeTile, но перечисляет все тайлы статики, находящиеся в заданных координатах через запятую. Если тайлов статики не обнаружено - вернет пустую строку. При ошибке возвращают строку -1. Пример: Code: sub test_gettile() Выведет в чат: Code: Landscape Tile ID(Z) = 0x00C4(0) Чтоб узнать, проходимый это тайл или нет: Узнайте TileID, укажите TileGroup (земля (0) или статика (1)) Флаг проходимости тайлов 0x40 Проверьте тайл на проходимость: Code: if Contains(uo.hex2int(UO.GetTileFlags(TileGroup,TileID)),0x40) then Флаги УО (источник http://uo.stratics.com/heptazane/fileformats.shtml): Code: 0x00000001 Background Добавил возможность вызова скрипта с параметрами из хоткеев (или создание нового трида из уже запущенного скрипта) ,exec FunctionName#Params1#...#ParamN FunctionName - соответственно имя функции; Params - передаваемые в неё параметры. Params перечисляются используя разделитель не запятую, а #. Ограничение по кол-ву параметров - 20. Параметры строчного типа должны и быть вковычках. Числовые параметры или имена переменных нужно записывать без ковычек. Если в строчке необходим пробел - он должен быть заменён на $, ибо в обработку дллкой приходит функция уже без пробелов. Пример: Требуется вызвать функцию asd с параметрами: Переменная,Число,Строка Где-то на просторах скрипта находится: Code: var Param1='Param1_data' В окне УО (или забиваем в хоткей) пишем Code: ,exec asd#Param1#123#'Param3$with$spaces'script.dll обработает этот запрос на вызов функции, создаст временную функцию с названием <FunName>_WithParams(), запустит её и из неё вызовет необходимую функцию Code: sub asd_WithParams()В итоге в систем чате УО имеем: Code: Param1_dataВ списке запущенных скриптов, 10 секунд, будет висеть созданная функция asd_WithParams Добавил функции (по-сути аналог SetGlobal/GetGlobal, только чуть более функциональные) по работе с глобальными переменными: Code: UO.GListSet(Name, Value) #Добавить/заменить глобальную переменную Индексы позиций от 0 до Size-1 Теперь при возникновении ошибки "Unhandled exception in parser." функция, в которой возникла данная ошибка незамедлительно стирается из списка запущенных функций. Добавлена проверка на то, запущенна ли функция в данный момент или нет. Code: UO.FunRunning(String Name) Добавил поиск текста по файлу скрипта (блокнотное Ctrl+F), быстрый переход на указанную строку (Ctrl+G), замену текста (Ctrl+H). Соответствующие кнопки добавлены на панель. Хоткеи редактора: Ctrl+O - открыть скрипт Ctrl+S - быстрое сохранение последнего открытого скрипта. Если вручную не был загружен скрипт - запросит путь для его сохранения. Ctrl+F/G/H - см. выше. Диалоги открытия/сохранения скрипта не блокируют доступ к инжекту и окну УО. Скрин редактора: Над недостатками и всплывающими багами буду работать в свободное время) |
Author: | uslucifer [ 2011-08-10 17:33:02 ] |
Post subject: | Re: Script.dll + include |
Товарищ перезалейте пожалуйста ссылку на свой мод. |
Author: | Mirage [ 2011-08-11 08:34:22 ] |
Post subject: | Re: Script.dll + include |
Злобно, чейто я пропустил эту тему? Кто-нибудь поделитесь файлами - закреплю на неумирающем хостинге их. |
Author: | Juicy Fruit [ 2011-08-14 09:23:48 ] |
Post subject: | Re: Script.dll + include |
uslucifer wrote: Товарищ перезалейте пожалуйста ссылку на свой мод. Готово. Забыл что они удаляются периодически)) Mirage wrote: Злобно, чейто я пропустил эту тему? Кто-нибудь поделитесь файлами - закреплю на неумирающем хостинге их. О, благодарю) |
Author: | Juicy Fruit [ 2012-01-15 21:24:21 ] |
Post subject: | Re: Script.dll + include |
UP! Теперь SynEdit редактор. Пофиксил несколько багов. |
Author: | admir [ 2012-02-01 23:11:23 ] |
Post subject: | Re: Script.dll + include |
! и еще кто-то этим занимается) И это радует) |
Author: | LazySpider [ 2012-04-02 06:31:08 ] |
Post subject: | Re: Script.dll + include |
А кто подкинет идейку использования команды terminate в хоткеях? Ставлю лишь эту команду на хоткей - работает. Если же перечисляю несколько команд на кнопке, то стоящая впереди команда terminate all почему то не отрабатывает, хотя остальные команды за ней выполняются. Все, обошел проблему командой "sayu ,terminate all", вопрос исчерпан |
Author: | Juicy Fruit [ 2012-04-15 08:29:59 ] |
Post subject: | Re: Script.dll + include |
Исправил классик Buffer(). Теперь он работает как нужно. Добавил возможность поставить скрипт на паузу. Соответствующая кнопка добавлена на закладку скриптов. Изменил интерфейс. Доступны 2 версии модуля: с новым интерфейсом и со стандартным интерфейсом. Добавил Перегрузку процедур и функций Теперь функции с одинаковым названием, но разным числом аргументов нормально обрабатываются. Пример: Code: sub main() |
Author: | Mirage [ 2012-04-21 10:09:39 ] |
Post subject: | Re: Script.dll + include |
Хорошая работа. Заметил что с галками только немного напутано: Quote: Галки: Use - Указатель, какой скрипт использовать, Если включено - использует проанализированный скрипт, если выключено - использует стандартный скрипт Show - показывает проанализированный скрипт в окошке скриптов Messages - показывает/скрывает некоторые сообщения редактора в окне УО Comments - При включённой галочке сохраняет пустые и полностью закомментированные строки, при выключенной - убирает их. Show - показывает скрывает пустые и закоментированные строки Comments - у меня не работает вообще никак. Протестировал и на новом и на классическом модуле. Почему то когда закрываешь окно с клиентом во время работающего скрипта вылетает ошибка в винде. Quote: Сигнатура проблемы:
Имя события проблемы: APPCRASH Имя приложения: client.exe Версия приложения: 0.0.0.0 Отметка времени приложения: 39edeb30 Имя модуля с ошибкой: KERNELBASE.dll Версия модуля с ошибкой: 6.1.7601.17651 Отметка времени модуля с ошибкой: 4e211319 Код исключения: 0eedfade Смещение исключения: 0000b9bc Версия ОС: 6.1.7601.2.1.0.256.1 Код языка: 1049 Дополнительные сведения 1: 706b Дополнительные сведения 2: 706be7c4432a593cb30902e5f84c11ff Дополнительные сведения 3: 3997 Дополнительные сведения 4: 3997340c619fcf8a866c03e0889d2bff |
Author: | Juicy Fruit [ 2012-04-21 12:59:23 ] |
Post subject: | Re: Script.dll + include |
Mirage wrote: Хорошая работа. Пасиб) Mirage wrote: Заметил что с галками только немного напутано: ... Show - показывает скрывает пустые и закоментированные строки Comments - у меня не работает вообще никак. Show - будет отображать скрипт уже с учётом инкладов в редакторе. Если вырублена - показыват только Вашь файл скрипта, к примеру autoload.sc, но если её включить - она будет отображать в редакторе то, что пойдёт в парсер, если включена галочка Use. Если Use выключена - в парсер пойдёт только содержимое файла autoload.sc. Comments - мне только для отладки нужна была, щас ваще не актуальна) Её можно вообще не использовать. Но если есть желание - ставим галочку Comments и тыкаем обновить, тогда скрипт с комментами будет виден при установленной галочке Show. Без принудительного обновления - ничо не будет) Mirage wrote: Протестировал и на новом и на классическом модуле. Почему то когда закрываешь окно с клиентом во время работающего скрипта вылетает ошибка в винде. Quote: Сигнатура проблемы: Имя события проблемы: APPCRASH Имя приложения: client.exe Версия приложения: 0.0.0.0 Отметка времени приложения: 39edeb30 Имя модуля с ошибкой: KERNELBASE.dll Версия модуля с ошибкой: 6.1.7601.17651 Отметка времени модуля с ошибкой: 4e211319 Код исключения: 0eedfade Смещение исключения: 0000b9bc Версия ОС: 6.1.7601.2.1.0.256.1 Код языка: 1049 Дополнительные сведения 1: 706b Дополнительные сведения 2: 706be7c4432a593cb30902e5f84c11ff Дополнительные сведения 3: 3997 Дополнительные сведения 4: 3997340c619fcf8a866c03e0889d2bff Если просто на крестик закрыть? Или Log Out -> Quit? Это возникло после добавления туда компонента TSynEdit. Странно, но почему-то если выходить из УО Log Out -> Quit то клиент либо крашит, либо какие-то ошибки лезут(( Пока не понял в чём причина(( Но если на крестик закрывать - всё нормально, с запущенным скриптом и без... |
Author: | Mirage [ 2012-04-21 18:00:34 ] |
Post subject: | Re: Script.dll + include |
Через логаут. Если крестиком то не всегда сохраняются настройки чара - приходится настраивать десктоп по новой. |
Author: | Juicy Fruit [ 2012-04-21 19:44:45 ] |
Post subject: | Re: Script.dll + include |
Mirage wrote: Через логаут. Если крестиком то не всегда сохраняются настройки чара - приходится настраивать десктоп по новой. Хмм. Если закрыт клиент, но чар ещё остаётся висеть в мире - то да. Я обычно дожидаюсь пока чар пропадёт из мира (секунд 30, вроди везде так, но мб и от конфига самого шарда зависит) и только после этого захожу. Десктоп не падает) При краше в ПВП это канешн не актуально, там надо как можно быстрее вернуться в УО, думаю, если в десктопе порыца - можно накрутить что-то, чтоб десктоп был одинаков что для нормального логина, что для логина, когда чар ещё "висит" в мире) Если инжа крашит - напиши в асю 287047638 скину свою модификацию, мож понравится, шанс крашей свёл к минимуму, по крайней мере на ДРВ. |
Author: | Juicy Fruit [ 2012-05-13 13:22:51 ] |
Post subject: | Re: Script.dll + include |
UP! 13.05.12 Научил скрипт модуль работать с картой. о_О Новый класс: Code: PathFind Функции и процедуры: Code: PathFind(UOPath) - Конструктор. UOPath - путь к папке УО с *.mul файлами Примеры: Code: var p=PathFind('C:\Ultima Online') #Инизиализируем, указывая путь к папке с УО. Глобально не обязательно. Если требуется обычная "туда-сюдашечка" актуальнее брать за аналог main1(), просто менять указатели местами First()/Last() // Next()/Back() Если расстояния большие - main2() будет обрабатывать инфу о координатах постоянно, при вызове каждого из setup(), что не очень логично. Если алгоритм не смог добраться до конечной точки больше, чем на 1 тайл - скорее всего выдаст ошибку. Работает только с картой и статикой из файлов. Всякие вручную установленные фонари, заборы, двери и т.п. - игнорирует, т.к. не может получить нормальный доступ к инжекту. По крайней мере, пока что.) Работает пока что только с map0.mul, statics0.mul, staidx0.mul, tiledata.mul. |
Author: | Juicy Fruit [ 2012-06-12 21:24:04 ] |
Post subject: | Re: Script.dll + include |
Не большое обновление. Добавил поиск текста по файлу скрипта (блокнотное Ctrl+F), быстрый переход на указанную строку (Ctrl+G), замену текста (Ctrl+H). Соответствующие кнопки добавлены на панель. Хоткеи: Ctrl+O - открыть скрипт Ctrl+S - быстрое сохранение последнего открытого скрипта. Если вручную не был загружен скрипт - запросит путь для его сохранения. Ctrl+F/G/H - см. выше. Обновил ссылки и скрин. |
Author: | Gromiz [ 2012-07-07 07:18:33 ] |
Post subject: | Re: Script.dll + include |
вожможно добавить кнопку вызова панели быстрого запуска скриптов? т.е. открываем инжект, жмем эту кнопку, отдельно появляется панель с кнопка от 1 до 10 например, если мышкой по какому-нибудь скрипту кликнуть, то запускается скрипт, который привязан к этой кнопке. Желательно загружать скрипт из другого файла, а не из имеющегося. возможно ли? п.с. подобная функция реализована в уопилот 1,07 версии (окошки управлением коробля, параметры и быстры запуск макросов) |
Author: | Mirage [ 2012-07-07 16:52:50 ] |
Post subject: | Re: Script.dll + include |
а зачем? Есть же хоткеи. Чтобы не забывать на какую кнопку сделал лут чтоли? |
Author: | Juicy Fruit [ 2012-07-08 10:22:38 ] |
Post subject: | Re: Script.dll + include |
Gromiz wrote: вожможно добавить кнопку вызова панели быстрого запуска скриптов? т.е. открываем инжект, жмем эту кнопку, отдельно появляется панель с кнопка от 1 до 10 например, если мышкой по какому-нибудь скрипту кликнуть, то запускается скрипт, который привязан к этой кнопке. Желательно загружать скрипт из другого файла, а не из имеющегося. возможно ли? п.с. подобная функция реализована в уопилот 1,07 версии (окошки управлением коробля, параметры и быстры запуск макросов) Думаю что можно, но Mirage wrote: а зачем? Есть же хоткеи. Чтобы не забывать на какую кнопку сделал лут чтоли? |
Author: | Juicy Fruit [ 2012-07-09 07:08:22 ] |
Post subject: | Re: Script.dll + include |
Alex82 wrote: Чем может быть вызвано? вот сам скрипт Code: sub filterspeech() То есть по сути он должен отработать и пропасть из экрана запущенных скриптов но продолжает висеть.При попытке кликнуть по нему мышкой выдает ошибку как на скриншоте сверху. Проявляется хаотично- тобишь через раз Версия инжекта 508.18 VeNdOr Версия АSM -802.06 Standart Edition Вечером проверю, пару раз было такое, но не придавал этому особого значения) |
Author: | Alex82 [ 2012-07-09 11:34:58 ] |
Post subject: | Re: Script.dll + include |
Оно вроде не мешает- но нервирует |
Page 1 of 10 | All times are UTC+02:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |