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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
3 страниц V  < 1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Азы скриптинга NWN/NWN2. Внеклассные занятия, Открыто для всех желающих
Lex
сообщение Oct 9 2007, 15:59
Сообщение #26


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

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



Цитата(Artlira @ Oct 9 2007, 15:42) *
GiveGoldToCreature(GetPCSpeaker(),1000);? тому кто говорит

тому игроку, который разговаривает в данном диалоге (из которого вызывается скрипт). Говорить в этот момент может и НПС, не обязательно игрок (те скрипт может стоять на фразе НПС)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 9 2007, 18:34
Сообщение #27


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

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Neverwinter Script Source
void main()
{
    object oPC      = GetPCItemLastEquippedBy();
    object oItem    = GetPCItemLastEquipped();

    //собственно само уничтожение DestroyObject

   
}


Добавлено через 7 минут 47 секунд

пришла идея ловить все предметы пошагово (IMG:style_emoticons/kolobok_light/biggrin.gif)

Neverwinter Script Source
object GetFirstItemInInventory(object oTarget=OBJECT_SELF);

object GetNextItemInInventory(object oTarget=OBJECT_SELF);

//собственно само уничтожение предметов DestroyObject
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 9 2007, 19:51
Сообщение #28


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

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



Цитата(Griffon @ Oct 9 2007, 19:34) *
пришла идея ловить все предметы пошагово

чет я шагов не вижу. Ты выделил только 2 предмета, а остальные? (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 9 2007, 21:24
Сообщение #29


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

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Идея идиотская, конечно же. Поскольку придется вылавливать все что будет в ящике и пасать скрипт на проверку его пустоты (здесь я пас - идей нет). Лекс, ты же знаешь функцию худо бедно я могу найти или попытаться сам написать. Но остается самое главное для меня - код ее реализации!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 9 2007, 21:27
Сообщение #30


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

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



Цитата(Griffon @ Oct 9 2007, 22:24) *
пасать скрипт на проверку его пустоты

подсказка: проверка пустоты - инвалидность (OBJECT_INVALID, GetIsObjectValid) очередного взятого предмета (GetNextItemInInventory).
Инвалидный - несуществующий или неправильно заданный объект. Скажем мы пытаемся найти в модуле объект с тэгом "LEX", а такого объекта там нет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 10 2007, 04:14
Сообщение #31


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Цитата
как скриптом сделать уничтожение всего , что положат в сундук

если не можете написать сами скрипт, то опишите, как вы это предстваляете-какие действия для этого требуються выполнить по порядку 1,2,3 .....


Скрипт скорее всего написать не смогу. Если просто рассуждать, как оно должно выглядеть, то наверно так:
1. Обозначить сам сундук как объект (oChest)
object oChest = GetObjectByTag("Sunduc_1") с заданным тагом.

2. Обозначить любой предмет, как предмет лежащий в этом сундуке
object oItem = GetFirstItemInInventory(oChest) ?

3. Проверять 1 действием скрипта пустой ли сундук, если пустой, то должен быть выход из скрипта?

4. 2 действием проверить - есть ли в инвентаре сундука любой предмет (oItem), не знаю нужно ли в этом случае проверять кем положен? По условиям скрипта (уничтожение любого предмета) это вроде не требуется?

5. Если такой предмет найден, он должен быть уничтожен.
DestroyObject(oItem) ? и снова выход из скрипта.

Не совсем понятно на какой слот надо будет ставить этот скрипт, на OnHeartbeat или OnUsed?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 10 2007, 08:55
Сообщение #32


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

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



Цитата(Artlira @ Oct 10 2007, 05:14) *
2. Обозначить любой предмет, как предмет лежащий в этом сундуке
object oItem = GetFirstItemInInventory(oChest) ?

беда в том, что это - первый предмет в сундуке. Так как удаление происходит с задержкой, то предложенный вариант (удаляем первый, значит первым становится другой, его тож удаляем и тд) не получается.
Цитата(Artlira @ Oct 10 2007, 05:14) *
Не совсем понятно на какой слот надо будет ставить этот скрипт, на OnHeartbeat или OnUsed?

в постановке задачи сказано, что на закрытие сундука

в целом что-то есть, но не достаточно детализированно. Скажем не очень понятно, как твои 4 пункта сработают если в сундуке 5 предметов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 10 2007, 09:25
Сообщение #33


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



то Griffon
Цитата
void main()
{
object oPC = GetPCItemLastEquippedBy();
object oItem = GetPCItemLastEquipped();

//собственно само уничтожение DestroyObject
}

это можно использовать для написания скрипта по уничтожению..но только если пишется скриптпо уничтожению того, что надето на oPC (IMG:style_emoticons/kolobok_light/rolleyes.gif) так как нам поставлена задача уничтожить все , что есть в сундуке, то, очевидно это не подойдет
Цитата
пришла идея ловить все предметы пошагово
object GetFirstItemInInventory(object oTarget=OBJECT_SELF);

object GetNextItemInInventory(object oTarget=OBJECT_SELF);

//собственно само уничтожение предметов DestroyObject


а вот это уже шаг в правильном направлении (IMG:style_emoticons/kolobok_light/biggrin.gif) особенно важна идея, что это прийдеться делать
Цитата
пошагово

ведь мы заранее незнаем скольо всего навалено в сундук -
целая куча,
один предмет
или вообще он пустой
то Artlira
Цитата
Не совсем понятно на какой слот надо будет ставить этот скрипт, на OnHeartbeat или OnUsed?

очевидно, что логически скрипт уничтожения ставить на OnClose сундука - ведь это очень логично : подходит к сундуку уничтожения игрок, открывает его, выкладывает в сундук все, что ему не понадобиться и закривает сундук( и при этом уничтожает мусор)
Цитата
1. Обозначить сам сундук как объект (oChest)
object oChest = GetObjectByTag("Sunduc_1") с заданным тагом


так как сундук в данном случае у нас "рабочий инструмент " и скрипт будет на его слоте , то он и являеться тем обьектом по умолчанию (OBJECT_SELF), то правильно будет
object oChest = OBJECT_SELF;

п.с. очевидно мы сЛексом пишем одновременно о одних и тех же вешах (IMG:style_emoticons/kolobok_light/biggrin.gif)

Добавлено через 19 минут 53 секунды

пока писал пост завис и надо было повторить (IMG:style_emoticons/kolobok_light/sad.gif) ...продолжаю

Цитата
2. Обозначить любой предмет, как предмет лежащий в этом сундуке
object oItem = GetFirstItemInInventory(oChest) ?

здесь мы оперделяем oItem не как любой предмет, но именно как первый предмет в инвенторе
но сама идея так делать совершенно правильная (IMG:style_emoticons/kolobok_light/good.gif)
Цитата
3. Проверять 1 действием скрипта пустой ли сундук, если пустой, то должен быть выход из скрипта?

да ,это следует проверить
кстати,Лекс уже подсказал вам как проверить пустой ли инвентарь
Цитата
подсказка: проверка пустоты - инвалидность (OBJECT_INVALID, GetIsObjectValid) очередного взятого предмета (GetNextItemInInventory).
Инвалидный - несуществующий или неправильно заданный объект. Скажем мы пытаемся найти в модуле объект с тэгом "LEX", а такого объекта там нет.

Цитата
4. 2 действием проверить - есть ли в инвентаре сундука любой предмет (oItem), не знаю нужно ли в этом случае проверять кем положен? По условиям скрипта (уничтожение любого предмета) это вроде не требуется?

а зачем еще раз что то проверять?
в пункте 2 вы определил, что oItem являеться первым в инвентаре сундука, а выполнив правильно пункт 3 мы убедились, что сундук непустой и , значит такой первый предмет в инвентаре существует( а если при проверке
установили, что инвентарь пуст то уже вышли( закончили выполнение скрипта))

Цитата
5. Если такой предмет найден, он должен быть уничтожен.
DestroyObject(oItem) ? и снова выход из скрипта.

функция найдена правильно, но зачем выходить из скрипта-ведь предметов может быть больше чем 1! а нам надо уничтожить все вещи...

как я уже писал выше главная идея этого скрипта в том, что мы будем выполнять действия пошагово( что и выявил Griffon (IMG:style_emoticons/kolobok_light/good.gif) ) и одни и те же действия будем повторять НЕСКОЛЬКО раз

такое действие называеться циклом

циклы бывают двух типов
1) те, в которых известно точное количество повторений
2) те ,которые выполняют одни и те же действия ПОКА выполнено какое то условие

как выдумайте, какой вид повторения нам нужен (и обоснуйте почему)?

Сообщение отредактировал mamuc - Oct 10 2007, 13:21
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 10 2007, 09:40
Сообщение #34


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

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



Может не стоит пока циклы? (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 10 2007, 09:47
Сообщение #35


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Цитата
Может не стоит пока циклы?

стоит - это ведь несложно, главное сам пинцып повторения понять..
и кстати,а как ты очищение инвентаря сделаешь без цыкла (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 10 2007, 11:00
Сообщение #36


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

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



Цитата(mamuc @ Oct 10 2007, 10:47) *
и кстати,а как ты очищение инвентаря сделаешь без цыкла

поэтому я и предложил остановиться.

зы: а я кстати знаю как без цикла это сделать, причем 2 способами. А ты? (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 10 2007, 12:13
Сообщение #37


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Цитата
а я кстати знаю как без цикла это сделать, причем 2 способами

и без подключения инклюда тоже? (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 10 2007, 12:26
Сообщение #38


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

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



Цитата(mamuc @ Oct 10 2007, 13:13) *
и без подключения инклюда тоже?

само собой (IMG:style_emoticons/kolobok_light/smile.gif)
- через UnAcquire с проверкой хозяина нового предмета (кстати до этого способа дошел Гриф тут немного выше)
- через disturb сундука
в обоих случаях предмет будет удаляться сразу как только окажется в сундуке (что является минусом данных методов, тк игрок может по ошибке положить не тот предмет и тю-тю). Но этот минус больше геймдизайнерский, а не скриптовый, так что в нашем случае роли не играет (IMG:style_emoticons/kolobok_light/biggrin.gif)
И всетаки думаю циклы пока рано. Ты бы уж тады по подробнее сначала на условиях остановился, а так же на &&. ||, !
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 10 2007, 12:37
Сообщение #39


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



а условие у нас и так само собой появиться - ведь по умному следует перед циклом проверить , не пустой ли сундук - тогда и дальше ничего делать не надо (IMG:style_emoticons/kolobok_light/biggrin.gif)




Добавлено через 1 минуту 30

а вот &&. ||, ! в начале не нужно - это уже более "развитая" тема

и еще одно замечание
"через UnAcquire с проверкой хозяина нового предмета " как я уже писал выше,так можно удалить только то что надето на чара, а не то, что он носит у себя в инвентории (IMG:style_emoticons/kolobok_light/biggrin.gif)

Сообщение отредактировал mamuc - Oct 10 2007, 12:44
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 10 2007, 13:02
Сообщение #40


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

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



Цитата(mamuc @ Oct 10 2007, 13:37) *
"через UnAcquire с проверкой хозяина нового предмета " как я уже писал выше,так можно удалить только то что надето на чара, а не то, что он носит у себя в инвентории biggrin.gif

ты чего-то путаешь (IMG:style_emoticons/kolobok_light/smile.gif) unacquire, а не unequip.

Добавлено через 1 минуту 1 секунду

Цитата(mamuc @ Oct 10 2007, 13:37) *
! в начале не нужно - это уже более "развитая" тема

нуну, а условие выхода из цикла !GetIsObjectValid ты тоже без объяснения ! будешь давать? Лучше последовательно, циклы - не тот материал, с которого стоит начинать.

зы: и эта.. мы увлеклись (IMG:style_emoticons/kolobok_light/smile.gif) я потом тут почищу малек, а ты лучше начни толкать условия. Там мало 2х строк будет (IMG:style_emoticons/kolobok_light/smile.gif)

Добавлено через 5 минут

Цитата(mamuc @ Oct 10 2007, 13:37) *
а условие у нас и так само собой появиться - ведь по умному следует перед циклом проверить , не пустой ли сундук - тогда и дальше ничего делать не надо

по умному - строить цикл так, чтобы проверка валидности была частью цикла и работала для 1 предмета тоже (те банально делать в данном случае цикл с пред-условием while) А уж никак не писать отдельную проверку валидности для первого предмета (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 10 2007, 13:14
Сообщение #41


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Цитата
ты чего-то путаешь unacquire, а не unequip.

уупс ...точно попутал (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)
Цитата
нуну, а условие выхода из цикла !GetIsObjectValid ты тоже без объяснения ! будешь давать?

а это условие можно ведь и без ! написать (IMG:style_emoticons/kolobok_light/biggrin.gif)
"// * Returns TRUE if oObject is a valid object.
int GetIsObjectValid(object oObject)"

Цитата
ты лучше начни толкать условия

дык Айван уже начал условия потихоньку -зачем дублировать (IMG:style_emoticons/kolobok_light/biggrin.gif)

Цитата
по умному - строить цикл так, чтобы проверка валидности была частью цикла и работала для 1 предмета тоже (те банально делать в данном случае цикл с пред-условием while) А уж никак не писать отдельную проверку валидности для первого предмета

ток это уже по развито-умному..хотя ты прав лучше сразу так (IMG:style_emoticons/kolobok_light/biggrin.gif)

да надо будет эту дискусию подчистить - она не есть обучение, а о том что и каким порядком учить

Сообщение отредактировал mamuc - Oct 10 2007, 13:22
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Oct 10 2007, 15:32
Сообщение #42


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

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



mamuc,
Цитата(mamuc @ Oct 10 2007, 10:25) *
Цитата
void main()
{
object oPC = GetPCItemLastEquippedBy();
object oItem = GetPCItemLastEquipped();

//собственно само уничтожение DestroyObject
}

это можно использовать для написания скрипта по уничтожению..но только если пишется скриптпо уничтожению того, что надето на oPC так как нам поставлена задача уничтожить все , что есть в сундуке, то, очевидно это не подойдет

а если добавить - object oItem = GetPCItemMovedTo()?

Хотя, не проверял есть ли - GetPCItemMovedTo, т.е. что хочу сказать - добавить проверку перемещен ли предмет от игрока (MovedFrom) в сундук (MovedTo).

Добавлено через 17 минут 57 секунд

P.S. Нашел вот такие функции:

Neverwinter Script Source
// Get the possessor of oItem
// * Return value on error: OBJECT_INVALID
object GetItemPossessor(object oItem);


Neverwinter Script Source
// Use this in an OnItemLost script to get the item that was lost/dropped.
// * Returns OBJECT_INVALID if the module is not valid.
object GetModuleItemLost();


Neverwinter Script Source
// Use this in an OnItemLost script to get the creature that lost the item.
// * Returns OBJECT_INVALID if the module is not valid.
object GetModuleItemLostBy();
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 10 2007, 15:36
Сообщение #43


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Цитата
беда в том, что это - первый предмет в сундуке. Так как удаление происходит с задержкой, то предложенный вариант (удаляем первый, значит первым становится другой, его тож удаляем и тд) не получается.

Цитата
в целом что-то есть, но не достаточно детализированно. Скажем не очень понятно, как твои 4 пункта сработают если в сундуке 5 предметов.

Может быть, можно обозначить пустой сундук как некое условие остановки скрипта? И удалять вкруговую, пока все предметы, лежащие в сундуке не закончатся? И когда первым предметом – станет “пустота” – и будет выход из скрипта?
Цитата
такое действие называеться циклом

циклы бывают двух типов
1) те, в которых известно точное количество повторений
2) те ,которые выполняют одни и те же действия ПОКА выполнено какое то условие

как выдумайте, какой вид повторения нам нужен (и обоснуйте почему)?

Слово цикл у меня вызывает панический ужас…
Кажется это через функцию while? и int(ы)? В случае с сундуком, скорее всего вариант 2, так как действие одно и то же – удаление предмета? А условие – это пустой сундук?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 10 2007, 16:12
Сообщение #44


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

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



Цитата(Artlira @ Oct 10 2007, 16:36) *
Может быть, можно обозначить пустой сундук как некое условие остановки скрипта? И удалять вкруговую, пока все предметы, лежащие в сундуке не закончатся? И когда первым предметом – станет “пустота” – и будет выход из скрипта?

суть именно "в круговую". И еще - не циклись на первом предмете, есть же еще следующий (GetNextItemInInventory)

Цитата(Artlira @ Oct 10 2007, 16:36) *
Слово цикл у меня вызывает панический ужас…

не надо бояться, штука на самом деле очень удобная.
Цитата(Artlira @ Oct 10 2007, 16:36) *
Кажется это через функцию while? и int(ы)? В случае с сундуком, скорее всего вариант 2, так как действие одно и то же – удаление предмета? А условие – это пустой сундук?

да.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 11 2007, 10:17
Сообщение #45


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



и так, мы уже довольно подробно разобрали задачу очишщения сундука и в процессе обсуждения нащли нужные инструменты ( функции и команды) которые позволят это сделать( и еще надо заметитьпопутно нашли несколько функций, которые нам здесь не понадобяться-ибо не соответсвует тому , что нужно, но это отнюдь не означает, что вы их не будетеиспользовать потом в других местах и задачах-то есть опыт все равно приобретен)

теперь нам из всего найденово надо отобрать нужное и собрать все в месте
и так отбираем из того что выяснили
1 строчка скрипта - определяем "рабочее тело" то есть обьект -сундук
Цитата
object oChest = OBJECT_SELF;

2 строчка скрипта - берем первый предмет из лежащих в сундуке
Цитата
object oItem = GetFirstItemInInventory(oChest);

3 строчка скрипта - уничтожаем выбранный обьект-итем
Цитата
DestroyObject(oItem);

4 строчка скритпа - выбираем следующий предмет из сундука
Цитата
GetNextItemInInventory(oChest);


тогда унас получился примерно такой скрипт
Neverwinter Script Source
void main()
{
    object oChest = OBJECT_SELF;
    object oItem = GetFirstItemInInventory(oChest);

    DestroyObject(oItem);
    GetNextItemInInventory(oChest);
}

если мы в тулсете поставим еще один сундук, напишем этот скрипт , обзовем его как нибудь и поставим на соответсвующий слот сундука, то он будет работать ..вообще...но выясниться , что за раз он будет уничтожать только один предмет положеный в сундук( можете проверить кстати (IMG:style_emoticons/kolobok_light/declare.gif) )

вроде чего то не хватает (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) не правда ли...
ну а теперь посмотрим, что мы еще не использовали в скрипте из выясненного?

а еще у нас нет двух вещей
1) повторения действий, то есть цикла
2) проверки того уже сундук пустой или нет ( или говоря иначе есть ли нам следующий предмет, которого надо брать для уничтожения или нет)

поскольку мы люди хитрые, мы эти две вещи обьеденим в одно (IMG:style_emoticons/kolobok_light/biggrin.gif)
------------------------------------------------------------------------------------------------------------------------------------

для этого сначало разберемся, что и как делает предложеная Лексом функция проверки валидности обьекта

продолжение следует

Добавлено через 24 минуты 15 секунд

описание функции выглядит так
Цитата
// * Returns TRUE if oObject is a valid object.
int GetIsObjectValid(object oObject)


это означает, что функция GetIsObjectValid являеться одной из тех функций, которые дает логический ответ, и есть только два варианта логического ответа
1) TRUE - "утверждение истинно"
2) FALSE - "утверждение ложно"

что это будет означать в нашем случае? и как это применить?

напомню, что нам важно будет знать есть ли еще предмет в сундуке или нет
а это означает, что
1) проверять на существование( валидность) нам следует oItem
2) удолетворяющий ответ унас должен быть, что такой предмет существует(то есть , когда функция GetIsObjectValid скажет гут - TRUE (IMG:style_emoticons/kolobok_light/biggrin.gif) )

в итоге мы можем написать такое УСЛОВИЕ
GetIsObjectValid (oItem) == TRUE
---------------------------------------------------


Добавлено через 34 минуты 24 секунды

ну а теперь нам осталась вспомнить о циклах
Artlira , несмотря на боязнь слова "цикл", совершенно точно определила тип цикла (циклы,выполняют одни и те же действия ПОКА выполнено какое то условие)- ведь мы не знаем, сколько предметов положено в сундук
и даже написала его оператор( не функцию-кроме функций в языке скриптов есть еще и другие составные части) while (IMG:style_emoticons/kolobok_light/good.gif)
Цитата
Кажется это через функцию while



общий вид цикла с неизвестным числом повторений таков
Цитата
while (<УСЛОВИЕ>)
{
// здесь пишуться те строки скрипта ,
// которые следует выполнять, пока истинно услови

}


теперь вызнаете достаточно, что бы сделать изменения в скрипте, что написан выше..сделайте это самостоятельно (IMG:style_emoticons/kolobok_light/declare.gif)

Сообщение отредактировал mamuc - Oct 11 2007, 11:44
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 11 2007, 10:58
Сообщение #46


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Цитата
суть именно "в круговую". И еще - не циклись на первом предмете, есть же еще следующий (GetNextItemInInventory)

Честное слово сама дошла то такого же скрипта как mamuc написал, просто добавила после дестроя итема еще и определение следующего. Мысли были такие: если скрипт удалит первый заданный oItem, то, увидев, что следующий объект (GetNextItemInInventory) определен также(oItem), должен его автоматом удалить - у него же команда(DestroyObject(oItem)) на удаление всего что есть oItem.

Цитата
теперь вызнаете достаточно, что бы сделать изменения в скрипте, что написан выше..сделайте это самостоятельно


Не знаю правильно или нет, попыталась составить, но вот что получилось:
[ OFFTOP ]

Neverwinter Script Source
void[/spoiler] main()
{
  [color=blue]object oChest = OBJECT_SELF;
  object oItem = GetFirstItemInInventory(oChest);

while (GetIsObjectValid (oItem))
{
if (GetIsObjectValid (oItem)==TRUE)
  DestroyObject(oItem);
  oItem = GetNextItemInInventory(oChest);
  }
}

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 11 2007, 11:23
Сообщение #47


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

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



Цитата(Artlira @ Oct 11 2007, 11:58) *
if (GetIsObjectValid (oItem)==TRUE)
DestroyObject(oItem);

лишнее. У тебя проверка валидности есть в цикле, зачем тебе ее еще раз делать внутри?
Цикл работает очень просто - условие правдиво? тогда выполняем то, что внутри цикла. Внутри у нас удаление и выбор следующего предмета. Условие же - проверка валидности предмета. Понятно же, что внутрь цикла мы попадаем только если предмет валиден, а значит еще 1 проверка валидности там не нужна, только удаление.

а так все верно, как по учебнику.

Давайте чтобы не обламывать другим кайф от написания скрипта самостоятельно, прятать скрипты под спойлер (правда у нас странный спойлер.. для наших нужд больше подходит тэг офф-топ)
вот так:
Код
[offtop][nss]
скрипт
[/nss][/offtop]

В итоге выглядеть оно будет вот так:
[ OFFTOP ]
Neverwinter Script Source
скрипт

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 11 2007, 11:43
Сообщение #48


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



то Artlira
(IMG:style_emoticons/kolobok_light/good.gif) только одна маленькая ошибка(даже не ошибка а лишнее - хотя скрипт будет работать и с ней, если добавить пару откривающую+закрвающую скобку для if )- условие if (GetIsObjectValid (oItem)==TRUE) совершенно лишнее, потому что мы это уже один раз проверили в "голове" цикла while (GetIsObjectValid (oItem))


вот так будет оптимальнее
[ OFFTOP ]
Neverwinter Script Source
void main()
{
     object oChest[quote][quote] = OBJECT_SELF;
     object oItem = GetFirstItemInInventory(oChest);

    while (GetIsObjectValid (oItem))
   {
         DestroyObject(oItem);
         oItem = GetNextItemInInventory(oChest);
   }
}
]


п.с. у нас Лексом явно наблюдаются паралельные действия (IMG:style_emoticons/kolobok_light/biggrin.gif)

заметки на память

1)число открытых и закрытых скобок всегда должна совпадать
2)для лучшего чтения скриптов надо применять отсупы ( стандарт 4 симбола(пробелы))
3) любой оператор языка структурно выглядит так
-----------------------------------------------------------------------------------------
<оператор> (<необходимые параметры, если таковы нужны>)
{ //обязательная открывающая скобка

// различные действия в том числе и функции и другие операторы

} //обязательная закрывающая скобка
------------------------------------------------------------------------------------------
4 ) записи условия GetIsObjectValid (oItem) == TRUE и GetIsObjectValid (oItem)
работают идентично, но второе короче потому, что в нем используються некоторые фичи - особенности скриптования

Сообщение отредактировал mamuc - Oct 11 2007, 11:58
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 13 2007, 17:27
Сообщение #49


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

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



Цитата(Griffon @ Oct 9 2007, 22:24) *
функцию худо бедно я могу найти

проверим ваши способности на поиск функций по описаниям.

Какая функция....
1. .. определяет, кто последний взял/положил/украл из плейсебла предмет?
2. .. определяет значение какой-либо характеристики у существа? (сила, ловкость, телосложение)
3. .. определяет убийцу НПС?
4. .. изменяет количество атак у существа?
5. .. берет первое существо в некой сфере (или другой фигуре), с указанным центром и радиусом?
6. .. делает НПС враждебным?
7. .. дает предмету некое свойство?
8. .. дает эффект нивидимости?
9. .. открывает локацию на миникарте?
10. .. заставляет всплыть над НПС или объектом некий текст, указанный вами прямо в скрипте?

все ответы помещайте под тэг "оффтоп", чтобы не отвлекать тех, кто еще не нашел.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Oct 13 2007, 18:07
Сообщение #50


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

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



[ OFFTOP ]
QUOTE(Lex @ Oct 13 2007, 18:27) *
1. .. определяет, кто последний взял/положил/украл из плейсебла предмет?

GetLastUsedBy
QUOTE(Lex @ Oct 13 2007, 18:27) *
2. .. определяет значение какой-либо характеристики у существа? (сила, ловкость, телосложение)

GetAbilityScore
QUOTE(Lex @ Oct 13 2007, 18:27) *
3. .. определяет убийцу НПС?

GetLastKiller
QUOTE(Lex @ Oct 13 2007, 18:27) *
4. .. изменяет количество атак у существа?

EffectAttackIncrease
QUOTE(Lex @ Oct 13 2007, 18:27) *
5. .. берет первое существо в некой сфере (или другой фигуре), с указанным центром и радиусом?

GetNearestCreature? И еще что-то про радиус дописывается.
QUOTE(Lex @ Oct 13 2007, 18:27) *
6. .. делает НПС враждебным?

SetIsTemporaryEnemy?
QUOTE(Lex @ Oct 13 2007, 18:27) *
7. .. дает предмету некое свойство?

AddItemProperty
QUOTE(Lex @ Oct 13 2007, 18:27) *
8. .. дает эффект нивидимости?

EffectInvisibility
QUOTE(Lex @ Oct 13 2007, 18:27) *
9. .. открывает локацию на миникарте?

SetMapPinEnabled
QUOTE(Lex @ Oct 13 2007, 18:27) *
10. .. заставляет всплыть над НПС или объектом некий текст, указанный вами прямо в скрипте?

FloatingTextStringOnCreature


Сообщение отредактировал Vhall - Oct 13 2007, 18:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 12th December 2019 - 08:40