![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3601
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Народ, выручайте опять) Как мне сделать так, чтоб значение переменной (интовой иль стринговой) отображалось в диалоге. Например: я говорю с НПС, отвечаю на вопросы и в конце опроса НПС мне выдает: "Вы набрали [переменная] балов" ? по ходу диалога высчитывать переменную, а на этой фразе НПС сделать скрипт, который загонит переменную в токен (см функцию SetCustomToken(int,string)) И еще вопрос, как сделать чтоб переход от ветки к ветке в диалоге был не по порядку, а иногда "перепрыгивал" несколько веток, в зависимости от ответа? скриптами + такой архитектурой диалога. Для такого как минимум нужно чтобы после каждого ответа игрока были возможны все ответы НПС. Те тот, что по порядку + линк на все, которые позже, те через один и тд. При этом на всех фразах НПС должно быть условие. Самый простой вариант (как я понял, у вас диалог типа устный тест) - некая переменная, отвечающая за номер фразы НПС. Те первый вопрос он скажет когда переменная равна 1, второй когда 2 и тд. Если все слинковать так как сказал выше, то ставя скрипты на ответы игрока вы можете управлять последующим вопросом. Те +1 на переменную даст следующий вопрос, а +2 - через один. Если структура диалога более сложная, те там ветвления и тд - тут уже все сложнее, хотя принцип тот же - линк на все ответы + условия на них. Просто придется немного подумать над структурой |
![]()
Сообщение
#3602
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Я структуру уже прописал... вроде.... Я логику исполнения понимаю, мне синтаксис реализации этого всего не понятен. Можете на примерах объяснить? Или ссылку на пример дать?
С архитектурой диалога я разобрался, а вот с локалками и КастомТокенами не сильно.... Я объявляю токен, вставляю его в диалоге куды надо а он мне его не отображает.... тоесть отображает но не значение, а имя токена. И еще вопрос: в окне создания диалогов, для подключения скриптом используются две вкладки: Text Appears When и Actions Taken. Можете по-подробнее объяснить какая между ними разница? Такс.... Уже токен отображает значение....Нуль правда..... Можете кто-нибудь на примере показать, как из одной ветки диалога в другую с помощью локалок передавать значение переменной? Желательно со скринами диалог едитора. Заранее благодарен. |
![]()
Сообщение
#3603
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
С архитектурой диалога я разобрался, а вот с локалками и КастомТокенами не сильно.... Я объявляю токен, вставляю его в диалоге куды надо а он мне его не отображает.... тоесть отображает но не значение, а имя токена. Что вобьешь, то тебе и выведет... Если нужно вывести в диалог значение переменной, то нужно сделать следующее: Neverwinter Script /////////////////////////////////////// // :: ДЛЯ СЛОТА ДИАЛОГА Actions Taken ////////////////////////////////////// void main() { // Значение локалки TEST1 int iTest1 = GetLocalInt(OBJECT_SELF,"TEST1"); //Переводим числовое значение в строчное string sTest1 = IntToString(iTest1); //Задаем фразу диалога <CUSTOM2001> SetCustomToken(2001, "Test 1: результат = "+sTest1); } В диалоге нужно записать строку с токеном, но только после срабатывания скрипта. Например так: «Значение локалки ответа на вопрос <CUSTOM2001>…» в диалоге отобразится при значение локалки равной 3: «Значение локалки ответа на вопрос Test 1: результат = 3…» И еще вопрос: в окне создания диалогов, для подключения скриптом используются две вкладки: Text Appears When и Actions Taken. Можете по-подробнее объяснить какая между ними разница? Text Appears When служит для блокирования ветки диалога, нужен скрипт проверки условия появления с оператором int StartingConditional() Actions Taken слот для реакции на ответ, т.е. действие, которое вызовет клик по одной из веток ответов героя, или же просто сработает на одиночной ветке, не зависимо будет ли эта ветка НПС или героя… В принципе в скрипте появления можно записывать и условие и действие, как-то задание ваших токенов, см. код, там при значение локалки TEST1 больше нуля, задается токен, и эта ветка появляется в диалоге. Можно сразу же в эту ветку ставить и сам токен <CUSTOM2001>: Neverwinter Script ///////////////////////////////////////////
// :: ДЛЯ СЛОТА ДИАЛОГА Text Appears When ////////////////////////////////////////// int StartingConditional() { // Значение локалки TEST1 int iTest1 = GetLocalInt(OBJECT_SELF,"TEST1"); if(iTest1 > 0) { //Переводим числовое значение в строчное string sTest1 = IntToString(iTest1); //Задаем фразу диалога <CUSTOM2001> SetCustomToken(2001, "Test 1: результат = "+sTest1); return TRUE; } return FALSE; } |
![]()
Сообщение
#3604
|
|
Level 3 ![]() Класс: Воин Характер: Lawful Evil Раса: Человек ![]() |
Доброго всем времени суток!
Возник следующий вопрос: как сделать так, чтобы при превращении игрока в какое-либо существо, он не терял возможности пользоваться спец. способностями существа. Например: я использую предмет, который превращает меня в воина-дроу. Пытаюсь использовать способность "Тьма", но мне пишется, что "Вы не можете сконцентрироваться для применения этой способности". Так с любым существом (медуза не может применить каменный взгляд, дракон дохнуть и т.д.) Почему? Как исправить? Если взять класс оборотня и превратиться в воина-дроу через скилл оборотня "Форма гуманоида", то "Тьма" работает, хотя воин-дроу, по-сути, тот же. Если оборотень использует предмет, описанный выше, тоже получает дроу-инвалида. Вот скрипт для вещи, которая превращает меня в монстра: Код void main()
{ object oPC = GetItemActivator(); object oItem = GetItemActivated(); effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); effect ePoly = EffectPolymorph(POLYMORPH_TYPE_MEDUSA); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC); ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, oPC); DestroyObject(oItem); } |
![]()
Сообщение
#3605
|
|
Level 3 ![]() Класс: Воин Характер: Lawful Evil Раса: Человек ![]() |
Ммм... поправка: дыхание дракона работает, как и, например, метание игл у мантикоры, но! не работают все абилки типа "Взгляд" (т.е. фактически все конусы) и не работает, как я уже говорил выше, "Тьма" у дроу и драйдера.
+Вопрос, который заодно разом решит все вышеупомянутые проблемы: есть ли возможность сделать полноценное превращение? Т.е. не через функцию POLYMORPH_... а как-нибудь иначе. Причем в существо, заранее мной указанное. Чисто теоретически, это возможно, не хватате одной лишь функции: мы генерим монстра, в которого будем превращаться, и ! передаем управление игрока из тела героя в тело монстра, после чего сохраняем и стираем игрока. Я не знаю только, как передать управление. А, и еще как быстро и безболезненно удалить игрока. Заранее благодарен. |
![]()
Сообщение
#3606
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Файл x2_inc_shifter, ф-я ShifterSetGWildshapeSpellLimits() - именно там ставится кол-во юзов абилок.
Переместить игрока в другое тело нельзя. |
![]()
Сообщение
#3607
|
|
Level 1 Класс: Друид Характер: Lawful Neutral Раса: Эльф ![]() |
Хай народ! у меня к вам несколько вопросов.
1) Существует ли программа конвертер, которая бы переделала модуль первой части игры под вторую. (второй насчет квестов) 2)По завершению квеста, NPC1 появляется в другой локации, у NPC2 появляется квест на поиск NPC1, после того как находишь NPC1, запускается ролик где видно что NPC2 умирает, у игрок вместе с NPC1 уходят и на экране "the end" вопрос жизни и смерти, надеюсь на вашу помошь! |
![]()
Сообщение
#3608
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. Нет. Можно перетащить скрипты (но возможно потребуется некоторый напилинг), диалоги уже врядли, локации тем более.
2. а вопрос то где? Описанное делается скриптами. |
![]()
Сообщение
#3609
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Neverwinter Script 1) Существует ли программа конвертер, которая бы переделала модуль первой части игры под вторую. тупо отктой старый модуль в новом тулсете - и насладись всей тяжестью кармического страдания. и это лучший вариант конверции. (IMG:style_emoticons/kolobok_light/ph34r.gif) единственное, что конвертится нормально - это скрипты (только в нвн2 функции многие не работают или работают не так), этим можно сконвертнуть и русские диалоги. Цитата а вопрос то где? Описанное делается скриптами. Мой хрустальный шар говорит, что вопрос заключается в том, как написать такие скрипты. Впрочем, он лжец. Памятка: Neverwinter Script CreateObject - "создание объектов, в том числе и NPC" SetLocalInt, GetLocalInt - "установка и проверка переменных, можно использовать для создания квестов" GetEnteringObject - "используется в OnEnter триггера для определения приближающегося объекта" GetIsPC - "проверка, является ли объект персонажем игрока" SetCutsceneMode - "запуск/завершение ролика" ApplyEffectToObject - "наложение эффекта на существо" EffectDeath - "название говорит само за себя - эффект смерти" EndGame - "завершение модуля" |
![]()
Сообщение
#3610
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Добрый День не нащел где тут отписаться... Я вот с такой проблемой.. где можно модуль Ландс оф Нордок скачать! мы играли когда-то на серваке... Хотим просто вместе побегать по сетке.. Диск купили русский все пропатчили а модуля нету( найти не можем.. Помогите пожалуйста.
Поюзал поиски в том числе на ваулте.. поудаляли файлы... Ну может есть у кого ? Помогите, так хочеться поиграть я с ваулта пару каких-то нордоков скачал.. но проверить не могу диска нет.. там 20 лвл максм, а я помню 40 у нас было... Помогите найти нормальный Lands of Nordock ( Заранее благодарен (IMG:style_emoticons/kolobok_light/rolleyes.gif) |
![]()
Сообщение
#3611
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Люди, я конечно извеняюсь за ОЧЕНЬ глупый вопрос, но я в английском не секу, и в установке хаков тоже, поэтому прошу мне дословно по пунктикам обьяснить как он ставится, потому что я решил взятся за невер по серьезному, а единственно что я умею в нем делать пока-это играть)))
(не удаляйте плз этут пост, если подобные уже были, так как я их не могу найти) |
![]()
Сообщение
#3612
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. поместить *.hak файл в папку haks.
2. в модуле открыть свойства модуля - там выбрать закладку Пользовательский Контент (Custom Content). В имеющемся там выпадающем списке выбрать нужный хак и нажать кнопку добавить. 3. сохранить модуль. |
![]()
Сообщение
#3613
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Возник неожиданный косяк с левелапом хенчмена. Вот библа, которая, по идее, за это ответственна.
Neverwinter Script #include "nw_i0_henchman" // Determines how many levels behind the PC the henchman lays //Minimum of 0 int HENCH_LAG = 1; // Defines the lowest level the henchman can be // Minimum of 1, Maximum of 20 int HENCH_MIN = 14; // Defines the highest level the henchman can be // Minimum of HENCH_MIN, Maximum of 20 int HENCH_MAX = 17; // This function figures out what level the henchman // "should" be, based on the min, max & lag // numbers above, as well as the PC's level int GetTargetLevel (object oHench = OBJECT_SELF) { // Find the PC's level int nMasterLevel = GetHitDice(GetMaster(oHench)); // Apply the lag int nTargetLevel = nMasterLevel-HENCH_LAG; // if that is less than the minimum level, the henchman // should be that minimum level. if (nTargetLevel < HENCH_MIN) nTargetLevel = HENCH_MIN; // If the level is over the max, cap // the level to that max. if (nTargetLevel > HENCH_MAX) nTargetLevel = HENCH_MAX; return nTargetLevel; } //This function checks to see if the henchman // is ready to level up. int GetReadyToLevel(object oHench = OBJECT_SELF) { //Find both the current henchman level, and // what level the henchman should be. int nTargetLevel = GetTargetLevel(oHench); int nCurrentLevel = GetHitDice(oHench); //If the current level is too low, it is ready // to level up if (nCurrentLevel < nTargetLevel) return TRUE; else return FALSE; } // This is the biggie. This is the function to // actually level up the henchman. void LevelHench(object oHench = OBJECT_SELF) { // Find the desired level. int nTargetLevel = GetTargetLevel(oHench); //Whee! Fun with string manipulation! // All this is working tp find the appropriate blueprint ResRef // to create the "new and improved" henchman. string sNewBlueprint = GetTag(oHench); sNewBlueprint = GetStringLowerCase(sNewBlueprint); if (nTargetLevel <= 14) sNewBlueprint = sNewBlueprint + "0"; sNewBlueprint = sNewBlueprint + IntToString(nTargetLevel); // Create the new henchman. // There will be a "fade in" of the new one and "fade out" // of the old. object oNewHench = CreateObject(OBJECT_TYPE_CREATURE, sNewBlueprint,GetLocation(oHench)); // Get rid of the old henchman. You're fired! object oMaster = (GetMaster(oHench)); RemoveHenchman(oMaster,oHench); // Copy our desired behaviour patterns to the new henchman. CopyLocals(oHench,oNewHench); AssignCommand(oNewHench,SetAssociateListenPatterns ()); // Add in our new henchman AddHenchman(oMaster,oNewHench); // Take out the trash DestroyObject(oHench); } Запускается она скриптом, который ставится в диалоге на Text Appears When Neverwinter Script // Starting Conditional script: sc_level_hench #include "th_henchlib" int StartingConditional() { int nResult; object oHench = GetHenchman(GetPCSpeaker()); nResult = GetReadyToLevel(oHench) == TRUE; return nResult; } Все работает, хенч левелапится прекрасно. Но старый хенч никуда не исчезает. Он остается стоять рядышком и попрежнему готов присоединиться к партии. Никак не пойму, отчего это происходит. |
![]()
Сообщение
#3614
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Надо копаться, пробовать разные варианты (IMG:style_emoticons/kolobok_light/smile.gif)
1. Убрать скриптово плот и иммортал флаги. 2. Перекинуть дестрой на модуль: assigncommand(getmodule(), destroy...). 3. Попробовать отложенное удаление через пару секунд. 4. Кардинально - не удалять, а именно апать и переодевать. P.S. Вот тут: Neverwinter Script if (nTargetLevel <= 14) по идее должно быть <= 9. Но это к делу не относится.
sNewBlueprint = sNewBlueprint + "0"; |
![]()
Сообщение
#3615
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Шад, а собственно вопрос… Зачем тебе эти базовые скрипты поднятия уровня? Верней даже не поднятия, а замены хенчей. Эти скрипты были написаны для 1 Невера, хенчами и так забита базовая палитра NPC => Другое, аж по 11 на каждого… Это было сделано для смены оружия и брони, т.к. тогда у хенчей не был доступен инвентарь, да и уровней было всего 20. Там стоят похожие скрипты nw_ch_check_38 на начало диалога, и nw_ch_action_17 на поднятие, попробуй еще эти…
А вообще-то функция LevelUpHenchman поднимает уровень хенча, по определённому классу, до нужной величины… Правда, только у классов поддерживаемых героем. (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#3616
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Ген, так я и делаю под НВН1. За скрипты спасибо, обязательно гляну. У меня вообще в моде слетела половина скриптов и диалогов почему-то. Я не обращалась к нему месяца 4. Пошла тестить, а там такое! (IMG:style_emoticons/kolobok_light/sad.gif)
Родные скрипты ковырять я боюсь, тем более, что почти ничего в них не понимаю. Поэтому делаю другие. И мне сложно. например, сравнить два скрипта на левелап и понять, почему в одном случае старый хенч исчезает, а в другом нет. (IMG:style_emoticons/kolobok_light/smile.gif) Сообщение отредактировал shadowdweller - Jun 8 2008, 12:27 |
![]()
Сообщение
#3617
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
shadowdweller, я имел ввиду самую первую игру, а не 2 Невер. В СОУ и ХОТУ уже был инвентарь хенчей, и кажется там стоят другие скрипты. Мы ж тоже на первом пишем, да еще на версии 1.32, но и там уже есть функция поднятия уровня. Вспомни Левор...
Я помнится написал все о хенчах в статейке: http://remmgen.narod.ru/tmonster.html Там вроде есть все, что нужно и присоединение и удаление и повышение уровня, ну и все имена базовых скриптов хенчей... А вот если ты используешь классы, допустим животное, то нужно вызывать раннее созданного хенча их палитры, и удалять старого. Почему у тебя не удаляется? Кто ж его знает! Вроде в скрипте стоит дестрой, и настройки хенча не должны влиять... Значит что-то другое в скрипте глючит... Сообщение отредактировал gennady - Sep 4 2010, 16:43 |
![]()
Сообщение
#3618
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Gennady, спасибо. Придется смотреть SoU и HoTU и ковыряться дальше.
|
![]()
Сообщение
#3619
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
Люди, у мну проблема - никак не получается портреты запихнуть в хак! Вроде уже все сделал - и 5 штук разного размера, и в хак-эдиторе их загнал в хак, и в 2da файле про портреты их приписал, и тот файл тож в хак запихнул - а не работает. (естесно, к модулю я этот хак присобачил). Где же я ошибся?<@_@>
|
![]()
Сообщение
#3620
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Кинь модуль и хак на мыло, разберёмся (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#3621
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
Угу, в ближайшее время кину. Попутно возник следующий вопрос - как сделать скрипт проверки на наличие в инвентаре одного из нескольких предметов? (а то у меня получается что проверяет, чтоб все сразу были)
|
![]()
Сообщение
#3622
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Neverwinter Script //::////////////////////////////////////////////// //:: Проверяем наличие двух предметов //:: Copyright © 2006 WRG! Team //::////////////////////////////////////////////// /* */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 03.03.2006 //::////////////////////////////////////////////// #include "nw_i0_tool" int StartingConditional() { object oPC = GetPCSpeaker(); if(HasItem(oPC, "TAG_ITM_01") && HasItem(oPC, "TAG_ITM_02")) return TRUE; return FALSE; } Если && заменить на || то будет или. |
![]()
Сообщение
#3623
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
Спасиб! Работает! (я до этого где-то не там это || писал=(((
А вот проблема № следующая - пытаюсь сделать, чтобы можно было брать больше 1 спутника, приписал скрипт SetMaxHench(2) на onLoadModule - а они все равно отцепляются!=/ |
![]()
Сообщение
#3624
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Люди, у мну проблема - никак не получается портреты запихнуть в хак! Вроде уже все сделал - и 5 штук разного размера, и в хак-эдиторе их загнал в хак, и в 2da файле про портреты их приписал, и тот файл тож в хак запихнул - а не работает. (естесно, к модулю я этот хак присобачил). Где же я ошибся?<@_@> Ой! а плейсеблы тоже надо в 5 экземплярах, да? А то мы хотим вставить туда картинку (чтоб она была портретом для картины, висящей на стене), а вот чего писать в колонках в 2da файле? (тех где плейсебловые характеристики) Спасиб! Работает! (я до этого где-то не там это || писал=((( А вот проблема № следующая - пытаюсь сделать, чтобы можно было брать больше 1 спутника, приписал скрипт SetMaxHench(2) на onLoadModule - а они все равно отцепляются!=/ Мы решили проблему таким образом: Цитата // * Joins, takes away other people's personal items, give player his personal item #include "nw_i0_henchman" void main() {//DestroyAllPersonalItems(GetPCSpeaker()); DONE IN THE GIVBE ITEM FUNCTION // * remove previous henchman //SpeakString("test"); if (GetIsObjectValid(GetHenchman(GetPCSpeaker())) == TRUE) { SetFormerMaster(GetPCSpeaker(), GetHenchman(GetPCSpeaker())); object oHench = GetHenchman(GetPCSpeaker()); RemoveHenchman(GetPCSpeaker(), GetHenchman(GetPCSpeaker())); AssignCommand(oHench, ClearAllActions()); } SetWorkingForPlayer(GetPCSpeaker()); SetBeenHired(); ExecuteScript("NW_CH_JOIN", OBJECT_SELF); // GivePersonalItem(GetPCSpeaker()); } Жирное убрать вообще. Это у хенча в скрипте присоединения (tm_ch_action_13). После этого у нас стали двое цепляться=) |
![]()
Сообщение
#3625
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Лучше
Neverwinter Script object oPC = GetPCSpeaker(); if(GetIsObjectValid(GetHenchman(oPC, GetMaxHenchmen()))) // если есть "последний дозволенный" хенч (IMG:style_emoticons/kolobok_light/smile.gif) RemoveHenchman(oPC, GetHenchman(oPC)); // убираем первого Я бы свой диалог присоединения сделал (IMG:style_emoticons/kolobok_light/smile.gif) А то там слишком много ненужной фигни. Для плейсеблов вроде 3 портрета нужны, без _h и _l. Не знаю, зачем нужны столбцы InanimateType и LowGore. Это уже в Custom Content. Lirulin, модуль и хак выслал. У тебя там в 2да базовый реф был неверно прописан ("_" лишнее), и хак не был к модулю подключён. Сообщение отредактировал Ilerien - Jun 11 2008, 18:54 |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 15:01 |