Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> Бесконечный цикл
virusman
сообщение Jan 2 2005, 20:03
Сообщение #1


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Neverwinter Script Source
oTemp = GetFirstObjectInArea(OBJECT_SELF);
            while(GetIsObjectValid(oTemp))
            {
                if(GetTag(oTemp)=="vir_dw_snow")
                {
                    CreateObject(OBJECT_TYPE_PLACEABLE, "x0_snowdrift", GetLocation(oTemp));
                    DestroyObject(oTemp);
                    oTemp = GetNextObjectInArea(OBJECT_SELF);
                }
            }

Выполнение этого куска скрипта приводит к многократному созданию плейсебла в одной точке + подвисанию и таймауту скрипта. ГДЕ здесь бесконечный цикл создания объекта?! :swoon:

Сообщение отредактировал virusman - Jan 2 2005, 21:00
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
Lex
сообщение Jan 2 2005, 21:28
Сообщение #2


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Эх..ладно, что-то меня совесть замучила. Сейчас объясню для тех, кто не понял еще раз и тему закрою. (Твин, можно это в ФАК занести потом будет)

Neverwinter Script Source
oTemp = GetFirstObjectInArea(OBJECT_SELF);
            while(GetIsObjectValid(oTemp))
            {
                if(GetTag(oTemp)=="vir_dw_snow")
                {
                    CreateObject(OBJECT_TYPE_PLACEABLE, "x0_snowdrift", GetLocation(oTemp));
                    DestroyObject(oTemp);
                    oTemp = GetNextObjectInArea(OBJECT_SELF);
                }
            }

Идея скрипта такова: замещение одного объекта другим. Те цикл, который перебирает все объекты локации, и если тэг объекта совпадает с тэгом заменяемого объекта (тут это "vir_dw_snow") то мы создаем новый объект, а старый удаляем.

А теперь что НА САМОМ деле тут происходит.
Первый же объект в локации, который будет иметь тэг не "vir_dw_snow" повесит скрипт. ТАК КАК ПЕРЕОБОЗНАЧЕНИЕ ПЕРЕМЕННОЙ oTemp ПРОИСХОДИТ ВНУТРИ УСЛОВИЯ ПРОВЕРКИ ТЭГА. Другими словами, если тэг не "vir_dw_snow" то этот объект и будет вечно бегать по циклу, другой не берется.

Что делать?
Правильно, перенести переобозначение объекта (oTemp = GetNextObjectInArea(OBJECT_SELF);) в тело цикла. Те получаем вот это:
Neverwinter Script Source
oTemp = GetFirstObjectInArea(OBJECT_SELF);
            while(GetIsObjectValid(oTemp))
            {
                if(GetTag(oTemp)=="vir_dw_snow")
                {
                    CreateObject(OBJECT_TYPE_PLACEABLE, "x0_snowdrift", GetLocation(oTemp));
                    DestroyObject(oTemp);
                }
                    oTemp = GetNextObjectInArea(OBJECT_SELF);
            }

Добавлено в [mergetime]1104690570[/mergetime]
Вирь, да не может такого быть. У меня такие скрипты работают как часы.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- virusman   Бесконечный цикл   Jan 2 2005, 20:03
- - Lukas Addon   Возможно надо сделать так чтобы этот скрипт выполн...   Jan 2 2005, 20:42
- - Lex   ВИРЬ, ну ты даешь!! Neverwinter Script So...   Jan 2 2005, 21:15
- - 2GoDoom   И что не понятного? пока oTemp = GetFirstObjectIn...   Jan 2 2005, 21:17
- - virusman   Брр. Опять не тот исходник выложил. У меня и: Neve...   Jan 2 2005, 21:24
- - Lex   Эх..ладно, что-то меня совесть замучила. Сейчас об...   Jan 2 2005, 21:28
- - virusman   Да я знаю, в чем баг скрипта, который в первом пос...   Jan 2 2005, 21:37
- - Comper   Такая же проблема и у меня сегодня возникла. Но я ...   Jan 2 2005, 22:24
- - Lex   я писал скрипты отчистки локации от мусора. Все ра...   Jan 2 2005, 22:31
- - virusman   QUOTE Такая же проблема и у меня сегодня возникла....   Jan 2 2005, 22:33
- - Lex   Neverwinter Script SourceoTemp = GetFirstObjectInA...   Jan 2 2005, 22:35
- - virusman   QUOTE я писал скрипты отчистки локации от мусора. ...   Jan 2 2005, 22:35
- - virusman   QUOTE (Lex @ Jan 2 2005, 22:35) Neverwinter Script...   Jan 2 2005, 22:43
- - Comper   Neverwinter Script Sourcestring sName, sTag; int n...   Jan 2 2005, 23:33
- - Lex   я не работаю с for в скриптах почти никогда. i=1; ...   Jan 2 2005, 23:36
- - Comper   Эффект тот же.   Jan 2 2005, 23:43
- - virusman   Кстати, юзайте Script Debugger. Завтра гляну, что...   Jan 3 2005, 00:02
- - Lex   что за дебагер?   Jan 3 2005, 00:09
- - Twin   Вариант рабочий: Neverwinter Script Sourcevoid mai...   Jan 3 2005, 10:36
- - DBColl   Да, Твин верно заметил, что для уничтожаемых плэйс...   Jan 3 2005, 11:54
- - Vanes   Neverwinter Script Sourcevoid VoidCreateObject(int...   Jan 3 2005, 14:07


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 16th June 2025 - 12:00