![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#111
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Elf-Drow @ Mar 29 2006, 11:30) [snapback]75009[/snapback] Теперь более менее, а именно так нужно записывать или можно как-нибудь покороче? Я видел пару скриптов которые можно было записывать или мега длинно или коротко... Ты о чем? Если о кол-ве параметров в функции, там это смотря устраивают тебя дефолтные или нет. Стандартно функция выглядет так: NSS void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE) int nSpell и object oTarget, всегда должны быть тобой указаны, так как по умолчанию задать этот параметр не льзя, вернее не имеет смысла. У всех остальных параметров есть дефолтная настройка, такие как: int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE... Тобишь, если тебя устраивает METAMAGIC_ANY, то ты можешь данный параметр вообще не писать, он по дефолту стоит равным METAMAGIC_ANY. Но есть одно НО, если тебя не устраивает дефолт кокого-нить параметра, то прейдется писать и все параметры до него. Вот и получается, что если тебя все устраивает ты запишешь NSS DelayCommand(21.0, AssignCommand(oNPC, ActionCastSpellAtObject(SPELL_FIREBALL, oNPC3))); А если не устраивает последний, то NSS DelayCommand(21.0, AssignCommand(oNPC, ActionCastSpellAtObject(SPELL_FIREBALL, oNPC3, METAMAGIC_FIRE, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE))); Ты об этом спрашивал? |
![]()
Сообщение
#112
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
Да об этом, все работает, но только не ActionCastSpellAtObject а ActionCastFakeSpellAtObject, то есть иллюзия. Почему НПС не может колдовать, а делает тока иллюзию?
|
![]()
Сообщение
#113
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Elf-Drow @ Mar 30 2006, 15:46) [snapback]75274[/snapback] Да об этом, все работает, но только не ActionCastSpellAtObject а ActionCastFakeSpellAtObject, то есть иллюзия. Почему НПС не может колдовать, а делает тока иллюзию? Для колдовства нужно: 1) Чтобы НПС знал и мог пользоваться данным заклинанием. 2) Чтобы он мог достать этим заклинанием до жертвы. Тобишь расстояние подходящие. |
![]()
Сообщение
#114
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
При создании сценки я руководствовался тем же. Поставил НПС 30 уровень волшебника, 20 колдуна, на всякий. (IMG:style_emoticons/kolobok_light/biggrin.gif) Потом поставил галочку на то, чтобы файрбол был как бы готов у НПС и он мог его использовать. Но НПС в то, время, когда должен колдовать тупо стоит, а затем продолжает выполнять последующие действия, плевав на колдовство...
|
![]()
Сообщение
#115
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Elf-Drow @ Mar 31 2006, 06:31) [snapback]75425[/snapback] Но НПС в то, время, когда должен колдовать тупо стоит, а затем продолжает выполнять последующие действия, плевав на колдовство... QUOTE(-fenix- @ Mar 30 2006, 17:36) [snapback]75301[/snapback] 2) Чтобы он мог достать этим заклинанием до жертвы. Тобишь расстояние подходящие. Может дело в этом? Покажи эту строчку с кастом. |
![]()
Сообщение
#116
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
Вот
NSS DelayCommand(5.0, AssignCommand(oNPC, ActionCastFakeSpellAtObject(SPELL_FIREBALL, oNPC1)));
|
![]()
Сообщение
#117
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Elf-Drow, ну эта ведь у тебя работает.
У тебя с ActionCastSpellAtObject не работает, так вот, покажи как ты пишешь с ActionCastSpellAtObject. Ты уверен, что непись может скаставать этот закл на нужный объект, ему ни чего не мешает, например расстояние? Возможно, что ты не правильно настраиваешь закл у мага. Чтобы этого избежать на 100% в функции NSS void ActionCastSpellAtObject( int nSpell,object oTarget, int nMetaMagic = METAMAGIC_ANY, int bCheat = FALSE, int nDomainLevel = 0, int nProjectilePathType = PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell = FALSE) параметр bCheat поставь TRUE. Если так напишешь, то для чтение закла маг не будет обязан его знать. Еще, проверь объект, на который твой НПС кастует, возможно, ты в скрипте указал не его ТЕГ или написал его с ошибкой. Сообщение отредактировал -fenix- - Mar 31 2006, 12:50 |
![]()
Сообщение
#118
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
NSS DelayCommand(5.0, AssignCommand(oNPC, ActionCastSpellAtObject(SPELL_FIREBALL, oNPC1))); Точно так же. Но я проверю с TRUE... С TRUE работает!!! Но не наносится дамаг НПС Все хорошо, продолжаю делать модуль... Сообщение отредактировал Elf-Drow - Apr 8 2006, 16:25 |
![]()
Сообщение
#119
|
|
Пушкин ![]() Класс: Обыватель Характер: Chaotic Neutral Раса: Гигант NWN: Тексты ![]() |
Может быть, этот вопрос уже задавался, но тем не менее: как сделать так, чтобы диалог нельзя было прервать (тот "бокс" в Свойствах не делает ничего) и при этом скрывался интерфейс? Например, с такого разговора начинается модуль Kingmaker. Очень впечатляюще.
|
![]()
Сообщение
#120
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Нужно просто установить режим кутсцены.
NSS void SetCutsceneMode( object oCreature, int nInCutscene = TRUE ); QUOTE с такого разговора начинается модуль Kingmaker Не знаю, не играл. (IMG:style_emoticons/kolobok_light/smile.gif) Сообщение отредактировал Dik Morris - May 4 2006, 17:55 |
![]()
Сообщение
#121
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Chimeric @ May 4 2006, 18:21) [snapback]80750[/snapback] тот "бокс" в Свойствах не делает ничего) он для другого. зы: не забыть после разговора катсцену снять. |
![]()
Сообщение
#122
|
|
Пушкин ![]() Класс: Обыватель Характер: Chaotic Neutral Раса: Гигант NWN: Тексты ![]() |
Сейчас у меня стоит вот что в ActionTaken первых строк разговора, принадлежащих NPC.
NSS void main() { SetCutsceneMode(GetPCSpeaker(), TRUE); } Результат: разговор не происходит, начинается фильм, из которого не выбраться не Эскейпом и никак иначе. |
![]()
Сообщение
#123
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Попробуй установить режим кутсцены до начала диалога.
(Например при наступании на триггер, вход в локу и т.п...) Сообщение отредактировал Dik Morris - May 5 2006, 12:10 |
![]()
Сообщение
#124
|
|
Пушкин ![]() Класс: Обыватель Характер: Chaotic Neutral Раса: Гигант NWN: Тексты ![]() |
Что же мне, каждый раз так изворачиваться? У меня диалогов тьма. Пробовал, между прочим, вписать OWNER_SELF через oTarget вместо игрока, тогда вообще ничего не происходит.
|
![]()
Сообщение
#125
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
не, зачем же так?
стандартный скрипт на начало разговора nw_c2_default4 берем и впихиваем туда сценку: NSS //:://////////////////////////////////////////////////
//:: nw_c2_default4 /* Default OnConversation event handler for NPCs. */ //::////////////////////////////////////////////////// //:: Copyright © 2002 Floodgate Entertainment //:: Created By: Naomi Novik //:: Created On: 12/22/2002 //::////////////////////////////////////////////////// #include "nw_i0_generic" void main() { // See if what we just 'heard' matches any of our // predefined patterns int nMatch = GetListenPatternNumber(); object oShouter = GetLastSpeaker(); object oSelf = OBJECT_SELF; if (nMatch == -1) { // Not a match -- start an ordinary conversation if (GetCommandable(OBJECT_SELF)) { if (GetIsPC(oShouter)) SetCutsceneMode(oShouter, TRUE); // наша катсцена ClearAllActions(); BeginConversation(); } } // Respond to shouts from friendly non-PCs only else if (GetIsObjectValid(oShouter) && !GetIsPC(oShouter) && GetIsFriend(oShouter)) { object oIntruder = OBJECT_INVALID; // Determine the intruder if any if(nMatch == 4) { oIntruder = GetLocalObject(oShouter, "NW_BLOCKER_INTRUDER"); } else if (nMatch == 5) { oIntruder = GetLastHostileActor(oShouter); if(!GetIsObjectValid(oIntruder)) { oIntruder = GetAttemptedAttackTarget(); if(!GetIsObjectValid(oIntruder)) { oIntruder = GetAttemptedSpellTarget(); if(!GetIsObjectValid(oIntruder)) { oIntruder = OBJECT_INVALID; } } } } // Actually respond to the shout RespondToShout(oShouter, nMatch, oIntruder); } // Send the user-defined event if appropriate if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE)); } } |
![]()
Сообщение
#126
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
По моему, достаточно просто сделать так:
З.Ы.:В своем модуле проверял... NSS void main() { SetCutsceneMode(GetFirstPC()); ActionStartConversation(GetFirstPC(), "Res Ref диалога"); } Можно на триггер какой-нить поставить или но OnConversation, но дык на энто не пробовал... Сообщение отредактировал Elf-Drow - May 5 2006, 15:31 |
![]()
Сообщение
#127
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Elf-Drow @ May 5 2006, 16:31) [snapback]80835[/snapback] Можно на триггер какой-нить поставить или но OnConversation, но дык на энто не пробовал... Стандартный диалоговый скрипт (nw_c2_default4) есть у каждого НПС после его размещения на карте. Зачем находить себе лишний геморой, если можно одну строчку написать? |
![]()
Сообщение
#128
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
не знаю как ты проверял, но данный скрипт на триггере запустит диалог с триггером в режиме катсцены. а надо то с НПС.
|
![]()
Сообщение
#129
|
|
Пушкин ![]() Класс: Обыватель Характер: Chaotic Neutral Раса: Гигант NWN: Тексты ![]() |
Что ж, рецепт Феникса помог. Штука, конечно, в том, что теперь на все-все ветки в конце придется ставить скрипт, выключающий режим фильма...
|
![]()
Сообщение
#130
|
|
![]() Класс: Пьяный Мастер Характер: Lawful Good Раса: Тварь MySQL, PHP, JavaScript Порядок Времени ![]() |
Chimeric (IMG:style_emoticons/kolobok_light/wink3.gif) дык есть и стандартный скрипт запускаемый при завершении диалога, добавь еще и туда строчку
|
![]()
Сообщение
#131
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Хм. Данную проблему решал давно и с успехом. Извиняюсь что так поздно заглянул в тему...
В каждом диалоге, создаешь служебную корневую строку В САМОМ ВЕРХУ. Она никогда не появится, но будет работать на нас. На нее вешаешь скрипт первый. Самое главное запомни, если на РС навешать функцию катсцены два раза или три то будут глюки. Это даже в комментах биовар есть. Второй скрипт вешаешь на строку в диалоге. Все. NSS //::////////////////////////////////////////////// //:: Включаем РС режим катсцены //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 30.12.2005 //::////////////////////////////////////////////// int StartingConditional() { object oPC = GetPCSpeaker(); object oSelf = OBJECT_SELF; //------------------------------------------------------- if(GetCutsceneMode(oPC)==FALSE) { SetCutsceneMode(oPC, TRUE); AssignCommand(oSelf, ClearAllActions(TRUE)); AssignCommand(oSelf, ActionStartConversation(oPC)); } return FALSE; } NSS //::////////////////////////////////////////////// //:: Отключает РС режим катсцены //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 30.12.2005 //::////////////////////////////////////////////// void main() { object oPC = GetPCSpeaker(); if(GetCutsceneMode(oPC)==TRUE) { SetCutsceneMode(oPC, FALSE); } } QUOTE(Chimeric @ May 5 2006, 21:45) [snapback]80877[/snapback] выключающий режим фильма... Проверь на хертбите НПС, если он разговаривает и с объектом РС, то ретурн. Если не разговаривает то катсцену удали у РС. Так в ПЛ было. |
![]()
Сообщение
#132
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Aiwan @ May 5 2006, 20:16) [snapback]80883[/snapback] Проверь на хертбите НПС, если он разговаривает и с объектом РС, то ретурн. Если не разговаривает то катсцену удали у РС. Так в ПЛ было. там было на хб модуля |
![]()
Сообщение
#133
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
А еще проще поставить Alternative Core и все глобальные события как на ладоне. (IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]()
Сообщение
#134
|
|
Level 8 ![]() ![]() ![]() Класс: Тайный Лучник Характер: Lawful Good Раса: Эльф ![]() |
привет,
доскажите почему на определенной фразе разговора не запускается КатСцена? Такая же как на первой страничке первая катСцена от Айвана.. |
![]()
Сообщение
#135
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
в режиме диалога катсцена не врубается, насколько я знаю. Надо до, или после.
|
![]() ![]() |
Текстовая версия | Сейчас: 7th July 2025 - 12:08 |