![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2176
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE А дык через что присваивать Area? Через Location? А Location тода через что? В зависимости от ситуации. Например, если ты хочешь сменить трек в текущей локации: NSS object oArea = GetArea(OBJECT_SELF);// Т.е oArea - сама лока Если в какой либо другой: NSS object oArea = GetArea(GetObjectBtTag(""));
Сообщение отредактировал Dik Morris - Apr 24 2006, 15:23 |
![]()
Сообщение
#2177
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Good Раса: Человек ![]() |
Доброго времени суток. У меня возник вопрос, если он глупый, прошу строго не судить - так как это мой первый опыт в написании скриптов.
Решил немного модифицировать скрипт с реакцией гварда на оружие в руках игрока: при виде игрока с оружием в руках, гвард начинает диалог(предлагает заплатить штраф), при отказе платить штраф вызывается следующий скрипт: CODE void main() { object oPC = GetPCSpeaker(); object OS = OBJECT_SELF; object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); if (!GetIsObjectValid(oWeapon)) return; DelayCommand(0.30, ActionSpeakString("Может так ты лучше поймешь!")); DelayCommand(0.60, ActionUseFeat(FEAT_IMPROVED_DISARM, oPC)); DelayCommand(1.40, ApplyEffectToObject(1, EffectKnockdown(), oPC, 8.0)); DelayCommand(0.25, SetStandardFactionReputation(REPUTATION_TYPE_ENEMY, 50, oPC)); DelayCommand(2.30, ClearAllActions(TRUE)); DelayCommand(4.30, ActionPickUpItem(oWeapon)); DelayCommand(7.20, ActionMoveToObject(oPC, FALSE, 1.4)); DelayCommand(10.0, AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "dl_afterdisarm"))); } Ведет он себя абсолютно непредсказуемо. Чаще всего гвард после проведения дизарма остается хостайл и продолжает атаковать игрока. Подскажите, пожалуйста в чем может быть проблема или скажите хоть куда копать. Спасибо. З.Ы. DelayComand() - это задержка от начала выполнения скрипта или от предыдущего действия? |
![]()
Сообщение
#2178
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(windhover @ Apr 26 2006, 02:49) [snapback]79626[/snapback] DelayComand() - это задержка от начала выполнения скрипта или от предыдущего действия? от начала QUOTE(windhover @ Apr 26 2006, 02:49) [snapback]79626[/snapback] Чаще всего гвард после проведения дизарма остается хостайл и продолжает атаковать игрока. ну ессно. Ты ж его заставляешь применить фит, который расценивается как атака. Смена отношения между РС и хостайлами не ясна. Если уж на то пошло, то тебе надо такое: - отчистить стеки акций у обоих участников - (тут можно поставить TemporaryEnemy) - применить фит дизарм - наложить кнок - с небольшой задержкой после дизарма очищай персональные отношения, можешь насильно поставить нейтрал - запускай диалог. Но учти, что после боя требуется время. как вариант - выкинуть дизарм. Те анимашка (быстрый взмах рукой.. скажем ANIMATION_LOOPING_TALK_FORCEFUL), эффект кнока, копирование оружия на землю и удаление из руки. Подбор и диалог сразу. |
![]()
Сообщение
#2179
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Good Раса: Человек ![]() |
QUOTE(Lex @ Apr 26 2006, 02:53) [snapback]79629[/snapback] как вариант - выкинуть дизарм. Те анимашка (быстрый взмах рукой.. скажем ANIMATION_LOOPING_TALK_FORCEFUL), эффект кнока, копирование оружия на землю и удаление из руки. Подбор и диалог сразу. Спасибо большое, вариант без дизарма действителшьно лучше, так как стража тоже иногда "1" бросает =) Еще один глупый вопрос: если скрипт вызывается из диалога, ClearAllActions(TRUE) у кого очистит стэк акций? P.S. простите, поправил.. Mozilla чегойто... (IMG:style_emoticons/kolobok_light/unsure.gif) (IMG:style_emoticons/kolobok_light/unsure.gif) Сообщение отредактировал windhover - Apr 26 2006, 18:55 |
![]()
Сообщение
#2180
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Aiwan @ Apr 26 2006, 19:32) [snapback]79700[/snapback] Еще один глупый вопрос: если скрипт вызывается из диалога, ClearAllActions(TRUE) у кого очистит стэк акций? в диалоге если не указываешь объект, или указываешь OBJECT_SELF, то это относится к НПС, с которым разговариваешь. Тут это особо не нужно (я про отчистку), но лучше подстраховаться и ввести в правило: что-то делаешь с Игроком/Неписью - отчисть его стек, если это возможно. (бывают случаи когда стек наоборот чистить не нужно, но эт другая история) |
![]()
Сообщение
#2181
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Добрый день (IMG:style_emoticons/kolobok_light/smile.gif) . Не особо разбираюсь в скриптах - все познания ограничиваются установкой локальных переменных, созданием монстров и эффектами, поэтому частенько заглядываю сюда в поисках готовых примеров. Долго искал, но не смог обнаружить, как сделать:
1.Вызов приживалы (спутника, существа у магов и колдунов), вызов элементалей и планаров доступным только в определенных областях и с наличием определенных предметов в инвентаре. 2.Предмет, вызывающий определенное существо сроком на 6 минут, после чего его использование становится невозможным на 12 минут. Буду очень признателен, если кто-нибудь окажется достаточно терпеливым и объяснит мне, как это сделать (IMG:style_emoticons/kolobok_light/smile.gif) . |
![]()
Сообщение
#2182
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE 2.Предмет, вызывающий определенное существо сроком на 6 минут, после чего его использование становится невозможным на 12 минут. В закрытой локации, поставь готового NPC. Поскольку конкретно ничего не сказано о: QUOTE после чего его использование становится невозможным Я сделал так что NPC, после истечении 6 минут, прыгает на нужный вайпоин. (Скажем, в той же закрытой локе) На onActivateItem в мод. св-вах: NSS void main() { object oPC = GetItemActivator(); // Игрок; object oNPC = GetObjectByTag(""); // Таг вызываемого NPC; object oWP = GetObjectByTag(""); // Таг "домашнего" вейпа; object oItem = GetItemActivated(); // Активируемый предмет; if (GetTag(oItem) == "") // Здесь укажи таг oItem ; { if (GetLocalInt(oPC, "Local") == FALSE) { SetLocalInt(oPC,"Local", 1); DelayCommand(1200.0, SetLocalInt(oPC,"Local",0)); effect eVisual = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_FIRE); DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPC)); DelayCommand(0.7, AssignCommand(oNPC, ClearAllActions(TRUE))); DelayCommand(1.0, AssignCommand(oNPC, ActionJumpToObject(oPC))); DelayCommand(599.7, AssignCommand(oNPC, ClearAllActions(TRUE))); DelayCommand(600.0, AssignCommand(oNPC, ActionJumpToObject(oWP))); } if (GetLocalInt(oPC, "Local") == TRUE) FloatingTextStringOnCreature("Нужное время еще не пришло.", oPC); } } QUOTE 1.Вызов приживалы (спутника, существа у магов и колдунов), вызов элементалей и планаров доступным только в определенных областях и с наличием определенных предметов в инвентаре. Это можно сделать, немного модернизировав вышеприведенный код, т.е добавить проверку на айтемы, локи и т.п... Сообщение отредактировал Dik Morris - Apr 28 2006, 07:48 |
![]()
Сообщение
#2183
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Премного благодарен (IMG:style_emoticons/kolobok_light/smile.gif) .
|
![]()
Сообщение
#2184
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Есть гостиница, в ней - разные комнаты. В некоторых есть окна, во всех есть различные источники искусственного освещения.
Нужно сделать естественное освещение, т.е. с наступлением дня и ночи менять тайловое освещение в тех комнатах, в которых есть окна. Но поскольку просто так скриптами границы комнаты не определишь (насколько я знаю), есть вопрос: Как, по-вашему, наиболее удобно/эффективно обозначать расположение тайлов комнаты для скрипта? Можно, конечно, и в скрипт коррдинаты каждого тайла запихнуть, но это как-то не очень. Повторюсь: ВСЕ тайлы менять не надо, только определённые комнаты. |
![]()
Сообщение
#2185
|
|
Level 1 Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
Недавно сел за редактор и никак не могу понять следующие вещи.
Как приказать NPC двигаться в точку? И как назначить эту точку? При генерации вещей в сундуках, они выбратся из указанного уровня вещей. А можно ли редактировать эти самые уровни? Например, при генерации золота на высоком уровне получается около 20 золотых, а мне нужно примерно 1000-3000. И можно как-то сделать, чтобы они генерировались из заданного мной списка вещей? Сообщение отредактировал mefist - Apr 29 2006, 18:53 |
![]()
Сообщение
#2186
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
mefist
Для начала прочитай FAQ по тулсету - отпадет много вопросов. ЗДЕСЬ ~ 4mb QUOTE Как приказать NPC двигаться в точку? С помощью фун-ции: NSS void ActionMoveToObject( object oTarget, int bRun = FALSE, float fRange = 1.0f ); QUOTE И как назначить эту точку? WayPoints Wizard. QUOTE И можно как-то сделать, чтобы они генерировались из заданного мной списка вещей? Например так: NSS void main()
{ // OnOpen сундука object oPC = GetLastOpenedBy(); if (GetLocalInt(OBJECT_SELF,"Open") == 0) { SetLocalInt(OBJECT_SELF,"Open",TRUE); if (GetHitDice(oPC) == 1) CreateItemOnObject("ResRef_itema", OBJECT_SELF); if (GetHitDice(oPC) == 2) CreateItemOnObject("ResRef_itema", OBJECT_SELF); if (GetHitDice(oPC) == 2) CreateItemOnObject("ResRef_itema", OBJECT_SELF); // 3, 4, 5 левелы и т.д... } } Сообщение отредактировал Dik Morris - Apr 29 2006, 19:27 |
![]()
Сообщение
#2187
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
QUOTE(virusman @ Apr 29 2006, 15:15) [snapback]80129[/snapback] Но поскольку просто так скриптами границы комнаты не определишь (насколько я знаю), есть вопрос: Как, по-вашему, наиболее удобно/эффективно обозначать расположение тайлов комнаты для скрипта? в 1.67 есть что-то вроде GetAreaSize(), но близко не смотрел. Для обозначения тайлов удобнее всего ставить вэйпоинты, и по их координатам определять, что за тайл. Почему-то когда пыталася сделать нечто подобное, то ничего не было видно, пока не выйдешь и снова не зайдешь в область. RecalculateStaticLighting() не помогает. Похоже цвет вделанных в тайлы факелов считается статическими данными, т.е. считываются один раз при заходе в область, а RecalculateStaticLighting пересчитывает карту теней, учитывая статические данные о свете и свет плейсов. Кажется по этой же причине нельзя создавать звуки скриптами. Хотя, может быть просто что-то криво делал (IMG:style_emoticons/kolobok_light/wacko.gif) |
![]()
Сообщение
#2188
|
|
Level 1 Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
Спасибо. А можно все-таки менять границы категорий при генерации вещей? Например, при генерации золота категории high создается около 20 золота, а мне нужно, допустим, около 1000. Или есть какая-то другая альтернатива? С деньгами то проще, их можно делать через рандом, а вот с вещами мне что-то ничего в голову не приходит.
И еще вопрос, как сделать чтобы в диалоге учавствали сразу несколько NPC? |
![]()
Сообщение
#2189
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(mefist @ Apr 30 2006, 00:16) [snapback]80189[/snapback] И еще вопрос, как сделать чтобы в диалоге учавствали сразу несколько NPC? Читайте мой мануал с сайта. Очень много чего написано. |
![]()
Сообщение
#2190
|
|
Level 1 Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
Ты про Цикл "Aurora Toolset"? я что-то там этого не нашел. Не мог бы дать ссылку?
|
![]()
Сообщение
#2191
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Посомтри в теме ссылок здесь в это разделе. Там как раз мой мануал есть в PDF.
|
![]()
Сообщение
#2192
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
А вы знаете, что енкаучеры не удаляются (IMG:style_emoticons/kolobok_light/smile.gif) Я вот не шмог удалить... (IMG:style_emoticons/kolobok_light/pardon.gif) Кто шмог?
|
![]()
Сообщение
#2193
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Aiwan @ May 4 2006, 19:10) [snapback]80757[/snapback] А вы знаете, что енкаучеры не удаляются (IMG:style_emoticons/kolobok_light/smile.gif) Я вот не шмог удалить... (IMG:style_emoticons/kolobok_light/pardon.gif) Кто шмог? Aiwan, я тоже не смог, но можно запретить после определенного события. Устроит? NSS void main()
{ object oPC = GetFirstPC(); AssignCommand(oPC, SetEncounterActive(FALSE, GetObjectByTag("VOLKI"))); } // Удалить встречу с монстрами |
![]()
Сообщение
#2194
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
gennady, спасибо. У меня оно так и работает. Но бывает случай, когда енкаучер уже совсем не нужен. Раньше я ставил удалить. А вот недавно понял что не удаляется. Это гораздо обломнее узнать после выхода модуля... Я просто молодежи писал скрипт на срабатывание енкаучера по локалке. Вот его переписал заново. Енкаучер должен быть неактивен и срабатывать только один раз в настройках.
NSS //:://////////////////////////////////////////////
//:: OnEnter am_een_local_on //:: Copyright © 2006 WRG! //::////////////////////////////////////////////// /* Включает енкаучер, если на РС нет ни одной локальной переменной равной стрингу LOCAL_PC_0X float "TIME" - время срабатывания енкаучера Локалка "NUMBER" - означает сколько раз сработает. Если ее нет, сразу уничтожится. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 04.05.2006 //::////////////////////////////////////////////// #include "am_inc_debug" void main() { object oPC = GetEnteringObject(); object oEnc = OBJECT_SELF; object oArea = GetArea(OBJECT_SELF); float f = GetLocalFloat(oEnc, "TIME"); int i = GetLocalInt(oEnc, "NUMBER"); string sLl = GetLocalString(oEnc, "LOCAL_PC_01"); // Локальные переменные string sL2 = GetLocalString(oEnc, "LOCAL_PC_02"); // при каторых енкаучер string sL3 = GetLocalString(oEnc, "LOCAL_PC_03"); // не сработает. string sL4 = GetLocalString(oEnc, "LOCAL_PC_04"); string sL5 = GetLocalString(oEnc, "LOCAL_PC_05"); int iFalse; if(!GetIsPC(oPC)) return; if(GetLocalInt(oEnc, "FIGHT!")) return; // Енкаучер сработал if(sLl=="" && sL2 =="" && sL3=="" && sL4=="" && sL5=="") return; if(GetLocalInt(oPC, sLl) || GetLocalInt(oPC, sL2) || GetLocalInt(oPC, sL3) || GetLocalInt(oPC, sL4) || GetLocalInt(oPC, sL5)) { Debug("Енкаучер '"+GetName(oEnc)+"' не сработает, т.к. переменные триггера и РС совпали."); return; } if(i == 0) // Если 0, то отключаем { Debug("Отключаем енкаучер. Манчи плачут на взрыд..."); // Манчи плачут на взрыд... return; } else if(GetEncounterActive(oEnc) == FALSE) { if (f == 0.0) f = 600.0; // 10 минут, стандартный респавн SetEncounterActive(TRUE); DelayCommand(1.0, SetEncounterActive(FALSE, oEnc)); SetLocalInt(oEnc, "FIGHT!", TRUE); // Тут самое интересное. Неактивный енкаучер DelayCommand не исполняет // поэтому я попросил это сделать локацию, в котором он стоит. Она вроде // как не против... SetLocalInt(oEnc, "NUMBER", i-1); Debug("Енкаучер сработает еще ["+IntToString(GetLocalInt(oEnc, "NUMBER"))+"] раз. "); AssignCommand(oArea, DelayCommand(f, SetLocalInt(oEnc, "FIGHT!", FALSE))); } else return; } |
![]()
Сообщение
#2195
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Aiwan @ May 8 2006, 10:27) [snapback]81091[/snapback] Но бывает случай, когда енкаучер уже совсем не нужен. Тогда проще написать скрипт встреч на обычный триггер, и если нужно, то удалять этот триггер. Как раз недавно писал такой скрипт, может кому пригодится. NSS //:://////////////////////////////////////////////
//:: Created By: Gennady //:: Created On:27.04.2006 //::////////////////////////////////////////////// void main() { object oPC = GetEnteringObject(); object oSelf = OBJECT_SELF; object oPlc = GetNearestObjectByTag("LOC_"+GetTag(oSelf)); location lLoc = GetLocation(oPlc); string sResRef = GetName(oSelf); // Объект создаваемый string sNewTag = GetTag(oSelf); // Тег созданиЯ int iN = StringToInt(GetLockKeyTag(oSelf)); // Количество созданий int iNN = StringToInt(sNewTag); // Количество встреч int iNM = 0; effect eEffect1 = EffectVisualEffect(VFX_IMP_LIGHTNING_M); effect eEffect2 = EffectVisualEffect(VFX_IMP_DISPEL); if(!GetIsPC(oPC)||GetLocalInt(oSelf, "DEACTIVATED")) return; { while (iN != iNM) { if (GetIsObjectValid(oPlc)) CreateObject(OBJECT_TYPE_CREATURE, sResRef, lLoc,TRUE,sNewTag); else CreateObject(OBJECT_TYPE_CREATURE, sResRef, GetLocation(oSelf),TRUE,sNewTag); iNM++; } if (GetIsObjectValid(oPlc)) { ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect1, GetLocation(oPlc)); DelayCommand(1.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect2, GetLocation(oPlc))); } else { ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect1, GetLocation(oSelf)); DelayCommand(1.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect2, GetLocation(oSelf))); } if (sNewTag == "1") { DelayCommand(0.2, SetLocalInt(oSelf, "DEACTIVATED", TRUE)); DestroyObject(oSelf, 2.0); } else { DelayCommand(0.2, SetLocalInt(oSelf, "DEACTIVATED", TRUE)); DelayCommand(1000.0, SetLocalInt(oSelf, "DEACTIVATED", FALSE)); if (iNN < 1) return; SetLocalInt(oSelf, "NUM", GetLocalInt(oSelf, "NUM") + 1); if (GetLocalInt(oSelf, "NUM") >= iNN) DestroyObject(oSelf, 2.0); } } } /* Встреча Триггер содержит в названии ResRef объкта, который появится. Точка, где появится объект LOC_+Тег триггера, если точки нет - то к триггеру. Поле триггера KeyTag - Количество созданий Если тег триггера 1, то встреча только один раз, если другой, то повтор через 1000 секунд, если цифра, то это количество встреч. */ Сообщение отредактировал gennady - May 20 2006, 05:26 |
![]()
Сообщение
#2196
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Если бы все было так просто.... (IMG:style_emoticons/kolobok_light/pardon.gif) Триггер залудить это две секунды. Даже если взять в расчет уровень игрока и потом спавнить НПС или монстров. Но ваш триггер громадный дизбаланс... Вы это поймете когда запустите в модуль игрокоы с уровнем 5-10 примерно.
|
![]()
Сообщение
#2197
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Триггер проигрывает энкаунтеру в:
- гибкости и легкости настройки (добавить, удалить из листа, уникальный спавн и прочее) - спавн на энкаунтерах сбалансированный, по CR, а на триггерах нет. а выигрыш только в том, что его можно удалить. сомнительные преимущества триггера (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2198
|
|
Level 1 Класс: Клерик Характер: Neutral Evil Раса: Дварф ![]() |
Глупый нубский вопрос (IMG:style_emoticons/kolobok_light/rolleyes.gif) . Как поднять максимальное кол-во опыта, получаемое при убийстве моба и как сделать так, что бы в пати опыт резался не по полам(в случае если патя из двух человек), а процентов на 10, и что бы сумоны не жрали экспу. Заранее спасибо (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#2199
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. Ставим уровень игры Изи. Открываем вкладку в свойствах модуля в Адвантес:
QUOTE Приспособьте ползунок так, чтобы снимать тот опыт, который герой автоматически получит в течение игры: 0% - опыт должен быть присужден или вручную, или же по сценарию. 100% - стандартные вознаграждения опыта, основанные на таблице НН. 2000% - 20 x стандартный награды опыта |
![]()
Сообщение
#2200
|
|
Пушкин ![]() Класс: Обыватель Характер: Chaotic Neutral Раса: Гигант NWN: Тексты ![]() |
Ситуация: у всех NPC в OnConversation стоит
NSS оbject oPC = GetFirstPC(); SetCutsceneMode(oPC, TRUE); ActionStartConversation(oPC, "", FALSE, TRUE); После чего они начинают свой разговор в режиме катсцены. Штука, однако, в том, что при таком режиме не работает то, что вроде бы должно. Например, нужно сделать так, чтобы трое неписей напали на нас и окончился режим катсцены. Ставил вот что на последнюю реплику: NSS void main() { object oPC = GetPCSpeaker(); object oTarget; SetCutsceneMode(oPC, FALSE); oTarget = GetObjectByTag("1"); DelayCommand(0.2, SetIsTemporaryEnemy(oPC, oTarget)); DelayCommand(0.2, ActionAttack(oPC)); oTarget = GetObjectByTag("2"); DelayCommand(0.2, SetIsTemporaryEnemy(oPC, oTarget)); DelayCommand(0.2, AssignCommand(oTarget, ActionAttack(oPC))); oTarget = GetObjectByTag("3"); DelayCommand(0.2, SetIsTemporaryEnemy(oPC, oTarget)); DelayCommand(0.2, AssignCommand(oTarget, ActionAttack(oPC))); } Откладываю команды чуть-чуть, чтобы сначала выйти из фильма. Получается черт знает что, точнее, и того не выходит. Между прочим, пытался менять местами в TemporaryEnemy oPC и oTarget. Не помогает. Или вот еще. Когда начинается разговор в том же режиме, то ставлю на первую реплику игрока следующее, чтобы к нему повернулись: NSS void main() { object oPC = GetPCSpeaker(); AssignCommand(GetObjectByTag("1"), SetFacingPoint(GetPosition(oPC))); DelayCommand(0.5, AssignCommand(GetObjectByTag("2"), SetFacingPoint(GetPosition(oPC)))); DelayCommand(0.5, AssignCommand(GetObjectByTag("2"), ActionPlayAnimation(ANIMATION_FIREFORGET_SPASM))); DelayCommand(1.2, AssignCommand(GetObjectByTag("3"), SetFacingPoint(GetPosition(oPC)))); DelayCommand(1.6, AssignCommand(GetObjectByTag("3"), ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD))); } Не работает. И еще какая-то странность. Тот скрипт выше, с которым полагается начинать драку, все же позволяет мне выйти из разговора и режима фильма. Правда, никто не нападает. Зато если потом обычным порядком напасть на тех NPC, то есть выбрать меч в меню, то все тут же переходит в режим фильма и драка уже разыгрывается как в театре - без интерфейса, без урона (раз все стали Plot) и без конца. Кто-нибудь может это объяснить? Сообщение отредактировал Chimeric - May 9 2006, 11:47 |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 00:12 |