![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#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: Контент ![]() |
Ок, я дома попробую, завтра еще напишу, спасибо огромное!
|
![]() ![]()
Сообщение
#616
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
Leon PRO "умный в гору не пойдет,умный гору обойдет" - если ты хочешь передать параметр в скрипт вызванный с ExecuteScript, например :
ExecuteScript(tgItem, oPC ); , то повесь нужное значение на oPC локалкой какой нить..а в скрипте ты эту локалку(значение) сможешь считать и использовать, а потом эту локалку изничтожить, чтоб место зря не занимала...( это один из приемов серии"голь на выдумку хитра" :D ) Сообщение отредактировал mamuc - Jan 27 2005, 14:06 |
![]()
Сообщение
#617
|
|
Ушедший на войну ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Контент ![]() |
mamuc Да вот пока на этом и остановился =\ но думаю как-бы попроще.
|
![]()
Сообщение
#618
|
|||
Level 9 ![]() ![]() ![]() Класс: Страж Тьмы Характер: Chaotic Evil Раса: Нежить ![]() |
Как сделать так чтобы мешки с лутом исчезали через указанное время, например 250 секунд? Есть плэйс мешка на открытия которого стоит срипт генерации лута, с этим понятно, есть скрипт на смерть моба при испольнении скрипта создается заданый мешок, пробовал такой вариант :
Но мешок не дестроится, подскажите вариант лучше, три часа на это убил а результата не добился :xz: |
||
![]()
Сообщение
#619
|
|
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Был такой вопрос... Решился "Чистильщиком". Т.е. НПЦ, который через некоторое время убирает все "левое" шмотье на карте. Где-то на форуме даже скрипты есть.
|
![]() ![]()
Сообщение
#620
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
ммм ..выше уже писалось - нельзя уничтожить обьект если его инвентарь не пуст..сначало надо весь инвентарь вычистить..
Сообщение отредактировал mamuc - Jan 27 2005, 18:51 |
![]()
Сообщение
#621
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
ну так чистильщик так и работает. :)
А вообще в ХОТУ стандартная система выпадения вещей разве не кактит? Я в ней не копался, но вроде там можно указать время, через которое дестроится лут. |
![]()
Сообщение
#622
|
|||||
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Не уверен, но, по-моему объект не уничтожается потому, что назначаешь команду уничтожения исполнить объекту, который сам будет уничтожен (умерший моб должен уничтожить мешок). К тому же у тебя просто ошибка в скрипте: DestroyObject(OBJECT_SELF, 250.0); должна уничтожить моба (если скрипт запускает моб). Попробуй в скрипте вместо DestroyObject(OBJECT_SELF, 250.0); такую конструкцию: object oBag = CreateObject(OBJECT_TYPE_PLACEABLE, sTemplate, lLoc, TRUE, sTag); AssignCommand(GetModule(), DestroyObject(oBag , 250.0)); т.е. чтобы какой то другой объект уничтожал (в данном случае модуль) Сообщение отредактировал Тобур - Jan 27 2005, 19:31 |
||||
![]()
Сообщение
#623
|
|||||
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Объект может сам себя уничтожать, так что все ок со скриптом, надо только содержимое почистить перед этим. так:
посему лучше такой вариант:
|
||||
![]()
Сообщение
#624
|
|
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Кстати, получает ли такая система ограничение на количество лута? Есть ведь ограничение на количество команд (Actions) в стэке. Кроме того, таймер (ХартБит) "халявит" в тех картах на которых нет игрока. Там все будет ОК?
|
![]()
Сообщение
#625
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
??
- Никаких ограничений на кол-во вещей в луте. - с ХБ эта система никак не связанна. - ХБ не халявит нигде. Он во всех локах работает. |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 11:46 |