![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3726
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Не хочет сохранять, потому что я с ходу не помню порядок аргументов в ApplyEffectToObject(). Теперь он убивает героя, а как с Boot'om быть? Там вроде написано, что надо тока oPC дописать в скобках, а оно не фурычит(IMG:style_emoticons/kolobok_light/sad.gif) Убивание ПС нам не подходит, потому что потом можно респауном возродиться и спокойно дальше ходить(IMG:style_emoticons/kolobok_light/sad.gif) |
![]()
Сообщение
#3727
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Не мог бы кто-нибудь подсказать мне, где почитать про установку секретных дверей? Желательно, по-русски, в английском лексиконе как-то не очень понятно. Заранее спасибо Вот ![]() ерефка в ней триггер + дверь в палитру. Скрипт создает плейсебл (любой) на вейпоинте. Дверь как пример. Выглядит так: идет РС и Хеньман, если игра на Изи то хеньчман говорит фразу (настраивается) "помоему тут что -то есть!". Если игрок профукал проверку поиска, то ничего не создается. Если нет, то хеньчман говорит типа посомтри внимательно туда! Тут БАХ трат та та! Куча спелов бум в дымке закла появляется дверь! У игрока над головой текст "Вы увидели потайную деврь!" и хеньчман говорит, но вот видишь! (настраивается). Так можно создать хоть что, хоть дверь, хоть корабль, хоть люк в полу. Сама дверь плейсебловая, но у нее в свойствах есть скрипт, который запускает игрока туда куда ты укажешь в свойствах. Локальный стринг равен месту перемещения. Скрипт создает дверь, а потом запускает любой нужный тебе скрипт на эту новую дверь. Она может открыться или ей мойжно присвоить локальный стринг того поинта, куда будет попадать игрок. Если интересно могу набрасать демо мод, как все работает... Так же есть система такая же для итемов. Наглядно видно как в монете находятся предметы на песке или в домах, как буд то игрок нашел что то случайно. Но при этом помощники помогают, подсказывают комментирую найденное... Вот скрипт на плейсебл дверь. Neverwinter Script //:://////////////////////////////////////////////
//:: OnExit am_pus_used_door //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Скрипт использования PLC_ дверей и люков. LocalString "TRANSITION_TARGET" - Таг вейпоинта или триггера, куда мы перемещаемся. Если на объекте не будет этого стринга, значит он просто откроется - закроется при повторном использовании. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 08.10.2005 //::///////////////////////////////////////////// #include "am_inc_common" void main() { object oPC = GetLastUsedBy(); string sTarget = GetLocalString(OBJECT_SELF, "TRANSITION_TARGET"); // sTarget - Это ТАГ объекта, куда мы переместимся object oTarget = GetObjectByTag(sTarget); // Сам объект if (GetLocked(OBJECT_SELF)) // Если закрыт, то ищем ключ и открываем { string sKey = GetTrapKeyTag(OBJECT_SELF); object oKey = GetItemPossessedBy(oPC, sKey); if (sKey != "" && GetIsObjectValid(oKey)) { SetLocked(OBJECT_SELF, FALSE); } else { DelayCommand(0.1, PlaySound("as_dr_locked2")); return; } } if (GetIsOpen(OBJECT_SELF) && sTarget !="") // Если открыт и есть цель { AssignCommand(oPC, ClearAllActions()); if(!GetIsObjectValid(oTarget)) // Если ошиблись с тагом цели { Debug("<cу >ВНИМАНИЕ! </c>Не могу найти точку перемещения!"); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID)); DelayCommand(1.0, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE)); SetLocalInt(OBJECT_SELF, "OPEN", FALSE); return; } DelayCommand(0.7, AssignCommand(oPC, JumpToObject(oTarget))); // Следом за игроком отправляем всех помощников DelayCommand(1.0, JumpAssociateToObject(oPC, oTarget)); SetLocalInt(OBJECT_SELF, "OPEN", FALSE); DelayCommand(1.5, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE)); return; } if (!GetIsOpen(OBJECT_SELF)) { AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID)); DelayCommand(1.0, ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN)); SetLocalInt(OBJECT_SELF, "OPEN", TRUE); } else { ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE); SetLocalInt(OBJECT_SELF, "OPEN", FALSE); } } |
![]()
Сообщение
#3728
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Теперь он убивает героя, а как с Boot'om быть? Там вроде написано, что надо тока oPC дописать в скобках, а оно не фурычит Бут, наверное, в сингле не работает (IMG:style_emoticons/kolobok_light/smile.gif) Можно попробоватьNeverwinter Script EndGame("");
|
![]()
Сообщение
#3729
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Если интересно могу набрасать демо мод, как все работает... Интересно. (IMG:style_emoticons/kolobok_light/smile.gif) А еще интересно, можно ли настроить скрипт так, чтобы дверь появлялась только тогда, когда у игрока в слоте "амулет" надет определенный предмет (IMG:style_emoticons/kolobok_light/smile.gif) |
![]() ![]()
Сообщение
#3730
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Эээ... так ктонибудь знает как заставить новый класс использовать магию друида?
Заранее спасибо. |
![]()
Сообщение
#3731
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Интересно. А еще интересно, можно ли настроить скрипт так, чтобы дверь появлялась только тогда, когда у игрока в слоте "амулет" надет определенный предмет Легко. (IMG:style_emoticons/kolobok_light/smile.gif) Но мне надо будет пару строк внести в общий код. А можно отдельно скрипт написать. |
![]()
Сообщение
#3732
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Интересно. А еще интересно, можно ли настроить скрипт так, чтобы дверь появлялась только тогда, когда у игрока в слоте "амулет" надет определенный предмет Легко, могу внести опцию в систему (IMG:style_emoticons/kolobok_light/smile.gif) Шад, ты спрашивай, если что-то в моих доках непонятно (IMG:style_emoticons/kolobok_light/wink3.gif) Цитата Эээ... так ктонибудь знает как заставить новый класс использовать магию друида? Насколько я понимаю, можно только убрать друида и вместо него прописать свой класс...
Сообщение отредактировал Ilerien - Jun 24 2008, 17:32 |
![]() ![]()
Сообщение
#3733
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
И снова я!
Я тут покопался и нашел аддон позволяющий развивать 60 уровней, но как его ставить не врублюсь может ктонибудь знает? P.S. Когда я создаю свой класс он всегда престиж и берется минимум со 2 уровня, в чем проблема? |
![]()
Сообщение
#3734
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Когда я создаю свой класс он всегда престиж и берется минимум со 2 уровня, в чем проблема? Возможно, не указывать ссылку на табличку пререквизитов (IMG:style_emoticons/kolobok_light/smile.gif) Если не поможет - хз, так глубоко в этом направлении не копал.
|
![]()
Сообщение
#3735
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Бут, наверное, в сингле не работает (IMG:style_emoticons/kolobok_light/smile.gif) Можно попробовать Neverwinter Script EndGame(""); А что ставить в кавычках, которые в скобках? (после EndGame) Название файла модуля? Или имя PC? Или что-то еще? А про бут мы так почему-то и подумали=))) |
![]()
Сообщение
#3736
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
"" - это пустая строка. Там реф финального ролика, но в этом случае он нафиг не нужен (IMG:style_emoticons/kolobok_light/smile.gif)
Сообщение отредактировал Ilerien - Jun 24 2008, 19:22 |
![]()
Сообщение
#3737
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Он конечно нафиг не нужен, но без него компайлер не хочет скрипт сохранять, пришлось титры присобакать. А как мона самим эти титры сделать?
|
![]()
Сообщение
#3738
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Почему вдруг не хочет? Он проверяет исключительно соответствие типа формального параметра типу фактического, а наличие ролика ему глубоко пофиг. "" - это тоже строка, так что компилироваться должно прекрасно.
|
![]()
Сообщение
#3739
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Значит пустые кавычки мона=)) Гым! А на всякий случай, титры-то ваще мона свои сделать? Вроде, где-то кто-то говорил, что есть специальная прога... или у нас глюки?
|
![]()
Сообщение
#3740
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Шад, вот демо-мод
![]() и все настроено в нем. короче. Иди на магические вспышки. Возьми перса, у которого нет режима обнаружения по умолчанию. На картинках написано как настроить триггеры. Что бы дверь которая появляется (а можно хоть дом плейсебл сделать) была рабочей, ты должна установить заранее вейпоинт и при создании двери просто на нее запустить скрипт присвоения локального стринга равного имени вейпоинта. если лень, то можеш создать сколько надо дверей и в их свойствах сразу указать куда перемещается РС. И закинуть в палитру. В каждом новом триггере пропишешь нужный ресреф двери и все. ![]() Настройки триггера для плейсеблов. Создаем рандомно на случайной локации. Если как у нас на специальном месте то SECRET_PLC_TR_SEARCH_PLC_DOOR_01 - Таг вейпоинта. Жирным - таг триггера он равен таг поинта (создал в палитре) + таг триггера. Код ResRef объекта = стрингу на триггере PLC_ResRef Поле триггера KeyTag - сложность проверки скилла: DC_EASY = 0; DC_MEDIUM = 1; DC_HARD = 2; Имя триггера - фраза над игроком float "DISTANCE" радиус на котором находим объект или специально на месте объекта "SECRET_PLC_"+[Таг Триггера] LocalInt "ACTION_MODE_DETECT" == 1 устанавливает свойство триггера, он сработает только когда РС в режиме обнаружения. специально на месте объекта ![]() Код ResRef объекта = стрингу на триггере CLASS_TYPE_ALL Если его нет, то создаем для каждого класса свой. Поле триггера KeyTag - сложность проверки скилла: DC_EASY = 0; DC_MEDIUM = 1; DC_HARD = 2; Имя триггера - фраза над игроком float "DISTANCE" радиус на котором находим объект LocalInt "ACTION_MODE_DETECT" ==1 устанавливает свойство триггера, он сработает только когда РС в режиме обнаружения. Настройки для итемов такие же. Только тут можно создать для каждого класса что я прописал. Это из ПВ, там ограничения я все классы не обработал. Какой надо скажешь, добавим. Триггер для фраз над игроком проще пареной репы. Читай его описание в свойствах триггера. Триггер старт диалога с НПС так же. Он работает по принципу таг триггера - TR_CONV_ТАГ_НПС. Код Тест над NPC, KeyTag - больше 0 - подбежит. К тагу триггера добавляете таг НПС. Пример: TR_CONV_[ТАГ_НПС] -------------------------------------------------------------------- Если поле Deity НПС содержит цифру (см внизу), то НПС вроспроизведет анимацию: 5 - Смотрит вдаль 9 - Просить 10 - Ругать 11 - Смех 104 - Салют 107 - Приветствие 108 - Насмешка Вот простой скрипт am_exe_door_001 который мы запустили после создания двери. там может быть что угодно... Neverwinter Script //::////////////////////////////////////////////// //:: OnSpawn am_exe_door_001 //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Дверь в склеп. Секретная. Присваиваем место перемещения при создании двери скриптом. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 26.09.2005 //::////////////////////////////////////////////// void main() { object oSelf = OBJECT_SELF; SetLocalString(oSelf, "TRANSITION_TARGET", "AM_EXIT_DOOR_002"); } В ствойствах двери создаваемой посмотри локалки. поймешь как работает эта дверь. |
![]()
Сообщение
#3741
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Ilerien, Aiwan, спасибо! (IMG:style_emoticons/kolobok_light/thank_you.gif) Коврыяю демки. никогда не думала, что это настолько сложно...
Ilerien, комментарии обязательно поднадобятся, вот только сформулирую. Так-то, в принципе, понятно, для чего и как. Но сама никогда не напишу такого, конечно. (IMG:style_emoticons/kolobok_light/smile.gif) Интересно, что ты плейс создаешь на Invisible Object... А если я захочу, чтобы дверь никуда не исчезала после ухода игрока (делаю сингл), мне просто с хартбита у резрефа снять скрипт, и все? Или закомментить строки эти просто в скрипте? Айв, амулет от поноса и дракон на водопое - сила-вещь! Кстати, игроку с прокачанным поиском интереснее там ходить (IMG:style_emoticons/kolobok_light/smile.gif) Вообще, я попробую соединить все и посмотреть, что получится. Спасибо еще раз! Сообщение отредактировал shadowdweller - Jun 24 2008, 23:23 |
![]()
Сообщение
#3742
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Интересно, что ты плейс создаешь на Invisible Object... А если я захочу, чтобы дверь никуда не исчезала после ухода игрока (делаю сингл), мне просто с хартбита у резрефа снять скрипт, и все? Или закомментить строки эти просто в скрипте? Если ты закомментишь уничтожение двери, то каждый раз будет создаваться новая на том же месте. Можно убрать скрипт из хб видимой двери - тогда скрипт создания будет думать, что она есть.Н-да, система делалась для PW (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#3743
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
А еще такой вопрос - обязательно такой сложный скрипт писать на проверку надетого предмета у игрока или можно воспользоваться стандартным условием? Я просто скрипт у Айва посмотрела и жутко впечатлилась. Ключевое слово - жутко. (IMG:style_emoticons/kolobok_light/smile.gif)
Сообщение отредактировал shadowdweller - Jun 25 2008, 22:44 |
![]()
Сообщение
#3744
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Neverwinter Script if(GetTag(GetItemInSlot(oPC, <...>)) == "<...>") этого хватит (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#3745
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Ilerien,
Neverwinter Script if (GetTag(GetItemInSlot(oPC, INVENTORY_SLOT_NECK)) == "Branzuletko") return TRUE; return FALSE; Так? И в начале скрипта его ставить, и потом выполнение? |
![]()
Сообщение
#3746
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
Установил я патч 1.68, и сразу же полезли вопросы! Почему на некоторых NPC плащи не отображаются совсем? Причем на PC той же расы отображаются... Может и на NPC'ей как-то можно "надеть" их, скриптами, или через 2da (что, подозреваю, более вероятно)?
|
![]()
Сообщение
#3747
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Так? И в начале скрипта его ставить, и потом выполнение? Neverwinter Script //:://///////////////////////////////////////////// //:: Name: Heartbeat Secret Door Script (Invisible Object) //:: FileName: il_scdoor_hb //:: Copyright © 2007 Gem of the North Team //::////////////////////////////////////////////// /* Creates, if object have found, 2 binded doors */ //::////////////////////////////////////////////// //:: Created By: Ilerien Phoenix //:: Created On: 20.10.2007 //::////////////////////////////////////////////// void main() { object oSelf = OBJECT_SELF; string sTag = GetTag(oSelf); string sLetter = GetStringRight(sTag, 1); if(sLetter == "a") sLetter = "b"; else sLetter = "a"; int bShown = GetLocalInt(oSelf, "Shown"); if(bShown) return; bShown = GetLocalInt(GetObjectByTag(GetStringLeft(sTag, GetStringLength(sTag) - 1) + sLetter), "Shown"); if(bShown) return; //declare major variables string sCreatedDoorTag = ""; float fSearchDist = IntToFloat(GetReflexSavingThrow(oSelf)); int nDifficulty = GetWillSavingThrow(oSelf); int nLockDC = GetFortitudeSavingThrow(oSelf); int nSkillSearch = -50; int nCounter = 1; int nSkill; object oNearestCreature = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE); int bDoneSearch = 0; int bDone = 0; int bNeedDetectMode = GetLocalInt(oSelf, "IL_SCDOOR_DETECTION_NEED_ACTION_MODE"); int bNeedLock = GetLocalInt(oSelf, "IL_SCDOOR_LOCK_DOOR"); float fDist; object oDoor; object oSearcher; object oComp; location lLoc; string sFirstTag = "il_scdoor_c"; while (!bDone && !bDoneSearch && GetIsObjectValid(oNearestCreature)) { if(GetIsObjectValid(GetMaster(oNearestCreature)) || GetIsPC(oNearestCreature) || GetIsDMPossessed(oNearestCreature)) { // what is the distance of the PC to the door location fDist = GetDistanceBetween(oSelf, oNearestCreature); if (fDist <= fSearchDist) { if (LineOfSightObject(oSelf, oNearestCreature) && (!bNeedDetectMode || GetActionMode(oNearestCreature, ACTION_MODE_DETECT)) && GetTag(GetItemInSlot(oPC, INVENTORY_SLOT_NECK)) == "Branzuletko") { nSkill = GetSkillRank(SKILL_SEARCH, oNearestCreature); if((nSkill + 20 >= nDifficulty) && (nSkill + d20() >= nDifficulty)) { bDone = 1; oSearcher = oNearestCreature; } } } else // If there is no one in the search radius, don't continue to search // for the best skill. bDoneSearch = 1; } nCounter = nCounter + 1; oNearestCreature = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oSelf ,nCounter); }//the secret door is founded if(bDone) { sCreatedDoorTag = sFirstTag + GetStringRight(sTag, 4);//tag is, for example, "il_scdoor_c_1_a" lLoc = GetLocation(oSelf); oDoor = CreateObject(OBJECT_TYPE_PLACEABLE, sFirstTag, lLoc, TRUE, sCreatedDoorTag); SetLockUnlockDC(oDoor, nLockDC); if(bNeedLock) SetLocked(oDoor, TRUE); if(GetIsObjectValid(oDoor)) { PlayVoiceChat(VOICE_CHAT_LOOKHERE, oSearcher); sLetter = GetStringRight(sTag, 1); if(sLetter == "a") sLetter = "b"; else sLetter = "a"; sCreatedDoorTag = GetStringLeft(sFirstTag + GetStringRight(sTag, 4), GetStringLength(sFirstTag) + 3) + sLetter; oComp = GetObjectByTag(GetStringLeft(sTag, GetStringLength(sTag) - 1) + sLetter); lLoc = GetLocation(oComp); nLockDC = GetFortitudeSavingThrow(oComp); SetLockUnlockDC(oComp, nLockDC); bNeedLock = GetLocalInt(oSelf, "IL_SCDOOR_LOCK_DOOR"); if(bNeedLock) SetLocked(oComp, TRUE); oDoor = CreateObject(OBJECT_TYPE_PLACEABLE, sFirstTag, lLoc, TRUE, sCreatedDoorTag); SetLocalInt(oSelf, "Shown", 1); } } } Вчитался в скрипт - омг, там можно столько оптимизировать (IMG:style_emoticons/kolobok_light/smile.gif) Заодно нашёл одну кривость (IMG:style_emoticons/kolobok_light/wacko.gif) Новая версия: ![]() (IMG:style_emoticons/kolobok_light/smile.gif) Сообщение отредактировал Ilerien - Jun 26 2008, 12:06 |
![]()
Сообщение
#3748
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Почему на некоторых NPC плащи не отображаются совсем? Причем на PC той же расы отображаются... Может и на NPC'ей как-то можно "надеть" их, скриптами, или через 2da (что, подозреваю, более вероятно)? Ой! У нас тоже странная фигня с этими плащами - в тулсете эльфам они на уши надеваются! Мы даже испугались, что у них головы пропали! А на других, значит, вовсе не надеваются? |
![]()
Сообщение
#3749
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Это бага 1.68, в 1.69 пофиксили.
|
![]()
Сообщение
#3750
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
|
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 19:46 |