Script Debuger
#1
Первый файл -библиотека для текстового окна. Тому, кто загружал и работал с предыдущей версией их скачивать не надо.
Второй файл - библиотека для открытия диалоговых окон. У меня возникли какие-то проблеммы с API(программа просто вылетала при любых действиях после диалога). Раньше этот файл не использовался
Третий файл - сама программа.


Файлы вложений
.zip   richtext.zip (Размер: 198.67 KB / Загрузок: 389)
.zip   comdlg32.zip (Размер: 197.49 KB / Загрузок: 397)
.zip   ScriptDebuger.zip (Размер: 50.11 KB / Загрузок: 401)
Ответ
#2
Они действительно оказались там. Значит необходимо будет добавить после загрузки просьбу открыть mob зоны.
Ответ
#3
Цитата:ActiveX TextBox для Visual Basic

какой ужосс 0_0

И кста, по поводу "Script Debuger" - это действительно дебугер? %). В смысле что отслеживает выполнение скрипта во время работы ПЗ? Wink. Или это все-же что-то вроде syntax-checker ? %).
Gipat Group
Ответ
#4
имхо, просто проверка синтаксиса + проверка обьявлены переменные или нет, типа пре-линковка, или хз как назвать...

сделать дебаг во время выполнения, это ппц еще та работа ))
[Изображение: userbar-28182.png]

[Изображение: ishtwar_com_bar_00_00.gif]
Ответ
#5
2Sagrer Вообще-то debuger - это слишком громко сказано. Но на самом деле, кроме ошибок, заложенных в самом начале скрипта, других причин для этих самых ошибок нет (кроме работы с глобальными переменными, добавлением предметов, т.е всего того, что указывает пользователь. Я это понимаю. Но просто со скриптами есть такая противная проблема: если есть хоть какая-то ошибка, то он без вопросов не выполняет весь скрипт. И попробуй в таких условиях исправит ошибку. Я написал программу, которая делает предварительную проверку текста для выявления таких вот ошибок. Другое название, кроме как "debuger" я не смог подобрать в отношении своей программы
Цитата:какой ужосс
Согласен, но я никак не соберусь начать изучать C (хотя вроде уже собрался)
Ответ
#6
А заценить мона? Smile
Ответ
#7
Элемент я уже нашёл в стандартном комплекте программы Smile ;-)
Ответ
#8
Эм... Можно багрепорты постить сюда? Smile

Короче вот что мне наобум пришло в голову:


Код:
//Превед!
GlobalVars
(
 Preved : object
)

DeclareScript Walker()

Script Walker
//Hello moto!
(
 if
 (
   IsEqual(HelloMoto,1)
 )
 then
 (
   ConsoleString("HelloMoto!")
   KillScript()
 )
)

WorldScript
(
 KillScript()
)

Что я ожидал увидеть:

Код:
Строка 7: Неправильное название скрипта. Имя скрипта типа "Стандартная функция"+"Некий текст" запрещено.
Строка 14: Необъявленная переменая типа float "HelloMoto"
Строка 18: КиллСкрипт может быть только на 1й строчке
Строка 25: КиллСкрипт не допустим в ворлдскрипте.
Предупреждение: Скрипт "Walker" объявлен, но не вызван ни разу.
Предупреждение: Скрипт "Walker" не содержит переменных, а это не всегда работает

Что я увидел:

Код:
Строки 2-14: "Вместо GlobalVars найдено %s".
Исключение на строке 02: Вместо GlobalVars ( найдено GlobalVars.

Строка 14: ожидалось выражение типа float
Строки 15-26: см. строки 2-14

То есть небольшая доработка всё-же нужна, не так ли? Smile

Edit: Поменял первые 2 строчки на одну "GlobalVars (". Ошибок осталось всего две:
Строка 14: ожидалось выражение типа float
Строка 14: непонятное выражение "HeloMoto"

Edit 2: После удаления нафиг всех переменных и условия скрипта, я удалил из ворлдскрипта киллскрипт, и сделал вызов Walker(1) (тогда как в декларации переменных не было). Программа вылетела с Run Time Error 9: subscript out of range. На этом пока прекращаю тестирование...

Edit 3: Да, и ещё. Первая версия валидатора работала по такому же принципу: шла по тексту, шота искала... Короче она была менее, конечно, завершена, чем этот Debugger - но тем не менее. Меня Сагрер вовремя предупредил, что нужно работать по другому принципу - считывание по символам и отслеживание своей позиции в коде... Ну не знаю, я сейчас вижу, что он прав...
Ответ
#9
Цитата:Строка 18: КиллСкрипт может быть только на 1й строчке

насколько помню - может, может. Мну в Весне вроде писал пару скриптов таких - когда скрипт убивался не просто так а опционально, а так висел и свою работу делал что и было задумано.
Gipat Group
Ответ
#10
Jet, фокус работает, спасибо Smile

Сагрер, нет, я имел ввиду не написание сей строки в первом if'е скрипта, а то, что киллскрипт может идти сразу после Then'а. И никак иначе. А то игра вылетит.
Ответ
#11
Цитата:а то, что киллскрипт может идти сразу после Then'а. И никак иначе. А то игра вылетит.

гхм, не помню такого.... Уверен?
Gipat Group
Ответ
#12
Я смотрю, баги находятся. В таком случае я думаю, что я лучше выложу свою программу, а те кто ей будут пользоваться отпишутся здесь по поводу некоторых ошибок. Сразу предупрежу, что не работают пункты меню Сохранить, Загрузить, Шрифт и Справка.


А теперь по поводу найденых ошибок...

О том, что нельзя использовать переменные и процедур в начале имена стандартных, я не знал. Как и о том, что нельзя писать KillScript не на первой строке процедуры (игра просто вылетает с ошибкой). Ту ошибку я еще в самом начале работы сделал. При работе я постоянно добавлял в функции опциональные параметры, чтоб не исправлять старых. Но теперь эта ошибка убрана. Сообщение на строке 14 так и предполагалось. Лично я это сообщение ошибкой не считаю.
Теперь о предположительных предупреждениях:
Цитата:Предупреждение: Скрипт "Walker" объявлен, но не вызван ни разу.
Если ты отнес эту ошибку к предупреждениям, то она не критична. Может быть я добавлю ее позже.
Цитата:Предупреждение: Скрипт "Walker" не содержит переменных, а это не всегда работает
А ты в этом уверен. Выложи мне хоть один скрипт, где были проблемы из-за отсутствия параметров у процедуры, предварительно проверив его моей программой. Могу тебя заверить, что ты увидишь в этом скрипте ошибку типа "найдено непонятное выражение 'this'" и "ожидалось увдеть переменную типа object"

2 SnAIper а ты точно уверен, что моя программа идет по строкам. Наверное ты просто так подумал из-за отсортированности списка. На самом деле программ идет отнюдь не по прямой.


Файлы вложений
.zip   ScriptDebuger.zip (Размер: 239.57 KB / Загрузок: 395)
Ответ
#13
В общем скачал, затестил. Скажу сразу, что я использовал 100% рабочий скрипт.

Цитата:Строка ¹127. На строке найдено непонятное выражение : 'ConsoleString("<---|||==|||--->")'
Странно, но это вполне нормальное 'выражение'

Цитата:Строка ¹145. Слишком много параметров у процедуры.

Но на сторке 145 мы видим это:
ConsoleString("Vy uvideli ubitogo ohrannika, provalivaem podzadaniya")

Цитата:Строка ¹513. Использование процедуры в самой себе
Строка ¹513. На строке найдено непонятное выражение dormidont_zone
Строка ¹513. На строке ожидалось увидеть процедуру
Строка ¹528. Использование процедуры в самой себе
Строка ¹528. На строке найдено непонятное выражение dormidont_zone
Строка ¹528. На строке ожидалось увидеть процедуру

Строка 513 выглядит так:
dormidont_zone(zakl,0)

Полный код:

Код:
DeclareScript dormidont_zone(zakl : string, ttt : float)

Script dormidont_zone
(
 if
 (
    //неинформативная часть вырезана
    IsEqual(ttt,0)
 )
 then
 (
   KillScript()
   //неинформативная часть вырезана
   dormidont_zone(zakl,0)
 )

 if
 (
   //неинформативная часть вырезана
   IsEqual(ttt,1)
 )
 then
 (
   KillScript()
   dormidont_zone(zakl,0)
 )
)

WorldScript
(
 sleep(2)
 dormidont_zone("teleport",0)
)

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

На строке 593 аналогичные сообщения.

На этом "ошибки" закончились. Дебаггер в принципе хорош, но все же требует доработки.

[UPDATE]

А теперь я вбил туда заведомо подпорченый скрипт. Как ни странно, но практически все ошибки он выявил правильно . Это хорошо Wink Но опять же былили проблемы как и с первым скриптом, он указывал на те строчки где ошибок нет. Почему-то чаще всего в ConsoleString. Но уже от него есть большая польза. Он указывает на строку с ошибкой, а самому проверить не составит труда Wink
Ответ
#14
Я буду исправленную версию выкладывать без dll. Слишком они много весят. Поэтому программу надо класть к предыдущей.

2 Sarger. Не мог бы ты выложить строку ¹127. Интересно было бы на нее посмотреть.
С вызовом своей процедуры я перестарался. Я просто забыл, что как раз на этом могут работать скрипты.
Ошибку с запятой я забыл исправить в отношении кавычек. Теперь все нормально.

P.S Двойное нажатие на ошибку выделит строку с этой ошибкой


Файлы вложений
.zip   ScriptDebugger.zip (Размер: 40.73 KB / Загрузок: 449)
Ответ
#15
Цитата:2 Sarger. Не мог бы ты выложить строку ¹127.

какую ще строку? 0_0 %). Имхо ты во-первых ошибся ником, во вторых там в цитате так и написана та самая строка...

З.Ы. просто требуй у аффторов сообщений про баги полный текст скрипта - и отлаживай уже именно его у себя.
Gipat Group
Ответ
#16
Да, точно ошибся. Да этот скрипт и не очень сложно отлаживать без скрипты, если знаешь причины вызова тех или иных ошибок.
Ответ
#17
KnightL, отлично, теперь прога работает нормально. Осталось поправить баг 127 строки %) . Спасиб, за нужную прогу) Пойду еще потестю.

[UPDATE]
Попробовал вбить в прогу скрипт Весны ( из файла SuslPrtlGip.mob )... Появилось множество сообщений об ошибке команды GroupAdd и выскачила мессага:


Файлы вложений Эскизы(ов)
   
Ответ
#18
А можно мне посмотреть эту строчку
Ответ
#19
Вот, в текстовике полный скрипт из моба SuslPrtlGip


Файлы вложений
.txt   SuslPrtlGip.txt (Размер: 130.44 KB / Загрузок: 707)
Ответ
#20
Ошибки исправил. Теперь буду цеплять новые версии к первому посту темы.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)