![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() Класс: Пьяный Мастер Характер: Lawful Good Раса: Тварь MySQL, PHP, JavaScript Порядок Времени ![]() |
а это... можно спросить? (IMG:style_emoticons/kolobok_light/blush.gif) а что такое переменная? (IMG:style_emoticons/kolobok_light/blush.gif)
|
![]() |
![]()
Сообщение
#2
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Переме́нная в традиционных языках программирования — поименованная ячейка памяти, имя которой можно использовать для осуществления доступа к данным, находящимся по данному адресу.
http://ru.wikipedia.org (с) |
![]()
Сообщение
#3
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
Почему oNeo, oLex, oAiwan? Что значит object oAiwan = GetObjectByTag("Aiwan ROOT Boss")? В строке Neverwinter Script Source object oAiwan = GetObjectByTag("Aiwan ROOT Boss") мы говорим о том, что когда в последствии обратимся (GetObjectByTag) к oAiwan - это будет объект (GetObjectByTag) c тегом (GetObjectByTag) "Aiwan ROOT Boss". В object'e можно писать что угодно. Но для удобства лучше ассоциировать его с тегом. |
![]()
Сообщение
#4
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Почему oNeo, oLex, oAiwan? А это звательный падеж (IMG:style_emoticons/kolobok_light/biggrin.gif) Серьезно - исключительно для твоего собственного удобства. Буква "о" в начале названия объекта означает, что это именно объект, чтобы ты сама потом разобралась. Можно без этого обойтись. Что такое int StartingConditional()? Conditioinal - это условие. StartingConditioinal - это условие, открывающее скрипт. Eсли оно выполняется, скрипт начинает работу. void main - это что? void main - это основная функция. Ты просто указываешь, откуда брать данные - из списка основных функций языка. Потому что есть еще функции пользовательские - те, которых нет в списке и которые скриптеры пишут сами. Ну, это я так понимаю, во всяком случае. Меня здесь вообще быть не должно (IMG:style_emoticons/kolobok_light/ph34r.gif) Сообщение отредактировал shadowdweller - Oct 7 2007, 16:00 |
![]() ![]()
Сообщение
#5
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата Интеджер integer - это целое значение. может быть 1, 10, 25 и т.д. маленькое уточнение целые числа - это не только натуральные (как в примере Айвана - "может быть 1, 10, 25 ") но и 0 и также негативные -1б -10, -125 ------------------------------------------ Цитата void main - это что? Цитата ну тогда вычеркни меня и всё ээ колючая не надо сразу иголками колотьс...больно же (IMG:style_emoticons/kolobok_light/rolleyes.gif) если ты пишешь скрипт, то это означает, что ты пишешь инструкцию для компа, что как и когда делать...ты эту инструкцию пишешь на определенном языке и ,как у каждого языка , у скриптов есть свои граматические правила что бы исполнитель( то есть комп) мог тебя правильно понять .. комп у нас испольнитель шустрый, но тупой (IMG:style_emoticons/kolobok_light/biggrin.gif) поэтому ему надо расписать "обьясняя на пальцах" (IMG:style_emoticons/kolobok_light/declare.gif) каждая такая инструкция для компа называеться функцией она начинаеться с слова void и весь ее текст заключаеться между кавычками { и } одна среди них есть главная( та которая и начинаеться с void main ) между кавычками главной ты и записываешь те действия которые нужно, что бы комп сделал там может быть и коментарии( которые просто для себя пишешь, а комп их не выполняет (IMG:style_emoticons/kolobok_light/rolleyes.gif) ) и обьявление различных переменных,и выплнения каких то других действий и функций другие функции есть трех видов 1) те которые ты используешь готовыми( они уже написаны и "зашиты" при написании тулсета) 2) те которые написали другие люди , а ты скопировала и до бавила в свои скрипты 3) те которые ты написала сама это как с приготовлением празничного обеда: ты берешь тарелки , вилки , ложки, супницы( встроенные функции) , берешь принесенный из кулинарии торт и шампанское( готовые функции написанные другими), добавляешь свой любимый салат и собственноручно испеченые ватрушечки(тобою написанные функции) , на стол стелишь скатерть и ставишь цветы ( разные другие действия) и вместе у тебя получаеться празничный стол(void main ) к которому садяться и все это уплетают пользователи вот пимерно так (IMG:style_emoticons/kolobok_light/declare.gif) |
![]()
Сообщение
#6
|
|
![]() Класс: Пьяный Мастер Характер: Lawful Good Раса: Тварь MySQL, PHP, JavaScript Порядок Времени ![]() |
маленькое уточнение целые числа - это не только натуральные ну тогда уж уточнение, целочисленные данные бывают со знаком и без (IMG:style_emoticons/kolobok_light/smile.gif) правда в нвн такого деления нет, но тем не менее (IMG:style_emoticons/kolobok_light/smile.gif) |
![]() ![]()
Сообщение
#7
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата Каждый в скрипте имя oSelf сменит на свой ник, например oAiwan и напишет в этой теме результат. ПИШИТЕ В РЕДАКТОРЕ И КОМПИЛИТЕ. (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) а результата как таковово то НЕ БУДЕТ ибо, что бы увидеть КАК СКРИПТ СРАБОТАЕТ ему нужно место ГДЕ он это может сделать то есть не хватит просто скрипта как такового надо еще и создать возможность как то проявить себя поэтому сделайте лучше так : -откройте новый модуль в тулсете с одной малюсенькой локой -поставьте на этой локе один плейсебл( например сундук) -сделайте его юзабельным , если он статичен (соотв галочка в свойствах плейса ) -напиштие скрипт предложеный Айваном сохраните его под каким то именем (например aivan0001) -повесьте этот скритп на ON CLOSE вашего сундука (откройте свойства плейса возмите страницу Scripts и там на слоте On Close смените стандартный скрипт на aivan0001) -сохраните модуль -запустите модуль как игрок, подойдите к сундуку и откройте и закройте его и вы получите соотв то что требовалось (IMG:style_emoticons/kolobok_light/mosking.gif) - опишите , что вышло Айвану (IMG:style_emoticons/kolobok_light/declare.gif) п.с. если какой то орел супермодератор ЕЩЕ раз будет перемещать УЧЕБНЫЕ посты куда попало, то я ему клюв загну, перья из хвоста повыдергаю и в уши засуну , апотом скажу, что так все и было ...вот (IMG:style_emoticons/kolobok_light/aggressive.gif) (IMG:style_emoticons/kolobok_light/rolleyes.gif) Сообщение отредактировал mamuc - Oct 8 2007, 14:46 |
![]()
Сообщение
#8
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
mamuc, мне нужен был результат в виде кода. Я хочу начать с азов. Ты не понял. Пусть меняют только описание и компилят, что бы видеть ошибки свои же. Если не компилится.
|
![]()
Сообщение
#9
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
mamuc
Если проиграть вариант с сундуком, то должно получиться следующее? При условии, что сундук пуст (OnClose), он же и лишится 5 хитов? Объектом же, как его не обзови (oSelf или oLira) будет сам сундук? |
![]()
Сообщение
#10
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Да, именно так и будет.
Добавлено через 3 минуты 12 секунды Есть мысли (Хотя бы на словах), как сделать так, чтобы урон нанесся игроку? |
![]() ![]()
Сообщение
#11
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата При условии, что сундук пуст (OnClose), cкрипт на OnClose срабатывает каждый раз , когда сундук закрываеться и не важно пустой он или лежит там что-то - то есть не проверяеться содержание сундука и тот вариант скрипта , который предложил вам Айван действительно сработает на сам сундук ибо там береться обьект по умолчанию, что не всегда есть гут (IMG:style_emoticons/kolobok_light/biggrin.gif) поэтому давайте подумайте над предложением Лекса Цитата Есть мысли (Хотя бы на словах), как сделать так, чтобы урон нанесся игроку? а именно 1) какую строчку надо изменить в скрите чтобы усе работало на игрока 2) пердложите, что мименно надо сделать , какую команду и как использовать( если не знаете соотв действие, то опишите своими словами) и вторая задача : подумайте каким должен быть скрипт, что бы сундук работал как уничтожитель предметов положеных в него.. п.с. чертовски НЕУДОБНО искуственное разделение на две темы... теряеться смысл поэтому предлагаю модераторам ДВАЖДЫ ПОДУМАТЬ прежде чем переносить посты из темы в тему ( моя ОЧЕНЬ ЗЛОЙ (IMG:style_emoticons/kolobok_light/spiteful.gif) становиться кстати) а лучше вообще обе темы обьеденить обратно Сообщение отредактировал mamuc - Oct 9 2007, 09:16 |
![]()
Сообщение
#12
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Не надо ничего объединять. Лебедь Рак и Щука тоже делали одно дело (IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]() ![]()
Сообщение
#13
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата Не надо ничего объединять. Лебедь Рак и Щука тоже делали одно дело то есть это мягое напоминамие ударом дубиной, что помщники тебе не нужны и ты только сам и один будешь все делать? ну чтож, тогда имею честь откланиться как выразился здесь один кооолючий Ежик можете вычеркивать меня счастливо оставаться |
![]()
Сообщение
#14
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Хорош вам уже грызться (IMG:style_emoticons/kolobok_light/diablo.gif)
Neverwinter Script Source object Target=PC //хотя может РС стоит писать "РС"? // или 2-вариант object oPC=OBJECT_SELF Neverwinter Script Source // Create a Damage effect // - nDamageAmount: amount of damage to be dealt. This should be applied as an // instantaneous effect. // - nDamageType: DAMAGE_TYPE_* // - nDamagePower: DAMAGE_POWER_* // - nIgnoreResistances: FALSE will use damage immunity, damage reduction, and damage resistance. TRUE will skip all of these. effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_MAGICAL, int nDamagePower=DAMAGE_POWER_NORMAL, int nIgnoreResistances=FALSE); НО результат все тот же 0.85.nss(1) ERROS: ELLIPSIS IN IDENTIFIER. (IMG:style_emoticons/kolobok_light/crazy.gif) Сообщение отредактировал Griffon - Oct 9 2007, 11:37 |
![]()
Сообщение
#15
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
то есть это мягое напоминамие ударом дубиной, что помщники тебе не нужны и ты только сам и один будешь все делать? Зря ты. Мне просто нужно самому контролировать весь процесс. Если каждый будет писать в той теме то получится куча мала. Я ж в самом начале сказал ТАМ ПИШУТ ТОЛЬЯКО Я И УЧЕНИКИ. Не обижайся (IMG:style_emoticons/kolobok_light/wink3.gif) Но мне сложно что то делать когда со всех сторон что то кто то будет писать. Я пытаюсь дать народу материал как я задумал, а твои задачи слишком сложны. Поверь. |
![]() ![]()
Сообщение
#16
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата object Target=PC если ты хочешь это сделать так, то естественно, что ничего не получиться...почему? да потому что буквосочетание PC само автоматом не дает игрока-это просто сочетание каких то двух букв для компа вообщем то ничего особово не выражающее а что именно это за буквосочетание ни в самом скрипте , ни в какмо нибудь подключенном инклюде( позже узнаеете что это такое) не определено и по этому непонятно для компа - вот тебя и ругает комп за ошибку (IMG:style_emoticons/kolobok_light/unsure.gif) и еще одно уточнение - нам надо найти не вообще какого - то PC , а именно того PC который только что закрЫл сундук то есть нам надо отследить СОБЫТИЕ которое произошло и по нему определить нужного PCя... это событие из ряда стандартных - значит должна быть уже какая то стандартная функция отлавливающее такое действие и выявляющее преступное лицо оное совершившее в тулсете есть длинный список таких стандартных функций (кстати с описаниями) и у одной описание следующее Цитата // Use this in an OnClosed script to get the object that closed the door or placeable. // * Returns OBJECT_INVALID if the caller is not a valid door or placeable. ( я конечно могу просто написать как правильно, но самим найденое гораздо ценне в виде опыта ИМХО) попробуй найти эту функцию и применить ее ( знающим английский язык более менее это не должно составить труда (IMG:style_emoticons/kolobok_light/rolleyes.gif) ) то Aiwan ок проехали - мир дружба скрипты (IMG:style_emoticons/kolobok_light/declare.gif) и не так они сложны - просто так сразу виден результат при правильно исполнеии (IMG:style_emoticons/kolobok_light/declare.gif) и выявляються непонятные вопросы- которые нам кажутся само собой разумеющимся, а начинающим нет ..так что учаться не только они, но и мы учимся как лучше учить (IMG:style_emoticons/kolobok_light/good.gif) Сообщение отредактировал mamuc - Oct 9 2007, 12:03 |
![]()
Сообщение
#17
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Найти не так все сложно
Neverwinter Script Source int GetIsUsedByPlayer( object oCreature ); // не совсем уверен за правильность, но что-то такое сразу всплыло иNeverwinter Script Source void main() { object oUser = GetLastUsedBy(); PrettyDebug( GetName( OBJECT_SELF ) + "'s was used by " + GetName( oUser ) ); // Do something } Neverwinter Script Source // Placeable OnUsed Template /* Required: Static=FALSE, Usable=TRUE, CurrentHP>0, attach script to the OnUsed event Suggested: Plot=TRUE, DefaultActionPreference="Use" */ // #include "ginc_debug" // i_temp_aq /* Template for an Acquire item script. This script will run each time the item is acquired. How to use this script: Replace the word "temp" (in line 1) with the tag of the item. Rename the script with this name. Additional Info: In general, all the item "tag-based" scripts will be named as follows: - a prefix ("i_" by defualt) - the tag of the item - a postfix indicating the item event. This script will be called automatically (by defualt) whether it exists or not. If if does not exist, nothing happens. "_aq" was used for the Acquire postfix because "_ac" was already taken by Activate. Note: this script runs on the module object, an important consideration for assigning actions. -ChazM но вот там где надо выстроить условия и параметы и написать команду и есть проблема Добавлено через 3 минуты 27 секунд с последним примером вообще караул - где там temp? привел его только потому, что у игрока глаза сразу на полтарелки и если хоть что-то приглянулось, то и пойдет скрипт или можно переделать под закрываение/открывание. |
![]() ![]()
Сообщение
#18
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата object oUser = GetLastUsedBy() ; это есть то очем я и писал - почти правильная функция (только лучше вместо GetLastUsedBy()( которую обычно применяют несколько в другом ключе-когда определяет кто юзал специальное свойство предмета) взять GetLastClosedBy()-ведь то что произойде произойдет после того как кое-кто закроет сундук) а остальное ты копнул слишком глубоко (IMG:style_emoticons/kolobok_light/rolleyes.gif) там тебе и инклюд подключеный появился и еще много чего ...совет - пока не рой до основания все а учись погружаться постепенно (IMG:style_emoticons/kolobok_light/rolleyes.gif) теперь ты можешь немного смодифицировать скрипт Айвана и попробовать запустить модуль попробуй сам смодифицировать если есть сейчас время кроме строчки, где выясняеться кто есть последний закрыватель можно еще последнюю длиную строчку упростить - не нужда порядковая команда оставь один Эфект п.с. отредактировал это сообщение, так как оказалось, что перед уходом последние изменения не дошли Сообщение отредактировал mamuc - Oct 9 2007, 14:31 |
![]()
Сообщение
#19
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Цитата Есть мысли (Хотя бы на словах), как сделать так, чтобы урон нанесся игроку? Цитата 1) какую строчку надо изменить в скрите чтобы усе работало на игрока Мне кажется надо изменить определение объекта? Что бы эффект сработал на игрока в скрипте должно быть указано ("тот кто откроет сундук")? Скорее всего, это и будет игрок, неписи без разрешения по сундукам не лазят. Только как определить игрока? object oPC = GetPCSpeaker() ? И слот на сундуке должен поменяться на OnUsed или OnOpen? Если правильно, то дальше в скрипте oSelf меняем на oPC? Цитата и вторая задача : подумайте каким должен быть скрипт, что бы сундук работал как уничтожитель предметов положеных в него.. object oItem = GetFirstItemInInventory(oChest);? Любой предмет нужно обозначить как предмет лежащий в этом сундуке, затем проверить есть этот объект или нет и если есть, его дестроить? DestroyObject(oItem); |
![]()
Сообщение
#20
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
и еще одно уточнение - нам надо найти не вообще какого - то PC , а именно того PC который только что закрЫл сундук это решается элементарно на мой взгляд Neverwinter Script Source GetName( OBJECT_SELF ) + "'s was used by " + GetName( oUser ) ); эх, мог бы написать, уже б сделал. моя идея в чем если нам нужно поймать конкретного игрока, то дела6ем проверку по имени на открывание, ну а затем сообщение в полицию, например, что вот последний и был ОН. Насколько я слабо знаю скрипты, такую идею реализовать среднему раз плюнуть.
Сообщение отредактировал Griffon - Oct 9 2007, 13:40 |
![]() ![]()
Сообщение
#21
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата Мне кажется надо изменить определение объекта? Что бы эффект сработал на игрока в скрипте должно быть указано ("тот кто откроет сундук")? правильно надо изменить определение обьекта (IMG:style_emoticons/kolobok_light/good.gif) Цитата object oPC = GetPCSpeaker() нет по другому( ибо эта функция определяет кто разговаривает), как уже нарыл Griffon есть функция для этого специальная , только он немного не ту функцию взял (лучше вместо GetLastUsedBy() взять GetLastClosedBy()) ведь то что произойде произойдет после того как кое-кто закроет сундук-значит определять бум примерно так Neverwinter Script Source object oPC = GetLastClosedBy() а дальше уже с этим определенным oPC будем делать что захотим а захотим мы (например )то, что бы при закрытии (IMG:style_emoticons/kolobok_light/declare.gif) (IMG:style_emoticons/kolobok_light/declare.gif) сундук дал 1000 голдов закрывающему ...мы ведь л юбим деньги ( тут я изменил немного задание(и упростил при этом скрипт) что бы задания были более разными и не путались с Айвана ... а когда осилите это, то и со скриптом Айвана разберетесь) Neverwinter Script Source void main() { object oPC = GetLastClosedBy(); // zdesj opredelili kto zakril sunduk // zdesj nado dobavitj ODNU stroku s vidachej zolota } а теперь найдите функцию с какой вы можете дать 1000 голдов игроку (IMG:style_emoticons/kolobok_light/prankster2.gif) маленькое наблюдение : во время разборок скриптоа вы уже мимоходом выяснили три функции выполняющие близкостоящие задачи определения PC 1) GetPCSpeaker() - определяет кто разговаривает с НПЦ 2) GetLastUsedBy() - определяет, кто юзает специальное свойство итема 3) GetLastClosedBy() - определяет , кто закрыл инвентарь обьекта и теперь сможете их применять в своих скриптах... Сообщение отредактировал mamuc - Oct 9 2007, 14:50 |
![]()
Сообщение
#22
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Цитата а теперь найдите функцию с какой вы можете дать 1000 голдов игроку GiveGoldToCreature(GetPCSpeaker(),1000);? тому кто говорит GiveGoldToCreature(GetLastClosedBy(),1000)? тому кто закрыл? Сообщение отредактировал Artlira - Oct 9 2007, 14:57 |
![]() ![]()
Сообщение
#23
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата GiveGoldToCreature(GetPCSpeaker(),1000);? функция правильная, только вместо GetPCSpeaker() будем ставить уже определенный в первой строчке обьект (oPC) итого вторая строчка скрипта будет выглядеть так Цитата GiveGoldToCreature(oPC,1000); |
![]()
Сообщение
#24
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Не не верно. Это подойдет при разговоре. Правильная тот кто его использовал, врнее закрыл, т.е. GetLastClosed
P.S. Мое сообщение должно стоять перед Мамуком. А разве нельзя сделать получение на того кто его закрыл последним? Ведь в нашем случае, это и есть игрок. Сообщение отредактировал Griffon - Oct 9 2007, 14:59 |
![]() ![]()
Сообщение
#25
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата GiveGoldToCreature(GetLastClosedBy(),1000)? тому кто закрыл? да можно и одной строчкой (IMG:style_emoticons/kolobok_light/biggrin.gif) но тогда это наверно и будет единственной строчкой скрипта хотя я обычно расписываю двумя ..так красивши и практичней -потом может понадобиться скрипт дополнить еще чем- то( а обычно так и есть), а oPC уже определен и можно им смело пользоваться а Цитата GiveGoldToCreature(GetPCSpeaker(),1000) обычно используеться в диалогах п.с. ну если с этим разобрались подумайте тогда о втором задании : как скриптом сделать уничтожение всего , что положат в сундук если не можете написать сами скрипт, то опишите, как вы это предстваляете-какие действия для этого требуються выполнить по порядку 1,2,3 ..... Сообщение отредактировал mamuc - Oct 9 2007, 15:49 |
![]()
Сообщение
#26
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]()
Сообщение
#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 |
![]()
Сообщение
#28
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
пришла идея ловить все предметы пошагово чет я шагов не вижу. Ты выделил только 2 предмета, а остальные? (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#29
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Идея идиотская, конечно же. Поскольку придется вылавливать все что будет в ящике и пасать скрипт на проверку его пустоты (здесь я пас - идей нет). Лекс, ты же знаешь функцию худо бедно я могу найти или попытаться сам написать. Но остается самое главное для меня - код ее реализации!
|
![]()
Сообщение
#30
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
пасать скрипт на проверку его пустоты подсказка: проверка пустоты - инвалидность (OBJECT_INVALID, GetIsObjectValid) очередного взятого предмета (GetNextItemInInventory). Инвалидный - несуществующий или неправильно заданный объект. Скажем мы пытаемся найти в модуле объект с тэгом "LEX", а такого объекта там нет. |
![]()
Сообщение
#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? |
![]()
Сообщение
#32
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
2. Обозначить любой предмет, как предмет лежащий в этом сундуке object oItem = GetFirstItemInInventory(oChest) ? беда в том, что это - первый предмет в сундуке. Так как удаление происходит с задержкой, то предложенный вариант (удаляем первый, значит первым становится другой, его тож удаляем и тд) не получается. Не совсем понятно на какой слот надо будет ставить этот скрипт, на OnHeartbeat или OnUsed? в постановке задачи сказано, что на закрытие сундука в целом что-то есть, но не достаточно детализированно. Скажем не очень понятно, как твои 4 пункта сработают если в сундуке 5 предметов. |
![]() ![]()
Сообщение
#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 |
![]()
Сообщение
#34
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Может не стоит пока циклы? (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#35
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата Может не стоит пока циклы? стоит - это ведь несложно, главное сам пинцып повторения понять.. и кстати,а как ты очищение инвентаря сделаешь без цыкла (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#36
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
и кстати,а как ты очищение инвентаря сделаешь без цыкла поэтому я и предложил остановиться. зы: а я кстати знаю как без цикла это сделать, причем 2 способами. А ты? (IMG:style_emoticons/kolobok_light/smile.gif) |
![]() ![]()
Сообщение
#37
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Цитата а я кстати знаю как без цикла это сделать, причем 2 способами и без подключения инклюда тоже? (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#38
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
и без подключения инклюда тоже? само собой (IMG:style_emoticons/kolobok_light/smile.gif) - через UnAcquire с проверкой хозяина нового предмета (кстати до этого способа дошел Гриф тут немного выше) - через disturb сундука в обоих случаях предмет будет удаляться сразу как только окажется в сундуке (что является минусом данных методов, тк игрок может по ошибке положить не тот предмет и тю-тю). Но этот минус больше геймдизайнерский, а не скриптовый, так что в нашем случае роли не играет (IMG:style_emoticons/kolobok_light/biggrin.gif) И всетаки думаю циклы пока рано. Ты бы уж тады по подробнее сначала на условиях остановился, а так же на &&. ||, ! |
![]() ![]()
Сообщение
#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 |
![]()
Сообщение
#40
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
"через UnAcquire с проверкой хозяина нового предмета " как я уже писал выше,так можно удалить только то что надето на чара, а не то, что он носит у себя в инвентории biggrin.gif ты чего-то путаешь (IMG:style_emoticons/kolobok_light/smile.gif) unacquire, а не unequip. Добавлено через 1 минуту 1 секунду ! в начале не нужно - это уже более "развитая" тема нуну, а условие выхода из цикла !GetIsObjectValid ты тоже без объяснения ! будешь давать? Лучше последовательно, циклы - не тот материал, с которого стоит начинать. зы: и эта.. мы увлеклись (IMG:style_emoticons/kolobok_light/smile.gif) я потом тут почищу малек, а ты лучше начни толкать условия. Там мало 2х строк будет (IMG:style_emoticons/kolobok_light/smile.gif) Добавлено через 5 минут а условие у нас и так само собой появиться - ведь по умному следует перед циклом проверить , не пустой ли сундук - тогда и дальше ничего делать не надо по умному - строить цикл так, чтобы проверка валидности была частью цикла и работала для 1 предмета тоже (те банально делать в данном случае цикл с пред-условием while) А уж никак не писать отдельную проверку валидности для первого предмета (IMG:style_emoticons/kolobok_light/rolleyes.gif) |
![]() ![]()
Сообщение
#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 |
![]()
Сообщение
#42
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
mamuc,
Цитата 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(); |
![]()
Сообщение
#43
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Цитата беда в том, что это - первый предмет в сундуке. Так как удаление происходит с задержкой, то предложенный вариант (удаляем первый, значит первым становится другой, его тож удаляем и тд) не получается. Цитата в целом что-то есть, но не достаточно детализированно. Скажем не очень понятно, как твои 4 пункта сработают если в сундуке 5 предметов. Может быть, можно обозначить пустой сундук как некое условие остановки скрипта? И удалять вкруговую, пока все предметы, лежащие в сундуке не закончатся? И когда первым предметом – станет “пустота” – и будет выход из скрипта? Цитата такое действие называеться циклом циклы бывают двух типов 1) те, в которых известно точное количество повторений 2) те ,которые выполняют одни и те же действия ПОКА выполнено какое то условие как выдумайте, какой вид повторения нам нужен (и обоснуйте почему)? Слово цикл у меня вызывает панический ужас… Кажется это через функцию while? и int(ы)? В случае с сундуком, скорее всего вариант 2, так как действие одно и то же – удаление предмета? А условие – это пустой сундук? |
![]()
Сообщение
#44
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Может быть, можно обозначить пустой сундук как некое условие остановки скрипта? И удалять вкруговую, пока все предметы, лежащие в сундуке не закончатся? И когда первым предметом – станет “пустота” – и будет выход из скрипта? суть именно "в круговую". И еще - не циклись на первом предмете, есть же еще следующий (GetNextItemInInventory) Слово цикл у меня вызывает панический ужас… не надо бояться, штука на самом деле очень удобная. Кажется это через функцию while? и int(ы)? В случае с сундуком, скорее всего вариант 2, так как действие одно и то же – удаление предмета? А условие – это пустой сундук? да. |
![]() ![]()
Сообщение
#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 |
![]()
Сообщение
#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); } } |
![]()
Сообщение
#47
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
if (GetIsObjectValid (oItem)==TRUE) DestroyObject(oItem); лишнее. У тебя проверка валидности есть в цикле, зачем тебе ее еще раз делать внутри? Цикл работает очень просто - условие правдиво? тогда выполняем то, что внутри цикла. Внутри у нас удаление и выбор следующего предмета. Условие же - проверка валидности предмета. Понятно же, что внутрь цикла мы попадаем только если предмет валиден, а значит еще 1 проверка валидности там не нужна, только удаление. а так все верно, как по учебнику. Давайте чтобы не обламывать другим кайф от написания скрипта самостоятельно, прятать скрипты под спойлер (правда у нас странный спойлер.. для наших нужд больше подходит тэг офф-топ) вот так: Код [offtop][nss] скрипт [/nss][/offtop] В итоге выглядеть оно будет вот так: [ OFFTOP ] Neverwinter Script Source скрипт |
![]() ![]()
Сообщение
#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 |
![]()
Сообщение
#49
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
функцию худо бедно я могу найти проверим ваши способности на поиск функций по описаниям. Какая функция.... 1. .. определяет, кто последний взял/положил/украл из плейсебла предмет? 2. .. определяет значение какой-либо характеристики у существа? (сила, ловкость, телосложение) 3. .. определяет убийцу НПС? 4. .. изменяет количество атак у существа? 5. .. берет первое существо в некой сфере (или другой фигуре), с указанным центром и радиусом? 6. .. делает НПС враждебным? 7. .. дает предмету некое свойство? 8. .. дает эффект нивидимости? 9. .. открывает локацию на миникарте? 10. .. заставляет всплыть над НПС или объектом некий текст, указанный вами прямо в скрипте? все ответы помещайте под тэг "оффтоп", чтобы не отвлекать тех, кто еще не нашел. |
![]()
Сообщение
#50
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
[ OFFTOP ] 1. .. определяет, кто последний взял/положил/украл из плейсебла предмет? GetLastUsedBy 2. .. определяет значение какой-либо характеристики у существа? (сила, ловкость, телосложение) GetAbilityScore 3. .. определяет убийцу НПС? GetLastKiller 4. .. изменяет количество атак у существа? EffectAttackIncrease 5. .. берет первое существо в некой сфере (или другой фигуре), с указанным центром и радиусом? GetNearestCreature? И еще что-то про радиус дописывается. 6. .. делает НПС враждебным? SetIsTemporaryEnemy? 7. .. дает предмету некое свойство? AddItemProperty 8. .. дает эффект нивидимости? EffectInvisibility 9. .. открывает локацию на миникарте? SetMapPinEnabled 10. .. заставляет всплыть над НПС или объектом некий текст, указанный вами прямо в скрипте? FloatingTextStringOnCreature Сообщение отредактировал Vhall - Oct 13 2007, 18:08 |
![]()
Сообщение
#51
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Вал, 6 из 10 правильно (IMG:style_emoticons/kolobok_light/smile.gif)
Добавлено через 21 минуту 40 Чтобы не бояться скриптов, надо уметь их читать. Когда они становятся не страницей непонятной китайской грамоты, а осмысленным набором команд - считайте вы сделали важный шаг к тому, чтобы писать такое сами (IMG:style_emoticons/kolobok_light/smile.gif) Думаю 3х хватит. (IMG:style_emoticons/kolobok_light/smile.gif) 1. Neverwinter Script Source void main( ) { object oWolf = GetObjectByTag( "WONC_WOLF" ); object oPoint1 = GetNearestObjectByTag( "WP_FOREST_1" ); object oPoint2 = GetNearestObjectByTag( "WP_FOREST_2" ); object oEx; if ( Random( 10 )<=1 ) { if ( Random( 2 )==1 ) { oEx = CopyObject( oWolf, GetLocation( oPoint1 ), OBJECT_INVALID, "WONC_WOLF_BK" ); AssignCommand( oEx, ActionForceMoveToObject( oPoint2, Random( 2 ), 1.0, 20.0 ) ); } else { oEx = CopyObject( oWolf, GetLocation( oPoint2 ), OBJECT_INVALID, "WONC_WOLF_BK" ); AssignCommand( oEx, ActionForceMoveToObject( oPoint1, Random( 2 ), 1.0, 20.0 ) ); } AssignCommand( oEx, ActionDoCommand( DestroyObject( oEx ) ) ); } } 2. Neverwinter Script Source void main( ) { object oPC = GetPCSpeaker( ); object oF = GetNearestObjectByTag( "PLS_FIRE", oPC ); DelayCommand( 0.3, SetCommandable( FALSE, oPC ) ); AssignCommand( oPC, ActionMoveToObject( oF, FALSE, 0.0 ) ); AssignCommand( oPC, ActionDoCommand( SetFacingPoint( GetPosition( oF )) )); AssignCommand( oPC, ActionPlayAnimation( ANIMATION_LOOPING_GET_MID, 1.0, 3.0 ) ); AssignCommand( oPC, ActionDoCommand( AssignCommand( oF, ActionPlayAnimation( ANIMATION_PLACEABLE_ACTIVATE ) ) ); AssignCommand( oPC, ActionDoCommand( SetCommandable( TRUE, oPC ) ) ); } 3. Neverwinter Script Source void main( ) { FadeToBlack( OBJECT_SELF ); DelayCommand( 1.0, SetTime( GetTimeHour( )+1, GetTimeMinute( ), GetTimeSecond( ), GetTimeMillisecon( ) ) ); DelayCommand( 2.0, FadeFromBlack( OBJECT_SELF ) ); } cобсно задание простое. Описать что делает скрипт, где он скорее всего стоит и вообще чего хотел афтор (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#52
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
[ OFFTOP ] 1. .. определяет, кто последний взял/положил/украл из плейсебла предмет? - GetLastDisturbed 2. .. определяет значение какой-либо характеристики у существа? (сила, ловкость, телосложение) - GetAbilityModifier 3. .. определяет убийцу НПС? - GetLastKiller 4. .. изменяет количество атак у существа? - SetBaseAttackBonus 5. .. берет первое существо в некой сфере (или другой фигуре), с указанным центром и радиусом? - GetFirstObjectInShape 6. .. делает НПС враждебным? - AdjustReputation 7. .. дает предмету некое свойство? - AddItemProperty 8. .. дает эффект нивидимости? - EffectInvisibility 9. .. открывает локацию на миникарте? - ExploreAreaForPlayer 10. .. заставляет всплыть над НПС или объектом некий текст, указанный вами прямо в скрипте? - FloatingTextStringOnCreature Сообщение отредактировал shadowdweller - Oct 13 2007, 20:24 |
![]()
Сообщение
#53
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
shadowdweller, 1 неправильное.
|
![]()
Сообщение
#54
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Эх, если бы еще уметь пользоваться всеми этими функциями!
Теперь попробую со скриптами. [ OFFTOP ] 1. Мне кажется, может стоять на триггере. Срабатывает в одном случае из 10, в одном случае, когда скрипт все-таки срабатывает, существо (волк?) пробегает из точки 1 в точку 2, а во втором - из точки 2 в точку 1. Потом исчезает.
2. *Тут будет не совсем честно, потому что кое-что Лекс подсказал* Сработает на ActionTaken ветки диалога. Своеобразная мини-катсцена, т.к. игрок не может в это время контролировать своего персонажа. Находим ближайший к РС объект с заданным тегом. Заставляем РС приблизиться к нему, проиграть анимацию (разжечь огонь?), после чего срабатывает эффект, и персонажем можно опять управлять. 3. Как мне кажется, этот скрипт может стоять и на триггере, и на диалоге, и на входе в локацию (последний вариант несколько сомнителен, но чисто теоретически - да). Здесь просто затемняется экран (на 2 секунды) на один час сдвигается время, т.е. как бы проходит час с момента какого-то события. |
![]()
Сообщение
#55
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Цитата cобсно задание простое. Описать что делает скрипт, где он скорее всего стоит и вообще чего хотел афтор Увы, понятно мало... [ OFFTOP ] 1. По определению объекта и вейпов вроде все понятно. Объект с определенным тэгом и ближайшие вейпы (1 и2).
Не понятно сокращение object oEx; Дальше задано условие выполнение скрипта, случайность? Получается, если выпадет случайным образом 1 вариант, то волк копируется на локацию 1 вейпа идет на второй и там дестроится? Если вариант 2, то тот же волк копируется на локацию 2 вейпа и идет на 1 и дестроится на локации 1 вейпа. Стоять этот скрипт может и на входе в локацию, и на триггере и возможно в диалоге, что-то вроде неуловимого волка? “Ага, попробуй его излови…” “Вот он! Ату его!!!” (скрипт) “Эээх… Убег…” У меня вопрос, а как работает CopyObject()? Это точная копия какого-то объекта, который уже есть где-то в модуле? При копировании, сам объект остается или переносится тоже? 2. Этот скрипт скорее всего запускается с диалога, может быть с диалога плейса? DelayCommand( 0.3, SetCommandable( FALSE, oPC ) ); - заблокировать героя? Дальше игрок должен подойти к какому-то объекту, AssignCommand( oPC, ActionDoCommand( SetFacingPoint( GetPosition( oF )) )); - не понятно это действие… Потом анимация разблокирования ловушки игроком, вполне может подойти для любого действия с объектом на земле. Активация плейса, возможно что-то включили, зажгли? AssignCommand( oPC, ActionDoCommand( SetCommandable( TRUE, oPC ) ) ); - разблокировать игрока? 3. С этим скриптом не разобралась… Понятно что речь о времени и черном экране, но вот зачем и почему, не понятно. |
![]() ![]()
Сообщение
#56
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
у нас была небольшая пауза во время которой вы могли поучиться у Айвана
есть мнение( мое (IMG:style_emoticons/kolobok_light/biggrin.gif) ) что нам следует попытаться сделать что-то побольше и заодно освоить несколько важных понятий и умений предлагаю отскриптовать такой статквест : у бога Дионисия мерзким вором минтавром была украдена бутылка фирменного напитка "божья роса" игроку следует найти именно ту бутылку , которая была украдена, принести ее на алтарь Диониса, а за это Дионис наградит повышением одной основной характеристики-( поднимаеться та характеристика которая у героя больше 15 ), причем сначало надо игрока раздеть, чтобы учитывались только его самого умения, а не то, что дает надетые вещи с бонусами. подготовка : вариант реализации будет упрощенным - на одной и той же локе и без посторонних монстров и НПЦ( реально бутылочка в модуле длжна быть заныкана где-нить далеко-далеок и еще охраняться минотавром со своими дружбанами) то есть предпологаеться, что игрок задание уже получил у нас уже есть лока с двумя сундуками, на эту локу мы поместим еще два юзабельных плейса - занычку (можно любой плейс-например телегу) и в противоположном углу алтарь Диониса, кроме того мы сделаем в тулсете один кустомный итем - бутылку напитка "божья роса"( с тегом\ресрефом it_botle_stq1) и положим эту бутылку 1) в занычку 2) в сундук, который при закрывании дает золото... теперь нам надо весь процесс квеста отскриптовать, но сначало надо определить для самих себя какие скрипты( с какими действиями) на какие слоты каких плейсов надо поставить - то есть все надо описать словами и , желательно по пунктам : 1) 2) 3) п.с. ( до свидания до понедельника (IMG:style_emoticons/kolobok_light/biggrin.gif) ) |
![]()
Сообщение
#57
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Цитата теперь нам надо весь процесс квеста отскриптовать, но сначало надо определить для самих себя какие скрипты( с какими действиями) на какие слоты каких плейсов надо поставить - то есть все надо описать словами и , желательно по пунктам : 1) 2) 3) Мне не совсем понятно по этому квесту, как надо учитывать два одинаковых предмета? Или у них должны быть разные таги (это понятно, но противоречит условию задания), или каким-то образом надо проверять, откуда взята данная бутылка (это совсем не понятно… Как это можно сделать)? На алтаре скорее всего надо будет писать скрипт для слота OnDisturbed? 1. Определить игрока, как GetFirstPC()? 2. Предмет (oItem) определять через функцию - GetInventoryDisturbItem()? 3. Проверить таг предмета(через if ?), и если он будет равен заданному запускать основной скрипт: Которым нужно: 1. Удалить сам предмет (бутылку) DestroyObject(oItem)? 2. Снять с игрока все вещи, это через слоты? То есть проверять каждый INVENTORY_SLOT_...? Или еще как-то? 3. Проверить характеристики игрока? Не понятно, как быть, если больше 15 будет ни одна, а например две характеристики? Тогда какую повышать? 4. Повысить характеристику, ну и дать что там еще причитается, (экспу, деньги и так далее) и запись в журнале о выполнении квеста. Наверно как-то так? |
![]()
Сообщение
#58
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Мне не совсем понятно по этому квесту, как надо учитывать два одинаковых предмета? Или у них должны быть разные таги (это понятно, но противоречит условию задания), не противоречит. Квестовым предметам можно и нужно давать уникальные тэги. (кроме случаев, когда по квесту надо скажем принести 10 обычных предметов, например волчьих шкур.) или каким-то образом надо проверять, откуда взята данная бутылка (это совсем не понятно… Как это можно сделать)? это проверять не нужно. Если предмет уникальный (с уникальным тэгом и все такое) - он должен быть в модуле 1 и взять его можно будет только оттуда, откуда надо. Если предмет не уникальный (см выше про шкуры) то не проверяется, откуда они взялись. Вполне можно купить шкуры и выполнить задание. (пресловутая свобода (IMG:style_emoticons/kolobok_light/smile.gif) ) 1. Определить игрока, как GetFirstPC()? можно GetLastDisrurbed(). Если модуль 100% только сингловый - можно и GetFirstPC(). Но считается хорошим тоном как можно меньше использовать GetFirstPC() с тем, чтобы при желании можно было чутка доработать модуль для мультиплеерного прохождения. 2. Снять с игрока все вещи, это через слоты? То есть проверять каждый INVENTORY_SLOT_...? Или еще как-то? циклом. (эти константы на самом деле числа от 0 до 17, так что вместо того, чтобы проверять все, проще запустить цикл (IMG:style_emoticons/kolobok_light/smile.gif) ) 3. Проверить характеристики игрока? Не понятно, как быть, если больше 15 будет ни одна, а например две характеристики? Тогда какую повышать? ошибка в ТЗ квеста. Имхо - повышать самую большую характеристику. Если их 2 - любую из них (IMG:style_emoticons/kolobok_light/smile.gif) |
![]() ![]()
Сообщение
#59
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Lex я дал такое задание и потому , что оно ЕСТЕСТВЕННО должно породить вопросы по определенным не совсем понятным вещам и тому, как их "разрулить" ( способность к такого рода анализу настолько же важна, как и сама реализация скриптом- то есть без одного не сделать другово)
а по этому 1) никто не говорил, что модуль сингловый( это вполне может быть и в шарде-такое надо учитывать) 2) никто не говорил, что у правильной бутылки будет уникальный ресреф( это Лех от себя добаввил не вникнув в условия создания квеста-ведь я ясно указал, что есть по крайней мере ДВЕ такие бутылки( в заначке у минотавра и еще одном сундуке, а Дионисию надо вернуть именно ту, которую у него украли ( и которая сейчас находиться в заначке)) 3) задача на повышение характеристики специально так и была сформулирована( это не ошибка ТЗ (IMG:style_emoticons/kolobok_light/declare.gif) ), что бы возник вопрос : а что делать, если такие характеристики двое или больше (я рад , что вы это "раскусили" - в разработке и отскриптовании реального квеста ( или скрипта) иногда возникают "нештатные ситуации" на подобие этой - способность отыскать такие "узкие места" являеться очень важной для разработчика- ведь квест( и любая другая скриптовая система) пишеться, что бы он сработал всегда, при любых вариантах действия игрока, а не только для одного правильного образа выполнения) Цитата Определить игрока, как GetFirstPC()? в задании подразумеваеться, что у нас будет действий не одно, а несколько, взаимодействия могут происходить с несколькими предметатми и плейсеблами-значит будут несколько отдельных скриптова и в каждом игрока мы будем определять отдельно из всего вышесказанного следует, что нам надо расписывать действия не одним спсиком( как мы делали это раньше), но несколькими( в зависимости от того, с кем происходит взаимодействие)..так и надо попытатся все расписать |
![]()
Сообщение
#60
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Решилась таки тоже ответить. (IMG:style_emoticons/kolobok_light/ph34r.gif)
В принципе, тут можно пойти по пути наименьшего сопротивления и сделать два скрипта: 1) Скрипт на сундук, который при закрывании дает золото. Ставится OnClosed, при этом каждый раз в сундуке создается определенное количество золота. Для этого понадобится функция Код CreateItemOnObject("nw_it_gold001", OBJECT_SELF, 5); где "nw_it_gold001" - резреф (шаблон) создаваемого предмета, OBJECT_SELF - объект, в инвентаре которого создается предмет, и 5 - количество предметов, которое будет создаваться. В общем-то, это и весь скрипт, он несложный. Neverwinter Script Source void main( ) { CreateItemOnObject( "nw_it_gold001", OBJECT_SELF, 5 ); } Хотя, мне кажется, я что-то пропустила и такой скрипт уже был?? 2) Со вторым будет сложнее. Во-первых, нам понадобится условие Neverwinter Script Source if ( GetItemPossessor( GetObjectByTag( "it_botle_stq1" ) ) = OBJECT_SELF ) // Дальше пойдет цикл - надо раздеть РС и переложить предметы в инвентарь ( мы ж не звери, чобы для вознаграждения уничтожать все, что надето на игроке : ) ) object oItem = GetFirstItemInInventory( oEnter ); while ( GetIsObjectValid( oItem ) ) int nSlot; for ( nSlot = 0; nSlot < NUM_INVENTORY_SLOTS; nSlot++ ) { oItem = GetItemInSlot( nSlot, oEnter ); ActionUnequipItem( oItem ); } А вот дальше будет намного сложнее, поэтому куски скритов постить не буду. Наверное, дальше нам понадобится задать интеджер ( назовем int iChar, например), чтобы определить, какие же именно основные характеристики у РС больше 15. Потом надо будет просмотреть все характеристики РС при помощи цикла (вот не знаю только, какого) и функции GetAbilityScore, и задать SetAbilityScore (iChar+1). Ну, тут еще необходимо или задать в начале скрипта то, что он срабатывает один раз, или просто удалить с алтаря искомый объект - бутылку с "божьей росой", и повесить над алтарем спецэффект какой-нибудь, дабы у РС не возникло искушение прокачивать на халяву все эти характеристики бесконечно Это просто Neverwinter Script Source DestroyObject( GetObjectByTag( "it_botle_stq1" ) ); // И, например, окружим алтарь световым кругом. CreateObject( OBJECT_TYPE_PLACEABLE, "plc_solblue", location lLocation ) Только для этого нам нужно задать под алтарем вейпойнт и определить его как ту самую локацию (location lLocation), на которой будет создаваться плейсебл-эффект. Немного сумбурно и здорово намудрила, конечно... (IMG:style_emoticons/kolobok_light/snoozer_17.gif) ЗЫ: Lex, а где проверка д/з по описанию скриптов? Сообщение отредактировал shadowdweller - Oct 30 2007, 23:42 |
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2025 - 07:24 |