Бесконечный цикл |
Здравствуйте, гость ( Вход | Регистрация )
Бесконечный цикл |
Jan 2 2005, 20:03
Сообщение
#1
|
|||
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Выполнение этого куска скрипта приводит к многократному созданию плейсебла в одной точке + подвисанию и таймауту скрипта. ГДЕ здесь бесконечный цикл создания объекта?! :swoon: Сообщение отредактировал virusman - Jan 2 2005, 21:00 |
||
Jan 2 2005, 20:42
Сообщение
#2
|
|
Level 2 Класс: Волшебник Характер: True Neutral Раса: Эльф |
Возможно надо сделать так чтобы этот скрипт выполнялся 1 раз
то есть добавить переменную Сообщение отредактировал Lukas Addon - Jan 2 2005, 21:12 |
Jan 2 2005, 21:15
Сообщение
#3
|
|||
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
ВИРЬ, ну ты даешь!!
надеюсь, объяснять не надо, почему так, а не так, как ты написал? (примерно неделю назад ТОЧНО ТАКОЙ ЖЕ случай зацикливания кто-то выложил. Я там расписал, почему так, а не иначе. ) |
||
Jan 2 2005, 21:17
Сообщение
#4
|
|
Level 11 Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Маппинг |
И что не понятного?
пока oTemp = GetFirstObjectInArea(OBJECT_SELF); - будет "совпадать" - будет выполняться условие... может стоит сделать for (правда не помню я - есть ли он в НВНе) =) Ну или в While вписать другие условия... А вообще - что требуется от скрипта? |
Jan 2 2005, 21:24
Сообщение
#5
|
|||
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Брр. Опять не тот исходник выложил. У меня и:
Действовал абсолютно аналогично. |
||
Jan 2 2005, 21:28
Сообщение
#6
|
|||||
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
Эх..ладно, что-то меня совесть замучила. Сейчас объясню для тех, кто не понял еще раз и тему закрою. (Твин, можно это в ФАК занести потом будет)
Идея скрипта такова: замещение одного объекта другим. Те цикл, который перебирает все объекты локации, и если тэг объекта совпадает с тэгом заменяемого объекта (тут это "vir_dw_snow") то мы создаем новый объект, а старый удаляем. А теперь что НА САМОМ деле тут происходит. Первый же объект в локации, который будет иметь тэг не "vir_dw_snow" повесит скрипт. ТАК КАК ПЕРЕОБОЗНАЧЕНИЕ ПЕРЕМЕННОЙ oTemp ПРОИСХОДИТ ВНУТРИ УСЛОВИЯ ПРОВЕРКИ ТЭГА. Другими словами, если тэг не "vir_dw_snow" то этот объект и будет вечно бегать по циклу, другой не берется. Что делать? Правильно, перенести переобозначение объекта (oTemp = GetNextObjectInArea(OBJECT_SELF);) в тело цикла. Те получаем вот это:
Добавлено в [mergetime]1104690570[/mergetime] Вирь, да не может такого быть. У меня такие скрипты работают как часы. |
||||
Jan 2 2005, 21:37
Сообщение
#7
|
|
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Да я знаю, в чем баг скрипта, который в первом посте. Это я просто криво его восстановил после различных безуспешных попыток что-то другое намудрить. Первоначальный вариант был как у тебя. И он виснет. :swoon:
Сообщение отредактировал virusman - Jan 2 2005, 21:40 |
Jan 2 2005, 22:24
Сообщение
#8
|
|
Level 2 Класс: Некромант Характер: Chaotic Evil Раса: Нежить |
Такая же проблема и у меня сегодня возникла. Но я только создаю объекты в таком цикле.
Причина возможно кроется в том что, в цикле по всем объекта в локе нельзя создавать и, возможно, удалять объекты, находящиеся в этой же локе. Похоже меняются указатели на след. объект. |
Jan 2 2005, 22:31
Сообщение
#9
|
|
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
я писал скрипты отчистки локации от мусора. Все работает. А это удаление объектов в цикле.
|
Jan 2 2005, 22:33
Сообщение
#10
|
|||||
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Я пробовал так:
Результат: игра уже не виснет, но при каждом вызове создается куча плейсеблов в одной точке, после чего скрипт вылетает с таймаутом (при след. вызове скрипт все-таки переходит на другую точку). |
||||
Jan 2 2005, 22:35
Сообщение
#11
|
|||
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
|
||
Jan 2 2005, 22:35
Сообщение
#12
|
|||
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Да у меня тоже.. Даже отложенные вызовы и вложенные циклы в некоторых местах применялись. Но именно в этом скрипте почему-то все виснет. Может, потому что он висит на heartbeat локации? Я с этим уже не в первый раз сталкиваюсь: чуть раньше у меня один модуль вообще вызывал синий экран и зависание всего компа, когда heartbeat локации посылал команды NPC. Сообщение отредактировал virusman - Jan 2 2005, 22:37 |
||
Jan 2 2005, 22:43
Сообщение
#13
|
|||||
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Результат тот же. Виснет. |
||||
Jan 2 2005, 23:33
Сообщение
#14
|
|||
Level 2 Класс: Некромант Характер: Chaotic Evil Раса: Нежить |
Сделал в 2 этапа. Первый цикл проходит, но при включении 2го - повисание. Этот скрипт висит на OnEnter локи. Или у меня во втором цикле ошибка? Сообщение отредактировал Comper - Jan 2 2005, 23:34 |
||
Jan 2 2005, 23:36
Сообщение
#15
|
|
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
я не работаю с for в скриптах почти никогда.
i=1; while (i<=nNum) { .... i++; } |
Jan 2 2005, 23:43
Сообщение
#16
|
|
Level 2 Класс: Некромант Характер: Chaotic Evil Раса: Нежить |
Эффект тот же.
|
Jan 3 2005, 00:02
Сообщение
#17
|
|
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Кстати, юзайте Script Debugger. :) Завтра гляну, что он напишет про мой скрипт.
Сообщение отредактировал virusman - Jan 3 2005, 00:03 |
Jan 3 2005, 00:09
Сообщение
#18
|
|
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
что за дебагер?
|
Jan 3 2005, 10:36
Сообщение
#19
|
|||
Level 5 Класс: Некромант Характер: Neutral Evil Раса: Нежить NWN: Скриптинг [PW] |
Вариант рабочий:
OBJECT_SELF - в данном случае это модуль. Остается только проблема с созданием новых плейсов на месте старых статичных. Статичеые плейсы не удаляются и в _первом_ цикле участвуют (но потом куда-то из цикла пропадают, странно :xz:). В общем, если девелоппер гарантирует, что все плейсы, заменяемые в цикле будут не статичными, то всё окей. Имхо. :yes: |
||
Jan 3 2005, 11:54
Сообщение
#20
|
|
4-х Кубовый Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора |
Да, Твин верно заметил, что для уничтожаемых плэйсов надо ОБЯЗАТЕЛЬНО снимать галку Static. Не забывайте!
|
Jan 3 2005, 14:07
Сообщение
#21
|
|||
Level 11 Класс: Вор Характер: Neutral Evil Раса: Эльф NWN: Скриптинг [PW] Validor2 |
вот это должно работать... DBColl: Чуток исправлю... |
||
Текстовая версия | Сейчас: 18th April 2024 - 07:13 |