06.08.2007, 15:58 (Сообщение последний раз редактировалось: 14.12.2010, 19:29 KnightL.)
Первый файл -библиотека для текстового окна. Тому, кто загружал и работал с предыдущей версией их скачивать не надо.
Второй файл - библиотека для открытия диалоговых окон. У меня возникли какие-то проблеммы с API(программа просто вылетала при любых действиях после диалога). Раньше этот файл не использовался
Третий файл - сама программа.
И кста, по поводу "Script Debuger" - это действительно дебугер? %). В смысле что отслеживает выполнение скрипта во время работы ПЗ? . Или это все-же что-то вроде syntax-checker ? %).
06.08.2007, 22:09 (Сообщение последний раз редактировалось: 06.08.2007, 22:41 KnightL.)
2Sagrer Вообще-то debuger - это слишком громко сказано. Но на самом деле, кроме ошибок, заложенных в самом начале скрипта, других причин для этих самых ошибок нет (кроме работы с глобальными переменными, добавлением предметов, т.е всего того, что указывает пользователь. Я это понимаю. Но просто со скриптами есть такая противная проблема: если есть хоть какая-то ошибка, то он без вопросов не выполняет весь скрипт. И попробуй в таких условиях исправит ошибку. Я написал программу, которая делает предварительную проверку текста для выявления таких вот ошибок. Другое название, кроме как "debuger" я не смог подобрать в отношении своей программы
Цитата:какой ужосс
Согласен, но я никак не соберусь начать изучать C (хотя вроде уже собрался)
07.08.2007, 15:48 (Сообщение последний раз редактировалось: 07.08.2007, 16:10 SnAIper.)
Эм... Можно багрепорты постить сюда?
Короче вот что мне наобум пришло в голову:
Код:
//Превед!
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
То есть небольшая доработка всё-же нужна, не так ли?
Edit: Поменял первые 2 строчки на одну "GlobalVars (". Ошибок осталось всего две:
Строка 14: ожидалось выражение типа float
Строка 14: непонятное выражение "HeloMoto"
Edit 2: После удаления нафиг всех переменных и условия скрипта, я удалил из ворлдскрипта киллскрипт, и сделал вызов Walker(1) (тогда как в декларации переменных не было). Программа вылетела с Run Time Error 9: subscript out of range. На этом пока прекращаю тестирование...
Edit 3: Да, и ещё. Первая версия валидатора работала по такому же принципу: шла по тексту, шота искала... Короче она была менее, конечно, завершена, чем этот Debugger - но тем не менее. Меня Сагрер вовремя предупредил, что нужно работать по другому принципу - считывание по символам и отслеживание своей позиции в коде... Ну не знаю, я сейчас вижу, что он прав...
Цитата:Строка 18: КиллСкрипт может быть только на 1й строчке
насколько помню - может, может. Мну в Весне вроде писал пару скриптов таких - когда скрипт убивался не просто так а опционально, а так висел и свою работу делал что и было задумано.
Сагрер, нет, я имел ввиду не написание сей строки в первом if'е скрипта, а то, что киллскрипт может идти сразу после Then'а. И никак иначе. А то игра вылетит.
08.08.2007, 13:53 (Сообщение последний раз редактировалось: 08.08.2007, 13:58 KnightL.)
Я смотрю, баги находятся. В таком случае я думаю, что я лучше выложу свою программу, а те кто ей будут пользоваться отпишутся здесь по поводу некоторых ошибок. Сразу предупрежу, что не работают пункты меню Сохранить, Загрузить, Шрифт и Справка.
А теперь по поводу найденых ошибок...
О том, что нельзя использовать переменные и процедур в начале имена стандартных, я не знал. Как и о том, что нельзя писать KillScript не на первой строке процедуры (игра просто вылетает с ошибкой). Ту ошибку я еще в самом начале работы сделал. При работе я постоянно добавлял в функции опциональные параметры, чтоб не исправлять старых. Но теперь эта ошибка убрана. Сообщение на строке 14 так и предполагалось. Лично я это сообщение ошибкой не считаю.
Теперь о предположительных предупреждениях:
Цитата:Предупреждение: Скрипт "Walker" объявлен, но не вызван ни разу.
Если ты отнес эту ошибку к предупреждениям, то она не критична. Может быть я добавлю ее позже.
Цитата:Предупреждение: Скрипт "Walker" не содержит переменных, а это не всегда работает
А ты в этом уверен. Выложи мне хоть один скрипт, где были проблемы из-за отсутствия параметров у процедуры, предварительно проверив его моей программой. Могу тебя заверить, что ты увидишь в этом скрипте ошибку типа "найдено непонятное выражение 'this'" и "ожидалось увдеть переменную типа object"
2 SnAIper а ты точно уверен, что моя программа идет по строкам. Наверное ты просто так подумал из-за отсортированности списка. На самом деле программ идет отнюдь не по прямой.
08.08.2007, 14:15 (Сообщение последний раз редактировалось: 08.08.2007, 14:25 Serж.)
В общем скачал, затестил. Скажу сразу, что я использовал 100% рабочий скрипт.
Цитата:Строка ¹127. На строке найдено непонятное выражение : 'ConsoleString("<---|||==|||--->")'
Странно, но это вполне нормальное 'выражение'
Цитата:Строка ¹145. Слишком много параметров у процедуры.
Но на сторке 145 мы видим это:
ConsoleString("Vy uvideli ubitogo ohrannika, provalivaem podzadaniya")
Цитата:Строка ¹513. Использование процедуры в самой себе
Строка ¹513. На строке найдено непонятное выражение dormidont_zone
Строка ¹513. На строке ожидалось увидеть процедуру
Строка ¹528. Использование процедуры в самой себе
Строка ¹528. На строке найдено непонятное выражение dormidont_zone
Строка ¹528. На строке ожидалось увидеть процедуру
Script dormidont_zone
(
if
(
//неинформативная часть вырезана
IsEqual(ttt,0)
)
then
(
KillScript()
//неинформативная часть вырезана
dormidont_zone(zakl,0)
)
if
(
//неинформативная часть вырезана
IsEqual(ttt,1)
)
then
(
KillScript()
dormidont_zone(zakl,0)
)
)
Тоже странно. Здесь обнуляется скрипт, что бы каждый раз при выполнении условия выполнялось действие.
На строке 593 аналогичные сообщения.
На этом "ошибки" закончились. Дебаггер в принципе хорош, но все же требует доработки.
[UPDATE]
А теперь я вбил туда заведомо подпорченый скрипт. Как ни странно, но практически все ошибки он выявил правильно . Это хорошо Но опять же былили проблемы как и с первым скриптом, он указывал на те строчки где ошибок нет. Почему-то чаще всего в ConsoleString. Но уже от него есть большая польза. Он указывает на строку с ошибкой, а самому проверить не составит труда
Я буду исправленную версию выкладывать без dll. Слишком они много весят. Поэтому программу надо класть к предыдущей.
2 Sarger. Не мог бы ты выложить строку ¹127. Интересно было бы на нее посмотреть.
С вызовом своей процедуры я перестарался. Я просто забыл, что как раз на этом могут работать скрипты.
Ошибку с запятой я забыл исправить в отношении кавычек. Теперь все нормально.
P.S Двойное нажатие на ошибку выделит строку с этой ошибкой
08.08.2007, 17:03 (Сообщение последний раз редактировалось: 08.08.2007, 17:09 Serж.)
KnightL, отлично, теперь прога работает нормально. Осталось поправить баг 127 строки %) . Спасиб, за нужную прогу) Пойду еще потестю.
[UPDATE]
Попробовал вбить в прогу скрипт Весны ( из файла SuslPrtlGip.mob )... Появилось множество сообщений об ошибке команды GroupAdd и выскачила мессага: