![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1361
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
dumbo, так как работаю с шардом, то 1.65. Иначе быть просто и не может. В скором времени перейдем на 1.66, но подобный баг там все равно не исправлен. Ладно, все отговорки. Основную идею я понял, тем более этим скриптом пользовался уже.
|
![]()
Сообщение
#1362
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Zirrex не работал с полимерфами, к тому же ты ж просил найи способы снять эффекты... =) звиняй!
Если ты говоришь что все нормально становится после сна или отдыха, то воткни на перезаход проверку, если в инвентаре контейнер полимерфа с тонной иммунов, раскорячь игрока на небольшой перекур. Вообще спроси лучше шардовиков. Им наверное тоже приходилось сталкиваться. Мефистофель 5-10 это уже много. Вернее 5 еще ничего, но 10 нападающих... :crazy: |
![]()
Сообщение
#1363
|
|
Level 6 ![]() Класс: Страж Тьмы Характер: Lawful Good Раса: Баатезу ![]() |
"Спрошу" А скрипт должен вроде так делатся. Создать персов с Рест Рефом, Добрых и плохих, далее приказать им джампится на точки! а как сделать чтоб они моявлялись каждые 5 минут например?
|
![]()
Сообщение
#1364
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
Zirrex
если уж совсем ничего не поможет(что странно - у меня все пашет как часы), то убивай полиморфера на входе! :DB: запомни его состояние, убивай, оживляй... ;) Добавлено в [mergetime]1120687397[/mergetime] Мефистофель твои словесные выкладки сюжета настолько неконкретны, что смысла не имеют - их можно рассматривать только как "стон", провоцирующий на написание вместо тебя этого скрипта. ты сначала напиши что-то, а потом уже вопросы задавай. "каждые 5 минут" - либо декрементный счетчик хертбитов (5*60 / 6 = 50), либо DelayCommand(300.0, ...); |
![]()
Сообщение
#1365
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
-fenix-, у тебя чистый Соу, даже нету Хоту, причем сам Соу можно было бы обновить и до более высшей версии, например 1.65. Вообще, я тебе советую установить Хоту и посмотреть его одиночное прохождение. Почти в самом начале есть стычка между Дроу и остальными. Они не дерутся до потери пульса, обмениваются парой ударов, заклинаний, и умирают те, в кого это попадает. Ролики должны показывать завязку, а не целую битву, длинною в бесконечные раунды.
Я только не совсем понимаю, что значит они у тебя дергаются, плохо дерутся? Или перемещаются между точками до начала боя дерганно? dumbo, попробую, правда если его убить, то запустится скрипт смерти, который создает тело и переносит персонажа в фугу. Хотя там можно сделать мелкое условие, если входящий имеет полиморф, то его не проверять, а просто оживлять. |
![]()
Сообщение
#1366
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
Zirrex, вешай локалку еще при убиении и проверяй ее в ondeath - зачем плодить циклические проверки на полиморф?
|
![]()
Сообщение
#1367
|
|||
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Zirrex, что бы обновиться до 1.65 нужно качать 70 метров, пока я это не могу :( . А Хоту и ПЛ я пытаюся щаз найти и купить.
Выглядет их стычка так: вор подбегает к бармену, тот поворачивается к вору и они стоят, через некоторое время у кого-нить подымается рука до уровня пояса и тут же опускается обратно, еще возможны непонятные движения ногами и прегибания с уклонениями - типа от удара, но удара никто не наносил. Через некоторое время бармен неожиданно падает на землю, а вор и нанес та один удар (поднял руку) секунды 3 назад. Вот такая петрушка. Сообщение отредактировал -fenix- - Jul 7 2005, 17:16 |
||
![]()
Сообщение
#1368
|
|||
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
-fenix-, пришли мне этот фрагмент модуля на почту, попробую разобраться. Самому моделировать подобную сценку долго, лучше уж посмотреть по существующей. Пиши на zirrexu@yandex.ru. dumbo, не стал я убивать персонажа в полиморфе, просто добавил удаление именно невидимых вещей с тела персонажа, а потом и само удаление эффекта полиморфа. Выглядит это так:
Работает нормально, и снимаются все эффекты, которые были наложены от полиморфа. Персонаж не умирает, хотя если сделать не очень верную задержку перед снятием полиморфа, то персонаж может и умереть. Скрипт можно использовать для решения этого бага. Хотя, если честно, раньше его не было. Почему Bioware не поправит его, мне не очень понятно. |
||
![]()
Сообщение
#1369
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Zirrex выложи пожалуйста скрипт с описанием в базе скриптов этого форума. И укажи версию и прочее.
|
![]()
Сообщение
#1370
|
|||
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Эх, рано радоваться начал. Перестал работать подобный скрипт. Полиморф снимается нормально, но сами эффекты ну ни в какую не хотят сниматься. Даже смерть и сон теперь на них не влияют. То ли у меня уже крыша едет, то ли очередные глюки, я понять не могу. Биоваре убить мало за такой баг. Никто не знает, какой скрипт установлен на отмене полиморфа? Может его использовать для решения этой проблемы? Гм... сейчас протестировал без удаления невидимых предметов, все снимается, но есть одна загвоздка, персонаж иногда почему-то умирает, т.е. не очень верно снимается жизнь при перезаходе. Но эффекты от полиморфа, как не странно, все снялись. Вот я и думаю, каждый игрок на шард входит n-ое количество секунд. Т.е. ни у кого вход не получается одинаковым по времени, и соответственно скрипты, на которые стоит задержка, срабатывают по-разному. Я с этим пытался бороться, ставя между запускающимися скриптами небольшую задержку, но то ли скрипты иногда лагают и не успевают срабатывать, то ли они наслаиваются, мешая друг другу. Добавлено в [mergetime]1120991243[/mergetime] Возник вопрос такого плана, как верно найти в радиусе, например, 20 метров, НПС именно фракции "Defender", а не просто любое существо. Дело в том, что на шарде есть система репутации, а именно, при убийстве другого персонажа срабатывает скрипт, но так как часто рядом бывает несколько НПС, то скрипт не знает, кого выбрать, ища именно существо, а не конкретную цель с определенной фракцией. Пробовал ставить условие, что если найдено существо, то дальше проверять, принадлежит ли фракции "Defender", если да, то выполнять дальнейший скрипт, но почему-то иногда подбегает даже фракция "Commoner", или любая другая, которая была замечена рядом. Сам скрипт:
Сообщение отредактировал Zirrex - Jul 9 2005, 14:38 |
||
![]()
Сообщение
#1371
|
|||||
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
то, что тебе предложили сделать в самом начале... :yes: при сохранении для избежания глюков(хе-хе) биовары снимают полиморф, сэйвят, и надевают обратно - это было наиболее простое решение для лечения глюка, когда эффекты при сохранении переносились на самого игрока. :swoon: если используется своя система автосохранения(скрипты), то лучше вообще не сохранять полиморфов. если у тебя товарищ гибнет, то либо вы где-то намудрили с восстановлением актуальных на момент выхода хитов, либо полиморф(что сомнительно, этот баг биовары исправили довольно давно, вроде). "скрипта отмены полиморфа" нет - это движковое. так и не понял твои выкладки про "задержки". время входа игрока если и меняется, то очень незначительно - событие OnClientEnter происходит где-то в самом начале загрузки локации. работа правильных скриптов никогда не зависит от всяких "задержек"... GetStandardFactionReputation дает тебе отношение стандартной фракции к фракции объекта, т.е. в твоем случае ты выясняешь отношение дефендеров к перечисляемым объектам. а дефендеры, между прочим, очень уважают (100) и коммонеров и мерчантов, ну и себя, любимых, конечно тоже... мало того, ты проверяешь не значение функции, а отличие оного от 0... :swoon: короче, в данном случае тебе нужно пользоваться GetFactionEqual:
|
||||
![]()
Сообщение
#1372
|
|||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
У тебя ActionDoCommand в этих строках лишнее. Команды ты даешь и так Актионы, а ActionDoCommand ставит в очередь не актионы. К примеру
Вообще, мне кажется такая система может дать сбой. Во первых если рядом с погибшим объектом будет еще один из дружественной фракции, то будет большой шапашный разбор. Тебе надо ловить всех енимов и менять им фракцию и читстить репу. Если интересует, могу дать функцию для инклюды. Ловит енимов и меняет им фракцию на заданную. |
||
![]() ![]()
Сообщение
#1373
|
|||
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
dumbo, я уже это заметил, но не нашел альтернативы быстрого выбора именно фракции "Defender". Если попробовать по тэгу, то мне придется приводит к одному типу тэги охранников, а иначе получится ерунда. Про задержки я имел в виду, что если игрок входит не 6 секунд, а все 20, то скрипты не успевают для него срабатывать. У меня стоит выполнение команды переноса на заданную координату, которая успевает сохраниться в тот момент, когда происходит рестарт модуля, и если игрок входит не 5-6 секунд, эта команда не срабатывает вовсе. Так же бывает, что и не срабатывают другие команды, которые тоже выполняются раньше переноса. Понимаешь, я в самом начале пробовал такой способ, снятие одно лишь полиморфа, не получалось, правда, пробовал я его еще в версии 1.62, а потом почситал недейственным и не стал более проверять, оказалось, что зря. Aiwan, так если его не ставить, охранник начинает движение и тут же говорит фразу. При этой же команде он ее говорит лишь только тогда, когда уже рядом с игроком. В точности не помню, то ли я использовал просто "SpeakString", поэтому он у меня так говорил, то ли "ActionSpeakString", но точно помню, что говорил он фразу раньше времени. Шабашного разбора не будет, потому что этот скрипт срабатывает 1 раз, а если подцепляется второй НПС, эм, забыл указать в скрипте, то ему сразу же очищаю все действия. Совсем иного рода тот же скрипт, но на хартбите. Пока что без правок, как есть:
oSpirit - это вещь, которая есть у персонажа, и на ней хранится значение переменной "Carma". Правда, тут есть одна тонкость, если персонаж в этот момент разговаривает, то НПС с ним ничего сделать не сможет :) Подбежит и не солоно хлебавши уйдет. Попробовал запрещать диалог с кем либо, если вышеописанная переменная равна 1, но еще не проверял, как бы у самого охранника не удалось завести диалог с целью. Буду благодарен, если поможешь, только в моем случае убийца не враг охраннику, а друг изначально, это уже в диалоге от своего выбора он может остаться либо другом, либо стать врагом. И вот еще такой вопрос, чуть не забыл написать, если выполняется ряд команд, например создается копия тела персонажа, но создается только лишь потому, что есть цель, но если цель исчезает, то происходит переполнение стека этими командами, ведь они уже запущены, и в итоге ошибка по стеку. Я и подумал, можно ли как-то очистить стек, если цель неожиданно исчезает, но команды уже запустились. У меня они так запускаются в момент смерти, и через 7 секунд создают на земле копию тела персонажа, а потом оригинального персонажа переносят в фугу. Сообщение отредактировал Zirrex - Jul 12 2005, 09:35 |
||
![]()
Сообщение
#1374
|
|||||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Я имею ввиду ситуацию, когда рядом ДВА НПС, один уже убит, другой еще жив. Мое предложение, сделай два НПС лидеров фракций. Один для охранников, другой для НПС комманеров. Присвой им левел 40 и спрячь в закрытой локе. И можешь менять фракцию либо очищать. Иначе будет так: РС убил НПС, рядом шел другой и накинется на РС, даже если он уже убийца. И это ничем уже не исправишь. Надо отслеживать всез енимов в локе и чистить репу им. Функцию даю ниже. Я не знаю всех тонкостей твоих ситуаций, поэтому я могу только гадать, но это пустая трата времени.
У меня работает функция так: игрок идет в локу, к нему подходят НПС. Если игрок решил их завалитть, то происходит разборка, отслеживается НР игрока, если он почти при смерти врубается скрипт и главарь ждет 10 секунд, что бы закончился раунд (ведь игрок не начнет диалог раеньше) и если что -то отвлекло НПС главаря, то хертбит сигналит юзердефу и НПС всеравно вспоминает и идет к РС. В общем у игрока нет возможности смыться, так как в это время я врубаю катсцену ему. Происходит диалог и если РС решит еще драться, то все по новому. Вес протестировано и все пахает как китайские часы.
|
||||||
![]() ![]()
Сообщение
#1375
|
|||
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Aiwan, я попробую поэкспериментировать с этими скриптами, но что идеально работает в одиночной игре, то плохо подходит в онлайновой, опробовано уже не раз, и поэтому требует иного решения. Даю ссылку на описание моей системы репутации на данный момент. Повозившись сегодня со скриптом, удалось добиться, чтобы игрок не мог начинать свой диалог, пока к нему подходит НПС, иначе просто получается, что тот подходит, видит открытый диалог, и не солоно хлебавши уходит. Возможности, как открытый диалог нейтрализовать, я не смог найти. Далее, переменная в скрипте переключилась, условие на харбите более не выполняется, убийца сбежал :)
А зачем он это делает, если команда "ClearAllActions(TRUE)", описанная в твоей библиотеке, моментально затирает боевое состояние НПС и персонажа? Описание. Остается актуальной в этой системе одна довольно серьезная проблема, как узнать, кто прав, а кто виноват в произошедшем убийстве? Ведь, если посмотреть функции редактора, то там нельзя найти такую функцию, как "GetFirstAttacker", но зато есть "GetLastAttacker". Только вот она не очень подходит, потому что в ситуации с 1-го уровневым персонажем против 20-и уровневого всегда будет неправ последний. Но почему так, а не иначе, чувствуется, разработчики не задумавались о такой PvP ситуации? Ведь он может просто подбежать и ударить, а стоящий персонаж, совершив автоматическую атаку (знать бы, как ее отключить при определенных условиях), сделает хороший и быстрый труп из напавшего персонажа, автоматически при этом зарабатывая минус к репутации. Дальше описывать не буду, все и так понятно. Пока что у меня это первоочередная проблема, остальное довольно решаемо, и работает вроде бы как надо, осталось только проработать сценку разговора НПС и игрока, и все будет работать как надо. Сообщение отредактировал Zirrex - Jul 12 2005, 21:13 |
||
![]()
Сообщение
#1376
|
|||||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Во превых, если бы ты делал сингл, я бы дал тебе тест-модуль где все это работает. Но так как ты затачиваешь под себя, то я дал тебе как раз куски кода с которым я возился.
А ты хочешь сказать, что РС после боя мгновенно может начать диалог? Потестируй и увидишь, дебаг мессагу, что сейчас Игрок не может начать диалог.... Или представь ситуацию, что на игрока скастовали спелл парализации или еще какой бяки. Он попросту не будет говорить пока действие не пропадет. Дальше. Твой страж может попросту ЗАБЫТЬ актион. Либо застрять где-то в пути, либо игрок может дернуться и ещ куча либо... та же амбиен анимация. Ну решать тебе :D
Ну дак а я тебе на кой дал свой код? У меня в стандартном еванте на начало диалога стоит отмена локалки хертбита, вернее в самом диалоге. Нет отмены локалки, НПС будет бегать за тобой пока ты не ответишь. Но так как ты, а именно РС в катсцене... то никуда ты не денешься. Все что ты рассказываешь я делал себе для сингал месяц назад. Поэтому объясняю тебе что можеет быть за подводные камни. |
||||||
![]()
Сообщение
#1377
|
|||||||||
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
Zirrex 1. то, что я тебе написал в предыдущий раз ты опять не потрудился понять. 2. твой скрипт не работает, ибо не проходит первую же проверку -
3. делать обращение дефендера к игроку надо иначе. причин для того, чтоб диалог не состоялся в случае твоего решения предостаточно: рядом нет неписей, идет бой, непись просто не догнал игрока итд итп. опять же, если крутая заварушка, твой говорун может сильно помешать. следует просто навешивать на игрока локалку ПК, а потом на OnPerception дефендеров(избегать их постоянно запаришься) проверять PC на предмет наличия локалки - если есть такая, то далее PC на бой, идущий диалог итд - если все путем, то просто врубаешь режим кут-сцены, EffectCutsceneImmobilize на PC, спокойно подваливаешь и заводишь непринужденную беседу - "убил ты надысь игрока фартового, падла - ответствуй за базар" итд итп... 4.
проясняем память :) - такое происходит, если использовать SpeakString без ActionDoCommand. ActionSpeakString = ActionDoCommand(SpeakString). точка. 5. "задержки": скрипт RiPPeR'a ты изменил, но, насколько я понял, изменил коряво - поэтому первый же хб игрока, у которого еще не прогрузилась стартовая лока, приводит к затиранию координат - он еще, так сказать, в "нигде". 6.
что есть "ошибка по стеку"? и покажи свой скрипт, который ее вызывает - угадать, что ты подразумеваешь под "стеком" и "командами" довольно затруднительно... 7.
никак. если магию и можно отследить, то физические атаки - пока никак.
|
||||||||
![]() ![]()
Сообщение
#1378
|
|||||
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
dumbo, нет, я понял, просто приведенный мной выше скрипт старый, и он не изменен, а проверку он проходил, так как у меня сейчас не 1.66, но проходил ее криво, потому что на скрипт реагировали и другие фракции. Тот, что я давал раньше, выполнялся только один раз, и после активации диалога, можно было о нем забыть. А вот скрипт, который на хартбите, с ним все гораздо сложнее. Чувствую, что придется его оттуда убрать, и сделать гораздо проще, хотя на данный момент работает нормально, но не срабатывает сразу, и иногда приходиться ждать какое-то время. На OnPerception ему будет самое оно. Окончательный вариант на данный момент, если учесть, что он постоянно выполняется, и его как-то надо тормозить, такой:
Последовал примеру Айвана, добавил сценку в момент, когда НПС замечает персонажа с отрицательной репутацией. Теперь персонажу не удастся сбежать, как это было раньше. С координатами я разобрался. Чувствуется, что RiPPeR' учитывал это, когда делал скрипт, одно но, его модификация не сохраняет координаты постоянно, а лишь на входе в локацию. Может быть так оно и лучше, надо проверить. Если приводить весь скрипт, много места займет. Опишу на словах, если не понятно все же будет, потом внесу сам скрипт. Например, умирает персонаж, запускается скрипт смерти, создается на персонаже невидимый объект, в который помещается предмет тела, далее, через 7 секунд запускается через "ExecuteScript" еще один скрипт. Данный скрипт копирует облик персонажа и размещает на там, где лежит персонаж, совмещая его с оригиналом. Через 7.5 секунд персонаж переносится в фугу. Теперь ситуация, которая вызывает ошибку. Умирает персонаж, и тут же выходит, следующий через 7 секунд скрипт натыкается на пустоту. Персонажа то нету, копировать не с чего. В итоге происходит ошибка. Хотя чаще она происходит немного иначе, игрок успевает выйти своим персонажем до момента создания даже невидимого объекта. Скрипт просто не знает, куда его разместить, что приводит к ошибке. Все же я приведу скрипт, но он будет длинный. Наверняка в нем много лишнего, но не буду пока что убирать ничего:
|
||||
![]()
Сообщение
#1379
|
|||||||
Level 3 ![]() Класс: Ниндзя Характер: Chaotic Evil Раса: Человек ![]() |
Хочу зделать так что бы игроку при заходе в модуль открывалось диологовое окно (ну это я знаю как)... Что бы его нельзя было закрыть до завершения...Я знаю можно в настройках объекта ставить без прирывания, хотя я не пробовал это...А как через скрипты потому что он будет говорить сам :) И что бы он не мог ничего делать кроме как говорить, это нужно на него эффект кидать какой то типа стун или дэйз да? И ещо какая команда на дроп игрока с модуля? Заранее благодарен... Добавлено в [mergetime]1121347240[/mergetime] А bootPC(oPC) это на всегда? ну тоесть это бан игрока? Добавлено в [mergetime]1121348960[/mergetime] StringToLocation
LocationToString
Объясните мне пожалуйсто безтолковому как это работает? Добавлено в [mergetime]1121350562[/mergetime] А точнее как их совместить, и зачем прибавлять числа типа:
|
||||||
![]()
Сообщение
#1380
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Народ! Пожалуйста помогите со скриптом, суть в нем такая: игрок наступает триггер, и НПС идут на свои места, последний НПС атакует врага. Все это я сделал но вот... НЕПОНЯТНОЕ УСЛОВИЕ КОМПИЛЯТОРА, на:
ActionDoCommand(AssignCommand(oNPC_16, ActionAttack(oPC); Впрочем вот и сам скрипт: void main() { object oPC = GetEnteringObject(); object oNPC_01 = GetObjectByTag("NPC_01"); object oNPC_02 = GetObjectByTag("NPC_02"); object oNPC_03 = GetObjectByTag("NPC_03"); object oNPC_04 = GetObjectByTag("NPC_04"); object oNPC_05 = GetObjectByTag("NPC_05"); object oNPC_06 = GetObjectByTag("NPC_06"); object oNPC_07 = GetObjectByTag("NPC_07"); object oNPC_08 = GetObjectByTag("NPC_08"); object oNPC_09 = GetObjectByTag("NPC_09"); object oNPC_10 = GetObjectByTag("NPC_10"); object oNPC_11 = GetObjectByTag("NPC_11"); object oNPC_12 = GetObjectByTag("NPC_12"); object oNPC_13 = GetObjectByTag("NPC_13"); object oNPC_14 = GetObjectByTag("NPC_14"); object oNPC_15 = GetObjectByTag("NPC_15"); object oNPC_16 = GetObjectByTag("NPC_16"); //Ýòî ñïèñîê, âñåõ ÍÏÑ êîòîðûå ó÷àñòâóþò â äàííîì ñêðèïòå object oWP_NPC_01 = GetWaypointByTag("NW_WAYPOINT001"); object oWP_NPC_02 = GetWaypointByTag("NW_WAYPOINT002"); object oWP_NPC_03 = GetWaypointByTag("NW_WAYPOINT003"); object oWP_NPC_04 = GetWaypointByTag("NW_WAYPOINT004"); object oWP_NPC_05 = GetWaypointByTag("NW_WAYPOINT005"); object oWP_NPC_06 = GetWaypointByTag("NW_WAYPOINT006"); object oWP_NPC_07 = GetWaypointByTag("NW_WAYPOINT007"); object oWP_NPC_08 = GetWaypointByTag("NW_WAYPOINT008"); object oWP_NPC_09 = GetWaypointByTag("NW_WAYPOINT009"); object oWP_NPC_10 = GetWaypointByTag("NW_WAYPOINT010"); object oWP_NPC_11 = GetWaypointByTag("NW_WAYPOINT011"); object oWP_NPC_12 = GetWaypointByTag("NW_WAYPOINT012"); object oWP_NPC_13 = GetWaypointByTag("NW_WAYPOINT013"); object oWP_NPC_14 = GetWaypointByTag("NW_WAYPOINT014"); object oWP_NPC_15 = GetWaypointByTag("NW_WAYPOINT015"); object oWP_NPC_16 = GetWaypointByTag("NW_WAYPOINT016"); if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1) return; SetLocalInt(OBJECT_SELF,"TRIGGER",1); ActionDoCommand(AssignCommand(oNPC_01, ActionMoveToObject(oWP_NPC_01))); ActionDoCommand(AssignCommand(oNPC_02, ActionMoveToObject(oWP_NPC_02))); ActionDoCommand(AssignCommand(oNPC_03, ActionMoveToObject(oWP_NPC_03))); ActionDoCommand(AssignCommand(oNPC_04, ActionMoveToObject(oWP_NPC_04))); ActionDoCommand(AssignCommand(oNPC_05, ActionMoveToObject(oWP_NPC_05))); ActionDoCommand(AssignCommand(oNPC_06, ActionMoveToObject(oWP_NPC_06))); ActionDoCommand(AssignCommand(oNPC_07, ActionMoveToObject(oWP_NPC_07))); ActionDoCommand(AssignCommand(oNPC_08, ActionMoveToObject(oWP_NPC_08))); ActionDoCommand(AssignCommand(oNPC_09, ActionMoveToObject(oWP_NPC_09))); ActionDoCommand(AssignCommand(oNPC_10, ActionMoveToObject(oWP_NPC_10))); ActionDoCommand(AssignCommand(oNPC_11, ActionMoveToObject(oWP_NPC_11))); ActionDoCommand(AssignCommand(oNPC_12, ActionMoveToObject(oWP_NPC_12))); ActionDoCommand(AssignCommand(oNPC_13, ActionMoveToObject(oWP_NPC_13))); ActionDoCommand(AssignCommand(oNPC_14, ActionMoveToObject(oWP_NPC_14))); ActionDoCommand(AssignCommand(oNPC_15, ActionMoveToObject(oWP_NPC_15))); ActionDoCommand(AssignCommand(oNPC_16, ActionMoveToObject(oWP_NPC_16))); ActionDoCommand(AssignCommand(oNPC_16, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_16, PlayVoiceChat(VOICE_CHAT_HELLO))); ActionDoCommand(AssignCommand(oNPC_16, ActionSpeakString("×òî íàäî?"))); ActionDoCommand(AssignCommand(oNPC_01, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_02, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_03, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_04, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_05, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_06, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_07, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_08, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_09, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_10, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_11, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_12, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_13, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_14, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_15, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE, 1.0, 5.0))); ActionDoCommand(AssignCommand(oNPC_16, ActionAttack(oPC); } |
![]()
Сообщение
#1381
|
|||
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
Dik Morris на будущее: скрипт обрамляй тэгами nss:
и закрой скобки, чудо! :crazy: ActionDoCommand(AssignCommand(oNPC_16, ActionAttack(oPC))); |
||
![]()
Сообщение
#1382
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Все дело в кол-ве скобок - в конце нужно 3 закрывающихся скобки.
Пользуйся кнопкой NSS, для написания скриптов! Эм, дамбо, сорри за повтор, но когда я первый раз обновлял, тебя тут не было :D Сообщение отредактировал -fenix- - Jul 14 2005, 19:34 |
![]()
Сообщение
#1383
|
|||||||
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
слово "Сделать" пишется только так и никак иначе. над твоим постом находится пост Zirrex'a, в котором первый скрипт содержит кусок кода, делающий невозможной отмену диалога. суть - SetCutsceneMode(oPlayer, TRUE)); только окончание кут-сцены надо вешать на скрипты самого диалога, а не просто задержкой на 10 секунд. хотя, если у тебя просто будет непись что-то рассказывать, тогда можно и так, только время подсчитать, чтоб успел выговориться.
BootPC просто выкидывает игрока. он может тут же перезайти.
это библиотечные функции - необязательно знать как они работают: их просто нужно использовать. получил локацию игрока, перевел в строку путем LocationToString, сохранил где-то(в базе, например). когда нужно восстановить - прочитал из базы строку, вызвал StringToLocation - получил локацию. осталось только отправить туда игрока.
Сообщение отредактировал dumbo - Jul 14 2005, 19:46 |
||||||
![]()
Сообщение
#1384
|
|
Level 3 ![]() Класс: Ниндзя Характер: Chaotic Evil Раса: Человек ![]() |
dumbo Спасибо за ответы, а в библиотечных функциях уже разобрался, но тоже спасибо.
Добавлено в [mergetime]1121360001[/mergetime] Ага единственное что я не понял так это почему прибовляют числа +6 +12 и т.д.... :xz: |
![]()
Сообщение
#1385
|
|||||
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
GoingPro) строка возвращаемая LocationToString имеет вид: #AREA#big_hell#POSITION_X#12.0#POSITION_Y#35.0#POSITION_Z#0.0#ORIENTATION#12.5#END# функция FindSubString находит подстроку в строке и возвращает ее позицию. т.е. FindSubString(sLocation, "#POSITION_X#") вернет в данном случае 14. но тебя то интересуют данные записанные после строки #POSITION_X#! - поэтому к найденному числу прибавляется длина строки "#POSITION_X#" - 12. т.е. данные находятся в строке на позиции 14+12 = 26. надеюсь, внятно расписал? :sleep: Zirrex сперва правильный вариант скрипта(и с хб его надо снимать):
подождет 10 секунд и сбежит :yes:
скрипт смерти: на мой взгляд, скрипт сильно запущен, хоть и трепыхается... :crazy: очень много лишнего, очень запутанно. а теперь основное: в скриптах смерти никто никогда не делает задержек при работе с объектом игрока - это верный путь к багам. если и надо что-то задержать, то соскреби с игрока все, что тебе нужно, отложи в сторонку, а потом уже делай задержки. работать потом, естественно, только с тем, что сохранил "в сторонке". вывод: убирай нах все delay свои! Сообщение отредактировал dumbo - Jul 14 2005, 21:03 |
||||
![]() ![]() |
Текстовая версия | Сейчас: 4th May 2025 - 10:55 |