![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#591
|
|
Level 10 ![]() ![]() ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек NWN: Контент ![]() |
Тут у меня появилась пара вопросов.
1) Есть oNPC и несколько Вэйпоинтов. Нужно чтобы он пробежал по ним выполняя возле каждого действие и ожидая пока oPC подойдет. Реализовал, разместив под каждый Вэйпоинт триггеры - oPC подходит, наступает, oNPC бежит дальше, дело делать. В общем, сколько вэйпоинтов -> столько триггеров -> столько скриптов, а можно ли как-то это ожидание в одном скрипте забить? И убрать лишние триггеры? 2) Как повернуть oNPC лицом к объекту, SetFacing() - требует угол, который так просто не узнать, SetFacingPoint() - требует вектор, а как его получить я не понимаю, как координаты объекта получить? |
![]()
Сообщение
#592
|
|||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. Пошли оРС за НПС и что бы он был с забитым стеком команд. SetCommandable FALSE, как все выполнит НПС TRUE.
2.
|
||||
![]()
Сообщение
#593
|
|
Level 10 ![]() ![]() ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек NWN: Контент ![]() |
2) Про GetPosition() то я и забыл. :vava: Спасибо.
1) Не, не так. Мне oPC нужен как раз Commandable, просто NPC ждет пока расстояние между ними не станет <= fVarName. Я сперва думал Delay поставить, но тогда есть шанс, что oPC, о чем-то задумавшись, его из виду потеряет (хотя так даже интереснее). Просто, если я буду дистанцию loop'ом проверять, то загружу все что можно. Или нет? |
![]()
Сообщение
#594
|
|||
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Лучше все-таки делать этот прикол с триггерами. Да, триггеров останется такое же количество, но избежать "пложения" скриптов можно, если дать триггерам разные тэги и в скрипте в зависимости от тэга OBJECT_SELF-объекта делать то или другое. |
||
![]()
Сообщение
#595
|
|
Level 10 ![]() ![]() ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек NWN: Контент ![]() |
Пока повесил на oNPC локалку и сделал switch, но с тэгами тоже попробую поиграться.
|
![]()
Сообщение
#596
|
|||||||
Level 10 ![]() Класс: Волшебник Характер: Neutral Evil Раса: Человек ![]() |
Срочно нужна помощь я написал скрипт где много наворотов всяких но скрипт не доделан до конца потому что я не знаю что делать с этой проблемой
; здесь не нужно, но почему эта проблема всегда вылезает?
Поставлено. Помогите коль кто может. Маленькая просьба можно по подробнее. ЗАРАНЕЕ СПАСИБО ВСЕМ!!!!!!!!!!!!
|
||||||
![]()
Сообщение
#597
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
Поправил скрипт с выпадением луте заменив соответствующюю сточку на
то что предложил MasterMage AssignCommand(oPlayer,ActionPutDownItem(GetItemInSlot(i,oPlayer))); после чего в самом шарде после смерит выдает ошибку, toolset же ошибок при компилировании не находит ошибка - скрипт _ondeath; OID; 80000000; TAG; ошибка слишком много инструкций; возможно есть други ворианты как быросить на землю из слотов 1-14 игрока присмерти предметы (применяется на шарде) |
![]()
Сообщение
#598
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
убрал все свои действия и условия для проверки работоспособности самой строки, оказалось что работает но возникла 2 проблема - выдает сообщение что героя нельзя разоружать во время боя.
подскажите как это реализовать то, на многих шардах такое видел значить както всетаки можно выбросить предметы игрока. |
![]()
Сообщение
#599
|
|||||||
![]() Класс: Обыватель Характер: Chaotic Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
To Oksivarus.
Попробуй ClearAllAction (TRUE). Значение TRUE очищает боевые команды. Хотя, не уверен, что в данном случае поможет. То что тебе предложил MasterMage, ИМХО, очень даже правильно в том случае, если у тебя скрипт вызывается не с игрока. А, я думаю, у тебя так и есть. Ошибка не в AssignCommand. Здесь другая проблема. Команда ActionPutDownItem заставляет выполняющего положить шмотки. В твоем же случае он этого не может сделать, поскольку мертв. Нужна другая команда. Есть очень геморный и не презентабельный вариант через копирование шмоток в новосозданный (после смерти героя) лут, но я думаю, все проще. Попробуй спросить в разделе шардов. To MasterMage.
попробуй с помощью функции проверки наличия предмета, а не перебора всех предметов в инвентори: if (HasItem(oPc, "IMMORTAL_RING")). Необходимо подключить библиотеку "nw_i0_plot" (#include "nw_i0_plot"). Или посмотри как это сделано в самой библ. А по-поводу while: Куда ты вешаешь скрипт? По идее должна спотыкаться на первом же предмете, у которого таг не "ss". И вот еще: ссылка. Может с этим трабла.
Может я совсем и не прав, но меня поправят. Сообщение отредактировал Tiger Greyhawk - Jan 24 2005, 04:49 |
||||||
![]()
Сообщение
#600
|
|||
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
:D примечание :
:D функция HasItem состоит всего из одной строчки :D ( нужность создания сией функции вообще не очень понятна :yes: ) так что лучше изза этой функции не подключать инклюд, а сразу писать то самое что есть в HasItem : GetItemPossessedBy(oPC,"<тэг твоего итема>"); |
||
![]()
Сообщение
#601
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Я всегда HasItem пользуюсь, хоть там и одна строка, в проверках диалоговых на наличие вещи.
|
![]()
Сообщение
#602
|
|
Level 10 ![]() Класс: Волшебник Характер: Neutral Evil Раса: Человек ![]() |
помогите мне ктонибудь на стр.23 :drag:
|
![]()
Сообщение
#603
|
|||||||
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Честно говоря не понял вопроса, но если ты спрашиваешь почему в одном случае после функции надо ставить ; а в другом не надо, то ответ будет такой: void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur); - это объявление функции (такое же объявление применимо к константам, переменным). Это объявление говорит компилятору, что такая функция существует. Дело в том, что компилирование скрипта идет сверху вниз. Если бы ты не объявил эту функцию, то при попытке ее вызова из главного тела программы была бы выдана ошибка, т.к. компилятор еще этой функции не знает. Можно обойтись без объявления функции, если ее описание (т.е. ее текст) поставить перед телом основной программы. Объявление функций и переменных служит также для документирования программы, т.к. если выбрать название функции в теле программы , в окошке подсказки высвечивается ее заголовок и примечание (если оно есть) , предшествующее заголовку. Например, все стандартные константы и функции НВНа объявлены в стандартном скрипте nwscript. |
||||||
![]()
Сообщение
#604
|
|||
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Я бы предложил такую схему: 1 НПС делается или через тулсет сразу Immortal или в скрипте спауна через функцию (Immortal - статус означает, что урон ему наносится, но никогда не понижается ниже 1) 2 в событии On Damage этого НПСя идет проверка, равны ли его текущие хит поинты 1 (или тому значению, при котором ты хочешь остановить бой) или нет Если да, то останавливаешь бой и начинаешь диалог. |
||
![]() ![]()
Сообщение
#605
|
|||
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
"nw_i0_plot" это нехилово обьема инклюд( где то около полторы тыщи строк) с большим набором всяких функций...подключать это только для того, что бы пользоваться одной малюсенькой функцией HasItem( вместо которой очень просто можно сразу написать нужное) весьма не рационально :D ИМХО Сообщение отредактировал mamuc - Jan 26 2005, 10:07 |
||
![]()
Сообщение
#606
|
|||
Level 10 ![]() Класс: Волшебник Характер: Neutral Evil Раса: Человек ![]() |
Нет Тобур ты неправельно понел мне нужно доделать скрипт а он не Компилитс и Тоолсет выдает что проблема в
я бес понятия как это исправить может кто сдесь и знает мой скрипт целый можно посмотреть на стр 23! |
||
![]()
Сообщение
#607
|
|
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
#include "x2_inc_cutscene"
void CutSound(int nCutscene, object oSound); void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur); void MultiJump(object oPC, string sWay); void PlayMusic(int nCutscene, object oPC); void SetShift(int nCutscene, object oPC, float fShift); int nCutsceneNumber = 20; void main() { object oPC = GetEnteringObject(); object oGlav = GetObjectByTag("PIVIGA"); object oWP1 = GetObjectByTag("WP_1"); object oWP3 = GetObjectByTag("WP_3"); object oWP4 = GetObjectByTag("WP_4"); object oWP5 = GetObjectByTag("WP_5"); object oWP6 = GetObjectByTag("WP_6"); object oWP7 = GetObjectByTag("WP_7"); object oSound = GetObjectByTag("cut20_summ_sfx"); //Effect Vizual Effect========================================================== effect eZa1 = EffectVisualEffect(VFX_BEAM_BLACK); effect eZa2 = EffectVisualEffect(VFX_BEAM_EVIL); effect eZa3 = EffectVisualEffect(VFX_IMP_DEATH_WARD); effect eZa4 = EffectVisualEffect(VFX_IMP_FEAR_S); //Localnoe====================================================================== location lMes1=GetLocation(oWP1); location lLoc2=GetLocation(oWP7); location lMes3=GetLocation(oWP3); location lMes4=GetLocation(oWP4); location lMes5=GetLocation(oWP5); //============================================================================== if (!GetIsPC(oPC)||GetLocalInt(oPC,"Proverochoi tur!")==TRUE) return; { // Первая ошибка SetLocalInt(oPC,"Proverochoi tur",TRUE); AssignCommand(oPC,ClearAllActions()); ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDarkness(),oPC,20.0); DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa1,lMes1,3.0)); DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa2,lLoc2,3.0)); DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa3,lMes3,3.0)); DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa4,lMes4,3.0)); DelayCommand(2.0,AssignCommand(oGlav,JumpToLocation(lMes1))); DelayCommand(2.0,AssignCommand(oGlav,ActionSpeakString("KO MHE MOI SLUGI"))); DelayCommand(1.0,AssignCommand(oGlav,ActionMoveToObject(oPC,FALSE,0.5))); //Camera mode=================================================================== DelayCommand(1.5, DelayCommand(GetShift(oPC, TRUE), MyPentogramma(nCutsceneNumber, oPC, 482, 3.0))); DelayCommand(1.5, FadeFromBlack(oPC)); CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 10.0, 50.0, CAMERA_TRANSITION_TYPE_SNAP); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 9.0, 40.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE); CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 12.0, 60.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //Vso dla camera object oCam1 = GetWaypointByTag("Camera1"); object oCam2 = GetWaypointByTag("Camera2"); object oCam3 = GetWaypointByTag("Camera3"); object oCam4 = GetWaypointByTag("Camera4"); object oCam5 = GetWaypointByTag("Camera5"); object oCam6 = GetWaypointByTag("Camera6"); //+++++++++++++++++++++++++++++CAMERA+++++++++++++++++++++++++++++++++++++++++++ CutPlayAnimation(1.5, oCam1, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE); CutPlayAnimation(1.5, oCam2, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE); CutPlayAnimation(0.5, oCam3, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE); CutPlayAnimation(1.5, oCam4, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE); CutPlayAnimation(0.5, oCam5, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE); CutPlayAnimation(18.0, oCam6, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE); //Camera stroenie=============================================================== CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 182.0, 111.0, 56.0, CAMERA_TRANSITION_TYPE_SLOW); CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 5.0, 65.0, CAMERA_TRANSITION_TYPE_SNAP); CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0, CAMERA_TRANSITION_TYPE_VERY_FAST); CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 155.0, 45.0, 82.0, CAMERA_TRANSITION_TYPE_SNAP); CutSetCamera(15.6, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0, CAMERA_TRANSITION_TYPE_SNAP); CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 10.0, 4.0, 82.0, CAMERA_TRANSITION_TYPE_SNAP); CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0, CAMERA_TRANSITION_TYPE_SNAP); CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 90.0, 40.0, 82.0, CAMERA_TRANSITION_TYPE_SNAP); CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0, CAMERA_TRANSITION_TYPE_SNAP); CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 105.0, 4.0, 82.0, CAMERA_TRANSITION_TYPE_SNAP); } //PENTAGRAMMA VOCRUG++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur) { if(CutGetActiveCutsceneForObject(oPC) == nCutscene) { object oPen1 = GetObjectByTag("Pen1"); object oPen2 = GetObjectByTag("Pen2"); object oPen3 = GetObjectByTag("Pen3"); object oPen4 = GetObjectByTag("Pen4"); object oPen5 = GetObjectByTag("Pen5"); int iBeam2 = 483; //Rasstavlaem+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam, oPen1, BODY_NODE_CHEST, FALSE), oPen2, fDur); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen2, BODY_NODE_CHEST, FALSE), oPen3, fDur); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen3, BODY_NODE_CHEST, FALSE), oPen4, fDur); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen4, BODY_NODE_CHEST, FALSE), oPen5, fDur); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen5, BODY_NODE_CHEST, FALSE), oPen1, fDur); } } // Taime ======================================================================= void SetShift(int nCutscene, object oPC, float fShift) { if(CutGetActiveCutsceneForObject(oPC) == nCutscene) SetLocalFloat(GetArea(oPC), ".."fShift); // Вторая ошибка } void CutSound(int nCutscene, object oSound) { if(CutGetActiveCutsceneForObject(oSound) == nCutscene) { SoundObjectPlay(oSound); } //=============================================================================== } |
![]()
Сообщение
#608
|
|
Level 8 ![]() ![]() ![]() Класс: Маг Характер: Lawful Good Раса: Полуэльф ![]() |
Tiger Greyhawk скрипт вешается на НПС в слот OnUserDefinite
вообщем я попробую ту строчку про HasItem..........;) |
![]()
Сообщение
#609
|
|||
Ушедший на войну ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Контент ![]() |
Скрипт написаный ниже я поместил в On Use плейсибла, и при юзании игроком он вешает на игрока определенный Вижл эффект.
Я же теперь хочу, чтобы эффект вешался на объект или игрока, которого я укажу с помощью ванда, через Use Unical Power свойства, для облегчения скажу, что у ванда тэг "dm_effectorwand" Вопрос номер 2. Можно - ли через runscript передать параметр для переменной. например runscript myscript(papam1). хех, держитесь у меня удет скоро тонна вопросов! >:/ Сообщение отредактировал Leon PRO - Jan 27 2005, 11:14 |
||
![]()
Сообщение
#610
|
|
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Вопрос номер один не дошел до абонента. Абонент перечитал, но вопрос все равно не дошел =)
Вопрос нумбер ту: Низя. Вызываемый скрипт должен иметь ф-цию main. Можно сделать inc файл, содержащий нужные ф-ции и прикреплять его к скриптам. Тогда можно напрямую вызывать необходимую ф-цию с параметрами. З.Ы. Держимся. :D Сообщение отредактировал Lemegeton - Jan 27 2005, 11:05 |
![]()
Сообщение
#611
|
|
Ушедший на войну ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Контент ![]() |
вопрос номер 1 переделал...
по вопросу номер два: т.е. возможно к.л. макаром всетаки указать в runscript аргумент для скрипта ? |
![]()
Сообщение
#612
|
|||||||||||
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Нет. Ты С или С++ знаешь? Хоть чуть-чуть? Там есть возможность группировать часто используемые универсальные ф-ции для вызова из других частей программы или из других программ. Это называется include файлом. В NWNScript тоже есть такая кракозябра. Т.е. создается файл - что-то вроде:
В скрипте, где надо использовать:
ОБЯЗАТЕЛЬНО пересобрать модуль. Данный пример от-балды, вряд ли заработает, но идея такова. <small>Добавлено в 12:15</small> Вопрос номер один. а. В свойствах предмета поставить: Заклинание -> Только собственное питание (это позволяет тыкать палкой :D ). б. Надо (или не надо, еще не разобрался :D ) переписать OnActivateItem в свойствах модуля на такой:
Это позволит запустить скрипт с именем тэга используемого предмета.! в. Создать скрипт с именем тэга палки:
Сообщение отредактировал Lemegeton - Jan 27 2005, 12:17 |
||||||||||
![]()
Сообщение
#613
|
|||
Ушедший на войну ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Контент ![]() |
Хех, пасибо, за вопрос №2, хоть ты сам точно не знаешь, но хоть ткнул меня где копать. А по вопросу №1 ты по-моему не понял, я в курсе про инклуды. Я говорю о такой ситуации распишу по шагам: 1. Зашел ДМ-ом на шард. 2. написал в консоли runscript имя_скрипта - работает само-собой. 3. поддерживаются-ли такие скрипты, где можно написать, вызвав иго из консоли runscript имя_скрипта(параметр) ? По поводу скрипта:
А разве OBJECT_SELF не на того, кто палкой тыкал сработает ? Сообщение отредактировал Leon PRO - Jan 27 2005, 13:03 |
||
![]()
Сообщение
#614
|
|||||
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Не, извиняй. Я не в курсе про ДМ скрипты. :xz:
Ф-ция ExecuteScript в качестве второго параметра получает объект, от лица которого запускается скрипт. Т.е. в запущеном скрипте этот объект будет как раз OBJECT_SELF. |
||||
![]()
Сообщение
#615
|
|
Ушедший на войну ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Контент ![]() |
Ок, я дома попробую, завтра еще напишу, спасибо огромное!
|
![]() ![]() |
Текстовая версия | Сейчас: 16th May 2025 - 12:00 |